| Index: third_party/logilab/common/umessage.py
|
| ===================================================================
|
| --- third_party/logilab/common/umessage.py (revision 292986)
|
| +++ third_party/logilab/common/umessage.py (working copy)
|
| @@ -1,4 +1,4 @@
|
| -# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
|
| +# copyright 2003-2012 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,12 +15,8 @@
|
| #
|
| # 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
|
| @@ -48,9 +44,13 @@
|
| for decoded, charset in decode_header(string):
|
| if not charset :
|
| charset = 'iso-8859-15'
|
| - parts.append(unicode(decoded, charset, 'replace'))
|
| + parts.append(decoded.decode(charset, 'replace'))
|
|
|
| - return u' '.join(parts)
|
| + 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)
|
|
|
| def message_from_file(fd):
|
| try:
|
| @@ -79,27 +79,13 @@
|
| 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()
|
|
|
| @@ -110,21 +96,62 @@
|
| for part in self.message.walk():
|
| yield UMessage(part)
|
|
|
| - def get_content_maintype(self):
|
| - return unicode(self.message.get_content_maintype())
|
| + if sys.version_info < (3, 0):
|
|
|
| - def get_content_type(self):
|
| - return unicode(self.message.get_content_type())
|
| + 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
|
|
|
| - 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'
|
| + 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_type(self):
|
| + return self.message.get_content_type()
|
| +
|
| + def get_filename(self, failobj=None):
|
| + return self.message.get_filename(failobj)
|
| +
|
| # other convenience methods ###############################################
|
|
|
| def headers(self):
|
|
|