Mercurial > p > roundup > code
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 |
| 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 # |
