| 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):
 | 
| 
 |