11from ietf .utils import unaccent
22from redesign .person .models import Person , Email , Alias
3+ from ietf .idtracker .models import EmailAddress
4+ import datetime
35
46def clean_email_address (addr ):
57 addr = addr .replace ("!" , "@" ).replace ("(at)" , "@" ) # some obvious @ replacements
@@ -53,20 +55,52 @@ def old_person_to_person(person):
5355 return Person .objects .get (alias__name = person_name (person ))
5456
5557def old_person_to_email (person ):
58+ # try connected addresses
59+ addresses = person .emailaddress_set .filter (address__contains = "@" ).order_by ('priority' )[:1 ]
60+ if addresses :
61+ addr = clean_email_address (addresses [0 ].address )
62+ priority = addresses [0 ].priority
63+ return (addr , priority )
64+
65+ # try to see if there's a person with the same name and an email address
66+ addresses = EmailAddress .objects .filter (person_or_org__first_name = person .first_name , person_or_org__last_name = person .last_name ).filter (address__contains = "@" ).order_by ('priority' )[:1 ]
67+ if addresses :
68+ addr = clean_email_address (addresses [0 ].address )
69+ priority = addresses [0 ].priority
70+ return (addr , priority )
71+
72+ # otherwise try the short list
5673 hardcoded_emails = {
5774 "Dinara Suleymanova" : "dinaras@ietf.org" ,
5875 "Dow Street" : "dow.street@linquest.com" ,
76+ "Xiaoya Yang" : "xiaoya.yang@itu.int" ,
5977 }
60-
61- return clean_email_address (person .email ()[1 ] or hardcoded_emails .get (u"%s %s" % (person .first_name , person .last_name )) or "" )
78+
79+ addr = hardcoded_emails .get (u"%s %s" % (person .first_name , person .last_name ), "" )
80+ priority = 1
81+ return (addr , priority )
82+
83+
84+
85+ def calc_email_import_time (priority ):
86+ # we may import some old email addresses that are now
87+ # inactive, to ensure everything is not completely borked, we
88+ # want to ensure that high-priority (< 100) email addresses
89+ # end up later (in reverse of priority - I-D addresses follow
90+ # the normal ordering, since higher I-D id usually means later)
91+ if priority < 100 :
92+ d = - priority
93+ else :
94+ d = priority - 36000
95+ return datetime .datetime (1970 , 1 , 2 , 0 , 0 , 0 ) + datetime .timedelta (seconds = d )
6296
6397def get_or_create_email (o , create_fake ):
6498 # take o.person (or o) and get or create new Email and Person objects
6599 person = o .person if hasattr (o , "person" ) else o
66100
67101 name = person_name (person )
68102
69- email = old_person_to_email (person )
103+ email , priority = old_person_to_email (person )
70104 if not email :
71105 if create_fake :
72106 email = u"unknown-email-%s" % name .replace (" " , "-" )
@@ -97,6 +131,7 @@ def get_or_create_email(o, create_fake):
97131 Alias .objects .create (name = p .ascii , person = p )
98132
99133 e .person = p
134+ e .time = calc_email_import_time (priority )
100135 e .save ()
101136 else :
102137 if e .person .name != name :
@@ -109,16 +144,19 @@ def get_or_create_email(o, create_fake):
109144
110145 return e
111146
112- def possibly_import_other_priority_email (email , addr ):
113- addr = clean_email_address (addr or "" )
114- if addr and addr .lower () != email .address .lower ():
115- try :
116- e = Email .objects .get (address = addr )
117- if e .person != email .person :
118- e .person = email .person
119- e .save ()
120- except Email .DoesNotExist :
121- Email .objects .create (address = addr , person = email .person )
147+ def possibly_import_other_priority_email (email , old_email ):
148+ addr = clean_email_address (old_email .address or "" )
149+ if not addr or addr .lower () == email .address .lower ():
150+ return
151+
152+ try :
153+ e = Email .objects .get (address = addr )
154+ if e .person != email .person :
155+ e .person = email .person
156+ e .save ()
157+ except Email .DoesNotExist :
158+ Email .objects .create (address = addr , person = email .person ,
159+ time = calc_email_import_time (old_email .priority ))
122160
123161def dont_save_queries ():
124162 # prevent memory from leaking when settings.DEBUG=True
0 commit comments