Skip to content

Commit 8652f28

Browse files
committed
Import full names when importing persons, not just first and last names
- Legacy-Id: 3425
1 parent 9613186 commit 8652f28

2 files changed

Lines changed: 52 additions & 24 deletions

File tree

redesign/importing/import-document-state.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
from redesign.doc.models import *
1515
from redesign.group.models import *
1616
from redesign.name.models import *
17-
from redesign.importing.utils import old_person_to_person
17+
from redesign.importing.utils import old_person_to_person, person_name
1818
from redesign.name.utils import name
1919
from ietf.idtracker.models import InternetDraft, IDInternal, IESGLogin, DocumentComment, PersonOrOrgInfo, Rfc, IESGComment, IESGDiscuss, BallotInfo, Position
2020
from ietf.idrfc.models import RfcIndex, DraftVersions
2121
from ietf.idrfc.mirror_rfc_index import get_std_level_mapping, get_stream_mapping
22+
#from ietf.ietfworkflows.utils import get_state_for_draft
2223

23-
import sys
2424

2525
document_name_to_import = None
2626
if len(sys.argv) > 1:
@@ -46,6 +46,7 @@ def append(self, x):
4646
# IESGComment, IESGDiscuss, DocumentComment, IDAuthor, idrfc.RfcIndex,
4747
# idrfc.DraftVersions
4848

49+
4950
def alias_doc(name, doc):
5051
DocAlias.objects.filter(name=name).exclude(document=doc).delete()
5152
alias, _ = DocAlias.objects.get_or_create(name=name, document=doc)
@@ -136,6 +137,8 @@ def alias_doc(name, doc):
136137
"Point Raised - writeup needed": name(DocInfoTagName, 'point', "Point Raised - writeup needed", 'IESG discussions on the document have raised some issues that need to be brought to the attention of the authors/WG, but those issues have not been written down yet. (It is common for discussions during a telechat to result in such situations. An AD may raise a possible issue during a telechat and only decide as a result of that discussion whether the issue is worth formally writing up and bringing to the attention of the authors/WG). A document stays in the "Point Raised - Writeup Needed" state until *ALL* IESG comments that have been raised have been documented.', 1)
137138
}
138139

140+
#wg_state_mapping = dict([(s.slug, s) for s in WGDocStateName.objects.all()] + [(None, None)])
141+
139142
tag_review_by_rfc_editor = name(DocInfoTagName, 'rfc-rev', "Review by RFC Editor")
140143
tag_via_rfc_editor = name(DocInfoTagName, 'via-rfc', "Via RFC Editor")
141144
tag_expired_tombstone = name(DocInfoTagName, 'exp-tomb', "Expired tombstone")
@@ -190,12 +193,9 @@ def iesg_login_to_person(l):
190193

191194
try:
192195
return old_person_to_person(l.person)
193-
except Email.DoesNotExist:
194-
try:
195-
return Person.objects.get(name="%s %s" % (l.person.first_name, l.person.last_name))
196-
except Person.DoesNotExist:
197-
print "MISSING IESG LOGIN", l.person, l.person.email()
198-
return None
196+
except Person.DoesNotExist:
197+
print "MISSING IESG LOGIN", l.person, l.person.email()
198+
return None
199199

200200
def iesg_login_is_secretary(l):
201201
# Amy has two users, for some reason, we sometimes get the wrong one
@@ -775,7 +775,7 @@ def import_from_idinternal(d, idinternal):
775775
d.stream = stream_mapping["INDEPENDENT"]
776776
else:
777777
d.stream = stream_mapping["IETF"]
778-
d.wg_state = None
778+
d.wg_state = None #wg_state_mapping[get_state_for_draft(o)]
779779
d.iesg_state = iesg_state_mapping[None]
780780
d.iana_state = None
781781
d.rfc_state = None
@@ -802,7 +802,7 @@ def import_from_idinternal(d, idinternal):
802802
d.authors.clear()
803803
for i, a in enumerate(o.authors.all().select_related("person").order_by('author_order', 'person')):
804804
try:
805-
e = Email.objects.get(address__iexact=a.email() or a.person.email()[1] or u"unknown-email-%s-%s" % (a.person.first_name, a.person.last_name))
805+
e = Email.objects.get(address__iexact=a.email() or a.person.email()[1] or u"unknown-email-%s" % person_name(a.person).replace(" ", "-"))
806806
# renumber since old numbers may be a bit borked
807807
DocumentAuthor.objects.create(document=d, author=e, order=i)
808808
except Email.DoesNotExist:

redesign/importing/utils.py

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from redesign import unaccent
1+
from ietf.utils import unaccent
22
from redesign.person.models import Person, Email, Alias
33

