Mercurial > p > roundup > code
diff detectors/newitemcopy.py @ 5115:ec06bd6ea156
issue2550767: Add newitemcopy.py detector to notify users of new
items. Added to detectors directory and a README.txt generated to
describe the purpose of the directory. It also says the detectors
are provided on an as-is basis and may not work. Detector by W.
Trevor King (wking).
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 02 Jul 2016 15:03:38 -0400 |
| parents | |
| children | 198b6e810c67 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/detectors/newitemcopy.py Sat Jul 02 15:03:38 2016 -0400 @@ -0,0 +1,84 @@ +from roundup import hyperdb, roundupdb +from roundup.mailer import Mailer + + +def indentChangeNoteValue(text): + # copied from roundupdb.IssueClass.indentChangeNoteValue() + lines = text.rstrip('\n').split('\n') + lines = [ ' '+line for line in lines ] + return '\n'.join(lines) + +def generateCreateNote(db, cl, nodeid): + # copied from roundupdb.IssueClass.generateCreateNote() + cn = cl.classname + props = cl.getprops(protected=0) + + # list the values + m = [] + prop_items = props.items() + prop_items.sort() + for propname, prop in prop_items: + value = cl.get(nodeid, propname, None) + # skip boring entries + if not value: + continue + if isinstance(prop, hyperdb.Link): + link = db.classes[prop.classname] + if value: + key = link.labelprop(default_to_id=1) + if key: + value = link.get(value, key) + else: + value = '' + elif isinstance(prop, hyperdb.Multilink): + if value is None: value = [] + l = [] + link = db.classes[prop.classname] + key = link.labelprop(default_to_id=1) + if key: + value = [link.get(entry, key) for entry in value] + value.sort() + value = ', '.join(value) + else: + value = str(value) + if '\n' in value: + value = '\n'+indentChangeNoteValue(value) + m.append('%s: %s'%(propname, value)) + m.insert(0, '----------') + m.insert(0, '') + return '\n'.join(m) + +def newitemcopy(db, cl, nodeid, oldvalues): + ''' Copy a message about new items to the dispatcher address. + ''' + try: + create_note = cl.generateCreateNote(nodeid) + except AttributeError: + create_note = generateCreateNote(db, cl, nodeid) + + try: + dispatcher_email = getattr(db.config, 'DISPATCHER_EMAIL') + except AttributeError: + return + + try: + msgids = cl.get(nodeid, 'messages') + except KeyError: + msgids = None + + if msgids: + # send a copy to the dispatcher + for msgid in msgids: + try: + cl.send_message(nodeid, msgid, create_note, [dispatcher_email]) + except roundupdb.MessageSendError, message: + raise roundupdb.DetectorError, message + else: + mailer = Mailer(db.config) + subject = 'New %s%s' % (cl.classname, nodeid) + mailer.standard_message([dispatcher_email], subject, create_note) + +def init(db): + for classname in db.getclasses(): + cl = db.getclass(classname) + cl.react('create', newitemcopy)
