Import full names when importing persons, not just first and last names
- Legacy-Id: 3425
This commit is contained in:
parent
9613186f9f
commit
8652f287a1
|
@ -14,13 +14,13 @@ management.setup_environ(settings)
|
|||
from redesign.doc.models import *
|
||||
from redesign.group.models import *
|
||||
from redesign.name.models import *
|
||||
from redesign.importing.utils import old_person_to_person
|
||||
from redesign.importing.utils import old_person_to_person, person_name
|
||||
from redesign.name.utils import name
|
||||
from ietf.idtracker.models import InternetDraft, IDInternal, IESGLogin, DocumentComment, PersonOrOrgInfo, Rfc, IESGComment, IESGDiscuss, BallotInfo, Position
|
||||
from ietf.idrfc.models import RfcIndex, DraftVersions
|
||||
from ietf.idrfc.mirror_rfc_index import get_std_level_mapping, get_stream_mapping
|
||||
#from ietf.ietfworkflows.utils import get_state_for_draft
|
||||
|
||||
import sys
|
||||
|
||||
document_name_to_import = None
|
||||
if len(sys.argv) > 1:
|
||||
|
@ -46,6 +46,7 @@ connection.queries = DummyQueries()
|
|||
# IESGComment, IESGDiscuss, DocumentComment, IDAuthor, idrfc.RfcIndex,
|
||||
# idrfc.DraftVersions
|
||||
|
||||
|
||||
def alias_doc(name, doc):
|
||||
DocAlias.objects.filter(name=name).exclude(document=doc).delete()
|
||||
alias, _ = DocAlias.objects.get_or_create(name=name, document=doc)
|
||||
|
@ -136,6 +137,8 @@ substate_mapping = {
|
|||
"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)
|
||||
}
|
||||
|
||||
#wg_state_mapping = dict([(s.slug, s) for s in WGDocStateName.objects.all()] + [(None, None)])
|
||||
|
||||
tag_review_by_rfc_editor = name(DocInfoTagName, 'rfc-rev', "Review by RFC Editor")
|
||||
tag_via_rfc_editor = name(DocInfoTagName, 'via-rfc', "Via RFC Editor")
|
||||
tag_expired_tombstone = name(DocInfoTagName, 'exp-tomb', "Expired tombstone")
|
||||
|
@ -190,12 +193,9 @@ def iesg_login_to_person(l):
|
|||
|
||||
try:
|
||||
return old_person_to_person(l.person)
|
||||
except Email.DoesNotExist:
|
||||
try:
|
||||
return Person.objects.get(name="%s %s" % (l.person.first_name, l.person.last_name))
|
||||
except Person.DoesNotExist:
|
||||
print "MISSING IESG LOGIN", l.person, l.person.email()
|
||||
return None
|
||||
except Person.DoesNotExist:
|
||||
print "MISSING IESG LOGIN", l.person, l.person.email()
|
||||
return None
|
||||
|
||||
def iesg_login_is_secretary(l):
|
||||
# Amy has two users, for some reason, we sometimes get the wrong one
|
||||
|
@ -775,7 +775,7 @@ for index, o in enumerate(all_drafts.iterator()):
|
|||
d.stream = stream_mapping["INDEPENDENT"]
|
||||
else:
|
||||
d.stream = stream_mapping["IETF"]
|
||||
d.wg_state = None
|
||||
d.wg_state = None #wg_state_mapping[get_state_for_draft(o)]
|
||||
d.iesg_state = iesg_state_mapping[None]
|
||||
d.iana_state = None
|
||||
d.rfc_state = None
|
||||
|
@ -802,7 +802,7 @@ for index, o in enumerate(all_drafts.iterator()):
|
|||
d.authors.clear()
|
||||
for i, a in enumerate(o.authors.all().select_related("person").order_by('author_order', 'person')):
|
||||
try:
|
||||
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))
|
||||
e = Email.objects.get(address__iexact=a.email() or a.person.email()[1] or u"unknown-email-%s" % person_name(a.person).replace(" ", "-"))
|
||||
# renumber since old numbers may be a bit borked
|
||||
DocumentAuthor.objects.create(document=d, author=e, order=i)
|
||||
except Email.DoesNotExist:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from redesign import unaccent
|
||||
from ietf.utils import unaccent
|
||||
from redesign.person.models import Person, Email, Alias
|
||||
|
||||
def clean_email_address(addr):
|
||||
|
@ -14,11 +14,38 @@ def clean_email_address(addr):
|
|||
else:
|
||||
return addr
|
||||
|
||||
def person_name(person):
|
||||
def clean_prefix(n):
|
||||
n = clean(n)
|
||||
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."]:
|
||||
return "" # skip
|
||||
|
||||
fixes = { "Dr": "Dr.", "Lt.Colonel": "Lt. Col.", "M": "M.", "Prof": "Prof.", "Prof.Dr.": "Prof. Dr.", "Professort": "Professor" }
|
||||
return fixes.get(n, n)
|
||||
|
||||
def clean_suffix(n):
|
||||
n = clean(n)
|
||||
if n in ["q", "a", "suffix", "u", "w", "x", "\\"]:
|
||||
return "" # skip
|
||||
|
||||
fixes = { "Jr": "Jr.", "Ph. D.": "Ph.D.", "Ph.D": "Ph.D.", "PhD":"Ph.D.", "Phd.": "Phd.", "Scd": "Sc.D." }
|
||||
return fixes.get(n, n)
|
||||
|
||||
def clean(n):
|
||||
if not n:
|
||||
return ""
|
||||
return n.replace("]", "").strip()
|
||||
|
||||
names = [clean_prefix(person.name_prefix), clean(person.first_name),
|
||||
clean(person.middle_initial), clean(person.last_name), clean_suffix(person.name_suffix)]
|
||||
|
||||
return u" ".join(n for n in names if n)
|
||||
|
||||
def old_person_to_person(person):
|
||||
try:
|
||||
return Person.objects.get(id=person.pk)
|
||||
except Person.DoesNotExist:
|
||||
return Person.objects.get(alias__name=u"%s %s" % (person.first_name, person.last_name))
|
||||
return Person.objects.get(alias__name=person_name(person))
|
||||
|
||||
def old_person_to_email(person):
|
||||
hardcoded_emails = {
|
||||
|
@ -26,30 +53,31 @@ def old_person_to_email(person):
|
|||
"Dow Street": "dow.street@linquest.com",
|
||||
}
|
||||
|
||||
return clean_email_address(person.email()[1] or hardcoded_emails.get("%s %s" % (person.first_name, person.last_name)) or "")
|
||||
return clean_email_address(person.email()[1] or hardcoded_emails.get(u"%s %s" % (person.first_name, person.last_name)) or "")
|
||||
|
||||
def get_or_create_email(o, create_fake):
|
||||
# take o.person (or o) and get or create new Email and Person objects
|
||||
person = o.person if hasattr(o, "person") else o
|
||||
|
||||
|
||||
name = person_name(person)
|
||||
|
||||
email = old_person_to_email(person)
|
||||
if not email:
|
||||
if create_fake:
|
||||
email = u"unknown-email-%s-%s" % (person.first_name, person.last_name)
|
||||
print ("USING FAKE EMAIL %s for %s %s %s" % (email, person.pk, person.first_name, person.last_name)).encode('utf-8')
|
||||
email = u"unknown-email-%s" % name.replace(" ", "-")
|
||||
print ("USING FAKE EMAIL %s for %s %s" % (email, person.pk, name)).encode('utf-8')
|
||||
else:
|
||||
print ("NO EMAIL FOR %s %s %s %s %s" % (o.__class__, o.pk, person.pk, person.first_name, person.last_name)).encode('utf-8')
|
||||
print ("NO EMAIL FOR %s %s %s %s" % (o.__class__, o.pk, person.pk, name)).encode('utf-8')
|
||||
return None
|
||||
|
||||
e, _ = Email.objects.select_related("person").get_or_create(address=email)
|
||||
if not e.person:
|
||||
n = u"%s %s" % (person.first_name, person.last_name)
|
||||
asciified = unaccent.asciify(n)
|
||||
aliases = Alias.objects.filter(name__in=(n, asciified))
|
||||
asciified = unaccent.asciify(name)
|
||||
aliases = Alias.objects.filter(name__in=(name, asciified))
|
||||
if aliases:
|
||||
p = aliases[0].person
|
||||
else:
|
||||
p = Person(id=person.pk, name=n, ascii=asciified)
|
||||
p = Person(id=person.pk, name=name, ascii=asciified)
|
||||
|
||||
from ietf.idtracker.models import PostalAddress
|
||||
addresses = person.postaladdress_set.filter(address_priority=1)
|
||||
|
@ -59,9 +87,9 @@ def get_or_create_email(o, create_fake):
|
|||
|
||||
p.save()
|
||||
|
||||
Alias.objects.create(name=n, person=p)
|
||||
if asciified != n:
|
||||
Alias.objects.create(name=asciified, person=p)
|
||||
Alias.objects.create(name=p.name, person=p)
|
||||
if p.ascii != p.name:
|
||||
Alias.objects.create(name=p.ascii, person=p)
|
||||
|
||||
e.person = p
|
||||
e.save()
|
||||
|
|
Loading…
Reference in a new issue