annotate roundup/roundupdb.py @ 635:3d61b5d2243e

Added popup help for classes using the classhelp html template function. - add <display call="classhelp('priority', 'id,name,description')"> to an item page, and it generates a link to a popup window which displays the id, name and description for the priority class. The description field won't exist in most installations, but it will be added to the default templates.
author Richard Jones <richard@users.sourceforge.net>
date Thu, 21 Feb 2002 06:57:39 +0000
parents 993e0162b7c2
children 086f67453062
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
1 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
3 # This module is free software, and you may redistribute it and/or modify
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
4 # under the same terms as Python, so long as this copyright message and
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
5 # disclaimer are retained in their original form.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
6 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
10 # POSSIBILITY OF SUCH DAMAGE.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
11 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
17 #
631
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
18 # $Id: roundupdb.py,v 1.45 2002-02-20 15:48:45 grubert 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
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
24 import re, os, smtplib, socket, copy, time, random
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
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
31 # this var must contain a file to write the mail to
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
32 SENDMAILDEBUG = os.environ.get('SENDMAILDEBUG', '')
458
fcda73536034 Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents: 453
diff changeset
33
318
e18dd7227780 Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents: 313
diff changeset
34 class DesignatorError(ValueError):
e18dd7227780 Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents: 313
diff changeset
35 pass
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 def splitDesignator(designator, dre=re.compile(r'([^\d]+)(\d+)')):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 ''' Take a foo123 and return ('foo', 123)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 m = dre.match(designator)
318
e18dd7227780 Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents: 313
diff changeset
40 if m is None:
e18dd7227780 Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents: 313
diff changeset
41 raise DesignatorError, '"%s" not a node designator'%designator
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 return m.group(1), m.group(2)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
44
617
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
45 def extractUserFromList(users):
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
46 '''Given a list of users, try to extract the first non-anonymous user
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
47 and return that user, otherwise return None
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
48 '''
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
49 if len(users) > 1:
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
50 # make sure we don't match the anonymous or admin user
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
51 for user in users:
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
52 if user == '1': continue
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
53 if self.user.get(user, 'username') == 'anonymous': continue
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
54 # first valid match will do
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
55 return user
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
56 # well, I guess we have no choice
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
57 return user[0]
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
58 elif users:
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
59 return users[0]
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
60 return None
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
61
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 class Database:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 def getuid(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 """Return the id of the "user" node associated with the user
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 that owns this connection to the hyperdatabase."""
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 return self.user.lookup(self.journaltag)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
68 def uidFromAddress(self, address, create=1):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 ''' address is from the rfc822 module, and therefore is (name, addr)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 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
72 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 (realname, address) = address
617
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
74
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
75 # try a straight match of the address
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
76 user = extractUserFromList(self.user.stringFind(address=address))
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
77 if user is not None: return user
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
78
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
79 # try the user alternate addresses if possible
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
80 props = self.user.getprops()
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
81 if props.has_key('alternate_addresses'):
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
82 users = self.user.filter({'alternate_addresses': address},
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
83 [], [])
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
84 user = extractUserFromList(users)
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
85 if user is not None: return user
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
86
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
87 # try to match the username to the address (for local
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
88 # submissions where the address is empty)
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
89 user = extractUserFromList(self.user.stringFind(username=address))
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
90
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
91 # couldn't match address or username, so create a new user
467
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
92 if create:
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
93 return self.user.create(username=address, address=address,
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
94 realname=realname)
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
95 else:
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
96 return 0
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
98 _marker = []
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
99 # XXX: added the 'creator' faked attribute
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 class Class(hyperdb.Class):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 # Overridden methods:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 def __init__(self, db, classname, **properties):
313
489b70c37f32 feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents: 308
diff changeset
103 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
104 or properties.has_key('creator')):
489b70c37f32 feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents: 308
diff changeset
105 raise ValueError, '"creation", "activity" and "creator" are reserved'
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 hyperdb.Class.__init__(self, db, classname, **properties)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 self.auditors = {'create': [], 'set': [], 'retire': []}
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 self.reactors = {'create': [], 'set': [], 'retire': []}
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 def create(self, **propvalues):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 """These operations trigger detectors and can be vetoed. Attempts
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 to modify the "creation" or "activity" properties cause a KeyError.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 if propvalues.has_key('creation') or propvalues.has_key('activity'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 raise KeyError, '"creation" and "activity" are reserved'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 for audit in self.auditors['create']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 audit(self.db, self, None, propvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 nodeid = hyperdb.Class.create(self, **propvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 for react in self.reactors['create']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 react(self.db, self, nodeid, None)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 return nodeid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 def set(self, nodeid, **propvalues):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 """These operations trigger detectors and can be vetoed. Attempts
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 to modify the "creation" or "activity" properties cause a KeyError.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 if propvalues.has_key('creation') or propvalues.has_key('activity'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 raise KeyError, '"creation" and "activity" are reserved'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 for audit in self.auditors['set']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 audit(self.db, self, nodeid, propvalues)
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
131 # Take a copy of the node dict so that the subsequent set
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
132 # operation doesn't modify the oldvalues structure.
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
133 try:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
134 # try not using the cache initially
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
135 oldvalues = copy.deepcopy(self.db.getnode(self.classname, nodeid,
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
136 cache=0))
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
137 except IndexError:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
138 # this will be needed if somone does a create() and set()
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
139 # with no intervening commit()
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
140 oldvalues = copy.deepcopy(self.db.getnode(self.classname, nodeid))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 hyperdb.Class.set(self, nodeid, **propvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 for react in self.reactors['set']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 react(self.db, self, nodeid, oldvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 def retire(self, nodeid):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 """These operations trigger detectors and can be vetoed. Attempts
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 to modify the "creation" or "activity" properties cause a KeyError.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 for audit in self.auditors['retire']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 audit(self.db, self, nodeid, None)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 hyperdb.Class.retire(self, nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 for react in self.reactors['retire']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 react(self.db, self, nodeid, None)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
155 def get(self, nodeid, propname, default=_marker, cache=1):
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
156 """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
157 do the right thing.
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
158 """
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
159 if propname == 'creation':
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
160 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
161 if journal:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
162 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
163 else:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
164 # 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
165 return date.Date()
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
166 if propname == 'activity':
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
167 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
168 if journal:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
169 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
170 else:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
171 # 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
172 return date.Date()
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
173 if propname == 'creator':
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
174 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
175 if journal:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
176 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
177 else:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
178 return None
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
179 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
180 if default is not _marker:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
181 return hyperdb.Class.get(self, nodeid, propname, default,
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
182 cache=cache)
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
183 else:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
184 return hyperdb.Class.get(self, nodeid, propname, cache=cache)
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
185
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
186 def getprops(self, protected=1):
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
187 """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
188 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
189 "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
190 which may not be modified.
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
191 """
263
e13d55912cd4 Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
192 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
193 if protected:
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
194 d['creation'] = hyperdb.Date()
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
195 d['activity'] = hyperdb.Date()
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
196 d['creator'] = hyperdb.Link("user")
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
197 return d
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
198
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
199 #
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
200 # Detector interface
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
201 #
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202 def audit(self, event, detector):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 """Register a detector
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204 """
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
205 l = self.auditors[event]
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
206 if detector not in l:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
207 self.auditors[event].append(detector)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209 def react(self, event, detector):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210 """Register a detector
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211 """
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
212 l = self.reactors[event]
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
213 if detector not in l:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
214 self.reactors[event].append(detector)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
216
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
217 class FileClass(Class):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
218 def create(self, **propvalues):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 ''' snaffle the file propvalue and store in a file
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221 content = propvalues['content']
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
222 del propvalues['content']
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
223 newid = Class.create(self, **propvalues)
461
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 460
diff changeset
224 self.db.storefile(self.classname, newid, None, content)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
225 return newid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
226
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
227 def get(self, nodeid, propname, default=_marker, cache=1):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
228 ''' trap the content propname and get it from the file
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
229 '''
631
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
230
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
231 poss_msg = 'Possibly a access right configuration problem.'
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
232 if propname == 'content':
631
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
233 try:
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
234 return self.db.getfile(self.classname, nodeid, None)
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
235 except:
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
236 # BUG: by catching this we donot see an error in the log.
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
237 return 'ERROR reading file: %s%s\n%s'%(
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
238 self.classname, nodeid, poss_msg)
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
239 if default is not _marker:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
240 return Class.get(self, nodeid, propname, default, cache=cache)
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
241 else:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
242 return Class.get(self, nodeid, propname, cache=cache)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
244 def getprops(self, protected=1):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245 ''' 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
246 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
247 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
248 modified.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249 '''
263
e13d55912cd4 Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
250 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
251 if protected:
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
252 d['content'] = hyperdb.String()
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
253 return d
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
254
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
255 class MessageSendError(RuntimeError):
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
256 pass
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
257
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
258 class DetectorError(RuntimeError):
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
259 pass
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
260
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261 # XXX deviation from spec - was called ItemClass
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262 class IssueClass(Class):
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
263
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
264 # Overridden methods:
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 def __init__(self, db, classname, **properties):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
267 """The newly-created class automatically includes the "messages",
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
268 "files", "nosy", and "superseder" properties. If the 'properties'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269 dictionary attempts to specify any of these properties or a
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
270 "creation" or "activity" property, a ValueError is raised."""
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
271 if not properties.has_key('title'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
272 properties['title'] = hyperdb.String()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
273 if not properties.has_key('messages'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
274 properties['messages'] = hyperdb.Multilink("msg")
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
275 if not properties.has_key('files'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
276 properties['files'] = hyperdb.Multilink("file")
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
277 if not properties.has_key('nosy'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
278 properties['nosy'] = hyperdb.Multilink("user")
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279 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
280 properties['superseder'] = hyperdb.Multilink(classname)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
281 Class.__init__(self, db, classname, **properties)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
282
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
283 # New methods:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
284
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
285 def addmessage(self, nodeid, summary, text):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286 """Add a message to an issue's mail spool.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
287
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
288 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
289 owns the database connection as the author, and the specified summary
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
290 text.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
291
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
292 The "files" and "recipients" fields are left empty.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
293
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
294 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
295 appended to the "messages" field of the specified issue.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
296 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
297
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
298 def sendmessage(self, nodeid, msgid, change_note):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
299 """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
300
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
301 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
302 already on the "recipients" list for the message.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
303
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
304 These users are then added to the message's "recipients" list.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
305 """
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
306 users = self.db.user
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
307 messages = self.db.msg
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
308 files = self.db.file
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
309
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
310 # figure the recipient ids
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
311 sendto = []
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
312 r = {}
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
313 recipients = messages.get(msgid, 'recipients')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
314 for recipid in messages.get(msgid, 'recipients'):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
315 r[recipid] = 1
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
316
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
317 # figure the author's id, and indicate they've received the message
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
318 authid = messages.get(msgid, 'author')
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
319
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
320 # get the current nosy list, we'll need it
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
321 nosy = self.get(nodeid, 'nosy')
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
322
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
323 # possibly send the message to the author, as long as they aren't
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
324 # anonymous
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
325 if (self.db.config.MESSAGES_TO_AUTHOR == 'yes' and
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
326 users.get(authid, 'username') != 'anonymous'):
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
327 sendto.append(authid)
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
328 r[authid] = 1
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
329
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
330 # now figure the nosy people who weren't recipients
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
331 for nosyid in nosy:
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
332 # Don't send nosy mail to the anonymous user (that user
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
333 # shouldn't appear in the nosy list, but just in case they
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
334 # do...)
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
335 if users.get(nosyid, 'username') == 'anonymous':
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
336 continue
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
337 # make sure they haven't seen the message already
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
338 if not r.has_key(nosyid):
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
339 # send it to them
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
340 sendto.append(nosyid)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
341 recipients.append(nosyid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
342
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
343 # no new recipients
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
344 if not sendto:
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
345 return
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
346
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
347 # determine the messageid and inreplyto of the message
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
348 inreplyto = messages.get(msgid, 'inreplyto')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
349 messageid = messages.get(msgid, 'messageid')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
350 if not messageid:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
351 # this is an old message that didn't get a messageid, so
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
352 # create one
499
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
353 messageid = "<%s.%s.%s%s@%s>"%(time.time(), random.random(),
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
354 self.classname, nodeid, self.db.config.MAIL_DOMAIN)
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
355 messages.set(msgid, messageid=messageid)
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
356
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
357 # update the message's recipients list
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
358 messages.set(msgid, recipients=recipients)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
359
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
360 # send an email to the people who missed out
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
361 sendto = [users.get(i, 'address') for i in sendto]
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
362 cn = self.classname
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
363 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
364 # figure author information
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
365 authname = users.get(authid, 'realname')
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
366 if not authname:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
367 authname = users.get(authid, 'username')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
368 authaddr = users.get(authid, 'address')
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
369 if authaddr:
416
Richard Jones <richard@users.sourceforge.net>
parents: 414
diff changeset
370 authaddr = ' <%s>'%authaddr
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
371 else:
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
372 authaddr = ''
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
373
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 # make the message body
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
375 m = ['']
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
376
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
377 # put in roundup's signature
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
378 if self.db.config.EMAIL_SIGNATURE_POSITION == 'top':
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
379 m.append(self.email_signature(nodeid, msgid))
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
380
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
381 # 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
382 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
383 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
384 else:
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
385 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
386 m.append('')
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
387
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
388 # add the content
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
389 m.append(messages.get(msgid, 'content'))
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
390
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
391 # add the change note
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
392 if change_note:
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
393 m.append(change_note)
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
394
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
395 # put in roundup's signature
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
396 if self.db.config.EMAIL_SIGNATURE_POSITION == 'bottom':
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
397 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
398
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
399 # get the files for this message
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
400 message_files = messages.get(msgid, 'files')
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
401
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
402 # 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
403 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
404 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
405 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
406 writer.addheader('To', ', '.join(sendto))
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
407 writer.addheader('From', '%s <%s>'%(authname,
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
408 self.db.config.ISSUE_TRACKER_EMAIL))
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
409 writer.addheader('Reply-To', '%s <%s>'%(self.db.config.INSTANCE_NAME,
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
410 self.db.config.ISSUE_TRACKER_EMAIL))
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
411 writer.addheader('MIME-Version', '1.0')
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
412 if messageid:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
413 writer.addheader('Message-Id', messageid)
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
414 if inreplyto:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
415 writer.addheader('In-Reply-To', inreplyto)
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
416
612
a2aeebf3d6bd Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents: 559
diff changeset
417 # add a uniquely Roundup header to help filtering
a2aeebf3d6bd Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents: 559
diff changeset
418 writer.addheader('X-Roundup-Name', self.db.config.INSTANCE_NAME)
a2aeebf3d6bd Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents: 559
diff changeset
419
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
420 # attach files
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
421 if message_files:
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
422 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
423 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
424 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
425 body.write('\n'.join(m))
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
426 for fileid in message_files:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
427 name = files.get(fileid, 'name')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
428 mime_type = files.get(fileid, 'type')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
429 content = files.get(fileid, 'content')
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
430 part = writer.nextpart()
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
431 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
432 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
433 '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
434 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
435 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
436 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
437 else:
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
438 # some other type, so encode it
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
439 if not mime_type:
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
440 # this should have been done when the file was saved
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
441 mime_type = mimetypes.guess_type(name)[0]
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
442 if mime_type is None:
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
443 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
444 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
445 '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
446 part.addheader('Content-Transfer-Encoding', 'base64')
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
447 body = part.startbody(mime_type)
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
448 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
449 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
450 else:
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
451 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
452 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
453
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
454 # now try to send the message
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
455 if SENDMAILDEBUG:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
456 open(SENDMAILDEBUG, 'w').write('FROM: %s\nTO: %s\n%s\n'%(
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
457 self.db.config.ADMIN_EMAIL,', '.join(sendto),message.getvalue()))
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
458 else:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
459 try:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
460 # send the message as admin so bounces are sent there
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
461 # instead of to roundup
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
462 smtp = smtplib.SMTP(self.db.config.MAILHOST)
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
463 smtp.sendmail(self.db.config.ADMIN_EMAIL, sendto,
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
464 message.getvalue())
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
465 except socket.error, value:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
466 raise MessageSendError, \
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
467 "Couldn't send confirmation email: mailhost %s"%value
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
468 except smtplib.SMTPException, value:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
469 raise MessageSendError, \
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
470 "Couldn't send confirmation email: %s"%value
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
471
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
472 def email_signature(self, nodeid, msgid):
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
473 ''' 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
474 '''
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
475 web = self.db.config.ISSUE_TRACKER_WEB + 'issue'+ nodeid
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
476 email = '"%s" <%s>'%(self.db.config.INSTANCE_NAME,
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
477 self.db.config.ISSUE_TRACKER_EMAIL)
414
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
478 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
479 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
480
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
481 def generateCreateNote(self, nodeid):
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
482 """Generate a create note that lists initial property values
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
483 """
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
484 cn = self.classname
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
485 cl = self.db.classes[cn]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
486 props = cl.getprops(protected=0)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
487
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
488 # list the values
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
489 m = []
559
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
490 l = props.items()
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
491 l.sort()
537
ad6dbc21a570 [SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents: 534
diff changeset
492 for propname, prop in l:
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
493 value = cl.get(nodeid, propname, None)
559
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
494 # skip boring entries
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
495 if not value:
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
496 continue
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
497 if isinstance(prop, hyperdb.Link):
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
498 link = self.db.classes[prop.classname]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
499 if value:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
500 key = link.labelprop(default_to_id=1)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
501 if key:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
502 value = link.get(value, key)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
503 else:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
504 value = ''
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
505 elif isinstance(prop, hyperdb.Multilink):
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
506 if value is None: value = []
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
507 l = []
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
508 link = self.db.classes[prop.classname]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
509 key = link.labelprop(default_to_id=1)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
510 if key:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
511 value = [link.get(entry, key) for entry in value]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
512 value = ', '.join(value)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
513 m.append('%s: %s'%(propname, value))
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
514 m.insert(0, '----------')
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
515 m.insert(0, '')
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
516 return '\n'.join(m)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
517
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
518 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
519 """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
520 """
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
521 cn = self.classname
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
522 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
523 changed = {}
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
524 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
525
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
526 # determine what changed
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
527 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
528 if key in ['files','messages']: continue
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
529 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
530 # 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
531 try:
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
532 old_value = oldvalues[key]
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
533 if type(new_value) is type([]):
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
534 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
535 old_value.sort()
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
536 if new_value != old_value:
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
537 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
538 except:
434
2441743e335b Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 428
diff changeset
539 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
540
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
541 # list the changes
440
de5bf4191f11 Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents: 439
diff changeset
542 m = []
559
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
543 l = changed.items()
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
544 l.sort()
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
545 for propname, oldvalue in l:
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
546 prop = cl.properties[propname]
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
547 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
548 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
549 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
550 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
551 if key:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
552 if value:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
553 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
554 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
555 value = ''
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
556 if oldvalue:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
557 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
558 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
559 oldvalue = ''
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
560 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
561 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
562 change = ''
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
563 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
564 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
565 l = []
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
566 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
567 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
568 # check for additions
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
569 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
570 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
571 if key:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
572 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
573 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
574 l.append(entry)
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
575 if l:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
576 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
577 l = []
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
578 # check for removals
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
579 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
580 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
581 if key:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
582 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
583 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
584 l.append(entry)
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
585 if l:
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
586 change += ' -%s'%(', '.join(l))
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
587 else:
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
588 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
589 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
590 if m:
442
52b5f53d12f3 fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents: 440
diff changeset
591 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
592 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
593 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
594
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
595 #
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
596 # $Log: not supported by cvs2svn $
631
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
597 # Revision 1.44 2002/02/15 07:08:44 richard
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
598 # . Alternate email addresses are now available for users. See the MIGRATION
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
599 # file for info on how to activate the feature.
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
600 #
617
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
601 # Revision 1.43 2002/02/14 22:33:15 richard
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
602 # . Added a uniquely Roundup header to email, "X-Roundup-Name"
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
603 #
612
a2aeebf3d6bd Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents: 559
diff changeset
604 # Revision 1.42 2002/01/21 09:55:14 rochecompaan
a2aeebf3d6bd Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents: 559
diff changeset
605 # Properties in change note are now sorted
a2aeebf3d6bd Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents: 559
diff changeset
606 #
559
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
607 # Revision 1.41 2002/01/15 00:12:40 richard
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
608 # #503340 ] creating issue with [asignedto=p.ohly]
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
609 #
537
ad6dbc21a570 [SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents: 534
diff changeset
610 # Revision 1.40 2002/01/14 22:21:38 richard
ad6dbc21a570 [SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents: 534
diff changeset
611 # #503353 ] setting properties in initial email
ad6dbc21a570 [SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents: 534
diff changeset
612 #
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
613 # Revision 1.39 2002/01/14 02:20:15 richard
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
614 # . changed all config accesses so they access either the instance or the
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
615 # config attriubute on the db. This means that all config is obtained from
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
616 # instance_config instead of the mish-mash of classes. This will make
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
617 # switching to a ConfigParser setup easier too, I hope.
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
618 #
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
619 # At a minimum, this makes migration a _little_ easier (a lot easier in the
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
620 # 0.5.0 switch, I hope!)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
621 #
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
622 # Revision 1.38 2002/01/10 05:57:45 richard
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
623 # namespace clobberation
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
624 #
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
625 # Revision 1.37 2002/01/08 04:12:05 richard
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
626 # Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
627 #
499
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
628 # Revision 1.36 2002/01/02 02:31:38 richard
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
629 # Sorry for the huge checkin message - I was only intending to implement #496356
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
630 # but I found a number of places where things had been broken by transactions:
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
631 # . modified ROUNDUPDBSENDMAILDEBUG to be SENDMAILDEBUG and hold a filename
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
632 # for _all_ roundup-generated smtp messages to be sent to.
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
633 # . the transaction cache had broken the roundupdb.Class set() reactors
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
634 # . newly-created author users in the mailgw weren't being committed to the db
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
635 #
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
636 # Stuff that made it into CHANGES.txt (ie. the stuff I was actually working
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
637 # on when I found that stuff :):
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
638 # . #496356 ] Use threading in messages
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
639 # . detectors were being registered multiple times
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
640 # . added tests for mailgw
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
641 # . much better attaching of erroneous messages in the mail gateway
9ad589d0a60f Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
642 #
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
643 # Revision 1.35 2001/12/20 15:43:01 rochecompaan
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
644 # Features added:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
645 # . Multilink properties are now displayed as comma separated values in
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
646 # a textbox
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
647 # . The add user link is now only visible to the admin user
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
648 # . Modified the mail gateway to reject submissions from unknown
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
649 # addresses if ANONYMOUS_ACCESS is denied
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
650 #
467
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
651 # Revision 1.34 2001/12/17 03:52:48 richard
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
652 # Implemented file store rollback. As a bonus, the hyperdb is now capable of
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
653 # storing more than one file per node - if a property name is supplied,
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
654 # the file is called designator.property.
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
655 # I decided not to migrate the existing files stored over to the new naming
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
656 # scheme - the FileClass just doesn't specify the property name.
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
657 #
461
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 460
diff changeset
658 # Revision 1.33 2001/12/16 10:53:37 richard
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 460
diff changeset
659 # take a copy of the node dict so that the subsequent set
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 460
diff changeset
660 # operation doesn't modify the oldvalues structure
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 460
diff changeset
661 #
460
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 458
diff changeset
662 # 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
663 # 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
664 # actually sending mail :)
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 458
diff changeset
665 #
458
fcda73536034 Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents: 453
diff changeset
666 # 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
667 # . 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
668 # 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
669 # . 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
670 # . 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
671 # nosy list.
fcda73536034 Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents: 453
diff changeset
672 #
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
673 # Revision 1.30 2001/12/12 21:47:45 richard
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
674 # . 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
675 # (which still appears in the Reply-To:)
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
676 # . 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
677 # delivery reports aren't sent to roundup (thanks Patrick Ohly)
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
678 #
445
208697858c8b Message author's name appears in From: instead of roundup instance name
Richard Jones <richard@users.sourceforge.net>
parents: 442
diff changeset
679 # 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
680 # 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
681 #
442
52b5f53d12f3 fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents: 440
diff changeset
682 # 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
683 # 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
684 # 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
685 # btree opener specifically.)
52b5f53d12f3 fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents: 440
diff changeset
686 # 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
687 # 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
688 #
440
de5bf4191f11 Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents: 439
diff changeset
689 # 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
690 # 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
691 #
439
6e27cb83aacb only insert the -------- change note marker if there is a change note
Richard Jones <richard@users.sourceforge.net>
parents: 434
diff changeset
692 # 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
693 # 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
694 # 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
695 #
434
2441743e335b Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 428
diff changeset
696 # 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
697 # 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
698 # 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
699 #
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
700 # 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
701 # 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
702 #
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
703 # 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
704 # oops
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
705 #
416
Richard Jones <richard@users.sourceforge.net>
parents: 414
diff changeset
706 # Revision 1.22 2001/11/27 03:00:50 richard
Richard Jones <richard@users.sourceforge.net>
parents: 414
diff changeset
707 # couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 414
diff changeset
708 #
414
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
709 # 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
710 # Feature:
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
711 # . 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
712 # the instance.
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
713 # . 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
714 # signature info in e-mails.
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
715 # . 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
716 # . 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
717 #
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
718 # Fixed:
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
719 # . 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
720 #
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
721 # Revision 1.20 2001/11/25 10:11:14 jhermann
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
722 # Typo fix
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
723 #
410
3a192fe4e709 Typo fix
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 406
diff changeset
724 # Revision 1.19 2001/11/22 15:46:42 jhermann
3a192fe4e709 Typo fix
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 406
diff changeset
725 # Added module docstrings to all modules.
3a192fe4e709 Typo fix
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 406
diff changeset
726 #
406
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 393
diff changeset
727 # 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
728 # . 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
729 # e-mail
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 393
diff changeset
730 #
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
731 # 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
732 # 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
733 #
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
734 # 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
735 # Features:
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
736 # . #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
737 # . #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
738 # . 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
739 #
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
740 # Revision 1.15 2001/10/23 01:00:18 richard
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
741 # Re-enabled login and registration access after lopping them off via
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
742 # disabling access for anonymous users.
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
743 # Major re-org of the htmltemplate code, cleaning it up significantly. Fixed
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
744 # a couple of bugs while I was there. Probably introduced a couple, but
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
745 # things seem to work OK at the moment.
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
746 #
318
e18dd7227780 Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents: 313
diff changeset
747 # 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
748 # 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
749 # 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
750 # information is displayed.
e18dd7227780 Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents: 313
diff changeset
751 #
313
489b70c37f32 feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents: 308
diff changeset
752 # 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
753 # Added author identification to e-mail messages from roundup.
489b70c37f32 feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents: 308
diff changeset
754 #
308
e32af1eff4ea Added author identification to e-mail messages from roundup.
Richard Jones <richard@users.sourceforge.net>
parents: 263
diff changeset
755 # 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
756 # 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
757 #
263
e13d55912cd4 Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
758 # 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
759 # 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
760 # 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
761 # 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
762 # 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
763 # 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
764 # 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
765 #
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
766 # 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
767 # stupid typo
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
768 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
769 # Revision 1.9 2001/08/07 00:15:51 richard
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
770 # Added the copyright/license notice to (nearly) all files at request of
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
771 # Bizar Software.
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
772 #
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
773 # 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
774 # 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
775 # 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
776 # 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
777 # instructions, etc).
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
778 #
188
1536be43d2fa Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
779 # 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
780 # 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
781 #
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
782 # 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
783 # 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
784 # hard-coded to "issue".
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
785 #
138
e012bb958238 Fixed IssueClass so that superseders links to its classname...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
786 # 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
787 # 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
788 #
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
789 # 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
790 # 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
791 #
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
792 # 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
793 # Moved the database backends off into backends.
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
794 #
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
795 # 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
796 # Final commit of Grande Splite
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
797 #
26
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents: 25
diff changeset
798 # 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
799 # More Grande Splite
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
800 #
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
801 #
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
802 # vim: set filetype=python ts=4 sw=4 et si

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