[PATCH v6 1/2] parsemail: Convert to a management command

Stephen Finucane stephenfinucane at hotmail.com
Tue Sep 20 09:08:55 AEST 2016

On 20 Sep 01:22, Daniel Axtens wrote:
> So, umm, I went ahead and had a crack at this.
> It turns out this is hideously difficult to get right. But this plus my
> other patch to fix Thomas' problem should have things working on Py2 and
> Py3 with this series.
> It's a bit of a work in progress: I need to close the file at the end
> of the function, the logging needs to be added again, etc.
> Tests to come.
> Stephen: I can do this up into a proper patch if you like or you can
> fold it into your series.
> Regards,
> Daniel

I don't have the offending patch on hand, but isn't the issue with the
headers. If so, would something like the below do (I haven't tested
it - there could be typos).

I'll review this if not.


diff --git a/patchwork/parser.py b/patchwork/parser.py
index 1805df8..7917e97 100644
--- a/patchwork/parser.py
+++ b/patchwork/parser.py
@@ -21,7 +21,8 @@
 import codecs
 import datetime
-from email.header import Header, decode_header
+from email.header import decode_header
+from email.header import make_header
 from email.utils import parsedate_tz, mktime_tz
 from fnmatch import fnmatch
 from functools import reduce
@@ -155,10 +156,10 @@ def find_date(mail):
 def find_headers(mail):
-    return reduce(operator.__concat__,
-                  ['%s: %s\n' % (k, Header(v, header_name=k,
-                                           continuation_ws='\t').encode())
-                   for (k, v) in list(mail.items())])
+    headers = {key: decode_header(value) for key, value in list(mail.items())}
+    return '\n'.join(['%s: %s' % (key, make_header(value[0], header_name=key,
+                                                   continuation_wd='\t'))
+                      for key, value in headers])
 def find_references(mail):

More information about the Patchwork mailing list