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:
Cédric Krier committed 2011-03-21 17:57:09 +01:00
1 parent 4bba8812ad
commit 142bc8fdf8
1 file changed
+12 -12
+12 -12
View File
@@ -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')