summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoren Van Onder <jov@odoo.com>2018-04-26 15:43:43 -0700
committerJeremy Kersten <jke@odoo.com>2018-08-13 19:18:35 +0200
commit5ff87e8039676db5a0c48422998d0cabd556a12d (patch)
tree7a3e7eb76a7bb9f30f36cbc207973e96ccc84227
parent0e45dfc59101b7dcce842924240373882d6fca8c (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).
-rw-r--r--addons/website/models/ir_ui_view.py4
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):