Ensure ModelList contains only unique records

issue11230
review435351003
This commit is contained in:
Cédric Krier committed 2022-07-16 23:59:09 +02:00
1 parent f69c14b5a2
commit 337eb7169e
2 files changed
+23 -4

No files matched your search

+5 -4
View File
@@ -531,6 +531,7 @@ class ModelList(list):
self.record_removed = set()
self.record_deleted = set()
result = super(ModelList, self).__init__(sequence)
assert len(self) == len(set(self))
self.__check(self, on_change=False)
return result
__init__.__doc__ = list.__init__.__doc__
@@ -577,17 +578,17 @@ class ModelList(list):
def append(self, record):
self.__check([record])
res = super(ModelList, self).append(record)
if record not in self:
super().append(record)
self._changed()
return res
append.__doc__ = list.append.__doc__
def extend(self, iterable):
iterable = list(iterable)
self.__check(iterable)
res = super(ModelList, self).extend(iterable)
set_ = set(self)
super().extend(r for r in iterable if r not in set_)
self._changed()
return res
extend.__doc__ = list.extend.__doc__
def insert(self, index, record):
+18
View File
@@ -73,6 +73,24 @@ class TestModel(ProteusTestCase):
except AttributeError:
pass
def test_many2many_append_unique(self):
User = Model.get('res.user')
Group = Model.get('res.group')
admin, = User.find([('login', '=', 'admin')])
group = Group(admin.groups[0].id)
admin.groups.append(group)
self.assertEqual(admin.groups.count(group), 1)
def test_many2many_extend_unique(self):
User = Model.get('res.user')
Group = Model.get('res.group')
admin, = User.find([('login', '=', 'admin')])
group = Group(admin.groups[0].id)
admin.groups.extend([group])
self.assertEqual(admin.groups.count(group), 1)
# TODO test date
def test_reference(self):