Skip to content

Commit d460721

Browse files
committed
Changed regexes to use r strings. Rewrote code to extract From: name and email from iana email text. Fixed charset decode of iana email messages.
- Legacy-Id: 16373
1 parent b7e9fd1 commit d460721

1 file changed

Lines changed: 21 additions & 21 deletions

File tree

ietf/sync/iana.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
from django.utils.http import urlquote
1010
from django.conf import settings
1111

12+
import debug # pyflakes:ignore
13+
1214
from ietf.doc.mails import email_state_changed
1315
from ietf.doc.models import Document, DocEvent, State, StateDocEvent, StateType
1416
from ietf.doc.utils import add_state_change_event
1517
from ietf.person.models import Person
18+
from ietf.utils.mail import parseaddr
1619
from ietf.utils.timezone import local_timezone_to_utc, email_time_to_local_timezone, utc_to_local_timezone
1720

1821

@@ -216,11 +219,11 @@ def update_history_with_changes(changes, send_email=True):
216219

217220
def find_document_name(text):
218221
prefixes = ['draft','conflict-review','status-change','charter']
219-
leading_delimiter_re = '(?<![-a-zA-Z0-9])'
220-
prefix_re = '(%s)' % '|'.join(prefixes)
221-
tail_re = '(-[a-z0-9]+)+?(-\d\d\.txt)?'
222-
trailing_delimiter_re = '((?![-a-zA-Z0-9])|$)'
223-
name_re = '%s(%s%s)%s' % (leading_delimiter_re, prefix_re, tail_re, trailing_delimiter_re)
222+
leading_delimiter_re = r'(?<![-a-zA-Z0-9])'
223+
prefix_re = r'(%s)' % '|'.join(prefixes)
224+
tail_re = r'(-[a-z0-9]+)+?(-\d\d\.txt)?'
225+
trailing_delimiter_re = r'((?![-a-zA-Z0-9])|$)'
226+
name_re = r'%s(%s%s)%s' % (leading_delimiter_re, prefix_re, tail_re, trailing_delimiter_re)
224227
m = re.search(name_re,text)
225228
return m and m.group(0).lower()
226229

@@ -231,9 +234,8 @@ def strip_version_extension(text):
231234
text = text[:-3]
232235
return text
233236

234-
def parse_review_email(text):
235-
msg = email.message_from_string(text)
236-
237+
def parse_review_email(bytes):
238+
msg = email.message_from_bytes(bytes)
237239
# doc
238240
doc_name = find_document_name(msg["Subject"]) or ""
239241
doc_name = strip_version_extension(doc_name)
@@ -245,25 +247,23 @@ def parse_review_email(text):
245247

246248
# by
247249
by = None
248-
m = re.search(r"\"(.*)\"", msg["From"])
249-
if m:
250-
name = m.group(1).strip()
251-
if name.endswith(" via RT"):
252-
name = name[:-len(" via RT")]
253-
254-
try:
255-
by = Person.objects.get(alias__name=name, role__group__acronym="iana")
256-
except Person.DoesNotExist:
257-
pass
250+
name, __ = parseaddr(msg["From"])
251+
if name.endswith(" via RT"):
252+
name = name[:-len(" via RT")]
253+
try:
254+
by = Person.objects.get(alias__name=name, role__group__acronym="iana")
255+
except Person.DoesNotExist:
256+
pass
258257

259258
if not by:
260259
by = Person.objects.get(name="(System)")
261260

262261
# comment
263-
body = msg.get_payload().decode('quoted-printable').replace("\r", "")
262+
charset = msg.get_content_charset()
263+
body = msg.get_payload(decode=True).decode(charset or 'utf-8').replace("\r", "")
264264

265-
begin_search = re.search('\(BEGIN\s+IANA\s+(LAST\s+CALL\s+)?COMMENTS?(\s*:\s*[a-zA-Z0-9-\.]*)?\s*\)',body)
266-
end_search = re.search('\(END\s+IANA\s+(LAST\s+CALL\s+)?COMMENTS?\)',body)
265+
begin_search = re.search(r'\(BEGIN\s+IANA\s+(LAST\s+CALL\s+)?COMMENTS?(\s*:\s*[a-zA-Z0-9-\.]*)?\s*\)',body)
266+
end_search = re.search(r'\(END\s+IANA\s+(LAST\s+CALL\s+)?COMMENTS?\)',body)
267267
if begin_search and end_search:
268268
begin_string = begin_search.group(0)
269269
end_string = end_search.group(0)

0 commit comments

Comments
 (0)