Livesync: cascade deletes, using fast DB queries

This commit is contained in:
Pedro Ferreira 2016-08-22 16:28:12 +02:00
parent 13a3c81b31
commit a853d254ee

View File

@ -44,7 +44,8 @@ def process_records(records):
:return: a dict mapping object references to `SimpleChange` bitsets
"""
changes = defaultdict(int)
cascaded_records = set()
cascaded_update_records = set()
cascaded_delete_records = set()
for record in records:
if record.change != ChangeType.deleted and record.object is None:
@ -57,15 +58,19 @@ def process_records(records):
elif record.change == ChangeType.deleted:
assert record.type != EntryType.category
changes[record.object] |= SimpleChange.deleted
cascaded_delete_records.add(record)
elif record.change in {ChangeType.moved, ChangeType.protection_changed}:
cascaded_records.add(record)
cascaded_update_records.add(record)
elif record.change == ChangeType.data_changed:
assert record.type != EntryType.category
changes[record.object] |= SimpleChange.updated
for obj in _process_cascaded(cascaded_records):
for obj in _process_cascaded(cascaded_update_records):
changes[obj] |= SimpleChange.updated
for obj in _process_cascaded(cascaded_delete_records):
changes[obj] |= SimpleChange.deleted
return changes