diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index 3c94e4723..cb2e36200 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -1001,7 +1001,7 @@ class IndividualInfoFormsTests(TestCase): doc.shepherd = Email.objects.get(person__user__username="plain") doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")]) - new_email = Email.objects.create(address="anotheremail@example.com", person=doc.shepherd.person) + new_email = Email.objects.create(address="anotheremail@example.com", person=doc.shepherd.person, origin='test') r = self.client.get(url) self.assertEqual(r.status_code, 200) @@ -1436,7 +1436,7 @@ class ChangeReplacesTests(TestCase): group=mars_wg, ) p = Person.objects.create(name="basea_author") - e = Email.objects.create(address="basea_author@example.com", person=p) + e = Email.objects.create(address="basea_author@example.com", person=p, origin='test') self.basea.documentauthor_set.create(person=p, email=e, order=1) self.baseb = Document.objects.create( @@ -1449,7 +1449,7 @@ class ChangeReplacesTests(TestCase): group=mars_wg, ) p = Person.objects.create(name="baseb_author") - e = Email.objects.create(address="baseb_author@example.com", person=p) + e = Email.objects.create(address="baseb_author@example.com", person=p, origin='test') self.baseb.documentauthor_set.create(person=p, email=e, order=1) self.replacea = Document.objects.create( @@ -1462,7 +1462,7 @@ class ChangeReplacesTests(TestCase): group=mars_wg, ) p = Person.objects.create(name="replacea_author") - e = Email.objects.create(address="replacea_author@example.com", person=p) + e = Email.objects.create(address="replacea_author@example.com", person=p, origin='test') self.replacea.documentauthor_set.create(person=p, email=e, order=1) self.replaceboth = Document.objects.create( @@ -1475,7 +1475,7 @@ class ChangeReplacesTests(TestCase): group=mars_wg, ) p = Person.objects.create(name="replaceboth_author") - e = Email.objects.create(address="replaceboth_author@example.com", person=p) + e = Email.objects.create(address="replaceboth_author@example.com", person=p, origin='test') self.replaceboth.documentauthor_set.create(person=p, email=e, order=1) self.basea.set_state(State.objects.get(used=True, type="draft", slug="active")) diff --git a/ietf/ietfauth/tests.py b/ietf/ietfauth/tests.py index 270202d8f..7d255df99 100644 --- a/ietf/ietfauth/tests.py +++ b/ietf/ietfauth/tests.py @@ -308,7 +308,7 @@ class IetfAuthTests(TestCase): user.set_password("forgotten") user.save() p = Person.objects.create(name="Some One", ascii="Some One", user=user) - Email.objects.create(address=user.username, person=p) + Email.objects.create(address=user.username, person=p, origin='test') # get r = self.client.get(url) @@ -418,7 +418,7 @@ class IetfAuthTests(TestCase): user.set_password("password") user.save() p = Person.objects.create(name="Some One", ascii="Some One", user=user) - Email.objects.create(address=user.username, person=p) + Email.objects.create(address=user.username, person=p, origin='test') # log in r = self.client.post(redir_url, {"username":user.username, "password":"password"}) @@ -465,8 +465,8 @@ class IetfAuthTests(TestCase): user.set_password("password") user.save() p = Person.objects.create(name="Some One", ascii="Some One", user=user) - Email.objects.create(address=user.username, person=p) - Email.objects.create(address="othername@example.org", person=p) + Email.objects.create(address=user.username, person=p, origin='test') + Email.objects.create(address="othername@example.org", person=p, origin='test') # log in r = self.client.post(redir_url, {"username":user.username, "password":"password"}) diff --git a/ietf/ietfauth/views.py b/ietf/ietfauth/views.py index e3f549279..56013119a 100644 --- a/ietf/ietfauth/views.py +++ b/ietf/ietfauth/views.py @@ -172,7 +172,7 @@ def confirm_account(request, auth): Alias.objects.create(person=person, name=name) if not email_obj: - email_obj = Email.objects.create(address=email, person=person) + email_obj = Email.objects.create(address=email, person=person, origin=user.username) else: if not email_obj.person: email_obj.person = person @@ -293,7 +293,7 @@ def confirm_new_email(request, auth): can_confirm = form.is_valid() and email new_email_obj = None if request.method == 'POST' and can_confirm and request.POST.get("action") == "confirm": - new_email_obj = Email.objects.create(address=email, person=person) + new_email_obj = Email.objects.create(address=email, person=person, origin=username) return render(request, 'registration/confirm_new_email.html', { 'username': username, diff --git a/ietf/nomcom/management/commands/make_dummy_nomcom.py b/ietf/nomcom/management/commands/make_dummy_nomcom.py index b91b91ee5..6adb62ddf 100644 --- a/ietf/nomcom/management/commands/make_dummy_nomcom.py +++ b/ietf/nomcom/management/commands/make_dummy_nomcom.py @@ -39,18 +39,18 @@ class Command(BaseCommand): populate_personnel=False, populate_positions=False)) - e = EmailFactory(person__name=u'Dummy Chair',address=u'dummychair@example.com',person__user__username=u'dummychair',person__default_emails=False) + e = EmailFactory(person__name=u'Dummy Chair', address=u'dummychair@example.com', person__user__username=u'dummychair', person__default_emails=False, origin='test') e.person.user.set_password('password') e.person.user.save() nc.group.role_set.create(name_id=u'chair',person=e.person,email=e) - e = EmailFactory(person__name=u'Dummy Member',address=u'dummymember@example.com',person__user__username=u'dummymember',person__default_emails=False) + e = EmailFactory(person__name=u'Dummy Member', address=u'dummymember@example.com', person__user__username=u'dummymember', person__default_emails=False, origin='test') e.person.user.set_password('password') e.person.user.save() nc.group.role_set.create(name_id=u'member',person=e.person,email=e) - e = EmailFactory(person__name=u'Dummy Candidate',address=u'dummycandidate@example.com',person__user__username=u'dummycandidate',person__default_emails=False) + e = EmailFactory(person__name=u'Dummy Candidate', address=u'dummycandidate@example.com', person__user__username=u'dummycandidate', person__default_emails=False, origin='test') e.person.user.set_password('password') e.person.user.save() NomineePositionFactory(nominee__nomcom=nc, nominee__person=e.person, diff --git a/ietf/nomcom/test_data.py b/ietf/nomcom/test_data.py index 759fe1e39..70dad80f2 100644 --- a/ietf/nomcom/test_data.py +++ b/ietf/nomcom/test_data.py @@ -123,7 +123,7 @@ def nomcom_test_data(): u.set_password(COMMUNITY_USER+"+password") u.save() plainman, _ = Person.objects.get_or_create(name="Plain Man", ascii="Plain Man", user=u) - email, _ = Email.objects.get_or_create(address="plain@example.com", person=plainman) + email, _ = Email.objects.get_or_create(address="plain@example.com", person=plainman, origin='test') nominee, _ = Nominee.objects.get_or_create(email=email, nomcom=nomcom) # positions diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py index 1720a8209..ca406663f 100644 --- a/ietf/nomcom/tests.py +++ b/ietf/nomcom/tests.py @@ -576,7 +576,7 @@ class NomcomViewsTest(TestCase): if not searched_email: searched_email = Email.objects.filter(address=nominee_email).first() if not searched_email: - searched_email = EmailFactory(address=nominee_email,primary=True) + searched_email = EmailFactory(address=nominee_email, primary=True, origin='test') if not searched_email.person: searched_email.person = PersonFactory() searched_email.save() @@ -967,8 +967,8 @@ class ReminderTest(TestCase): today = datetime.date.today() t_minus_3 = today - datetime.timedelta(days=3) t_minus_4 = today - datetime.timedelta(days=4) - e1 = EmailFactory(address="nominee1@example.org",person=PersonFactory(name=u"Nominee 1")) - e2 = EmailFactory(address="nominee2@example.org",person=PersonFactory(name=u"Nominee 2")) + e1 = EmailFactory(address="nominee1@example.org", person=PersonFactory(name=u"Nominee 1"), origin='test') + e2 = EmailFactory(address="nominee2@example.org", person=PersonFactory(name=u"Nominee 2"), origin='test') n = make_nomineeposition(self.nomcom,e1.person,gen,None) np = n.nomineeposition_set.get(position=gen) np.time = t_minus_3 @@ -1716,7 +1716,7 @@ Junk body for testing def test_edit_nominee(self): nominee = self.nc.nominee_set.order_by('pk').first() - new_email = EmailFactory(person=nominee.person) + new_email = EmailFactory(person=nominee.person, origin='test') url = reverse('ietf.nomcom.views.edit_nominee',kwargs={'year':self.nc.year(),'nominee_id':nominee.id}) login_testing_unauthorized(self,self.chair.user.username,url) response = self.client.get(url) diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py index 4d999da9b..d09436699 100644 --- a/ietf/nomcom/utils.py +++ b/ietf/nomcom/utils.py @@ -372,7 +372,7 @@ def make_nomineeposition(nomcom, candidate, position, author): def make_nomineeposition_for_newperson(nomcom, candidate_name, candidate_email, position, author): # This is expected to fail if called with an existing email address - email = Email.objects.create(address=candidate_email) + email = Email.objects.create(address=candidate_email, origin=nomcom.group.acronym) person = Person.objects.create(name=candidate_name, ascii=unidecode_name(candidate_name), ) diff --git a/ietf/person/factories.py b/ietf/person/factories.py index a9c02c5fb..95793c100 100644 --- a/ietf/person/factories.py +++ b/ietf/person/factories.py @@ -71,7 +71,7 @@ class PersonFactory(factory.DjangoModelFactory): extracted = True if create and extracted: make_email = getattr(EmailFactory, 'create' if create else 'build') - make_email(person=obj,address=obj.user.email) + make_email(person=obj, address=obj.user.email, origin='test') @factory.post_generation def default_photo(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument @@ -131,4 +131,4 @@ class EmailFactory(factory.DjangoModelFactory): active = True primary = False - + origin = '' diff --git a/ietf/person/tests.py b/ietf/person/tests.py index caf32beb4..690712f7a 100644 --- a/ietf/person/tests.py +++ b/ietf/person/tests.py @@ -42,9 +42,9 @@ class PersonTests(TestCase): def test_default_email(self): person = PersonFactory() - primary = EmailFactory(person=person,primary=True,active=True) - EmailFactory(person=person,primary=False,active=True) - EmailFactory(person=person,primary=False,active=False) + primary = EmailFactory(person=person, primary=True, active=True, origin='test') + EmailFactory(person=person, primary=False, active=True, origin='test') + EmailFactory(person=person, primary=False, active=False, origin='test') self.assertTrue(primary.address in person.formatted_email()) def test_profile(self): diff --git a/ietf/review/import_from_review_tool.py b/ietf/review/import_from_review_tool.py index 93635d813..a3059d3b0 100755 --- a/ietf/review/import_from_review_tool.py +++ b/ietf/review/import_from_review_tool.py @@ -101,7 +101,7 @@ with db_con.cursor() as c: for name in new_aliases: Alias.objects.create(person=person, name=name) - email, created = Email.objects.get_or_create(address=row.email, person=person) + email, created = Email.objects.get_or_create(address=row.email, person=person, origin=__name__) if created: print "created email", email diff --git a/ietf/stats/utils.py b/ietf/stats/utils.py index 85a11135e..c9a473aee 100644 --- a/ietf/stats/utils.py +++ b/ietf/stats/utils.py @@ -299,18 +299,16 @@ def get_meeting_registration_data(meeting): person = Person.objects.create( name=regname, ascii=ascii_name, - affiliation=affiliation, user=user, ) # Create an associated Email address for this Person - email, __ = Email.objects.get_or_create( - person=person, - address=address[:64], - ) + try: + email = Email.objects.get(person=person, address=address[:64]) + except Email.DoesNotExist: + email = Email.objects.create(person=person, address=address[:64], origin='ietf %s registration'%meeting.number) if email.address != address: debug.say("Truncated address: %s --> %s" % (address, email.address)) - # If this is the only email address, set primary to true. # If the person already existed (found through Alias) and diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py index c40c8aa2d..7467021a4 100644 --- a/ietf/submit/utils.py +++ b/ietf/submit/utils.py @@ -136,7 +136,7 @@ def docevent_from_submission(request, submission, desc, who=None): else: submitter_parsed = submission.submitter_parsed() if submitter_parsed["name"] and submitter_parsed["email"]: - by, _ = ensure_person_email_info_exists(submitter_parsed["name"], submitter_parsed["email"]) + by, _ = ensure_person_email_info_exists(submitter_parsed["name"], submitter_parsed["email"], submission.name) else: by = system @@ -190,7 +190,7 @@ def post_submission(request, submission, approvedDesc): system = Person.objects.get(name="(System)") submitter_parsed = submission.submitter_parsed() if submitter_parsed["name"] and submitter_parsed["email"]: - submitter, _ = ensure_person_email_info_exists(submitter_parsed["name"], submitter_parsed["email"]) + submitter, _ = ensure_person_email_info_exists(submitter_parsed["name"], submitter_parsed["email"], submission.name) submitter_info = u'%s <%s>' % (submitter_parsed["name"], submitter_parsed["email"]) else: submitter = system @@ -428,7 +428,7 @@ def get_person_from_name_email(name, email): return None -def ensure_person_email_info_exists(name, email): +def ensure_person_email_info_exists(name, email, docname): addr = email email = None person = get_person_from_name_email(name, addr) @@ -461,7 +461,7 @@ def ensure_person_email_info_exists(name, email): email = Email.objects.get(address=addr,person__isnull=True) except Email.DoesNotExist: # most likely we just need to create it - email = Email(address=addr) + email = Email(address=addr, origin=docname) email.active = active email.person = person @@ -474,7 +474,7 @@ def ensure_person_email_info_exists(name, email): def update_authors(draft, submission): persons = [] for order, author in enumerate(submission.authors): - person, email = ensure_person_email_info_exists(author["name"], author.get("email")) + person, email = ensure_person_email_info_exists(author["name"], author.get("email"), submission.name) a = DocumentAuthor.objects.filter(document=draft, person=person).first() if not a: diff --git a/ietf/utils/test_data.py b/ietf/utils/test_data.py index a8a56a8d4..de3a48be5 100644 --- a/ietf/utils/test_data.py +++ b/ietf/utils/test_data.py @@ -38,7 +38,7 @@ def create_person(group, role_name, name=None, username=None, email_address=None user.set_password(password) user.save() person = Person.objects.create(name=name, ascii=unidecode_name(smart_text(name)), user=user) - email = Email.objects.create(address=email_address, person=person) + email = Email.objects.create(address=email_address, person=person, origin='test') Role.objects.create(group=group, name_id=role_name, person=person, email=email) return person @@ -61,7 +61,7 @@ def make_immutable_base_data(): # system system_person = Person.objects.create(name="(System)", ascii="(System)") - Email.objects.create(address="", person=system_person) + Email.objects.create(address="", person=system_person, origin='test') # high-level groups ietf = create_group(name="IETF", acronym="ietf", type_id="ietf") @@ -112,7 +112,7 @@ def make_immutable_base_data(): for i in range(1, 10): u = User.objects.create(username="ad%s" % i) p = Person.objects.create(name="Ad No%s" % i, ascii="Ad No%s" % i, user=u) - email = Email.objects.create(address="ad%s@ietf.org" % i, person=p) + email = Email.objects.create(address="ad%s@ietf.org" % i, person=p, origin='test') if i < 6: # active Role.objects.create(name_id="ad", group=area, person=p, email=email) @@ -232,7 +232,7 @@ def make_test_data(): u.set_password("plain+password") u.save() plainman = Person.objects.create(name="Plain Man", ascii="Plain Man", user=u) - email = Email.objects.create(address="plain@example.com", person=plainman) + email = Email.objects.create(address="plain@example.com", person=plainman, origin='test') # group personnel create_person(mars_wg, "chair", name="WG Cháir Man", username="marschairman") @@ -473,7 +473,7 @@ def make_review_data(doc): u.set_password("reviewer+password") u.save() reviewer = Person.objects.create(name=u"Some Réviewer", ascii="Some Reviewer", user=u) - email = Email.objects.create(address="reviewer@example.com", person=reviewer) + email = Email.objects.create(address="reviewer@example.com", person=reviewer, origin='test') for team in (team1, team2, team3): Role.objects.create(name_id="reviewer", person=reviewer, email=email, group=team) @@ -496,14 +496,14 @@ def make_review_data(doc): u.set_password("reviewsecretary+password") u.save() reviewsecretary = Person.objects.create(name=u"Réview Secretary", ascii="Review Secretary", user=u) - reviewsecretary_email = Email.objects.create(address="reviewsecretary@example.com", person=reviewsecretary) + reviewsecretary_email = Email.objects.create(address="reviewsecretary@example.com", person=reviewsecretary, origin='test') Role.objects.create(name_id="secr", person=reviewsecretary, email=reviewsecretary_email, group=team1) u = User.objects.create(username="reviewsecretary3") u.set_password("reviewsecretary3+password") u.save() reviewsecretary3 = Person.objects.create(name=u"Réview Secretary3", ascii="Review Secretary3", user=u) - reviewsecretary3_email = Email.objects.create(address="reviewsecretary3@example.com", person=reviewsecretary) + reviewsecretary3_email = Email.objects.create(address="reviewsecretary3@example.com", person=reviewsecretary, origin='test') Role.objects.create(name_id="secr", person=reviewsecretary3, email=reviewsecretary3_email, group=team3) return review_req