Index: third_party/logilab/common/umessage.py |
diff --git a/third_party/logilab/common/umessage.py b/third_party/logilab/common/umessage.py |
index a5e479952a70718da7bdf7012a80eecc4ea55927..85d564c0abd54b6165bad55687adc75b04f51108 100644 |
--- a/third_party/logilab/common/umessage.py |
+++ b/third_party/logilab/common/umessage.py |
@@ -1,4 +1,4 @@ |
-# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
+# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
# |
# This file is part of logilab-common. |
@@ -15,8 +15,12 @@ |
# |
# You should have received a copy of the GNU Lesser General Public License along |
# with logilab-common. If not, see <http://www.gnu.org/licenses/>. |
-"""Unicode email support (extends email from stdlib)""" |
+"""Unicode email support (extends email from stdlib). |
+ |
+ |
+ |
+""" |
__docformat__ = "restructuredtext en" |
import email |
@@ -44,13 +48,9 @@ def decode_QP(string): |
for decoded, charset in decode_header(string): |
if not charset : |
charset = 'iso-8859-15' |
- parts.append(decoded.decode(charset, 'replace')) |
+ parts.append(unicode(decoded, charset, 'replace')) |
- if sys.version_info < (3, 3): |
- # decoding was non-RFC compliant wrt to whitespace handling |
- # see http://bugs.python.org/issue1079 |
- return u' '.join(parts) |
- return u''.join(parts) |
+ return u' '.join(parts) |
def message_from_file(fd): |
try: |
@@ -79,13 +79,27 @@ class UMessage: |
return decode_QP(value) |
return value |
- def __getitem__(self, header): |
- return self.get(header) |
- |
def get_all(self, header, default=()): |
return [decode_QP(val) for val in self.message.get_all(header, default) |
if val is not None] |
+ def get_payload(self, index=None, decode=False): |
+ message = self.message |
+ if index is None: |
+ payload = message.get_payload(index, decode) |
+ if isinstance(payload, list): |
+ return [UMessage(msg) for msg in payload] |
+ if message.get_content_maintype() != 'text': |
+ return payload |
+ |
+ charset = message.get_content_charset() or 'iso-8859-1' |
+ if search_function(charset) is None: |
+ charset = 'iso-8859-1' |
+ return unicode(payload or '', charset, "replace") |
+ else: |
+ payload = UMessage(message.get_payload(index, decode)) |
+ return payload |
+ |
def is_multipart(self): |
return self.message.is_multipart() |
@@ -96,61 +110,20 @@ class UMessage: |
for part in self.message.walk(): |
yield UMessage(part) |
- if sys.version_info < (3, 0): |
- |
- def get_payload(self, index=None, decode=False): |
- message = self.message |
- if index is None: |
- payload = message.get_payload(index, decode) |
- if isinstance(payload, list): |
- return [UMessage(msg) for msg in payload] |
- if message.get_content_maintype() != 'text': |
- return payload |
- |
- charset = message.get_content_charset() or 'iso-8859-1' |
- if search_function(charset) is None: |
- charset = 'iso-8859-1' |
- return unicode(payload or '', charset, "replace") |
- else: |
- payload = UMessage(message.get_payload(index, decode)) |
- return payload |
- |
- def get_content_maintype(self): |
- return unicode(self.message.get_content_maintype()) |
- |
- def get_content_type(self): |
- return unicode(self.message.get_content_type()) |
- |
- def get_filename(self, failobj=None): |
- value = self.message.get_filename(failobj) |
- if value is failobj: |
- return value |
- try: |
- return unicode(value) |
- except UnicodeDecodeError: |
- return u'error decoding filename' |
- |
- else: |
- |
- def get_payload(self, index=None, decode=False): |
- message = self.message |
- if index is None: |
- payload = message.get_payload(index, decode) |
- if isinstance(payload, list): |
- return [UMessage(msg) for msg in payload] |
- return payload |
- else: |
- payload = UMessage(message.get_payload(index, decode)) |
- return payload |
- |
- def get_content_maintype(self): |
- return self.message.get_content_maintype() |
+ def get_content_maintype(self): |
+ return unicode(self.message.get_content_maintype()) |
- def get_content_type(self): |
- return self.message.get_content_type() |
+ def get_content_type(self): |
+ return unicode(self.message.get_content_type()) |
- def get_filename(self, failobj=None): |
- return self.message.get_filename(failobj) |
+ def get_filename(self, failobj=None): |
+ value = self.message.get_filename(failobj) |
+ if value is failobj: |
+ return value |
+ try: |
+ return unicode(value) |
+ except UnicodeDecodeError: |
+ return u'error decoding filename' |
# other convenience methods ############################################### |