|
|
"""
Wrapper for OpenERP's cryptic write conventions for x2many fields.
Example usage:
import m2m browse_rec.write({'many_ids: m2m.clear()) browse_rec.write({'many_ids: m2m.link(99)) browse_rec.write({'many_ids: m2m.add({'name': 'Monty'})) browse_rec.write({'many_ids: m2m.replace([98, 99]))
Since returned values are lists, the can be joined using the plus operator:
browse_rec.write({'many_ids: m2m.clear() + m2m.link(99))
(Source: https://github.com/dreispt/openerp-write2many) """
def create(values): """ Create a referenced record """ assert isinstance(values, dict) return [(0, 0, values)]
def add(values): """ Intuitive alias for create() """ return create(values)
def write(id, values): """ Write on referenced record """ assert isinstance(id, int) assert isinstance(values, dict) return [(1, id, values)]
def remove(id): """ Unlink and delete referenced record """ assert isinstance(id, int) return [(2, id)]
def unlink(id): """ Unlink but do not delete the referenced record """ assert isinstance(id, int) return [(3, id)]
def link(id): """ Link but do not delete the referenced record """ assert isinstance(id, int) return [(4, id)]
def clear(): """ Unlink all referenced records (doesn't delete them) """ return [(5, 0)]
def replace(ids): """ Unlink all current records and replace them with a new list """ assert isinstance(ids, list) return [(6, 0, ids)]
if __name__ == "__main__": # Tests: assert create({'name': 'Monty'}) == [(0, 0, {'name': 'Monty'})] assert write(99, {'name': 'Monty'}) == [(1, 99, {'name': 'Monty'})] assert remove(99) == [(2, 99)] assert unlink(99) == [(3, 99)] assert clear() == [(5, 0)] assert replace([97, 98, 99]) == [(6, 0, [97, 98, 99])] print("Done!")
|