Changeset 296


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

email2trac.py.in:

  • Fixed an error when adding attachments with filenames that needed to be escaped, see #149
Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/debian/changelog

    r295 r296  
    3333   Authors:  otto at bergerdata dot de and Bas van der Vlies
    3434
     35 * FIxed an error when files where added with characters that needed to be
     36   escaped. Both email2trac and trac escaped the filenames. We removed the
     37   code from email2trac an let trac handle the escaping, closes #149
     38
     39   Reported by: hju att jochenkuhl dot de
     40   Fixed by: Bas van der Vlies
     41   
    3542 -- Bas van der Vlies <bas@sara.nl>  Thu, 22 Oct 2009 17:47:50 +0200
    3643
  • 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.