Improve User merge handling in merge_persons(). Fix minor bug in submit.checkers.py. Fixes #1900. Commit ready for merge.
- Legacy-Id: 13718
This commit is contained in:
parent
4d562e9bac
commit
7768e7c6b3
|
@ -9,12 +9,14 @@ from django.urls import reverse as urlreverse
|
|||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
#from ietf.nomcom.models import Nominee, NomCom
|
||||
#from ietf.nomcom.test_data import nomcom_test_data
|
||||
from ietf.person.factories import EmailFactory, PersonFactory
|
||||
from ietf.community.models import CommunityList
|
||||
from ietf.group.models import Group
|
||||
from ietf.nomcom.models import NomCom
|
||||
from ietf.nomcom.test_data import nomcom_test_data
|
||||
from ietf.person.factories import EmailFactory, PersonFactory, UserFactory
|
||||
from ietf.person.models import Person, Alias
|
||||
from ietf.person.utils import (merge_persons, determine_merge_order, send_merge_notification,
|
||||
handle_users, get_extra_primary, dedupe_aliases, move_related_objects)
|
||||
handle_users, get_extra_primary, dedupe_aliases, move_related_objects, merge_nominees, merge_users)
|
||||
from ietf.utils.test_data import make_test_data
|
||||
from ietf.utils.test_utils import TestCase
|
||||
from ietf.utils.mail import outbox, empty_outbox
|
||||
|
@ -171,19 +173,14 @@ class PersonUtilsTests(TestCase):
|
|||
dedupe_aliases(person)
|
||||
self.assertEqual(person.alias_set.filter(name='Joe').count(),1)
|
||||
|
||||
"""
|
||||
def test_merge_nominees(self):
|
||||
nomcom_test_data()
|
||||
nomcom = NomCom.objects.first()
|
||||
source = PersonFactory()
|
||||
source.nominee_set.create(nomcom=nomcom,email=source.email())
|
||||
#source = Nominee.objects.first().email.person
|
||||
target = PersonFactory()
|
||||
print source
|
||||
print source.nominee_set.all()
|
||||
merge_nominees(source, target)
|
||||
self.assertTrue(target.nominee_set.all())
|
||||
"""
|
||||
|
||||
def test_move_related_objects(self):
|
||||
source = PersonFactory()
|
||||
|
@ -200,8 +197,18 @@ class PersonUtilsTests(TestCase):
|
|||
source_id = source.pk
|
||||
source_email = source.email_set.first()
|
||||
source_alias = source.alias_set.first()
|
||||
source_user = source.user
|
||||
merge_persons(source, target, file=StringIO())
|
||||
self.assertTrue(source_email in target.email_set.all())
|
||||
self.assertTrue(source_alias in target.alias_set.all())
|
||||
self.assertFalse(Person.objects.filter(id=source_id))
|
||||
self.assertFalse(source_user.is_active)
|
||||
|
||||
def test_merge_users(self):
|
||||
make_test_data()
|
||||
source = UserFactory()
|
||||
target = UserFactory()
|
||||
mars = Group.objects.get(acronym='mars')
|
||||
communitylist = CommunityList.objects.create(user=source, group=mars)
|
||||
merge_users(source, target)
|
||||
self.assertTrue(communitylist in target.communitylist_set.all())
|
||||
|
|
|
@ -7,6 +7,7 @@ import syslog
|
|||
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth.models import User
|
||||
from ietf.nomcom.models import Nominee
|
||||
from ietf.person.models import Person
|
||||
from ietf.utils.mail import send_mail
|
||||
|
||||
|
@ -24,7 +25,7 @@ def merge_persons(source, target, file=sys.stdout, verbose=False):
|
|||
changes.append('EMAIL ACTION: {} no longer marked as primary'.format(email.address))
|
||||
|
||||
changes.append(handle_users(source,target))
|
||||
#merge_nominees(source, target)
|
||||
merge_nominees(source, target)
|
||||
move_related_objects(source, target, file=file, verbose=verbose)
|
||||
dedupe_aliases(target)
|
||||
|
||||
|
@ -84,11 +85,13 @@ def handle_users(source,target,check_only=False):
|
|||
if source.user and target.user:
|
||||
message = "DATATRACKER LOGIN ACTION: retaining login: {}, removing login: {}".format(target.user,source.user)
|
||||
if not check_only:
|
||||
merge_users(source.user, target.user)
|
||||
syslog.syslog('merge-person-records: deleting user {}'.format(source.user.username))
|
||||
# user = source.user
|
||||
user = source.user
|
||||
source.user = None
|
||||
source.save()
|
||||
#user.delete()
|
||||
user.is_active = False
|
||||
user.save()
|
||||
return message
|
||||
|
||||
def move_related_objects(source, target, file, verbose=False):
|
||||
|
@ -105,6 +108,21 @@ def move_related_objects(source, target, file, verbose=False):
|
|||
kwargs = { field_name:target }
|
||||
queryset.update(**kwargs)
|
||||
|
||||
def merge_users(source, target):
|
||||
'''Move related objects from source user to target user'''
|
||||
# handle community list
|
||||
for communitylist in source.communitylist_set.all():
|
||||
source.communitylist_set.remove(communitylist)
|
||||
target.communitylist_set.add(communitylist)
|
||||
# handle feedback
|
||||
for feedback in source.feedback_set.all():
|
||||
source.feedback_set.remove(feedback)
|
||||
target.feedback_set.add(feedback)
|
||||
# handle nominations
|
||||
for nomination in source.nomination_set.all():
|
||||
source.nomination_set.remove(nomination)
|
||||
target.nomination_set.add(nomination)
|
||||
|
||||
def dedupe_aliases(person):
|
||||
'''Check person for duplicate aliases and purge'''
|
||||
seen = []
|
||||
|
@ -117,8 +135,9 @@ def dedupe_aliases(person):
|
|||
def merge_nominees(source, target):
|
||||
'''Move nominees and feedback to target'''
|
||||
for nominee in source.nominee_set.all():
|
||||
target_nominee = target.nominee_set.get(nomcom=nominee.nomcom)
|
||||
if not target_nominee:
|
||||
try:
|
||||
target_nominee = target.nominee_set.get(nomcom=nominee.nomcom)
|
||||
except Nominee.DoesNotExist:
|
||||
target_nominee = target.nominee_set.create(nomcom=nominee.nomcom, email=target.email())
|
||||
nominee.nomination_set.all().update(nominee=target_nominee)
|
||||
for fb in nominee.feedback_set.all():
|
||||
|
|
|
@ -134,6 +134,7 @@ class DraftYangChecker(object):
|
|||
message = ""
|
||||
results = []
|
||||
passed = True # Used by the submission tool. Yang checks always pass.
|
||||
model_list = []
|
||||
|
||||
extractor = xym.YangModuleExtractor(path, workdir, strict=True, strict_examples=False, debug_level=0)
|
||||
if not os.path.exists(path):
|
||||
|
|
Loading…
Reference in a new issue