annotate templates/detectors/nosyreaction.py @ 26:c7c14960f413

Final commit of Grande Splite
author Richard Jones <richard@users.sourceforge.net>
date Sun, 22 Jul 2001 12:09:32 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 #$Id: nosyreaction.py,v 1.1 2001-07-22 12:09:32 richard Exp $
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 def nosyreaction(db, cl, nodeid, oldvalues):
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 ''' A standard detector is provided that watches for additions to the
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 "messages" property.
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 When a new message is added, the detector sends it to all the users on
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 the "nosy" list for the issue that are not already on the "recipients"
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 list of the message.
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 Those users are then appended to the "recipients" property on the
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 message, so multiple copies of a message are never sent to the same
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 user.
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 The journal recorded by the hyperdatabase on the "recipients" property
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 then provides a log of when the message was sent to whom.
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 '''
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 messages = []
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 if oldvalues is None:
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 # the action was a create, so use all the messages in the create
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 messages = cl.get(nodeid, 'messages')
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 elif oldvalues.has_key('messages'):
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 # the action was a set (so adding new messages to an existing issue)
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 m = {}
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 for msgid in oldvalues['messages']:
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 m[msgid] = 1
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 messages = []
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 # figure which of the messages now on the issue weren't there before
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 for msgid in cl.get(nodeid, 'messages'):
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 if not m.has_key(msgid):
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 messages.append(msgid)
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 if not messages:
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 return
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 # send a copy to the nosy list
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 for msgid in messages:
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 cl.sendmessage(nodeid, msgid)
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 # update the nosy list with the recipients from the new messages
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 nosy = cl.get(nodeid, 'nosy')
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 n = {}
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 for nosyid in nosy: n[nosyid] = 1
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 change = 0
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 # but don't add admin to the nosy list
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 for msgid in messages:
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 for recipid in db.msg.get(msgid, 'recipients'):
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 if recipid != '1' and not n.has_key(recipid):
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 change = 1
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 nosy.append(recipid)
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 authid = db.msg.get(msgid, 'author')
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 if authid != '1' and not n.has_key(authid):
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 change = 1
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 nosy.append(authid)
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 if change:
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 cl.set(nodeid, nosy=nosy)
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 def init(db):
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 db.issue.react('create', nosyreaction)
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 db.issue.react('set', nosyreaction)
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 #
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 #$Log: not supported by cvs2svn $
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 #

Roundup Issue Tracker: http://roundup-tracker.org/