| 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 ###############################################
|
|
|
|
|