44
def clean_email_address(addr):
@@ -14,42 +14,70 @@ def clean_email_address(addr):
1414
else:
1515
return addr
1616

17+
def person_name(person):
18+
def clean_prefix(n):
19+
n = clean(n)
20+
if n in [".", "Mr.", "<s/", "e", "fas", "lk", "Miss", "Mr", "Mr,", "Mr.", "Mr..", "MRS", "Mrs.", "ms", "Ms,", "Ms.", "Ms. L", "mw", "prefix", "q", "qjfglesjtg", "s", "te mr", "\Mr."]:
21+
return "" # skip
22+
23+
fixes = { "Dr": "Dr.", "Lt.Colonel": "Lt. Col.", "M": "M.", "Prof": "Prof.", "Prof.Dr.": "Prof. Dr.", "Professort": "Professor" }
24+
return fixes.get(n, n)
25+
26+
def clean_suffix(n):
27+
n = clean(n)
28+
if n in ["q", "a", "suffix", "u", "w", "x", "\\"]:
29+
return "" # skip
30+
31+
fixes = { "Jr": "Jr.", "Ph. D.": "Ph.D.", "Ph.D": "Ph.D.", "PhD":"Ph.D.", "Phd.": "Phd.", "Scd": "Sc.D." }
32+
return fixes.get(n, n)
33+
34+
def clean(n):
35+
if not n:
36+
return ""
37+
return n.replace("]", "").strip()
38+
39+
names = [clean_prefix(person.name_prefix), clean(person.first_name),
40+
clean(person.middle_initial), clean(person.last_name), clean_suffix(person.name_suffix)]
41+
42+
return u" ".join(n for n in names if n)
43+
1744
def old_person_to_person(person):
1845
try:
1946
return Person.objects.get(id=person.pk)
2047
except Person.DoesNotExist:
21-
return Person.objects.get(alias__name=u"%s %s" % (person.first_name, person.last_name))
48+
return Person.objects.get(alias__name=person_name(person))
2249

2350
def old_person_to_email(person):
2451
hardcoded_emails = {
2552
"Dinara Suleymanova": "dinaras@ietf.org",
2653
"Dow Street": "dow.street@linquest.com",
2754
}
2855

29-
return clean_email_address(person.email()[1] or hardcoded_emails.get("%s %s" % (person.first_name, person.last_name)) or "")
56+
return clean_email_address(person.email()[1] or hardcoded_emails.get(u"%s %s" % (person.first_name, person.last_name)) or "")
3057

3158
def get_or_create_email(o, create_fake):
3259
# take o.person (or o) and get or create new Email and Person objects
3360
person = o.person if hasattr(o, "person") else o
34-
61+
62+
name = person_name(person)
63+
3564
email = old_person_to_email(person)
3665
if not email:
3766
if create_fake:
38-
email = u"unknown-email-%s-%s" % (person.first_name, person.last_name)
39-
print ("USING FAKE EMAIL %s for %s %s %s" % (email, person.pk, person.first_name, person.last_name)).encode('utf-8')
67+
email = u"unknown-email-%s" % name.replace(" ", "-")
68+
print ("USING FAKE EMAIL %s for %s %s" % (email, person.pk, name)).encode('utf-8')
4069
else:
41-
print ("NO EMAIL FOR %s %s %s %s %s" % (o.__class__, o.pk, person.pk, person.first_name, person.last_name)).encode('utf-8')
70+
print ("NO EMAIL FOR %s %s %s %s" % (o.__class__, o.pk, person.pk, name)).encode('utf-8')
4271
return None
4372

4473
e, _ = Email.objects.select_related("person").get_or_create(address=email)
4574
if not e.person:
46-
n = u"%s %s" % (person.first_name, person.last_name)
47-
asciified = unaccent.asciify(n)
48-
aliases = Alias.objects.filter(name__in=(n, asciified))
75+
asciified = unaccent.asciify(name)
76+
aliases = Alias.objects.filter(name__in=(name, asciified))
4977
if aliases:
5078
p = aliases[0].person
5179
else:
52-
p = Person(id=person.pk, name=n, ascii=asciified)
80+
p = Person(id=person.pk, name=name, ascii=asciified)
5381

5482
from ietf.idtracker.models import PostalAddress
5583
addresses = person.postaladdress_set.filter(address_priority=1)
@@ -59,9 +87,9 @@ def get_or_create_email(o, create_fake):
5987

6088
p.save()
6189

62-
Alias.objects.create(name=n, person=p)
63-
if asciified != n:
64-
Alias.objects.create(name=asciified, person=p)
90+
Alias.objects.create(name=p.name, person=p)
91+
if p.ascii != p.name:
92+
Alias.objects.create(name=p.ascii, person=p)
6593

6694
e.person = p
6795
e.save()

0 commit comments

Comments
 (0)