Improve Group.set_sequence
- do not load record if there is no record changed above as it can be assumed that the sequence is still valid. - do not update the sequence if the tuple sequence and id is still valid. issue5873 review28801002
This commit is contained in:
1 parent
bdb7c72e14
commit
3aadca7bf0
1 file changed
+24
-5
@@ -294,11 +294,31 @@ class Group(SignalEvent, list):
|
||||
return record
|
||||
|
||||
def set_sequence(self, field='sequence'):
|
||||
index = 0
|
||||
changed = False
|
||||
prev = None
|
||||
for record in self:
|
||||
if record[field]:
|
||||
if index >= record[field].get(record):
|
||||
# Assume not loaded records are correctly ordered
|
||||
# as far as we do not change any previous records.
|
||||
if (record.get_loaded([field]) and not changed) or record.id < 0:
|
||||
if prev:
|
||||
index = prev[field].get(prev)
|
||||
else:
|
||||
index = None
|
||||
update = False
|
||||
value = record[field].get(record)
|
||||
if value is None:
|
||||
if index:
|
||||
update = True
|
||||
elif prev and record.id >= 0:
|
||||
update = record.id < prev.id
|
||||
if value == index:
|
||||
if prev and record.id >= 0:
|
||||
update = record.id < prev.id
|
||||
elif value < index:
|
||||
update = True
|
||||
if update:
|
||||
if index is None:
|
||||
index = 0
|
||||
index += 1
|
||||
record.signal_unconnect(self, 'record-changed')
|
||||
try:
|
||||
@@ -307,8 +327,7 @@ class Group(SignalEvent, list):
|
||||
record.signal_connect(self, 'record-changed',
|
||||
self._record_changed)
|
||||
changed = record
|
||||
else:
|
||||
index = record[field].get(record)
|
||||
prev = record
|
||||
if changed:
|
||||
self.signal('group-changed', changed)
|
||||
|
||||
|
||||
Reference in new issue
Block a user