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:
Cédric Krier committed 2016-09-27 12:00:24 +02:00
1 parent bdb7c72e14
commit 3aadca7bf0
1 file changed
+24 -5
+24 -5
View File
@@ -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)