Mercurial > p > roundup > code
annotate roundup/roundupdb.py @ 460:9c895b44240a
take a copy of the node dict...
so that the subsequent set operation doesn't modify the oldvalues
structure
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Sun, 16 Dec 2001 10:53:38 +0000 |
| parents | fcda73536034 |
| children | b579418f7ed1 |
| 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 # |
|
460
9c895b44240a
take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents:
458
diff
changeset
|
18 # $Id: roundupdb.py,v 1.33 2001-12-16 10:53:37 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 |
|
460
9c895b44240a
take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents:
458
diff
changeset
|
24 import re, os, smtplib, socket, copy |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
25 import mimetools, MimeWriter, cStringIO |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
26 import base64, mimetypes |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
28 import hyperdb, date |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
29 |
|
458
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
30 # set to indicate to roundup not to actually _send_ email |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
31 ROUNDUPDBSENDMAILDEBUG = os.environ.get('ROUNDUPDBSENDMAILDEBUG', '') |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
32 |
|
318
e18dd7227780
Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents:
313
diff
changeset
|
33 class DesignatorError(ValueError): |
|
e18dd7227780
Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents:
313
diff
changeset
|
34 pass |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 def splitDesignator(designator, dre=re.compile(r'([^\d]+)(\d+)')): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 ''' Take a foo123 and return ('foo', 123) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 ''' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 m = dre.match(designator) |
|
318
e18dd7227780
Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents:
313
diff
changeset
|
39 if m is None: |
|
e18dd7227780
Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents:
313
diff
changeset
|
40 raise DesignatorError, '"%s" not a node designator'%designator |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 return m.group(1), m.group(2) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
43 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 class Database: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 def getuid(self): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 """Return the id of the "user" node associated with the user |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 that owns this connection to the hyperdatabase.""" |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 return self.user.lookup(self.journaltag) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 |
|
262
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
50 def uidFromAddress(self, address, create=1): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 ''' address is from the rfc822 module, and therefore is (name, addr) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 user is created if they don't exist in the db already |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 ''' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 (realname, address) = address |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 users = self.user.stringFind(address=address) |
| 337 | 57 for dummy in range(2): |
| 58 if len(users) > 1: | |
| 59 # make sure we don't match the anonymous or admin user | |
| 60 for user in users: | |
| 61 if user == '1': continue | |
| 62 if self.user.get(user, 'username') == 'anonymous': continue | |
| 63 # first valid match will do | |
| 64 return user | |
| 65 # well, I guess we have no choice | |
| 66 return user[0] | |
| 67 elif users: | |
| 68 return users[0] | |
| 69 # try to match the username to the address (for local | |
| 70 # submissions where the address is empty) | |
| 71 users = self.user.stringFind(username=address) | |
| 72 | |
| 73 # couldn't match address or username, so create a new user | |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 return self.user.create(username=address, address=address, |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 realname=realname) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 |
|
156
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
77 _marker = [] |
|
44
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
78 # XXX: added the 'creator' faked attribute |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 class Class(hyperdb.Class): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 # Overridden methods: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 def __init__(self, db, classname, **properties): |
|
313
489b70c37f32
feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents:
308
diff
changeset
|
82 if (properties.has_key('creation') or properties.has_key('activity') |
|
489b70c37f32
feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents:
308
diff
changeset
|
83 or properties.has_key('creator')): |
|
489b70c37f32
feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents:
308
diff
changeset
|
84 raise ValueError, '"creation", "activity" and "creator" are reserved' |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 hyperdb.Class.__init__(self, db, classname, **properties) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 self.auditors = {'create': [], 'set': [], 'retire': []} |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 self.reactors = {'create': [], 'set': [], 'retire': []} |
|
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 def create(self, **propvalues): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 """These operations trigger detectors and can be vetoed. Attempts |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 to modify the "creation" or "activity" properties cause a KeyError. |
|
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 if propvalues.has_key('creation') or propvalues.has_key('activity'): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 raise KeyError, '"creation" and "activity" are reserved' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 for audit in self.auditors['create']: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 audit(self.db, self, None, propvalues) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 nodeid = hyperdb.Class.create(self, **propvalues) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 for react in self.reactors['create']: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
99 react(self.db, self, nodeid, None) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
100 return nodeid |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
101 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
102 def set(self, nodeid, **propvalues): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 """These operations trigger detectors and can be vetoed. Attempts |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 to modify the "creation" or "activity" properties cause a KeyError. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 if propvalues.has_key('creation') or propvalues.has_key('activity'): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
107 raise KeyError, '"creation" and "activity" are reserved' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 for audit in self.auditors['set']: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 audit(self.db, self, nodeid, propvalues) |
|
460
9c895b44240a
take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents:
458
diff
changeset
|
110 # take a copy of the node dict so that the subsequent set |
|
9c895b44240a
take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents:
458
diff
changeset
|
111 # operation doesn't modify the oldvalues structure |
|
9c895b44240a
take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents:
458
diff
changeset
|
112 oldvalues = copy.deepcopy(self.db.getnode(self.classname, nodeid)) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 hyperdb.Class.set(self, nodeid, **propvalues) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 for react in self.reactors['set']: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 react(self.db, self, nodeid, oldvalues) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 def retire(self, nodeid): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 """These operations trigger detectors and can be vetoed. Attempts |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 to modify the "creation" or "activity" properties cause a KeyError. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
121 for audit in self.auditors['retire']: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 audit(self.db, self, nodeid, None) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 hyperdb.Class.retire(self, nodeid) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
124 for react in self.reactors['retire']: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
125 react(self.db, self, nodeid, None) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 |
|
156
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
127 def get(self, nodeid, propname, default=_marker): |
|
44
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
128 """Attempts to get the "creation" or "activity" properties should |
|
156
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
129 do the right thing. |
|
44
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
130 """ |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
131 if propname == 'creation': |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
132 journal = self.db.getjournal(self.classname, nodeid) |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
133 if journal: |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
134 return self.db.getjournal(self.classname, nodeid)[0][1] |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
135 else: |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
136 # on the strange chance that there's no journal |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
137 return date.Date() |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
138 if propname == 'activity': |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
139 journal = self.db.getjournal(self.classname, nodeid) |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
140 if journal: |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
141 return self.db.getjournal(self.classname, nodeid)[-1][1] |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
142 else: |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
143 # on the strange chance that there's no journal |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
144 return date.Date() |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
145 if propname == 'creator': |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
146 journal = self.db.getjournal(self.classname, nodeid) |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
147 if journal: |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
148 name = self.db.getjournal(self.classname, nodeid)[0][2] |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
149 else: |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
150 return None |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
151 return self.db.user.lookup(name) |
|
156
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
152 if default is not _marker: |
|
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
153 return hyperdb.Class.get(self, nodeid, propname, default) |
|
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
154 else: |
|
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
155 return hyperdb.Class.get(self, nodeid, propname) |
|
44
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
156 |
|
262
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
157 def getprops(self, protected=1): |
|
44
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
158 """In addition to the actual properties on the node, these |
|
262
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
159 methods provide the "creation" and "activity" properties. If the |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
160 "protected" flag is true, we include protected properties - those |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
161 which may not be modified. |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
162 """ |
|
263
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
163 d = hyperdb.Class.getprops(self, protected=protected).copy() |
|
262
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
164 if protected: |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
165 d['creation'] = hyperdb.Date() |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
166 d['activity'] = hyperdb.Date() |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
167 d['creator'] = hyperdb.Link("user") |
|
44
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
168 return d |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
169 |
|
118
a55c1301ba1f
Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents:
44
diff
changeset
|
170 # |
|
a55c1301ba1f
Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents:
44
diff
changeset
|
171 # Detector interface |
|
a55c1301ba1f
Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents:
44
diff
changeset
|
172 # |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
173 def audit(self, event, detector): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
174 """Register a detector |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
175 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
176 self.auditors[event].append(detector) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
177 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
178 def react(self, event, detector): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
179 """Register a detector |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
180 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
181 self.reactors[event].append(detector) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
182 |
|
118
a55c1301ba1f
Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents:
44
diff
changeset
|
183 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
184 class FileClass(Class): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
185 def create(self, **propvalues): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
186 ''' snaffle the file propvalue and store in a file |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
187 ''' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
188 content = propvalues['content'] |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
189 del propvalues['content'] |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
190 newid = Class.create(self, **propvalues) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
191 self.setcontent(self.classname, newid, content) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
192 return newid |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
193 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
194 def filename(self, classname, nodeid): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
195 # TODO: split into multiple files directories |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
196 return os.path.join(self.db.dir, 'files', '%s%s'%(classname, nodeid)) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
197 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
198 def setcontent(self, classname, nodeid, content): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
199 ''' set the content file for this file |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
200 ''' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
201 open(self.filename(classname, nodeid), 'wb').write(content) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
202 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
203 def getcontent(self, classname, nodeid): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
204 ''' get the content file for this file |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
205 ''' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
206 return open(self.filename(classname, nodeid), 'rb').read() |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
207 |
|
156
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
208 def get(self, nodeid, propname, default=_marker): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
209 ''' trap the content propname and get it from the file |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
210 ''' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
211 if propname == 'content': |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
212 return self.getcontent(self.classname, nodeid) |
|
156
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
213 if default is not _marker: |
|
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
214 return Class.get(self, nodeid, propname, default) |
|
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
215 else: |
|
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
216 return Class.get(self, nodeid, propname) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
217 |
|
262
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
218 def getprops(self, protected=1): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
219 ''' In addition to the actual properties on the node, these methods |
|
262
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
220 provide the "content" property. If the "protected" flag is true, |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
221 we include protected properties - those which may not be |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
222 modified. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
223 ''' |
|
263
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
224 d = Class.getprops(self, protected=protected).copy() |
|
262
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
225 if protected: |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
226 d['content'] = hyperdb.String() |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
227 return d |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
228 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
229 class MessageSendError(RuntimeError): |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
230 pass |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
231 |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
232 class DetectorError(RuntimeError): |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
233 pass |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
234 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
235 # XXX deviation from spec - was called ItemClass |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
236 class IssueClass(Class): |
| 337 | 237 # configuration |
| 238 MESSAGES_TO_AUTHOR = 'no' | |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
239 INSTANCE_NAME = 'Roundup issue tracker' |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
240 EMAIL_SIGNATURE_POSITION = 'bottom' |
| 337 | 241 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
242 # Overridden methods: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
243 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
244 def __init__(self, db, classname, **properties): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
245 """The newly-created class automatically includes the "messages", |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
246 "files", "nosy", and "superseder" properties. If the 'properties' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
247 dictionary attempts to specify any of these properties or a |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
248 "creation" or "activity" property, a ValueError is raised.""" |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
249 if not properties.has_key('title'): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
250 properties['title'] = hyperdb.String() |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
251 if not properties.has_key('messages'): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
252 properties['messages'] = hyperdb.Multilink("msg") |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
253 if not properties.has_key('files'): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
254 properties['files'] = hyperdb.Multilink("file") |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
255 if not properties.has_key('nosy'): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
256 properties['nosy'] = hyperdb.Multilink("user") |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
257 if not properties.has_key('superseder'): |
|
138
e012bb958238
Fixed IssueClass so that superseders links to its classname...
Richard Jones <richard@users.sourceforge.net>
parents:
127
diff
changeset
|
258 properties['superseder'] = hyperdb.Multilink(classname) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
259 Class.__init__(self, db, classname, **properties) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
260 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
261 # New methods: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
262 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
263 def addmessage(self, nodeid, summary, text): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
264 """Add a message to an issue's mail spool. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
265 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
266 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
|
267 owns the database connection as the author, and the specified summary |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
268 text. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
269 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
270 The "files" and "recipients" fields are left empty. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
271 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
272 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
|
273 appended to the "messages" field of the specified issue. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
274 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
275 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
276 def sendmessage(self, nodeid, msgid, change_note): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
277 """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
|
278 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
279 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
|
280 already on the "recipients" list for the message. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
281 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
282 These users are then added to the message's "recipients" list. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
283 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
284 # figure the recipient ids |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
285 recipients = self.db.msg.get(msgid, 'recipients') |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
286 r = {} |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
287 for recipid in recipients: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
288 r[recipid] = 1 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
289 rlen = len(recipients) |
| 337 | 290 |
| 291 # figure the author's id, and indicate they've received the message | |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
292 authid = self.db.msg.get(msgid, 'author') |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
293 |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
294 # get the current nosy list, we'll need it |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
295 nosy = self.get(nodeid, 'nosy') |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
296 |
| 337 | 297 # ... but duplicate the message to the author as long as it's not |
| 298 # the anonymous user | |
| 299 if (self.MESSAGES_TO_AUTHOR == 'yes' and | |
| 300 self.db.user.get(authid, 'username') != 'anonymous'): | |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
301 if not r.has_key(authid): |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
302 recipients.append(authid) |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
303 r[authid] = 1 |
| 337 | 304 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
305 # now figure the nosy people who weren't recipients |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
306 for nosyid in nosy: |
| 337 | 307 # Don't send nosy mail to the anonymous user (that user |
| 308 # shouldn't appear in the nosy list, but just in case they | |
| 309 # do...) | |
| 310 if self.db.user.get(nosyid, 'username') == 'anonymous': continue | |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
311 if not r.has_key(nosyid): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
312 recipients.append(nosyid) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
313 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
314 # no new recipients |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
315 if rlen == len(recipients): |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
316 return |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
317 |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
318 # update the message's recipients list |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
319 self.db.msg.set(msgid, recipients=recipients) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
320 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
321 # 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
|
322 sendto = [self.db.user.get(i, 'address') for i in recipients] |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
323 cn = self.classname |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
324 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
|
325 # figure author information |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
326 authname = self.db.user.get(authid, 'realname') |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
327 if not authname: |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
328 authname = self.db.user.get(authid, 'username') |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
329 authaddr = self.db.user.get(authid, 'address') |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
330 if authaddr: |
| 416 | 331 authaddr = ' <%s>'%authaddr |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
332 else: |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
333 authaddr = '' |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
334 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
335 # make the message body |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
336 m = [''] |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
337 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
338 # put in roundup's signature |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
339 if self.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
|
340 m.append(self.email_signature(nodeid, msgid)) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
341 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
342 # 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
|
343 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
|
344 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
|
345 else: |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
346 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
|
347 m.append('') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
348 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
349 # add the content |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
350 m.append(self.db.msg.get(msgid, 'content')) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
351 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
352 # add the change note |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
353 if change_note: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
354 m.append(change_note) |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
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 # put in roundup's signature |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
357 if self.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
|
358 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
|
359 |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
360 # get the files for this message |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
361 files = self.db.msg.get(msgid, 'files') |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
362 |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
363 # 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
|
364 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
|
365 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
|
366 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
|
367 writer.addheader('To', ', '.join(sendto)) |
|
445
208697858c8b
Message author's name appears in From: instead of roundup instance name
Richard Jones <richard@users.sourceforge.net>
parents:
442
diff
changeset
|
368 writer.addheader('From', '%s <%s>'%(authname, self.ISSUE_TRACKER_EMAIL)) |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
369 writer.addheader('Reply-To', '%s <%s>'%(self.INSTANCE_NAME, |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
370 self.ISSUE_TRACKER_EMAIL)) |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
371 writer.addheader('MIME-Version', '1.0') |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
372 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
373 # attach 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
|
374 if files: |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
375 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
|
376 part = writer.nextpart() |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
377 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
|
378 body.write('\n'.join(m)) |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
379 for fileid in files: |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
380 name = self.db.file.get(fileid, 'name') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
381 mime_type = self.db.file.get(fileid, 'type') |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
382 content = self.db.file.get(fileid, 'content') |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
383 part = writer.nextpart() |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
384 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
|
385 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
|
386 '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
|
387 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
|
388 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
|
389 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
|
390 else: |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
391 # some other type, so encode it |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
392 if not mime_type: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
393 # this should have been done when the file was saved |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
394 mime_type = mimetypes.guess_type(name)[0] |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
395 if mime_type is None: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
396 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
|
397 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
|
398 '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
|
399 part.addheader('Content-Transfer-Encoding', 'base64') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
400 body = part.startbody(mime_type) |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
401 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
|
402 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
|
403 else: |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
404 body = writer.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
|
405 body.write('\n'.join(m)) |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
406 |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
407 # now try to send the message |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
408 try: |
|
458
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
409 if ROUNDUPDBSENDMAILDEBUG: |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
410 print 'From: %s\nTo: %s\n%s\n=-=-=-=-=-=-=-='%( |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
411 self.ADMIN_EMAIL, sendto, message.getvalue()) |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
412 else: |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
413 smtp = smtplib.SMTP(self.MAILHOST) |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
414 # send the message as admin so bounces are sent there instead |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
415 # of to roundup |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
416 smtp.sendmail(self.ADMIN_EMAIL, sendto, message.getvalue()) |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
417 except socket.error, value: |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
418 raise MessageSendError, \ |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
419 "Couldn't send confirmation email: mailhost %s"%value |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
420 except smtplib.SMTPException, value: |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
421 raise MessageSendError, \ |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
422 "Couldn't send confirmation email: %s"%value |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
423 |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
424 def email_signature(self, nodeid, msgid): |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
425 ''' 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
|
426 ''' |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
427 web = self.ISSUE_TRACKER_WEB + 'issue'+ nodeid |
|
414
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
428 email = '"%s" <%s>'%(self.INSTANCE_NAME, self.ISSUE_TRACKER_EMAIL) |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
429 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
|
430 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
|
431 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
432 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
|
433 """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
|
434 """ |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
435 cn = self.classname |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
436 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
|
437 changed = {} |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
438 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
|
439 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
440 # determine what changed |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
441 for key in oldvalues.keys(): |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
442 if key in ['files','messages']: continue |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
443 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
|
444 # 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
|
445 try: |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
446 old_value = oldvalues[key] |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
447 if type(new_value) is type([]): |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
448 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
|
449 old_value.sort() |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
450 if new_value != old_value: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
451 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
|
452 except: |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
453 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
|
454 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
455 # list the changes |
|
440
de5bf4191f11
Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents:
439
diff
changeset
|
456 m = [] |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
457 for propname, oldvalue in changed.items(): |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
458 prop = cl.properties[propname] |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
459 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
|
460 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
|
461 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
|
462 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
|
463 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
464 if value: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
465 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
|
466 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
467 value = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
468 if oldvalue: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
469 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
|
470 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
471 oldvalue = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
472 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
|
473 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
|
474 change = '' |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
475 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
|
476 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
|
477 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
478 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
|
479 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
|
480 # check for additions |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
481 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
|
482 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
|
483 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
484 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
|
485 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
486 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
487 if l: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
488 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
|
489 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
490 # check for removals |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
491 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
|
492 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
|
493 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
494 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
|
495 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
496 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
497 if l: |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
498 change += ' -%s'%(', '.join(l)) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
499 else: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
500 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
|
501 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
|
502 if m: |
|
442
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
503 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
|
504 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
|
505 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
|
506 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
507 # |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
508 # $Log: not supported by cvs2svn $ |
|
460
9c895b44240a
take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents:
458
diff
changeset
|
509 # Revision 1.32 2001/12/15 23:48:35 richard |
|
9c895b44240a
take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents:
458
diff
changeset
|
510 # Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method without |
|
9c895b44240a
take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents:
458
diff
changeset
|
511 # actually sending mail :) |
|
9c895b44240a
take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents:
458
diff
changeset
|
512 # |
|
458
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
513 # Revision 1.31 2001/12/15 19:24:39 rochecompaan |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
514 # . Modified cgi interface to change properties only once all changes are |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
515 # collected, files created and messages generated. |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
516 # . Moved generation of change note to nosyreactors. |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
517 # . We now check for changes to "assignedto" to ensure it's added to the |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
518 # nosy list. |
|
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
519 # |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
520 # Revision 1.30 2001/12/12 21:47:45 richard |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
521 # . Message author's name appears in From: instead of roundup instance name |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
522 # (which still appears in the Reply-To:) |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
523 # . envelope-from is now set to the roundup-admin and not roundup itself so |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
524 # delivery reports aren't sent to roundup (thanks Patrick Ohly) |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
525 # |
|
445
208697858c8b
Message author's name appears in From: instead of roundup instance name
Richard Jones <richard@users.sourceforge.net>
parents:
442
diff
changeset
|
526 # Revision 1.29 2001/12/11 04:50:49 richard |
|
208697858c8b
Message author's name appears in From: instead of roundup instance name
Richard Jones <richard@users.sourceforge.net>
parents:
442
diff
changeset
|
527 # fixed the order of the blank line and '-------' line |
|
208697858c8b
Message author's name appears in From: instead of roundup instance name
Richard Jones <richard@users.sourceforge.net>
parents:
442
diff
changeset
|
528 # |
|
442
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
529 # Revision 1.28 2001/12/10 22:20:01 richard |
|
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
530 # Enabled transaction support in the bsddb backend. It uses the anydbm code |
|
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
531 # where possible, only replacing methods where the db is opened (it uses the |
|
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
532 # btree opener specifically.) |
|
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
533 # Also cleaned up some change note generation. |
|
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
534 # Made the backends package work with pydoc too. |
|
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
535 # |
|
440
de5bf4191f11
Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents:
439
diff
changeset
|
536 # Revision 1.27 2001/12/10 21:02:53 richard |
|
de5bf4191f11
Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents:
439
diff
changeset
|
537 # only insert the -------- change note marker if there is a change note |
|
de5bf4191f11
Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents:
439
diff
changeset
|
538 # |
|
439
6e27cb83aacb
only insert the -------- change note marker if there is a change note
Richard Jones <richard@users.sourceforge.net>
parents:
434
diff
changeset
|
539 # Revision 1.26 2001/12/05 14:26:44 rochecompaan |
|
6e27cb83aacb
only insert the -------- change note marker if there is a change note
Richard Jones <richard@users.sourceforge.net>
parents:
434
diff
changeset
|
540 # Removed generation of change note from "sendmessage" in roundupdb.py. |
|
6e27cb83aacb
only insert the -------- change note marker if there is a change note
Richard Jones <richard@users.sourceforge.net>
parents:
434
diff
changeset
|
541 # The change note is now generated when the message is created. |
|
6e27cb83aacb
only insert the -------- change note marker if there is a change note
Richard Jones <richard@users.sourceforge.net>
parents:
434
diff
changeset
|
542 # |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
543 # Revision 1.25 2001/11/30 20:28:10 rochecompaan |
|
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
544 # Property changes are now completely traceable, whether changes are |
|
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
545 # made through the web or by email |
|
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
546 # |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
547 # Revision 1.24 2001/11/30 11:29:04 rochecompaan |
|
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
548 # Property changes are now listed in emails generated by Roundup |
|
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
549 # |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
550 # Revision 1.23 2001/11/27 03:17:13 richard |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
551 # oops |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
552 # |
| 416 | 553 # Revision 1.22 2001/11/27 03:00:50 richard |
| 554 # couple of bugfixes from latest patch integration | |
| 555 # | |
|
414
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
556 # Revision 1.21 2001/11/26 22:55:56 richard |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
557 # Feature: |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
558 # . Added INSTANCE_NAME to configuration - used in web and email to identify |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
559 # the instance. |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
560 # . Added EMAIL_SIGNATURE_POSITION to indicate where to place the roundup |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
561 # signature info in e-mails. |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
562 # . Some more flexibility in the mail gateway and more error handling. |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
563 # . Login now takes you to the page you back to the were denied access to. |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
564 # |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
565 # Fixed: |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
566 # . Lots of bugs, thanks Roché and others on the devel mailing list! |
|
fc6d03e9dbc1
couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents:
411
diff
changeset
|
567 # |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
568 # Revision 1.20 2001/11/25 10:11:14 jhermann |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
569 # Typo fix |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
570 # |
| 410 | 571 # Revision 1.19 2001/11/22 15:46:42 jhermann |
| 572 # Added module docstrings to all modules. | |
| 573 # | |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
574 # Revision 1.18 2001/11/15 10:36:17 richard |
|
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
575 # . incorporated patch from Roch'e Compaan implementing attachments in nosy |
|
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
576 # e-mail |
|
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
577 # |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
578 # Revision 1.17 2001/11/12 22:01:06 richard |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
579 # Fixed issues with nosy reaction and author copies. |
|
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
580 # |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
581 # Revision 1.16 2001/10/30 00:54:45 richard |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
582 # Features: |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
583 # . #467129 ] Lossage when username=e-mail-address |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
584 # . #473123 ] Change message generation for author |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
585 # . MailGW now moves 'resolved' to 'chatting' on receiving e-mail for an issue. |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
586 # |
| 337 | 587 # Revision 1.15 2001/10/23 01:00:18 richard |
| 588 # Re-enabled login and registration access after lopping them off via | |
| 589 # disabling access for anonymous users. | |
| 590 # Major re-org of the htmltemplate code, cleaning it up significantly. Fixed | |
| 591 # a couple of bugs while I was there. Probably introduced a couple, but | |
| 592 # things seem to work OK at the moment. | |
| 593 # | |
|
318
e18dd7227780
Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents:
313
diff
changeset
|
594 # Revision 1.14 2001/10/21 07:26:35 richard |
|
e18dd7227780
Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents:
313
diff
changeset
|
595 # feature #473127: Filenames. I modified the file.index and htmltemplate |
|
e18dd7227780
Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents:
313
diff
changeset
|
596 # source so that the filename is used in the link and the creation |
|
e18dd7227780
Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents:
313
diff
changeset
|
597 # information is displayed. |
|
e18dd7227780
Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents:
313
diff
changeset
|
598 # |
|
313
489b70c37f32
feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents:
308
diff
changeset
|
599 # Revision 1.13 2001/10/21 00:45:15 richard |
|
489b70c37f32
feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents:
308
diff
changeset
|
600 # Added author identification to e-mail messages from roundup. |
|
489b70c37f32
feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents:
308
diff
changeset
|
601 # |
|
308
e32af1eff4ea
Added author identification to e-mail messages from roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
263
diff
changeset
|
602 # Revision 1.12 2001/10/04 02:16:15 richard |
|
e32af1eff4ea
Added author identification to e-mail messages from roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
263
diff
changeset
|
603 # Forgot to pass the protected flag down *sigh*. |
|
e32af1eff4ea
Added author identification to e-mail messages from roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
263
diff
changeset
|
604 # |
|
263
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
605 # Revision 1.11 2001/10/04 02:12:42 richard |
|
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
606 # Added nicer command-line item adding: passing no arguments will enter an |
|
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
607 # interactive more which asks for each property in turn. While I was at it, I |
|
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
608 # fixed an implementation problem WRT the spec - I wasn't raising a |
|
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
609 # ValueError if the key property was missing from a create(). Also added a |
|
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
610 # protected=boolean argument to getprops() so we can list only the mutable |
|
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
611 # properties (defaults to yes, which lists the immutables). |
|
e13d55912cd4
Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents:
262
diff
changeset
|
612 # |
|
262
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
613 # Revision 1.10 2001/08/07 00:24:42 richard |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
614 # stupid typo |
|
ab921dc53ccd
Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
615 # |
| 214 | 616 # Revision 1.9 2001/08/07 00:15:51 richard |
| 617 # Added the copyright/license notice to (nearly) all files at request of | |
| 618 # Bizar Software. | |
| 619 # | |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
620 # Revision 1.8 2001/08/02 06:38:17 richard |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
621 # Roundupdb now appends "mailing list" information to its messages which |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
622 # include the e-mail address and web interface address. Templates may |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
623 # override this in their db classes to include specific information (support |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
624 # instructions, etc). |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
625 # |
|
188
1536be43d2fa
Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents:
156
diff
changeset
|
626 # Revision 1.7 2001/07/30 02:38:31 richard |
|
1536be43d2fa
Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents:
156
diff
changeset
|
627 # get() now has a default arg - for migration only. |
|
1536be43d2fa
Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents:
156
diff
changeset
|
628 # |
|
156
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
629 # Revision 1.6 2001/07/30 00:05:54 richard |
|
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
630 # Fixed IssueClass so that superseders links to its classname rather than |
|
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
631 # hard-coded to "issue". |
|
9c5ddad06430
get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents:
138
diff
changeset
|
632 # |
|
138
e012bb958238
Fixed IssueClass so that superseders links to its classname...
Richard Jones <richard@users.sourceforge.net>
parents:
127
diff
changeset
|
633 # Revision 1.5 2001/07/29 07:01:39 richard |
|
e012bb958238
Fixed IssueClass so that superseders links to its classname...
Richard Jones <richard@users.sourceforge.net>
parents:
127
diff
changeset
|
634 # Added vim command to all source so that we don't get no steenkin' tabs :) |
|
e012bb958238
Fixed IssueClass so that superseders links to its classname...
Richard Jones <richard@users.sourceforge.net>
parents:
127
diff
changeset
|
635 # |
|
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
|
636 # Revision 1.4 2001/07/29 04:05:37 richard |
|
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
|
637 # Added the fabricated property "id". |
|
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
|
638 # |
|
118
a55c1301ba1f
Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents:
44
diff
changeset
|
639 # Revision 1.3 2001/07/23 07:14:41 richard |
|
a55c1301ba1f
Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents:
44
diff
changeset
|
640 # Moved the database backends off into backends. |
|
a55c1301ba1f
Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents:
44
diff
changeset
|
641 # |
|
44
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
642 # Revision 1.2 2001/07/22 12:09:32 richard |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
643 # Final commit of Grande Splite |
|
c1f3e058c58d
Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents:
26
diff
changeset
|
644 # |
|
26
c7c14960f413
Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
25
diff
changeset
|
645 # Revision 1.1 2001/07/22 11:58:35 richard |
|
c7c14960f413
Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
25
diff
changeset
|
646 # More Grande Splite |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
647 # |
|
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
|
648 # |
|
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
|
649 # vim: set filetype=python ts=4 sw=4 et si |
