Mercurial > p > roundup > code
diff roundup/mailgw.py @ 704:54333751e98d search_indexing-0-4-2-branch
Brought search_indexing-branch up to date with latest changes in HEAD.
| author | Roche Compaan <rochecompaan@users.sourceforge.net> |
|---|---|
| date | Thu, 02 May 2002 13:09:11 +0000 |
| parents | cdcee6721841 |
| children |
line wrap: on
line diff
--- a/roundup/mailgw.py Thu May 02 11:52:12 2002 +0000 +++ b/roundup/mailgw.py Thu May 02 13:09:11 2002 +0000 @@ -73,7 +73,7 @@ an exception, the original message is bounced back to the sender with the explanatory message given in the exception. -$Id: mailgw.py,v 1.66 2002-03-14 23:59:24 richard Exp $ +$Id: mailgw.py,v 1.66.2.1 2002-05-02 13:09:08 rochecompaan Exp $ ''' @@ -131,7 +131,7 @@ def main(self, fp): ''' fp - the file from which to read the Message. ''' - self.handle_Message(Message(fp)) + return self.handle_Message(Message(fp)) def handle_Message(self, message): '''Handle an RFC822 Message @@ -493,7 +493,14 @@ r = recipient[1].strip().lower() if r == tracker_email or not r: continue - recipients.append(self.db.uidFromAddress(recipient)) + + # look up the recipient - create if necessary (and we're + # allowed to) + recipient = self.db.uidFromAddress(recipient, create) + + # if all's well, add the recipient to the list + if recipient: + recipients.append(recipient) # # handle message-id and in-reply-to @@ -597,7 +604,10 @@ else: content = self.get_part_data_decoded(message) - summary, content = parseContent(content) + keep_citations = self.instance.EMAIL_KEEP_QUOTED_TEXT == 'yes' + keep_body = self.instance.EMAIL_LEAVE_BODY_UNCHANGED == 'yes' + summary, content = parseContent(content, keep_citations, + keep_body) # # handle the attachments @@ -635,25 +645,13 @@ current_status == resolved_id): props['status'] = chatting_id - # add nosy in arguments to issue's nosy list - if not props.has_key('nosy'): props['nosy'] = [] - n = {} + # update the nosy list + current = {} for nid in cl.get(nodeid, 'nosy'): - n[nid] = 1 - for value in props['nosy']: - if self.db.hasnode('user', value): - nid = value - else: - continue - if n.has_key(nid): continue - n[nid] = 1 - props['nosy'] = n.keys() - # add assignedto to the nosy list - if props.has_key('assignedto'): - assignedto = props['assignedto'] - if assignedto not in props['nosy']: - props['nosy'].append(assignedto) + current[nid] = 1 + self.updateNosy(props, author, recipients, current) + # create the message message_id = self.db.msg.create(author=author, recipients=recipients, date=date.Date('.'), summary=summary, content=content, files=files, messageid=messageid, @@ -708,30 +706,7 @@ props['messages'] = [message_id] # set up (clean) the nosy list - nosy = props.get('nosy', []) - n = {} - for value in nosy: - nid = value - if n.has_key(nid): continue - n[nid] = 1 - props['nosy'] = n.keys() - # add on the recipients of the message - for recipient in recipients: - if not n.has_key(recipient): - props['nosy'].append(recipient) - n[recipient] = 1 - - # add the author to the nosy list - if not n.has_key(author): - props['nosy'].append(author) - n[author] = 1 - - # add assignedto to the nosy list - if properties.has_key('assignedto') and props.has_key('assignedto'): - assignedto = props['assignedto'] - if not n.has_key(assignedto): - props['nosy'].append(assignedto) - n[assignedto] = 1 + self.updateNosy(props, author, recipients) # and attempt to create the new node try: @@ -745,8 +720,54 @@ # commit the new node(s) to the DB self.db.commit() -def parseContent(content, blank_line=re.compile(r'[\r\n]+\s*[\r\n]+'), - eol=re.compile(r'[\r\n]+'), signature=re.compile(r'^[>|\s]*[-_]+\s*$')): + return nodeid + + def updateNosy(self, props, author, recipients, current=None): + '''Determine what the nosy list should be given: + + props: properties specified on the subject line of the message + author: the sender of the message + recipients: the recipients (to, cc) of the message + current: if the issue already exists, this is the current nosy + list, as a dictionary. + ''' + if current is None: + current = {} + ok = ('new', 'yes') + else: + ok = ('yes',) + + # add nosy in arguments to issue's nosy list + nosy = props.get('nosy', []) + for value in nosy: + if not self.db.hasnode('user', value): + continue + if not current.has_key(value): + current[value] = 1 + + # add the author to the nosy list + if getattr(self.instance, 'ADD_AUTHOR_TO_NOSY', 'new') in ok: + if not current.has_key(author): + current[author] = 1 + + # add on the recipients of the message + if getattr(self.instance, 'ADD_RECIPIENTS_TO_NOSY', 'new') in ok: + for recipient in recipients: + if not current.has_key(recipient): + current[recipient] = 1 + + # add assignedto to the nosy list + if props.has_key('assignedto'): + assignedto = props['assignedto'] + if not current.has_key(assignedto): + current[assignedto] = 1 + + props['nosy'] = current.keys() + +def parseContent(content, keep_citations, keep_body, + blank_line=re.compile(r'[\r\n]+\s*[\r\n]+'), + eol=re.compile(r'[\r\n]+'), + signature=re.compile(r'^[>|\s]*[-_]+\s*$')): ''' The message body is divided into sections by blank lines. Sections where the second and all subsequent lines begin with a ">" or "|" character are considered "quoting sections". The first line of the first @@ -778,9 +799,9 @@ if line[0] not in '>|': break else: - # TODO: people who want to keep quoted bits will want the - # next line... - # l.append(section) + # we keep quoted bits if specified in the config + if keep_citations: + l.append(section) continue # keep this section - it has reponse stuff in it if not summary: @@ -799,10 +820,30 @@ # and add the section to the output l.append(section) - return summary, '\n\n'.join(l) + # we only set content for those who want to delete cruft from the + # message body, otherwise the body is left untouched. + if not keep_body: + content = '\n\n'.join(l) + return summary, content # # $Log: not supported by cvs2svn $ +# Revision 1.68 2002/05/02 07:56:34 richard +# . added option to automatically add the authors and recipients of messages +# to the nosy lists with the options ADD_AUTHOR_TO_NOSY (default 'new') and +# ADD_RECIPIENTS_TO_NOSY (default 'new'). These settings emulate the current +# behaviour. Setting them to 'yes' will add the author/recipients to the nosy +# on messages that create issues and followup messages. +# . added missing documentation for a few of the config option values +# +# Revision 1.67 2002/04/23 15:46:49 rochecompaan +# . stripping of the email message body can now be controlled through +# the config variables EMAIL_KEEP_QUOTED_TEST and +# EMAIL_LEAVE_BODY_UNCHANGED. +# +# Revision 1.66 2002/03/14 23:59:24 richard +# . #517734 ] web header customisation is obscure +# # Revision 1.65 2002/02/15 00:13:38 richard # . #503204 ] mailgw needs a default class # - partially done - the setting of additional properties can wait for a
