Changeset 296 for trunk/email2trac.py.in


Ignore:
Timestamp:
01/07/10 12:54:44 (13 years ago)
Author:
bas
Message:

email2trac.py.in:

  • Fixed an error when adding attachments with filenames that needed to be escaped, see #149
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/email2trac.py.in

    r295 r296  
    143143                        os.umask(int(parameters['umask'], 8))
    144144
    145                 if parameters.has_key('quote_attachment_filenames'):
    146                         self.QUOTE_ATTACHMENT_FILENAMES = int(parameters['quote_attachment_filenames'])
    147                 else:
    148                         self.QUOTE_ATTACHMENT_FILENAMES = 1
    149 
    150145                if parameters.has_key('debug'):
    151146                        self.DEBUG = int(parameters['debug'])
     
    800795                if self.EMAIL_HEADER > 0:
    801796                        head = self.email_header_txt(msg)
    802                        
     797
     798                                       
    803799                message_parts = self.get_message_parts(msg)
     800                if self.DEBUG:
     801                        print 'TD: self.get_message_parts ',
     802                        print message_parts
     803
    804804                message_parts = self.unique_attachment_names(message_parts)
     805                if self.DEBUG:
     806                        print 'TD: self.unique_attachment_names',
     807                        print message_parts
    805808               
    806809                if self.EMAIL_HEADER > 0:
     
    11911194               
    11921195        def unique_attachment_names(self, message_parts):
     1196                """
     1197                """
    11931198                renamed_parts = []
    11941199                attachment_names = set()
     1200
    11951201                for part in message_parts:
    11961202                       
    1197                         # If not an attachment, leave it alone
     1203                        ## If not an attachment, leave it alone
     1204                        #
    11981205                        if not isinstance(part, tuple):
    11991206                                renamed_parts.append(part)
     
    12011208                               
    12021209                        (filename, part) = part
    1203                         # Decode the filename
    1204                         if filename:
    1205                                 filename = self.email_to_unicode(filename)                     
    1206 
    1207                         # If no name, use a default one
    1208                         else:
     1210
     1211                        ## If no filename, use a default one
     1212                        #
     1213                        if not filename:
    12091214                                filename = 'untitled-part'
    12101215
     
    12191224                                filename = '%s%s' % (filename, ext)
    12201225
    1221                         # Discard relative paths in attachment names
    1222                         filename = filename.replace('\\', '/').replace(':', '/')
    1223                         filename = os.path.basename(filename)
    1224 
     1226# We now use the attachment insert function
     1227#
     1228                        ## Discard relative paths in attachment names
     1229                        #
     1230                        #filename = filename.replace('\\', '/').replace(':', '/')
     1231                        #filename = os.path.basename(filename)
     1232                        #
    12251233                        # We try to normalize the filename to utf-8 NFC if we can.
    12261234                        # Files uploaded from OS X might be in NFD.
    12271235                        # Check python version and then try it
    12281236                        #
    1229                         if sys.version_info[0] > 2 or (sys.version_info[0] == 2 and sys.version_info[1] >= 3):
    1230                                 try:
    1231                                         filename = unicodedata.normalize('NFC', unicode(filename, 'utf-8')).encode('utf-8') 
    1232                                 except TypeError:
    1233                                         pass
    1234                                        
    1235                         if self.QUOTE_ATTACHMENT_FILENAMES:
    1236                                 try:
    1237                                         filename = urllib.quote(filename)
    1238                                 except KeyError, detail:
    1239                                         filename = urllib.quote(filename.encode('utf-8'))
     1237                        #if sys.version_info[0] > 2 or (sys.version_info[0] == 2 and sys.version_info[1] >= 3):
     1238                        #       try:
     1239                        #               filename = unicodedata.normalize('NFC', unicode(filename, 'utf-8')).encode('utf-8') 
     1240                        #       except TypeError:
     1241                        #               pass
    12401242
    12411243                        # Make the filename unique for this ticket
    12421244                        num = 0
    12431245                        unique_filename = filename
    1244                         filename, ext = os.path.splitext(filename)
     1246                        dummy_filename, ext = os.path.splitext(filename)
    12451247
    12461248                        while unique_filename in attachment_names or self.attachment_exists(unique_filename):
    12471249                                num += 1
    1248                                 unique_filename = "%s-%s%s" % (filename, num, ext)
     1250                                unique_filename = "%s-%s%s" % (dummy_filename, num, ext)
    12491251                               
    12501252                        if self.DEBUG:
     
    12541256
    12551257                        renamed_parts.append((filename, unique_filename, part))
    1256                
     1258       
    12571259                return renamed_parts
    12581260                       
     
    14181420
    14191421                        att.insert(filename, fd, file_size)
     1422
    14201423                        #except  util.TracError, detail:
    14211424                        #       print detail
Note: See TracChangeset for help on using the changeset viewer.