annotate roundup/roundupdb.py @ 1252:209a47ede743

allow blank passwords again [SF#619714]
author Richard Jones <richard@users.sourceforge.net>
date Tue, 08 Oct 2002 04:11:17 +0000
parents deab62016de7
children fe67477e678f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
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 #
1252
209a47ede743 allow blank passwords again [SF#619714]
Richard Jones <richard@users.sourceforge.net>
parents: 1250
diff changeset
18 # $Id: roundupdb.py,v 1.71 2002-10-08 04:11:13 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 :
0ffb5aaeecf5 Use 'email' instead of 'rfc822', if available.
Derrick Hudson <dman13@users.sourceforge.net>
parents: 769
diff changeset
29 from email.Utils import dump_address_pair as straddr
0ffb5aaeecf5 Use 'email' instead of 'rfc822', if available.
Derrick Hudson <dman13@users.sourceforge.net>
parents: 769
diff changeset
30 except ImportError :
0ffb5aaeecf5 Use 'email' instead of 'rfc822', if available.
Derrick Hudson <dman13@users.sourceforge.net>
parents: 769
diff changeset
31 from rfc822 import dump_address_pair as straddr
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32
858
2dd862af72ee all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
33 import hyperdb
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34
458
fcda73536034 Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents: 453
diff changeset
35 # 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
36 # 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
37 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
38
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 class Database:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 def getuid(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 """Return the id of the "user" node associated with the user
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 that owns this connection to the hyperdatabase."""
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 return self.user.lookup(self.journaltag)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
45 class MessageSendError(RuntimeError):
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
46 pass
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
47
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
48 class DetectorError(RuntimeError):
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
49 ''' 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
50 '''
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
51 pass
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
52
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
53 # 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
54 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
55 """ 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
56 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
57 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
58 properties:
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 825
diff changeset
59 properties['title'] = hyperdb.String(indexme='yes')
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 properties['messages'] = hyperdb.Multilink("msg")
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 properties['files'] = hyperdb.Multilink("file")
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 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
63 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
64 """
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 # New methods:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 def addmessage(self, nodeid, summary, text):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 """Add a message to an issue's mail spool.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 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
71 owns the database connection as the author, and the specified summary
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 text.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 The "files" and "recipients" fields are left empty.
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 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
77 appended to the "messages" field of the specified issue.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79
753
938edfdeac6e Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents: 749
diff changeset
80 def nosymessage(self, nodeid, msgid, oldvalues):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 """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
82
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 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
84 already on the "recipients" list for the message.
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 These users are then added to the message's "recipients" list.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 """
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
88 users = self.db.user
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
89 messages = self.db.msg
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
90
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 # figure the recipient ids
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
92 sendto = []
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 r = {}
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
94 recipients = messages.get(msgid, 'recipients')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
95 for recipid in messages.get(msgid, 'recipients'):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 r[recipid] = 1
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
97
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
98 # 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
99 authid = messages.get(msgid, 'author')
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
101 # 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
102 # anonymous
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
103 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
104 users.get(authid, 'username') != 'anonymous'):
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
105 sendto.append(authid)
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
106 r[authid] = 1
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
107
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 # 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
109 nosy = self.get(nodeid, 'nosy')
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 for nosyid in nosy:
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
111 # Don't send nosy mail to the anonymous user (that user
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
112 # shouldn't appear in the nosy list, but just in case they
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
113 # do...)
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
114 if users.get(nosyid, 'username') == 'anonymous':
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
115 continue
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
116 # make sure they haven't seen the message already
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 if not r.has_key(nosyid):
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
118 # send it to them
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
119 sendto.append(nosyid)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 recipients.append(nosyid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121
753
938edfdeac6e Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents: 749
diff changeset
122 # generate a change note
938edfdeac6e Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents: 749
diff changeset
123 if oldvalues:
938edfdeac6e Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents: 749
diff changeset
124 note = self.generateChangeNote(nodeid, oldvalues)
938edfdeac6e Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents: 749
diff changeset
125 else:
938edfdeac6e Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents: 749
diff changeset
126 note = self.generateCreateNote(nodeid)
938edfdeac6e Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents: 749
diff changeset
127
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
128 # we have new recipients
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
129 if sendto:
758
ae0ec3c15e0d detabbing
Richard Jones <richard@users.sourceforge.net>
parents: 753
diff changeset
130 # map userids to addresses
685
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
131 sendto = [users.get(i, 'address') for i in sendto]
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
132
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
133 # update the message's recipients list
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
134 messages.set(msgid, recipients=recipients)
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
135
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
136 # send the message
753
938edfdeac6e Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents: 749
diff changeset
137 self.send_message(nodeid, msgid, note, sendto)
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
138
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
139 # backwards compatibility - don't remove
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
140 sendmessage = nosymessage
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
141
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
142 def send_message(self, nodeid, msgid, note, sendto):
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
143 '''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
144 recipients, with the note appended.
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 users = self.db.user
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
147 messages = self.db.msg
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
148 files = self.db.file
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
149
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
150 # 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
151 inreplyto = messages.get(msgid, 'inreplyto')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
152 messageid = messages.get(msgid, 'messageid')
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
153
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
154 # 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
155 if not messageid:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
156 # 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
157 # 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
158 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
159 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
160 messages.set(msgid, messageid=messageid)
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
161
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
162 # 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
163 cn = self.classname
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
164 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
165 # figure author information
685
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
166 authid = messages.get(msgid, 'author')
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
167 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
168 if not authname:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
169 authname = users.get(authid, 'username')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
170 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
171 if authaddr:
776
60189cf7ba8e Fixed name/address display problem introduced by an earlier change.
Derrick Hudson <dman13@users.sourceforge.net>
parents: 772
diff changeset
172 authaddr = " <%s>" % straddr( ('',authaddr) )
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
173 else:
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
174 authaddr = ''
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
175
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
176 # make the message body
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
177 m = ['']
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
178
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
179 # put in roundup's signature
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
180 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
181 m.append(self.email_signature(nodeid, msgid))
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
182
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
183 # 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
184 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
185 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
186 else:
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
187 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
188 m.append('')
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
189
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
190 # add the content
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
191 m.append(messages.get(msgid, 'content'))
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
192
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
193 # add the change note
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
194 if note:
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
195 m.append(note)
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
196
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
197 # put in roundup's signature
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
198 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
199 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
200
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
201 # 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
202 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
203 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
204 quopri.encode(content, content_encoded, 0)
667
52ca0ae46044 Faster, easier, less mess ;)
Richard Jones <richard@users.sourceforge.net>
parents: 665
diff changeset
205 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
206
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
207 # get the files for this message
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
208 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
209
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
210 # 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
211 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
212
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
213 # 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
214 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
215 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
216 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
217 writer.addheader('To', ', '.join(sendto))
770
0ffb5aaeecf5 Use 'email' instead of 'rfc822', if available.
Derrick Hudson <dman13@users.sourceforge.net>
parents: 769
diff changeset
218 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
219 (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
220 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
221 (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
222 self.db.config.TRACKER_EMAIL) ) )
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
223 writer.addheader('MIME-Version', '1.0')
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
224 if messageid:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
225 writer.addheader('Message-Id', messageid)
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
226 if inreplyto:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
227 writer.addheader('In-Reply-To', inreplyto)
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
228
612
a2aeebf3d6bd Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents: 559
diff changeset
229 # 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
230 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
231
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
232 # attach files
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
233 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
234 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
235 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
236 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
237 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
238 body.write(content_encoded)
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
239 for fileid in message_files:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
240 name = files.get(fileid, 'name')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
241 mime_type = files.get(fileid, 'type')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
242 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
243 part = writer.nextpart()
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
244 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
245 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
246 '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
247 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
248 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
249 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
250 else:
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
251 # some other type, so encode it
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
252 if not mime_type:
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
253 # this should have been done when the file was saved
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
254 mime_type = mimetypes.guess_type(name)[0]
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
255 if mime_type is None:
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
256 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
257 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
258 '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
259 part.addheader('Content-Transfer-Encoding', 'base64')
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
260 body = part.startbody(mime_type)
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
261 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
262 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
263 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
264 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
265 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
266 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
267
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
268 # now try to send the message
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
269 if SENDMAILDEBUG:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
270 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
271 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
272 ', '.join(sendto),message.getvalue()))
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
273 else:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
274 try:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
275 # 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
276 # instead of to roundup
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
277 smtp = smtplib.SMTP(self.db.config.MAILHOST)
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
278 smtp.sendmail(self.db.config.ADMIN_EMAIL, sendto,
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
279 message.getvalue())
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
280 except socket.error, value:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
281 raise MessageSendError, \
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
282 "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
283 except smtplib.SMTPException, value:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
284 raise MessageSendError, \
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
285 "Couldn't send confirmation email: %s"%value
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
287 def email_signature(self, nodeid, msgid):
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
288 ''' 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
289 '''
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
290 # 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
291 # 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
292 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
293 if (not isinstance(base , type('')) or
1252
209a47ede743 allow blank passwords again [SF#619714]
Richard Jones <richard@users.sourceforge.net>
parents: 1250
diff changeset
294 not base.startswith('http://') or
1250
deab62016de7 https URLs from config now recognised as valid [SF#619829]
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
295 not 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
296 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
297 "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
298 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
299 base += '/'
1112
70f187da3cf2 remove hard-coded "issue"
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
300 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
301
17208b487199 [SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents: 758
diff changeset
302 # 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
303 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
304 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
305
414
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
306 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
307 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
308
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
309
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
310 def generateCreateNote(self, nodeid):
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
311 """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
312 """
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
313 cn = self.classname
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
314 cl = self.db.classes[cn]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
315 props = cl.getprops(protected=0)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
316
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
317 # list the values
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
318 m = []
559
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
319 l = props.items()
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
320 l.sort()
537
ad6dbc21a570 [SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents: 534
diff changeset
321 for propname, prop in l:
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
322 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
323 # skip boring entries
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
324 if not value:
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
325 continue
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
326 if isinstance(prop, hyperdb.Link):
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
327 link = self.db.classes[prop.classname]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
328 if value:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
329 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
330 if key:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
331 value = link.get(value, key)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
332 else:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
333 value = ''
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
334 elif isinstance(prop, hyperdb.Multilink):
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
335 if value is None: value = []
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
336 l = []
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
337 link = self.db.classes[prop.classname]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
338 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
339 if key:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
340 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
341 value.sort()
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
342 value = ', '.join(value)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
343 m.append('%s: %s'%(propname, value))
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
344 m.insert(0, '----------')
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
345 m.insert(0, '')
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
346 return '\n'.join(m)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
347
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
348 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
349 """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
350 """
772
db5daf396518 Removed temporary workaround.
Derrick Hudson <dman13@users.sourceforge.net>
parents: 770
diff changeset
351 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
352 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
353 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
354 type(oldvalues))
772
db5daf396518 Removed temporary workaround.
Derrick Hudson <dman13@users.sourceforge.net>
parents: 770
diff changeset
355
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
356 cn = self.classname
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
357 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
358 changed = {}
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
359 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
360
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
361 # determine what changed
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
362 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
363 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
364 continue
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1112
diff changeset
365 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
366 continue
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
367 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
368 # 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
369 try:
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
370 old_value = oldvalues[key]
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
371 if type(new_value) is type([]):
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
372 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
373 old_value.sort()
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
374 if new_value != old_value:
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
375 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
376 except:
434
2441743e335b Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 428
diff changeset
377 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
378
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
379 # list the changes
440
de5bf4191f11 Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents: 439
diff changeset
380 m = []
559
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
381 l = changed.items()
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
382 l.sort()
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
383 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
384 prop = props[propname]
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
385 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
386 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
387 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
388 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
389 if key:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
390 if value:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
391 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
392 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
393 value = ''
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
394 if oldvalue:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
395 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
396 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
397 oldvalue = ''
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
398 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
399 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
400 change = ''
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
401 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
402 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
403 l = []
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
404 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
405 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
406 # check for additions
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
407 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
408 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
409 if key:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
410 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
411 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
412 l.append(entry)
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
413 if l:
1095
711f2ecee20f unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
414 l.sort()
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
415 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
416 l = []
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
417 # check for removals
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
418 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
419 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
420 if key:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
421 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
422 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
423 l.append(entry)
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
424 if l:
1095
711f2ecee20f unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
425 l.sort()
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
426 change += ' -%s'%(', '.join(l))
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
427 else:
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
428 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
429 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
430 if m:
442
52b5f53d12f3 fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents: 440
diff changeset
431 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
432 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
433 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
434
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
435 # vim: set filetype=python ts=4 sw=4 et si

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