77
88from django .contrib import admin
99from django .contrib .auth .models import User
10+ from ietf .nomcom .models import Nominee
1011from ietf .person .models import Person
1112from ietf .utils .mail import send_mail
1213
@@ -24,7 +25,7 @@ def merge_persons(source, target, file=sys.stdout, verbose=False):
2425 changes .append ('EMAIL ACTION: {} no longer marked as primary' .format (email .address ))
2526
2627 changes .append (handle_users (source ,target ))
27- # merge_nominees(source, target)
28+ merge_nominees (source , target )
2829 move_related_objects (source , target , file = file , verbose = verbose )
2930 dedupe_aliases (target )
3031
@@ -84,11 +85,13 @@ def handle_users(source,target,check_only=False):
8485 if source .user and target .user :
8586 message = "DATATRACKER LOGIN ACTION: retaining login: {}, removing login: {}" .format (target .user ,source .user )
8687 if not check_only :
88+ merge_users (source .user , target .user )
8789 syslog .syslog ('merge-person-records: deleting user {}' .format (source .user .username ))
88- # user = source.user
90+ user = source .user
8991 source .user = None
9092 source .save ()
91- #user.delete()
93+ user .is_active = False
94+ user .save ()
9295 return message
9396
9497def move_related_objects (source , target , file , verbose = False ):
@@ -105,6 +108,21 @@ def move_related_objects(source, target, file, verbose=False):
105108 kwargs = { field_name :target }
106109 queryset .update (** kwargs )
107110
111+ def merge_users (source , target ):
112+ '''Move related objects from source user to target user'''
113+ # handle community list
114+ for communitylist in source .communitylist_set .all ():
115+ source .communitylist_set .remove (communitylist )
116+ target .communitylist_set .add (communitylist )
117+ # handle feedback
118+ for feedback in source .feedback_set .all ():
119+ source .feedback_set .remove (feedback )
120+ target .feedback_set .add (feedback )
121+ # handle nominations
122+ for nomination in source .nomination_set .all ():
123+ source .nomination_set .remove (nomination )
124+ target .nomination_set .add (nomination )
125+
108126def dedupe_aliases (person ):
109127 '''Check person for duplicate aliases and purge'''
110128 seen = []
@@ -117,8 +135,9 @@ def dedupe_aliases(person):
117135def merge_nominees (source , target ):
118136 '''Move nominees and feedback to target'''
119137 for nominee in source .nominee_set .all ():
120- target_nominee = target .nominee_set .get (nomcom = nominee .nomcom )
121- if not target_nominee :
138+ try :
139+ target_nominee = target .nominee_set .get (nomcom = nominee .nomcom )
140+ except Nominee .DoesNotExist :
122141 target_nominee = target .nominee_set .create (nomcom = nominee .nomcom , email = target .email ())
123142 nominee .nomination_set .all ().update (nominee = target_nominee )
124143 for fb in nominee .feedback_set .all ():
0 commit comments