Rewrite logic for AlekSIS/Django user/group sync to only save if necessary
This change refactors the code that ensures AlekSIS persons/groups are kept in sync with Django users/groups. Previously, the Django user object and all Djangogroup objects linked to a person were unconditionally saved on eache person save, which caused at least $number_of_groups+2
writes to the database (and as many haystack update tasks).
Now, we trace dirty fields (adding the django-dirtyfields library to ExensibleModel
, so that we can rely on this feature in general) to decide whether to refresh the user object or not, and connect selectively to the m2m_changed
signal on the members
and owners
relationships to decide which groups need refreshing.
Closes #350 (closed)
Edited by Nik | Klampfradler