From 07ded8bef209073969ca66049c91783ce59fc0f7 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Sat, 20 Sep 2008 13:21:28 +1000 Subject: [PATCH] [parser] Fix spacing for encoded headers We need to join the fragments with a space. Signed-off-by: Jeremy Kerr --- apps/patchwork/bin/parsemail.py | 20 ++++++++++++-------- apps/patchwork/tests/patchparser.py | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/patchwork/bin/parsemail.py b/apps/patchwork/bin/parsemail.py index a3edad4..e2beeae 100755 --- a/apps/patchwork/bin/parsemail.py +++ b/apps/patchwork/bin/parsemail.py @@ -38,16 +38,22 @@ from patchwork.models import Patch, Project, Person, Comment list_id_headers = ['List-ID', 'X-Mailing-List'] +whitespace_re = re.compile('\s+') +def normalise_space(str): + return whitespace_re.sub(' ', str).strip() + def clean_header(header): """ Decode (possibly non-ascii) headers """ - def decode(str, fragment): + def decode(fragment): (frag_str, frag_encoding) = fragment if frag_encoding: - return str + frag_str.decode(frag_encoding) - return str + frag_str.decode() + return frag_str.decode(frag_encoding) + return frag_str.decode() - return reduce(decode, decode_header(header), u'').strip() + fragments = map(decode, decode_header(header)) + + return normalise_space(u' '.join(fragments)) def find_project(mail): project = None @@ -234,7 +240,6 @@ def split_prefixes(prefix): re_re = re.compile('^(re|fwd?)[:\s]\s*', re.I) prefix_re = re.compile('^\[([^\]]*)\]\s*(.*)$') -whitespace_re = re.compile('\s+') def clean_subject(subject, drop_prefixes = None): """ Clean a Subject: header from an incoming patch. @@ -286,8 +291,7 @@ def clean_subject(subject, drop_prefixes = None): # remove Re:, Fwd:, etc subject = re_re.sub(' ', subject) - # normalise whitespace - subject = whitespace_re.sub(' ', subject) + subject = normalise_space(subject) prefixes = [] @@ -301,7 +305,7 @@ def clean_subject(subject, drop_prefixes = None): subject = match.group(2) match = prefix_re.match(subject) - subject = whitespace_re.sub(' ', subject) + subject = normalise_space(subject) subject = subject.strip() if prefixes: diff --git a/apps/patchwork/tests/patchparser.py b/apps/patchwork/tests/patchparser.py index 61ab57d..6d315f0 100644 --- a/apps/patchwork/tests/patchparser.py +++ b/apps/patchwork/tests/patchparser.py @@ -171,7 +171,7 @@ class SenderUTF8QPEncodingTest(SenderEncodingTest): class SenderUTF8QPSplitEncodingTest(SenderEncodingTest): sender_name = u'\xe9xample user' - from_header = '=?utf-8?q?=C3=A9xample=20?= user ' + from_header = '=?utf-8?q?=C3=A9xample?= user ' class SenderUTF8B64EncodingTest(SenderUTF8QPEncodingTest): from_header = '=?utf-8?B?w6l4YW1wbGUgdXNlcg==?= ' -- 2.39.2