Skip to content

Commit 7768e7c

Browse files
committed
Improve User merge handling in merge_persons(). Fix minor bug in submit.checkers.py. Fixes ietf-tools#1900. Commit ready for merge.
- Legacy-Id: 13718
1 parent 4d562e9 commit 7768e7c

3 files changed

Lines changed: 42 additions & 15 deletions

File tree

ietf/person/tests.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@
99

1010
import debug # pyflakes:ignore
1111

12-
#from ietf.nomcom.models import Nominee, NomCom
13-
#from ietf.nomcom.test_data import nomcom_test_data
14-
from ietf.person.factories import EmailFactory, PersonFactory
12+
from ietf.community.models import CommunityList
13+
from ietf.group.models import Group
14+
from ietf.nomcom.models import NomCom
15+
from ietf.nomcom.test_data import nomcom_test_data
16+
from ietf.person.factories import EmailFactory, PersonFactory, UserFactory
1517
from ietf.person.models import Person, Alias
1618
from ietf.person.utils import (merge_persons, determine_merge_order, send_merge_notification,
17-
handle_users, get_extra_primary, dedupe_aliases, move_related_objects)
19+
handle_users, get_extra_primary, dedupe_aliases, move_related_objects, merge_nominees, merge_users)
1820
from ietf.utils.test_data import make_test_data
1921
from ietf.utils.test_utils import TestCase
2022
from ietf.utils.mail import outbox, empty_outbox
@@ -171,19 +173,14 @@ def test_dedupe_aliases(self):
171173
dedupe_aliases(person)
172174
self.assertEqual(person.alias_set.filter(name='Joe').count(),1)
173175

174-
"""
175176
def test_merge_nominees(self):
176177
nomcom_test_data()
177178
nomcom = NomCom.objects.first()
178179
source = PersonFactory()
179180
source.nominee_set.create(nomcom=nomcom,email=source.email())
180-
#source = Nominee.objects.first().email.person
181181
target = PersonFactory()
182-
print source
183-
print source.nominee_set.all()
184182
merge_nominees(source, target)
185183
self.assertTrue(target.nominee_set.all())
186-
"""
187184

188185
def test_move_related_objects(self):
189186
source = PersonFactory()
@@ -200,8 +197,18 @@ def test_merge_persons(self):
200197
source_id = source.pk
201198
source_email = source.email_set.first()
202199
source_alias = source.alias_set.first()
200+
source_user = source.user
203201
merge_persons(source, target, file=StringIO())
204202
self.assertTrue(source_email in target.email_set.all())
205203
self.assertTrue(source_alias in target.alias_set.all())
206204
self.assertFalse(Person.objects.filter(id=source_id))
207-
205+
self.assertFalse(source_user.is_active)
206+
207+
def test_merge_users(self):
208+
make_test_data()
209+
source = UserFactory()
210+
target = UserFactory()
211+
mars = Group.objects.get(acronym='mars')
212+
communitylist = CommunityList.objects.create(user=source, group=mars)
213+
merge_users(source, target)
214+
self.assertTrue(communitylist in target.communitylist_set.all())

ietf/person/utils.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from django.contrib import admin
99
from django.contrib.auth.models import User
10+
from ietf.nomcom.models import Nominee
1011
from ietf.person.models import Person
1112
from 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

9497
def 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+
108126
def dedupe_aliases(person):
109127
'''Check person for duplicate aliases and purge'''
110128
seen = []
@@ -117,8 +135,9 @@ def dedupe_aliases(person):
117135
def 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():

ietf/submit/checkers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ def check_file_txt(self, path):
134134
message = ""
135135
results = []
136136
passed = True # Used by the submission tool. Yang checks always pass.
137+
model_list = []
137138

138139
extractor = xym.YangModuleExtractor(path, workdir, strict=True, strict_examples=False, debug_level=0)
139140
if not os.path.exists(path):

0 commit comments

Comments
 (0)