[REM] base: deprecate resolve_2many_commands

With the introduction of `new`, the use of `resolve_2many_commands` is
redundant, as it accomplishes the same function with the added benefit
of returning a record-like object whose API is more familiar than
`resolve_2many_commands` API.

closes odoo/odoo#37290

Related: odoo/enterprise#9409
Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
This commit is contained in:
Adrian Torres
2020-03-23 15:14:11 +00:00
parent 9befa3d245
commit 32fcc1b883
-53
View File
@@ -4798,59 +4798,6 @@ Record ids: %(records)s
return True
@api.model
def resolve_2many_commands(self, field_name, commands, fields=None):
""" Serializes one2many and many2many commands into record dictionaries
(as if all the records came from the database via a read()). This
method is aimed at onchange methods on one2many and many2many fields.
Because commands might be creation commands, not all record dicts
will contain an ``id`` field. Commands matching an existing record
will have an ``id``.
:param field_name: name of the one2many or many2many field matching the commands
:type field_name: str
:param commands: one2many or many2many commands to execute on ``field_name``
:type commands: list((int|False, int|False, dict|False))
:param fields: list of fields to read from the database, when applicable
:type fields: list(str)
:returns: records in a shape similar to that returned by ``read()``
(except records may be missing the ``id`` field if they don't exist in db)
:rtype: list(dict)
"""
result = [] # result (list of dict)
record_ids = [] # ids of records to read
updates = defaultdict(dict) # {id: vals} of updates on records
for command in commands or []:
if not isinstance(command, (list, tuple)):
record_ids.append(command)
elif command[0] == 0:
result.append(command[2])
elif command[0] == 1:
record_ids.append(command[1])
updates[command[1]].update(command[2])
elif command[0] in (2, 3):
record_ids = [id for id in record_ids if id != command[1]]
elif command[0] == 4:
record_ids.append(command[1])
elif command[0] == 5:
result, record_ids = [], []
elif command[0] == 6:
result, record_ids = [], list(command[2])
# read the records and apply the updates
field = self._fields[field_name]
records = self.env[field.comodel_name].browse(record_ids)
for data in records.read(fields):
data.update(updates.get(data['id'], {}))
result.append(data)
return result
# for backward compatibility
resolve_o2m_commands_to_record_dicts = resolve_2many_commands
@api.model
def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):
"""Perform a :meth:`search` followed by a :meth:`read`.