diff options
| author | Joren Van Onder <jov@odoo.com> | 2018-04-26 15:43:43 -0700 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2018-08-13 19:18:35 +0200 |
| commit | 5ff87e8039676db5a0c48422998d0cabd556a12d (patch) | |
| tree | 7a3e7eb76a7bb9f30f36cbc207973e96ccc84227 /addons | |
| parent | 0e45dfc59101b7dcce842924240373882d6fca8c (diff) | |
[FIX] website: make filter_duplicate work
itertools' groupby function expects the iterable to be sorted as
hinted to in the documentation:
"Generally, the iterable needs to already be sorted on the same key
function."
When running groupby on an unsorted iterable non-adjacent duplicates
will remain:
>>> from itertools import groupby
>>> [e[0] for e in groupby([1, 2, 1])]
[1, 2, 1]
Because of this filter_duplicate would occassionally return
duplicates. To resolve this sort on the key field. Afterwards sort the
result on the usual inherit order: (priority, id).
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/website/models/ir_ui_view.py | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index c3c9de8016d..9a793b84fe6 100644 --- a/addons/website/models/ir_ui_view.py +++ b/addons/website/models/ir_ui_view.py @@ -55,9 +55,9 @@ class View(models.Model): def filter_duplicate(self): """ Filter current recordset only keeping the most suitable view per distinct key """ filtered = self.env['ir.ui.view'] - for dummy, group in groupby(self, key=lambda record: record.key): + for dummy, group in groupby(self.sorted('key'), key=lambda record: record.key): filtered += sorted(group, key=lambda record: record._sort_suitability_key())[0] - return filtered + return filtered.sorted(key=lambda view: (view.priority, view.id)) @api.model def _view_obj(self, view_id): |
