diff options
| author | Richard Möhn <richard.moehn@posteo.de> | 2016-10-13 17:13:33 +0900 |
|---|---|---|
| committer | Raphael Collet <rco@openerp.com> | 2016-10-13 10:13:33 +0200 |
| commit | cb581bc14f9fdb10dbc8a58574f1a4760f435ea8 (patch) | |
| tree | b90892fb91213c93d37787635ba3cf579e4aa343 | |
| parent | d3609f7f19a5ec51d9add5add3c5d8befdd87173 (diff) | |
[FIX] api: in todo list, group records to recompute by environment (#11267)
The effect of this change is to trigger the recomputation of fields on larger
recordsets. This takes advantage of batch computations within compute methods.
| -rw-r--r-- | openerp/api.py | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/openerp/api.py b/openerp/api.py index 010299d2a6a..6406846f0aa 100644 --- a/openerp/api.py +++ b/openerp/api.py @@ -892,7 +892,8 @@ class Environment(object): with all records to recompute for ``field``. """ if field in self.all.todo: - return reduce(operator.or_, self.all.todo[field]) + ids = set(rid for recs in self.all.todo[field] for rid in recs.ids) + return self[field.model_name].browse(ids) def check_todo(self, field, record): """ Check whether ``field`` must be recomputed on ``record``, and if so, @@ -905,7 +906,12 @@ class Environment(object): def add_todo(self, field, records): """ Mark ``field`` to be recomputed on ``records``. """ recs_list = self.all.todo.setdefault(field, []) - recs_list.append(records) + for i, recs in enumerate(recs_list): + if recs.env == records.env: + recs_list[i] |= records + break + else: + recs_list.append(records) def remove_todo(self, field, records): """ Mark ``field`` as recomputed on ``records``. """ |
