Skip to content

Commit 68abf06

Browse files
committed
Merged ^/personal/sbirkholz/meeting_registration/@13969:
Added Person objects to a MeetingRegistration objects in ietf/stats/utils.py when importing meeting registrations in get_meeting_registration_data(). - Legacy-Id: 14000
2 parents 926c197 + 6359192 commit 68abf06

2 files changed

Lines changed: 73 additions & 0 deletions

File tree

ietf/stats/tests.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
12
import datetime
23

34
from mock import patch
45
from pyquery import PyQuery
56
from requests import Response
67

78
from django.urls import reverse as urlreverse
9+
from django.contrib.auth.models import User
810

911
from ietf.utils.test_data import make_test_data, make_review_data
1012
from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent
@@ -199,3 +201,21 @@ def test_get_meeting_registration_data(self, mock_get):
199201
get_meeting_registration_data(meeting)
200202
query = MeetingRegistration.objects.filter(first_name='John',last_name='Smith',country_code='US')
201203
self.assertTrue(query.count(), 1)
204+
self.assertTrue(isinstance(query[0].person,Person))
205+
206+
@patch('requests.get')
207+
def test_get_meeting_registration_data_user_exists(self, mock_get):
208+
response = Response()
209+
response.status_code = 200
210+
response._content = '[{"LastName":"Smith","FirstName":"John","Company":"ABC","Country":"US","Email":"john.doe@example.us"}]'
211+
user = User.objects.create(username="john.doe@example.us")
212+
user.save()
213+
214+
mock_get.return_value = response
215+
meeting = MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="96")
216+
get_meeting_registration_data(meeting)
217+
query = MeetingRegistration.objects.filter(first_name='John',last_name='Smith',country_code='US')
218+
self.assertTrue(query.count(), 1)
219+
self.assertTrue(isinstance(query[0].person, Person))
220+
221+

ietf/stats/utils.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66

77
from ietf.stats.models import AffiliationAlias, AffiliationIgnoredEnding, CountryAlias, MeetingRegistration
88
from ietf.name.models import CountryName
9+
from ietf.person.models import Person, Email
10+
from django.contrib.auth.models import User
11+
from unidecode import unidecode
12+
13+
914

1015
def compile_affiliation_ending_stripping_regexp():
1116
parts = []
@@ -226,7 +231,11 @@ def get_meeting_registration_data(meeting):
226231
else:
227232
raise RuntimeError("Could not decode response from registrations API: '%s...'" % (response.content[:64], ))
228233

234+
235+
# for each user identified in the Registration system
236+
# Create a DataTracker MeetingRegistration object
229237
for registration in decoded:
238+
person = None
230239
object, created = MeetingRegistration.objects.get_or_create(
231240
meeting_id=meeting.pk,
232241
first_name=registration['FirstName'],
@@ -235,6 +244,50 @@ def get_meeting_registration_data(meeting):
235244
country_code=registration['Country'],
236245
email=registration['Email'],
237246
)
247+
248+
# Add a Person object to MeetingRegistration object
249+
# if valid email is available
250+
if not object.person:
251+
# If the person already exists do not try to create a new one
252+
emails = Email.objects.filter(address=registration["Email"])
253+
# there can only be on Email object with a unique email address (primary key)
254+
if len(emails) == 1:
255+
person = emails[0].person
256+
# Create a new Person object
257+
else:
258+
# ascii_name - convert from unicode if necessary
259+
regname = "%s %s" % (registration["FirstName"], registration["LastName"])
260+
# if there are any unicode characters decode the string to ascii
261+
ascii_name = unidecode(regname).strip()
262+
263+
# Create a new user object if it does not exist already
264+
# if the user already exists do not try to create a new one
265+
users = User.objects.filter(username=registration["Email"])
266+
if len(users) > 0:
267+
user = users[0]
268+
else:
269+
# Create a new user.
270+
user = User.objects.create(
271+
first_name=registration["FirstName"],
272+
last_name=registration["LastName"],
273+
username=registration["Email"],
274+
email=registration["Email"]
275+
)
276+
user.save()
277+
278+
# Create the new Person object.
279+
person = Person.objects.create(
280+
name=regname,
281+
ascii=ascii_name,
282+
affiliation=registration["Company"],
283+
user=user
284+
)
285+
person.save()
286+
287+
# update the person object to an actual value
288+
object.person = person
289+
object.save()
290+
238291
if created:
239292
num_created += 1
240293
num_processed += 1

0 commit comments

Comments
 (0)