def getBugNotification(self): from lp.services.mail.notification import get_unified_diff description_diff = get_unified_diff( self.old_value, self.new_value, 72) notification_text = ( u"** Description changed:\n\n%s" % description_diff) return {'text': notification_text}
def notify_specification_modified(spec, event): """Notify the related people that a specification has been modifed.""" user = IPerson(event.user) spec_delta = spec.getDelta(event.object_before_modification, user) if spec_delta is None: # XXX: Bjorn Tillenius 2006-03-08: # Ideally, if an IObjectModifiedEvent event is generated, # spec_delta shouldn't be None. I'm not confident that we # have enough test yet to assert this, though. return subject = specification_notification_subject(spec) indent = ' ' * 4 info_lines = [] if spec_delta.name: info_lines.append('%sName: %s => %s' % ( indent, spec_delta.name['old'], spec_delta.name['new'])) for dbitem_name in ('definition_status', 'priority'): title = ISpecification[dbitem_name].title assert ISpecification[dbitem_name].required, ( "The mail notification assumes %s can't be None" % dbitem_name) dbitem_delta = getattr(spec_delta, dbitem_name) if dbitem_delta is not None: old_item = dbitem_delta['old'] new_item = dbitem_delta['new'] info_lines.append("%s%s: %s => %s" % ( indent, title, old_item.title, new_item.title)) for person_attrname in ('approver', 'assignee', 'drafter'): title = ISpecification[person_attrname].title person_delta = getattr(spec_delta, person_attrname) if person_delta is not None: old_person = person_delta['old'] if old_person is None: old_value = "(none)" else: old_value = old_person.displayname new_person = person_delta['new'] if new_person is None: new_value = "(none)" else: new_value = new_person.displayname info_lines.append( "%s%s: %s => %s" % (indent, title, old_value, new_value)) mail_wrapper = MailWrapper(width=72) if spec_delta.whiteboard is not None: if info_lines: info_lines.append('') whiteboard_delta = spec_delta.whiteboard if whiteboard_delta['old'] is None: info_lines.append('Whiteboard set to:') info_lines.append(mail_wrapper.format(whiteboard_delta['new'])) else: whiteboard_diff = get_unified_diff( whiteboard_delta['old'], whiteboard_delta['new'], 72) info_lines.append('Whiteboard changed:') info_lines.append(whiteboard_diff) if spec_delta.workitems_text is not None: if info_lines: info_lines.append('') workitems_delta = spec_delta.workitems_text if workitems_delta['old'] is '': info_lines.append('Work items set to:') info_lines.append(mail_wrapper.format(workitems_delta['new'])) else: workitems_diff = get_unified_diff( workitems_delta['old'], workitems_delta['new'], 72) info_lines.append('Work items changed:') info_lines.append(workitems_diff) if not info_lines: # The specification was modified, but we don't yet support # sending notification for the change. return body = get_email_template('specification-modified.txt', 'blueprints') % { 'editor': user.displayname, 'info_fields': '\n'.join(info_lines), 'spec_title': spec.title, 'spec_url': canonical_url(spec)} for address in spec.notificationRecipientAddresses(): simple_sendmail_from_person(user, address, subject, body)