Move child-lifting code to its own helper method.
This commit is contained in:
parent
ae46b097e4
commit
943deb9bf7
1 changed files with 18 additions and 12 deletions
|
@ -76,6 +76,23 @@ class GroupableMixin:
|
|||
group_sql_index = None
|
||||
group_table = None
|
||||
|
||||
def _lift_children(self):
|
||||
'''
|
||||
If this object is a root, all of its children become roots.
|
||||
If this object is a child, its parent adopts all of its children.
|
||||
'''
|
||||
parent = self.get_parent()
|
||||
if parent is None:
|
||||
pairs = {
|
||||
'parentid': self.id,
|
||||
}
|
||||
self.photodb.sql_delete(table=self.group_table, pairs=pairs)
|
||||
else:
|
||||
pairs = {
|
||||
'parentid': (self.id, parent.id),
|
||||
}
|
||||
self.photodb.sql_update(table=self.group_table, pairs=pairs, where_key='parentid')
|
||||
|
||||
@decorators.transaction
|
||||
def add_child(self, member, *, commit=True):
|
||||
'''
|
||||
|
@ -138,18 +155,7 @@ class GroupableMixin:
|
|||
for child in self.get_children():
|
||||
child.delete(delete_children=delete_children, commit=False)
|
||||
else:
|
||||
# Lift children
|
||||
parent = self.get_parent()
|
||||
if parent is None:
|
||||
# Since this group was a root, children become roots by removing
|
||||
# the row.
|
||||
self.photodb.sql_delete(table=self.group_table, pairs={'parentid': self.id})
|
||||
else:
|
||||
# Since this group was a child, its parent adopts all its children.
|
||||
data = {
|
||||
'parentid': (self.id, parent.id),
|
||||
}
|
||||
self.photodb.sql_update(table=self.group_table, pairs=data, where_key='parentid')
|
||||
self._lift_children()
|
||||
|
||||
# Note that this part comes after the deletion of children to prevent
|
||||
# issues of recursion.
|
||||
|
|
Loading…
Reference in a new issue