diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2008-09-20 13:21:28 +1000 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2008-09-20 13:21:28 +1000 |
commit | 07ded8bef209073969ca66049c91783ce59fc0f7 (patch) | |
tree | f02d74fb0970f478a4028812dafbd81acf154949 /apps | |
parent | 6bc7f923bbe48a76d34377aa35a841f38500f0c9 (diff) | |
download | patchwork-07ded8bef209073969ca66049c91783ce59fc0f7.tar patchwork-07ded8bef209073969ca66049c91783ce59fc0f7.tar.gz |
[parser] Fix spacing for encoded headers
We need to join the fragments with a space.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'apps')
-rwxr-xr-x | apps/patchwork/bin/parsemail.py | 20 | ||||
-rw-r--r-- | 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 <user@example.com>' + from_header = '=?utf-8?q?=C3=A9xample?= user <user@example.com>' class SenderUTF8B64EncodingTest(SenderUTF8QPEncodingTest): from_header = '=?utf-8?B?w6l4YW1wbGUgdXNlcg==?= <user@example.com>' |