Add ability to merge 2 user accounts
This commit is contained in:
parent
35126e8e5b
commit
93f40ef36e
|
@ -482,7 +482,11 @@ class MasterView(View):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def merge_objects(self, removing, keeping):
|
def merge_objects(self, removing, keeping):
|
||||||
raise NotImplementedError("please implement `{}.merge_objects()`".format(self.__class__.__name__))
|
"""
|
||||||
|
Merge the two given objects. You should probably override this;
|
||||||
|
default behavior is merely to delete the 'removing' object.
|
||||||
|
"""
|
||||||
|
self.Session.delete(removing)
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
# Core Stuff
|
# Core Stuff
|
||||||
|
|
|
@ -129,6 +129,19 @@ class UsersView(PrincipalMasterView):
|
||||||
Master view for the User model.
|
Master view for the User model.
|
||||||
"""
|
"""
|
||||||
model_class = model.User
|
model_class = model.User
|
||||||
|
mergeable = True
|
||||||
|
merge_additive_fields = [
|
||||||
|
'sent_message_count',
|
||||||
|
'received_message_count',
|
||||||
|
]
|
||||||
|
merge_fields = merge_additive_fields + [
|
||||||
|
'uuid',
|
||||||
|
'username',
|
||||||
|
'person_uuid',
|
||||||
|
'person_name',
|
||||||
|
'role_count',
|
||||||
|
'active',
|
||||||
|
]
|
||||||
|
|
||||||
def query(self, session):
|
def query(self, session):
|
||||||
return session.query(model.User)\
|
return session.query(model.User)\
|
||||||
|
@ -202,6 +215,31 @@ class UsersView(PrincipalMasterView):
|
||||||
users.append(user)
|
users.append(user)
|
||||||
return users
|
return users
|
||||||
|
|
||||||
|
def get_merge_data(self, user):
|
||||||
|
return {
|
||||||
|
'uuid': user.uuid,
|
||||||
|
'username': user.username,
|
||||||
|
'person_uuid': user.person_uuid,
|
||||||
|
'person_name': user.person.display_name if user.person else None,
|
||||||
|
'_roles': user.roles,
|
||||||
|
'role_count': len(user.roles),
|
||||||
|
'active': user.active,
|
||||||
|
'sent_message_count': len(user.sent_messages),
|
||||||
|
'received_message_count': len(user._messages),
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_merge_resulting_data(self, remove, keep):
|
||||||
|
result = super(UsersView, self).get_merge_resulting_data(remove, keep)
|
||||||
|
result['role_count'] = len(set(remove['_roles'] + keep['_roles']))
|
||||||
|
return result
|
||||||
|
|
||||||
|
def merge_objects(self, removing, keeping):
|
||||||
|
# TODO: merge roles, messages
|
||||||
|
assert not removing.sent_messages
|
||||||
|
assert not removing._messages
|
||||||
|
assert not removing._roles
|
||||||
|
self.Session.delete(removing)
|
||||||
|
|
||||||
|
|
||||||
class UserVersionView(VersionView):
|
class UserVersionView(VersionView):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue