Fix cleaning of removed/deleted records introduced with changeset 9ece47c60d69
It is not possible to use set with Record as we can not provide a constant hash because the id can change
This commit is contained in:
1 parent
4bba8812ad
commit
142bc8fdf8
1 file changed
+12
-12
@@ -155,25 +155,16 @@ class Group(SignalEvent, list):
|
||||
return list({}.fromkeys(res))
|
||||
|
||||
def load(self, ids, display=True, modified=False):
|
||||
if not ids:
|
||||
return True
|
||||
# Work with sets to compute intersection and set difference
|
||||
set_records = set(self.get(x) for x in ids)
|
||||
for record in set_records & set(self.record_removed):
|
||||
self.record_removed.remove(record)
|
||||
for record in set_records & set(self.record_deleted):
|
||||
self.record_deleted.remove(record)
|
||||
|
||||
set_records -= set(x for x in self)
|
||||
# return on the list form in order to preserver ordering
|
||||
ids = [x for x in ids if self.get(x) in set_records]
|
||||
if not ids:
|
||||
return True
|
||||
|
||||
if len(ids) > 1:
|
||||
self.lock_signal = True
|
||||
|
||||
new_records = []
|
||||
for id in ids:
|
||||
if self.get(id):
|
||||
continue
|
||||
new_record = Record(self.model_name, id, self.window,
|
||||
parent=self.parent, parent_name=self.parent_name, group=self)
|
||||
self.append(new_record)
|
||||
@@ -182,6 +173,15 @@ class Group(SignalEvent, list):
|
||||
self._record_changed)
|
||||
new_record.signal_connect(self, 'record-modified',
|
||||
self._record_modified)
|
||||
|
||||
# Remove previously removed or deleted records
|
||||
for record in self.record_removed[:]:
|
||||
if record.id in ids:
|
||||
self.record_removed.remove(record)
|
||||
for record in self.record_deleted[:]:
|
||||
if record.id in ids:
|
||||
self.record_deleted.remove(record)
|
||||
|
||||
if self.lock_signal:
|
||||
self.lock_signal = False
|
||||
self.signal('group-cleared')
|
||||
|
||||
Reference in new issue
Block a user