Mercurial > p > roundup > code
annotate roundup/roundupdb.py @ 1329:b1f86cc82d33
added date header to emails [SF#651358]
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Wed, 11 Dec 2002 01:52:20 +0000 |
| parents | 328d68db2ef8 |
| children | aa7e4e8b14be |
| rev | line source |
|---|---|
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
1 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
3 # This module is free software, and you may redistribute it and/or modify |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
4 # under the same terms as Python, so long as this copyright message and |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
5 # disclaimer are retained in their original form. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
6 # |
| 214 | 7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
10 # POSSIBILITY OF SUCH DAMAGE. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
11 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
17 # |
|
1329
b1f86cc82d33
added date header to emails [SF#651358]
Richard Jones <richard@users.sourceforge.net>
parents:
1321
diff
changeset
|
18 # $Id: roundupdb.py,v 1.75 2002-12-11 01:52:20 richard Exp $ |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
19 |
|
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
20 __doc__ = """ |
|
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
21 Extending hyperdb with types specific to issue-tracking. |
|
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
22 """ |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
23 |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
24 import re, os, smtplib, socket, time, random |
|
647
b3b483e0fd5e
Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents:
644
diff
changeset
|
25 import MimeWriter, cStringIO |
|
665
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
26 import base64, quopri, mimetypes |
|
770
0ffb5aaeecf5
Use 'email' instead of 'rfc822', if available.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
769
diff
changeset
|
27 # if available, use the 'email' module, otherwise fallback to 'rfc822' |
|
0ffb5aaeecf5
Use 'email' instead of 'rfc822', if available.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
769
diff
changeset
|
28 try : |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
29 from email.Utils import formataddr as straddr |
|
770
0ffb5aaeecf5
Use 'email' instead of 'rfc822', if available.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
769
diff
changeset
|
30 except ImportError : |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
31 # code taken from the email package 2.4.3 |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
32 def straddr(pair, specialsre = re.compile(r'[][\()<>@,:;".]'), |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
33 escapesre = re.compile(r'[][\()"]')): |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
34 name, address = pair |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
35 if name: |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
36 quotes = '' |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
37 if specialsre.search(name): |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
38 quotes = '"' |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
39 name = escapesre.sub(r'\\\g<0>', name) |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
40 return '%s%s%s <%s>' % (quotes, name, quotes, address) |
|
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1253
diff
changeset
|
41 return address |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
43 import hyperdb |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 |
|
458
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
45 # set to indicate to roundup not to actually _send_ email |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
46 # this var must contain a file to write the mail to |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
47 SENDMAILDEBUG = os.environ.get('SENDMAILDEBUG', '') |
|
458
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
48 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 class Database: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 def getuid(self): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 """Return the id of the "user" node associated with the user |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 that owns this connection to the hyperdatabase.""" |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 return self.user.lookup(self.journaltag) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
55 class MessageSendError(RuntimeError): |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
56 pass |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
57 |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
58 class DetectorError(RuntimeError): |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
59 ''' Raised by detectors that want to indicate that something's amiss |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
60 ''' |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
61 pass |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
62 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
63 # deviation from spec - was called IssueClass |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
64 class IssueClass: |
|
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
65 """ This class is intended to be mixed-in with a hyperdb backend |
|
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
66 implementation. The backend should provide a mechanism that |
|
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
67 enforces the title, messages, files, nosy and superseder |
|
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
68 properties: |
|
826
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
825
diff
changeset
|
69 properties['title'] = hyperdb.String(indexme='yes') |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 properties['messages'] = hyperdb.Multilink("msg") |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 properties['files'] = hyperdb.Multilink("file") |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 properties['nosy'] = hyperdb.Multilink("user") |
|
138
e012bb958238
Fixed IssueClass so that superseders links to its classname...
Richard Jones <richard@users.sourceforge.net>
parents:
127
diff
changeset
|
73 properties['superseder'] = hyperdb.Multilink(classname) |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
74 """ |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 # New methods: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 def addmessage(self, nodeid, summary, text): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 """Add a message to an issue's mail spool. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 A new "msg" node is constructed using the current date, the user that |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 owns the database connection as the author, and the specified summary |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 text. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 The "files" and "recipients" fields are left empty. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 The given text is saved as the body of the message and the node is |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 appended to the "messages" field of the specified issue. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
90 def nosymessage(self, nodeid, msgid, oldvalues): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 """Send a message to the members of an issue's nosy list. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 The message is sent only to users on the nosy list who are not |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 already on the "recipients" list for the message. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 These users are then added to the message's "recipients" list. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 """ |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
98 users = self.db.user |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
99 messages = self.db.msg |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
100 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
101 # figure the recipient ids |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
102 sendto = [] |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 r = {} |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
104 recipients = messages.get(msgid, 'recipients') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
105 for recipid in messages.get(msgid, 'recipients'): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 r[recipid] = 1 |
| 337 | 107 |
| 108 # figure the author's id, and indicate they've received the message | |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
109 authid = messages.get(msgid, 'author') |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
111 # possibly send the message to the author, as long as they aren't |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
112 # anonymous |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
113 if (self.db.config.MESSAGES_TO_AUTHOR == 'yes' and |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
114 users.get(authid, 'username') != 'anonymous'): |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
115 sendto.append(authid) |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
116 r[authid] = 1 |
| 337 | 117 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 # now figure the nosy people who weren't recipients |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
119 nosy = self.get(nodeid, 'nosy') |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 for nosyid in nosy: |
| 337 | 121 # Don't send nosy mail to the anonymous user (that user |
| 122 # shouldn't appear in the nosy list, but just in case they | |
| 123 # do...) | |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
124 if users.get(nosyid, 'username') == 'anonymous': |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
125 continue |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
126 # make sure they haven't seen the message already |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 if not r.has_key(nosyid): |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
128 # send it to them |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
129 sendto.append(nosyid) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
130 recipients.append(nosyid) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
132 # generate a change note |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
133 if oldvalues: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
134 note = self.generateChangeNote(nodeid, oldvalues) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
135 else: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
136 note = self.generateCreateNote(nodeid) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
137 |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
138 # we have new recipients |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
139 if sendto: |
| 758 | 140 # map userids to addresses |
| 685 | 141 sendto = [users.get(i, 'address') for i in sendto] |
| 142 | |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
143 # update the message's recipients list |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
144 messages.set(msgid, recipients=recipients) |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
145 |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
146 # send the message |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
147 self.send_message(nodeid, msgid, note, sendto) |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
148 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
149 # backwards compatibility - don't remove |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
150 sendmessage = nosymessage |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
151 |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
152 def send_message(self, nodeid, msgid, note, sendto): |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
153 '''Actually send the nominated message from this node to the sendto |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
154 recipients, with the note appended. |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
155 ''' |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
156 users = self.db.user |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
157 messages = self.db.msg |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
158 files = self.db.file |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
159 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
160 # determine the messageid and inreplyto of the message |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
161 inreplyto = messages.get(msgid, 'inreplyto') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
162 messageid = messages.get(msgid, 'messageid') |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
163 |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
164 # make up a messageid if there isn't one (web edit) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
165 if not messageid: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
166 # this is an old message that didn't get a messageid, so |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
167 # create one |
|
499
9ad589d0a60f
Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents:
475
diff
changeset
|
168 messageid = "<%s.%s.%s%s@%s>"%(time.time(), random.random(), |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
169 self.classname, nodeid, self.db.config.MAIL_DOMAIN) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
170 messages.set(msgid, messageid=messageid) |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
171 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
172 # send an email to the people who missed out |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
173 cn = self.classname |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
174 title = self.get(nodeid, 'title') or '%s message copy'%cn |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
175 # figure author information |
| 685 | 176 authid = messages.get(msgid, 'author') |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
177 authname = users.get(authid, 'realname') |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
178 if not authname: |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
179 authname = users.get(authid, 'username') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
180 authaddr = users.get(authid, 'address') |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
181 if authaddr: |
|
776
60189cf7ba8e
Fixed name/address display problem introduced by an earlier change.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
772
diff
changeset
|
182 authaddr = " <%s>" % straddr( ('',authaddr) ) |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
183 else: |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
184 authaddr = '' |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
185 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
186 # make the message body |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
187 m = [''] |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
188 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
189 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
190 if self.db.config.EMAIL_SIGNATURE_POSITION == 'top': |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
191 m.append(self.email_signature(nodeid, msgid)) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
192 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
193 # add author information |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
194 if len(self.get(nodeid,'messages')) == 1: |
|
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
195 m.append("New submission from %s%s:"%(authname, authaddr)) |
|
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
196 else: |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
197 m.append("%s%s added the comment:"%(authname, authaddr)) |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
198 m.append('') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
199 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
200 # add the content |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
201 m.append(messages.get(msgid, 'content')) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
202 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
203 # add the change note |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
204 if note: |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
205 m.append(note) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
206 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
207 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
208 if self.db.config.EMAIL_SIGNATURE_POSITION == 'bottom': |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
209 m.append(self.email_signature(nodeid, msgid)) |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
210 |
|
665
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
211 # encode the content as quoted-printable |
|
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
212 content = cStringIO.StringIO('\n'.join(m)) |
|
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
213 content_encoded = cStringIO.StringIO() |
|
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
214 quopri.encode(content, content_encoded, 0) |
|
667
52ca0ae46044
Faster, easier, less mess ;)
Richard Jones <richard@users.sourceforge.net>
parents:
665
diff
changeset
|
215 content_encoded = content_encoded.getvalue() |
|
665
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
216 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
217 # get the files for this message |
|
509
4291a31bfa89
namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
218 message_files = messages.get(msgid, 'files') |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
219 |
|
718
e10c37f53efd
fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents:
685
diff
changeset
|
220 # make sure the To line is always the same (for testing mostly) |
|
e10c37f53efd
fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents:
685
diff
changeset
|
221 sendto.sort() |
|
e10c37f53efd
fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents:
685
diff
changeset
|
222 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
223 # create the message |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
224 message = cStringIO.StringIO() |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
225 writer = MimeWriter.MimeWriter(message) |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
226 writer.addheader('Subject', '[%s%s] %s'%(cn, nodeid, title)) |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
227 writer.addheader('To', ', '.join(sendto)) |
|
770
0ffb5aaeecf5
Use 'email' instead of 'rfc822', if available.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
769
diff
changeset
|
228 writer.addheader('From', straddr( |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
229 (authname, self.db.config.TRACKER_EMAIL) ) ) |
|
770
0ffb5aaeecf5
Use 'email' instead of 'rfc822', if available.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
769
diff
changeset
|
230 writer.addheader('Reply-To', straddr( |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
231 (self.db.config.TRACKER_NAME, |
|
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
232 self.db.config.TRACKER_EMAIL) ) ) |
|
1329
b1f86cc82d33
added date header to emails [SF#651358]
Richard Jones <richard@users.sourceforge.net>
parents:
1321
diff
changeset
|
233 writer.addheader('Date', time.strftime("%a, %d %b %Y %H:%M:%S +0000", |
|
b1f86cc82d33
added date header to emails [SF#651358]
Richard Jones <richard@users.sourceforge.net>
parents:
1321
diff
changeset
|
234 time.gmtime())) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
235 writer.addheader('MIME-Version', '1.0') |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
236 if messageid: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
237 writer.addheader('Message-Id', messageid) |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
238 if inreplyto: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
239 writer.addheader('In-Reply-To', inreplyto) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
240 |
|
612
a2aeebf3d6bd
Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents:
559
diff
changeset
|
241 # add a uniquely Roundup header to help filtering |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
242 writer.addheader('X-Roundup-Name', self.db.config.TRACKER_NAME) |
|
612
a2aeebf3d6bd
Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents:
559
diff
changeset
|
243 |
|
1321
328d68db2ef8
- detect and break email loops [SF#640854]
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
244 # avoid email loops |
|
328d68db2ef8
- detect and break email loops [SF#640854]
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
245 writer.addheader('X-Roundup-Loop', 'hello') |
|
328d68db2ef8
- detect and break email loops [SF#640854]
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
246 |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
247 # attach files |
|
509
4291a31bfa89
namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
248 if message_files: |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
249 part = writer.startmultipartbody('mixed') |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
250 part = writer.nextpart() |
|
665
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
251 part.addheader('Content-Transfer-Encoding', 'quoted-printable') |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
252 body = part.startbody('text/plain') |
|
665
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
253 body.write(content_encoded) |
|
509
4291a31bfa89
namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
254 for fileid in message_files: |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
255 name = files.get(fileid, 'name') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
256 mime_type = files.get(fileid, 'type') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
257 content = files.get(fileid, 'content') |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
258 part = writer.nextpart() |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
259 if mime_type == 'text/plain': |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
260 part.addheader('Content-Disposition', |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
261 'attachment;\n filename="%s"'%name) |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
262 part.addheader('Content-Transfer-Encoding', '7bit') |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
263 body = part.startbody('text/plain') |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
264 body.write(content) |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
265 else: |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
266 # some other type, so encode it |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
267 if not mime_type: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
268 # this should have been done when the file was saved |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
269 mime_type = mimetypes.guess_type(name)[0] |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
270 if mime_type is None: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
271 mime_type = 'application/octet-stream' |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
272 part.addheader('Content-Disposition', |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
273 'attachment;\n filename="%s"'%name) |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
274 part.addheader('Content-Transfer-Encoding', 'base64') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
275 body = part.startbody(mime_type) |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
276 body.write(base64.encodestring(content)) |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
277 writer.lastpart() |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
278 else: |
|
665
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
279 writer.addheader('Content-Transfer-Encoding', 'quoted-printable') |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
280 body = writer.startbody('text/plain') |
|
665
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
281 body.write(content_encoded) |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
282 |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
283 # now try to send the message |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
284 if SENDMAILDEBUG: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
285 open(SENDMAILDEBUG, 'w').write('FROM: %s\nTO: %s\n%s\n'%( |
|
718
e10c37f53efd
fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents:
685
diff
changeset
|
286 self.db.config.ADMIN_EMAIL, |
|
e10c37f53efd
fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents:
685
diff
changeset
|
287 ', '.join(sendto),message.getvalue())) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
288 else: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
289 try: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
290 # send the message as admin so bounces are sent there |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
291 # instead of to roundup |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
292 smtp = smtplib.SMTP(self.db.config.MAILHOST) |
|
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
293 smtp.sendmail(self.db.config.ADMIN_EMAIL, sendto, |
|
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
294 message.getvalue()) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
295 except socket.error, value: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
296 raise MessageSendError, \ |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
297 "Couldn't send confirmation email: mailhost %s"%value |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
298 except smtplib.SMTPException, value: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
299 raise MessageSendError, \ |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
300 "Couldn't send confirmation email: %s"%value |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
301 |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
302 def email_signature(self, nodeid, msgid): |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
303 ''' Add a signature to the e-mail with some useful information |
|
188
1536be43d2fa
Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents:
156
diff
changeset
|
304 ''' |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
305 # simplistic check to see if the url is valid, |
|
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
306 # then append a trailing slash if it is missing |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
307 base = self.db.config.TRACKER_WEB |
|
1250
deab62016de7
https URLs from config now recognised as valid [SF#619829]
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
308 if (not isinstance(base , type('')) or |
|
1253
fe67477e678f
fixes from changes today
Richard Jones <richard@users.sourceforge.net>
parents:
1252
diff
changeset
|
309 not (base.startswith('http://') or base.startswith('https://'))): |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
310 base = "Configuration Error: TRACKER_WEB isn't a " \ |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
311 "fully-qualified URL" |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
312 elif base[-1] != '/' : |
|
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
313 base += '/' |
|
1112
70f187da3cf2
remove hard-coded "issue"
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
314 web = base + self.classname + nodeid |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
315 |
|
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
316 # ensure the email address is properly quoted |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
317 email = straddr((self.db.config.TRACKER_NAME, |
|
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
318 self.db.config.TRACKER_EMAIL)) |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
319 |
|
414
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
320 line = '_' * max(len(web), len(email)) |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
321 return '%s\n%s\n%s\n%s'%(line, email, web, line) |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
322 |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
323 |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
324 def generateCreateNote(self, nodeid): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
325 """Generate a create note that lists initial property values |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
326 """ |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
327 cn = self.classname |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
328 cl = self.db.classes[cn] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
329 props = cl.getprops(protected=0) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
330 |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
331 # list the values |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
332 m = [] |
|
559
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
333 l = props.items() |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
334 l.sort() |
|
537
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
534
diff
changeset
|
335 for propname, prop in l: |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
336 value = cl.get(nodeid, propname, None) |
|
559
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
337 # skip boring entries |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
338 if not value: |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
339 continue |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
340 if isinstance(prop, hyperdb.Link): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
341 link = self.db.classes[prop.classname] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
342 if value: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
343 key = link.labelprop(default_to_id=1) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
344 if key: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
345 value = link.get(value, key) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
346 else: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
347 value = '' |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
348 elif isinstance(prop, hyperdb.Multilink): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
349 if value is None: value = [] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
350 l = [] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
351 link = self.db.classes[prop.classname] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
352 key = link.labelprop(default_to_id=1) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
353 if key: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
354 value = [link.get(entry, key) for entry in value] |
|
718
e10c37f53efd
fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents:
685
diff
changeset
|
355 value.sort() |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
356 value = ', '.join(value) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
357 m.append('%s: %s'%(propname, value)) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
358 m.insert(0, '----------') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
359 m.insert(0, '') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
360 return '\n'.join(m) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
361 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
362 def generateChangeNote(self, nodeid, oldvalues): |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
363 """Generate a change note that lists property changes |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
364 """ |
|
772
db5daf396518
Removed temporary workaround.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
770
diff
changeset
|
365 if __debug__ : |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
366 if not isinstance(oldvalues, type({})) : |
|
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
367 raise TypeError("'oldvalues' must be dict-like, not %s."% |
|
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
368 type(oldvalues)) |
|
772
db5daf396518
Removed temporary workaround.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
770
diff
changeset
|
369 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
370 cn = self.classname |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
371 cl = self.db.classes[cn] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
372 changed = {} |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
373 props = cl.getprops(protected=0) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
374 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
375 # determine what changed |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
376 for key in oldvalues.keys(): |
|
1174
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1112
diff
changeset
|
377 if key in ['files','messages']: |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1112
diff
changeset
|
378 continue |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1112
diff
changeset
|
379 if key in ('activity', 'creator', 'creation'): |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1112
diff
changeset
|
380 continue |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
381 new_value = cl.get(nodeid, key) |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
382 # the old value might be non existent |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
383 try: |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
384 old_value = oldvalues[key] |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
385 if type(new_value) is type([]): |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
386 new_value.sort() |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
387 old_value.sort() |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
388 if new_value != old_value: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
389 changed[key] = old_value |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
390 except: |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
391 changed[key] = new_value |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
392 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
393 # list the changes |
|
440
de5bf4191f11
Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents:
439
diff
changeset
|
394 m = [] |
|
559
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
395 l = changed.items() |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
396 l.sort() |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
397 for propname, oldvalue in l: |
|
647
b3b483e0fd5e
Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents:
644
diff
changeset
|
398 prop = props[propname] |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
399 value = cl.get(nodeid, propname, None) |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
400 if isinstance(prop, hyperdb.Link): |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
401 link = self.db.classes[prop.classname] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
402 key = link.labelprop(default_to_id=1) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
403 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
404 if value: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
405 value = link.get(value, key) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
406 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
407 value = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
408 if oldvalue: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
409 oldvalue = link.get(oldvalue, key) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
410 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
411 oldvalue = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
412 change = '%s -> %s'%(oldvalue, value) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
413 elif isinstance(prop, hyperdb.Multilink): |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
414 change = '' |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
415 if value is None: value = [] |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
416 if oldvalue is None: oldvalue = [] |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
417 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
418 link = self.db.classes[prop.classname] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
419 key = link.labelprop(default_to_id=1) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
420 # check for additions |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
421 for entry in value: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
422 if entry in oldvalue: continue |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
423 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
424 l.append(link.get(entry, key)) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
425 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
426 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
427 if l: |
|
1095
711f2ecee20f
unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
428 l.sort() |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
429 change = '+%s'%(', '.join(l)) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
430 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
431 # check for removals |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
432 for entry in oldvalue: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
433 if entry in value: continue |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
434 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
435 l.append(link.get(entry, key)) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
436 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
437 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
438 if l: |
|
1095
711f2ecee20f
unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
439 l.sort() |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
440 change += ' -%s'%(', '.join(l)) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
441 else: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
442 change = '%s -> %s'%(oldvalue, value) |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
443 m.append('%s: %s'%(propname, change)) |
|
439
6e27cb83aacb
only insert the -------- change note marker if there is a change note
Richard Jones <richard@users.sourceforge.net>
parents:
434
diff
changeset
|
444 if m: |
|
442
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
445 m.insert(0, '----------') |
|
439
6e27cb83aacb
only insert the -------- change note marker if there is a change note
Richard Jones <richard@users.sourceforge.net>
parents:
434
diff
changeset
|
446 m.insert(0, '') |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
447 return '\n'.join(m) |
|
188
1536be43d2fa
Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents:
156
diff
changeset
|
448 |
|
127
0791d13baea7
Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents:
118
diff
changeset
|
449 # vim: set filetype=python ts=4 sw=4 et si |
