[Erp5-report] r13523 - /erp5/trunk/products/ERP5/Document/MailMessage.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Mar 20 15:39:58 CET 2007


Author: romain
Date: Tue Mar 20 15:39:56 2007
New Revision: 13523

URL: http://svn.erp5.org?rev=13523&view=rev
Log:
Test attributes have to be saved in utf-8 in ERP5, so, on the fly convertion is not needed.
In order to safely import mail in ERP5, use the postUTF8MailMessage method from 
ERP5Type/patches/CMFMailIn.

getHeader was badly surcharged: it was not supposed to return a dict value.
It is forbidden to save dict attribute as a string.

Modified:
    erp5/trunk/products/ERP5/Document/MailMessage.py

Modified: erp5/trunk/products/ERP5/Document/MailMessage.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/MailMessage.py?rev=13523&r1=13522&r2=13523&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/MailMessage.py (original)
+++ erp5/trunk/products/ERP5/Document/MailMessage.py Tue Mar 20 15:39:56 2007
@@ -39,32 +39,9 @@
 
 from zLOG import LOG
 
-# TODO: support "from"/"to" field header QP decoding exemple:
-# =?iso-8859-15?q?K=E9vin=20De?= <kevin.de at machin.com>
-
-# Support mail decoding in both python v2.3 and v2.4.
-# See http://www.freesoft.org/CIE/RFC/1521/5.htm for 'content-transfer-encoding' explaination.
-import binascii
-try:
-  # python v2.3 API
-  from base64 import decodestring as b64decode
-except AttributeError:
-  # python v2.4 API
-  from base64 import b64decode
-global supported_decoding
-supported_decoding = {
-    'base64'          : b64decode
-  , 'quoted-printable': binascii.a2b_qp
-  # "8bit", "7bit", and "binary" values all mean that NO encoding has been performed
-  , '8bit'            : None
-  , '7bit'            : None
-  , 'binary'          : None
-  }
-
-
 class MailMessage(Event, CMFMailInMessage):
   """
-    MailMessage subclasses Event objects to implement Email Events.
+  MailMessage subclasses Event objects to implement Email Events.
   """
 
   meta_type       = 'ERP5 Mail Message'
@@ -87,143 +64,6 @@
                     , PropertySheet.Event
                     , PropertySheet.MailMessage
                     )
-
-  # default empty attributes
-  header = '{}'
-  body = ''
-
-####### TODO: support attachments !!!!
-#   def __init__(self, *args, **kw):
-#     XMLObject.__init__(self, *args, **kw)
-#     # Save attachments in a special variable
-#     attachments = kw.get('attachments', {})
-#     if kw.has_key('attachments'):
-#       del kw['attachments']
-#     self.attachments = attachments
-
-  def _edit(self, *args, **kw):
-    Event._edit(self, *args, **kw)
-    self.cleanMessage()
-
-  def cleanMessage(self):
-    """
-      Clean up the the message data to have UTF-8 encoded body and a clean header.
-    """
-    # Update the body to the clean one
-    self.body = self.getBody()
-    # Update the charset and the encoding since the body is known has 'cleaned'
-    header = self.getHeader()
-    if header != None:
-      header = self.setBodyCharsetFromDict(header, charset="utf-8")
-      header['content-transfer-encoding'] = "binary"
-    self.header = header
-
-  def getDecodedBody(self, raw_body, encoding):
-    """
-      This method return a decoded body according the given parameter.
-      This method use the global "supported_decoding" dict which contain decoded
-        methods supported by the current python environnment.
-    """
-    decoded_body = raw_body
-    if encoding in supported_decoding.keys():
-      method = supported_decoding[encoding]
-      # Is the body encoded ?
-      if method != None:
-        decoded_body = method(raw_body)
-    elif encoding not in (None, ''):
-      raise 'MailMessage Body Decoding Error', "Body encoding '%s' is not supported" % (encoding)
-    return decoded_body
-
-  def getEncodedBody(self, body, output_charset="utf-8"):
-    """
-      Return the entire body message encoded in the given charset.
-    """
-    header       = self.getHeader()
-    body_charset = self.getBodyCharsetFromDict(header)
-    if body_charset != None and body_charset.lower() != output_charset.lower():
-      unicode_body = unicode(body, body_charset)
-      return unicode_body.encode(output_charset)
-    return body
-
-  def getBodyEncodingFromDict(self, header={}):
-    """
-      Extract the encoding of the body from header metadatas.
-    """
-    encoding = None
-    if type(header) == type({}) and header.has_key('content-transfer-encoding'):
-      encoding = header['content-transfer-encoding']
-    return encoding
-
-  def getBodyCharsetFromDict(self, header):
-    """
-      Extract the charset from the header.
-    """
-    charset = "utf-8"
-    if header != None and header.has_key('content-type'):
-      content_type = header['content-type'].replace('\n', ' ')
-      content_type_info = content_type.split(';')
-      for ct_info in content_type_info:
-        info = ct_info.strip().lower()
-        if info.startswith('charset='):
-          charset = info[len('charset='):]
-          # Some charset statements are quoted
-          if charset.startswith('"') or charset.startswith("'"): charset = charset[1:]
-          if charset.endswith(  '"') or charset.endswith(  "'"): charset = charset[:-1]
-          break
-    return charset
-
-  def setBodyCharsetFromDict(self, header, charset):
-    """
-      This method update charset info of the body.
-    """
-    if header != None:
-      # Update content-type where charset is stored
-      content_type_info = []
-      if header.has_key('content-type'):
-        content_type = header['content-type'].replace('\n', ' ')
-        content_type_info = content_type.split(';')
-      # Force content-type charset to UTF-8
-      new_content_type_metadata = []
-      # Get previous info
-      for ct_info in content_type_info:
-        info = ct_info.strip().lower()
-        # Bypass previous charset info
-        if not info.startswith('charset='):
-          new_content_type_metadata.append(ct_info.strip())
-      # Add a new charset info consistent with the actual body charset encoding
-      new_content_type_metadata.append("charset='%s'" % (charset))
-      # Inject new content-type in the header
-      header['content-type'] = ";\n ".join(new_content_type_metadata)
-    return header
-
-  def updateCharset(self, charset="utf-8"):
-    """
-      This method update charset info stored in the header.
-      Usefull to manually debug bad emails.
-    """
-    header = self.getHeader()
-    self.header = self.setBodyCharsetFromDict(header, charset)
-
-  def getHeader(self):
-    """
-      Get the header dict of the message.
-    """
-    header = self.header
-    if header == None or type(header) == type({}):
-      return header
-    elif type(header) == type(''):
-      # Must do an 'eval' because the header is a dict stored as a text (see ERP5/PropertySheet/MailMessage.py)
-      return eval(header)
-    else:
-      raise 'TypeError', "Type of 'header' property can't be guessed."
-
-  def getBody(self):
-    """
-      Get a clean decoded body.
-    """
-    encoding = self.getBodyEncodingFromDict(self.getHeader())
-    body_string = self.getDecodedBody(self.body, encoding)
-    return self.getEncodedBody(body_string, output_charset="utf-8")
 
   def getReplyBody(self):
     """




More information about the Erp5-report mailing list