66
77from ietf .stats .models import AffiliationAlias , AffiliationIgnoredEnding , CountryAlias , MeetingRegistration
88from 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
1015def 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