Ticket #171: inline_properties.2.diff

File inline_properties.2.diff, 3.0 KB (added by samuel@…, 11 years ago)
  • email2trac.py.in

    a b  
    228228                else:
    229229                        self.STRIP_QUOTES = 0
    230230
     231                if parameters.has_key('inline_properties'):
     232                        self.INLINE_PROPERTIES = int(parameters['inline_properties'])
     233                else:
     234                        self.INLINE_PROPERTIES = 1
     235
    231236                if parameters.has_key('use_textwrap'):
    232237                        self.USE_TEXTWRAP = int(parameters['use_textwrap'])
    233238                else:
     
    684689                if update_fields:
    685690                        self.update_ticket_fields(tkt, update_fields)
    686691
     692                if self.INLINE_PROPERTIES:
     693                        properties = self.inline_properties(m)
     694                        if properties:
     695                                self.update_ticket_fields(tkt, properties)
     696
    687697                message_parts = self.get_message_parts(m)
    688698                message_parts = self.unique_attachment_names(message_parts)
    689699
     
    692702
    693703                body_text = self.body_text(message_parts)
    694704
    695                 if body_text.strip() or update_fields:
     705                if body_text.strip() or update_fields or \
     706                                (self.INLINE_PROPERTIES and properties):
    696707                        if self.DRY_RUN:
    697708                                print 'DRY_RUN: tkt.save_changes(self.author, comment) ', self.author
    698709                        else:
     
    792803                                update_fields = self.str_to_dict(keywords)
    793804                                self.update_ticket_fields(tkt, update_fields)
    794805
     806                if self.INLINE_PROPERTIES:
     807                        properties = self.inline_properties(msg)
     808                        if properties:
     809                                self.update_ticket_fields(tkt, properties)
     810
    795811                # produce e-mail like header
    796812                #
    797813                head = ''
     
    10541070
    10551071                return ('\n'.join(body))
    10561072
     1073        def strip_inline_properties(self, text):
     1074                """
     1075                Strip quotes from message by Nicolas Mendoza
     1076                """
     1077                body = []
     1078                for line in text.splitlines():
     1079                        if re.match('\s*[@]\s*([a-zA-Z]+)\s*:', line):
     1080                                continue
     1081                        body.append(line)
     1082
     1083                return ('\n'.join(body))
     1084
     1085        def inline_properties(self, message):
     1086                """
     1087                Strip quotes from message by Nicolas Mendoza
     1088                """
     1089                properties = {}
     1090                # walk the message just like in ``get_message_parts()``
     1091                for part in message.walk():
     1092                        inline = self.inline_part(part)
     1093                        if part.get_content_type() == 'text/plain' and inline:
     1094                                body_text = part.get_payload(decode=1)
     1095                                if not body_text:
     1096                                        body_text = part.get_payload(decode=0)
     1097                                charset = part.get_content_charset()
     1098                                if not charset:
     1099                                        charset = 'iso-8859-15'
     1100
     1101                                try:
     1102                                        ubody_text = unicode(body_text, charset)
     1103
     1104                                except UnicodeError, detail:
     1105                                        ubody_text = unicode(body_text, 'iso-8859-15')
     1106
     1107                                except LookupError, detail:
     1108                                        ubody_text = body_text
     1109
     1110                                for line in ubody_text.splitlines():
     1111                                        match = re.match('\s*[@]\s*([a-zA-Z]+)\s*:(.*)$', line)
     1112                                        if match:
     1113                                                keyword, value = match.groups()
     1114                                                properties[keyword] = value.strip()
     1115
     1116                return properties
     1117
    10571118        def wrap_text(self, text, replace_whitespace = False):
    10581119                """
    10591120                Will break a lines longer then given length into several small
     
    11861247                                if self.STRIP_QUOTES:
    11871248                                        body_text = self.strip_quotes(body_text)
    11881249
     1250                                if self.INLINE_PROPERTIES:
     1251                                        body_text = self.strip_inline_properties(body_text)
     1252
    11891253                                if self.USE_TEXTWRAP:
    11901254                                        body_text = self.wrap_text(body_text)