annotate roundup/roundupdb.py @ 718:e10c37f53efd

fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope (thanks dman) fixed some sorting issues that were breaking some unit tests under py2.2 mailgw test output dir was confusing the init test (but only on 2.2 *shrug*) fixed bug in the init unit test that meant only the bsddb test ran if it could (it clobbered the anydbm test)
author Richard Jones <richard@users.sourceforge.net>
date Wed, 15 May 2002 03:27:16 +0000
parents de6dc74a4148
children 51c425129b35
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 #
718
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
18 # $Id: roundupdb.py,v 1.52 2002-05-15 03:27:16 richard Exp $
406
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 393
diff changeset
19
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 393
diff changeset
20 __doc__ = """
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 393
diff changeset
21 Extending hyperdb with types specific to issue-tracking.
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 393
diff changeset
22 """
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23
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
647
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
25 import MimeWriter, cStringIO
665
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
26 import base64, quopri, mimetypes
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
647
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
45 def extractUserFromList(userClass, users):
617
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
647
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
53 if userClass.get(user, 'username') == 'anonymous': continue
617
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
647
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
76 user = extractUserFromList(self.user,
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
77 self.user.stringFind(address=address))
617
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
78 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
79
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
80 # 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
81 props = self.user.getprops()
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
82 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
83 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
84 [], [])
647
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
85 user = extractUserFromList(self.user, users)
617
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
86 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
87
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
88 # 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
89 # submissions where the address is empty)
647
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
90 user = extractUserFromList(self.user,
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
91 self.user.stringFind(username=address))
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
92
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
93 # 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
94 if create:
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
95 return self.user.create(username=address, address=address,
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
96 realname=realname)
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
97 else:
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
98 return 0
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
100 _marker = []
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
101 # XXX: added the 'creator' faked attribute
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 class Class(hyperdb.Class):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 # Overridden methods:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 def __init__(self, db, classname, **properties):
313
489b70c37f32 feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents: 308
diff changeset
105 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
106 or properties.has_key('creator')):
489b70c37f32 feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents: 308
diff changeset
107 raise ValueError, '"creation", "activity" and "creator" are reserved'
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 hyperdb.Class.__init__(self, db, classname, **properties)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 self.auditors = {'create': [], 'set': [], 'retire': []}
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 self.reactors = {'create': [], 'set': [], 'retire': []}
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 def create(self, **propvalues):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 """These operations trigger detectors and can be vetoed. Attempts
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 to modify the "creation" or "activity" properties cause a KeyError.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 if propvalues.has_key('creation') or propvalues.has_key('activity'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 raise KeyError, '"creation" and "activity" are reserved'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 for audit in self.auditors['create']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 audit(self.db, self, None, propvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 nodeid = hyperdb.Class.create(self, **propvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 for react in self.reactors['create']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 react(self.db, self, nodeid, None)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 return nodeid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 def set(self, nodeid, **propvalues):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 """These operations trigger detectors and can be vetoed. Attempts
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 to modify the "creation" or "activity" properties cause a KeyError.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 if propvalues.has_key('creation') or propvalues.has_key('activity'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 raise KeyError, '"creation" and "activity" are reserved'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 for audit in self.auditors['set']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 audit(self.db, self, nodeid, propvalues)
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
133 # 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
134 # operation doesn't modify the oldvalues structure.
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
135 try:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
136 # try not using the cache initially
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
137 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
138 cache=0))
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
139 except IndexError:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
140 # 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
141 # with no intervening commit()
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
142 oldvalues = copy.deepcopy(self.db.getnode(self.classname, nodeid))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 hyperdb.Class.set(self, nodeid, **propvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 for react in self.reactors['set']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 react(self.db, self, nodeid, oldvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 def retire(self, nodeid):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 """These operations trigger detectors and can be vetoed. Attempts
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 to modify the "creation" or "activity" properties cause a KeyError.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 for audit in self.auditors['retire']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 audit(self.db, self, nodeid, None)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 hyperdb.Class.retire(self, nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 for react in self.reactors['retire']:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 react(self.db, self, nodeid, None)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
157 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
158 """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
159 do the right thing.
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
160 """
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
161 if propname == 'creation':
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
162 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
163 if journal:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
164 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
165 else:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
166 # 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
167 return date.Date()
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
168 if propname == 'activity':
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
169 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
170 if journal:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
171 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
172 else:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
173 # 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
174 return date.Date()
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
175 if propname == 'creator':
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
176 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
177 if journal:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
178 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
179 else:
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
180 return None
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
181 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
182 if default is not _marker:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
183 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
184 cache=cache)
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
185 else:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
186 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
187
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
188 def getprops(self, protected=1):
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
189 """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
190 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
191 "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
192 which may not be modified.
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
193 """
263
e13d55912cd4 Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
194 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
195 if protected:
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
196 d['creation'] = hyperdb.Date()
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
197 d['activity'] = hyperdb.Date()
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
198 d['creator'] = hyperdb.Link("user")
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
199 return d
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
200
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
201 #
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
202 # Detector interface
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
203 #
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204 def audit(self, event, detector):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 """Register a detector
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206 """
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
207 l = self.auditors[event]
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
208 if detector not in l:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
209 self.auditors[event].append(detector)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211 def react(self, event, detector):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212 """Register a detector
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
213 """
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
214 l = self.reactors[event]
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
215 if detector not in l:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
216 self.reactors[event].append(detector)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
217
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
218
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 class FileClass(Class):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 def create(self, **propvalues):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221 ''' snaffle the file propvalue and store in a file
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
222 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
223 content = propvalues['content']
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
224 del propvalues['content']
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
225 newid = Class.create(self, **propvalues)
461
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 460
diff changeset
226 self.db.storefile(self.classname, newid, None, content)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
227 return newid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
228
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
229 def get(self, nodeid, propname, default=_marker, cache=1):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
230 ''' trap the content propname and get it from the file
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
231 '''
631
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
232
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
233 poss_msg = 'Possibly a access right configuration problem.'
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
234 if propname == 'content':
631
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
235 try:
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
236 return self.db.getfile(self.classname, nodeid, None)
644
086f67453062 roundup db: catch only IOError in getfile.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 631
diff changeset
237 except IOError, (strerror):
631
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
238 # BUG: by catching this we donot see an error in the log.
644
086f67453062 roundup db: catch only IOError in getfile.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 631
diff changeset
239 return 'ERROR reading file: %s%s\n%s\n%s'%(
086f67453062 roundup db: catch only IOError in getfile.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 631
diff changeset
240 self.classname, nodeid, poss_msg, strerror)
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
241 if default is not _marker:
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, default, cache=cache)
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
243 else:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
244 return Class.get(self, nodeid, propname, cache=cache)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
246 def getprops(self, protected=1):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 ''' 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
248 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
249 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
250 modified.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
251 '''
263
e13d55912cd4 Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
252 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
253 if protected:
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
254 d['content'] = hyperdb.String()
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
255 return d
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
256
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
257 class MessageSendError(RuntimeError):
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
258 pass
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
259
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
260 class DetectorError(RuntimeError):
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
261 pass
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
262
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 # XXX deviation from spec - was called ItemClass
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
264 class IssueClass(Class):
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
265
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
266 # Overridden methods:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
267
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
268 def __init__(self, db, classname, **properties):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269 """The newly-created class automatically includes the "messages",
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
270 "files", "nosy", and "superseder" properties. If the 'properties'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
271 dictionary attempts to specify any of these properties or a
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
272 "creation" or "activity" property, a ValueError is raised."""
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
273 if not properties.has_key('title'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
274 properties['title'] = hyperdb.String()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
275 if not properties.has_key('messages'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
276 properties['messages'] = hyperdb.Multilink("msg")
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
277 if not properties.has_key('files'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
278 properties['files'] = hyperdb.Multilink("file")
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279 if not properties.has_key('nosy'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280 properties['nosy'] = hyperdb.Multilink("user")
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
281 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
282 properties['superseder'] = hyperdb.Multilink(classname)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
283 Class.__init__(self, db, classname, **properties)
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 # New methods:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
287 def addmessage(self, nodeid, summary, text):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
288 """Add a message to an issue's mail spool.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
289
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
290 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
291 owns the database connection as the author, and the specified summary
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
292 text.
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 "files" and "recipients" fields are left empty.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
295
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
296 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
297 appended to the "messages" field of the specified issue.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
298 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
299
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
300 def nosymessage(self, nodeid, msgid, change_note):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
301 """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
302
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
303 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
304 already on the "recipients" list for the message.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
305
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
306 These users are then added to the message's "recipients" list.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
307 """
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
308 users = self.db.user
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
309 messages = self.db.msg
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
310
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
311 # figure the recipient ids
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
312 sendto = []
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
313 r = {}
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
314 recipients = messages.get(msgid, 'recipients')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
315 for recipid in messages.get(msgid, 'recipients'):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
316 r[recipid] = 1
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
317
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
318 # 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
319 authid = messages.get(msgid, 'author')
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
320
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
321 # get the current nosy list, we'll need it
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
322 nosy = self.get(nodeid, 'nosy')
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
323
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
324 # 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
325 # anonymous
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
326 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
327 users.get(authid, 'username') != 'anonymous'):
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
328 sendto.append(authid)
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
329 r[authid] = 1
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
330
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
331 # now figure the nosy people who weren't recipients
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
332 for nosyid in nosy:
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
333 # Don't send nosy mail to the anonymous user (that user
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
334 # shouldn't appear in the nosy list, but just in case they
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
335 # do...)
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
336 if users.get(nosyid, 'username') == 'anonymous':
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
337 continue
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
338 # make sure they haven't seen the message already
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
339 if not r.has_key(nosyid):
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
340 # send it to them
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
341 sendto.append(nosyid)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
342 recipients.append(nosyid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
343
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
344 # we have new recipients
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
345 if sendto:
685
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
346 # map userids to addresses
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
347 sendto = [users.get(i, 'address') for i in sendto]
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
348
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
349 # update the message's recipients list
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
350 messages.set(msgid, recipients=recipients)
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
351
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
352 # send the message
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
353 self.send_message(nodeid, msgid, change_note, sendto)
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
354
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
355 # XXX backwards compatibility - don't remove
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
356 sendmessage = nosymessage
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
357
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
358 def send_message(self, nodeid, msgid, note, sendto):
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
359 '''Actually send the nominated message from this node to the sendto
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
360 recipients, with the note appended.
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
361 '''
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
362 users = self.db.user
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
363 messages = self.db.msg
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
364 files = self.db.file
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
365
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
366 # 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
367 inreplyto = messages.get(msgid, 'inreplyto')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
368 messageid = messages.get(msgid, 'messageid')
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
369
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
370 # make up a messageid if there isn't one (web edit)
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
371 if not messageid:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
372 # 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
373 # 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
374 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
375 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
376 messages.set(msgid, messageid=messageid)
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
377
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
378 # send an email to the people who missed out
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
379 cn = self.classname
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
380 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
381 # figure author information
685
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
382 authid = messages.get(msgid, 'author')
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
383 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
384 if not authname:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
385 authname = users.get(authid, 'username')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
386 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
387 if authaddr:
416
Richard Jones <richard@users.sourceforge.net>
parents: 414
diff changeset
388 authaddr = ' <%s>'%authaddr
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
389 else:
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
390 authaddr = ''
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
391
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
392 # make the message body
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
393 m = ['']
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
394
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
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 == 'top':
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))
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
398
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
399 # 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
400 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
401 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
402 else:
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
403 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
404 m.append('')
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
405
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
406 # add the content
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
407 m.append(messages.get(msgid, 'content'))
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
408
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
409 # add the change note
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
410 if note:
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
411 m.append(note)
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
412
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
413 # put in roundup's signature
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
414 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
415 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
416
665
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
417 # encode the content as quoted-printable
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
418 content = cStringIO.StringIO('\n'.join(m))
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
419 content_encoded = cStringIO.StringIO()
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
420 quopri.encode(content, content_encoded, 0)
667
52ca0ae46044 Faster, easier, less mess ;)
Richard Jones <richard@users.sourceforge.net>
parents: 665
diff changeset
421 content_encoded = content_encoded.getvalue()
665
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
422
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
423 # get the files for this message
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
424 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
425
718
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
426 # make sure the To line is always the same (for testing mostly)
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
427 sendto.sort()
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
428
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
429 # 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
430 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
431 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
432 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
433 writer.addheader('To', ', '.join(sendto))
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
434 writer.addheader('From', '%s <%s>'%(authname,
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
435 self.db.config.ISSUE_TRACKER_EMAIL))
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
436 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
437 self.db.config.ISSUE_TRACKER_EMAIL))
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
438 writer.addheader('MIME-Version', '1.0')
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
439 if messageid:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
440 writer.addheader('Message-Id', messageid)
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
441 if inreplyto:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
442 writer.addheader('In-Reply-To', inreplyto)
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
443
612
a2aeebf3d6bd Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents: 559
diff changeset
444 # 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
445 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
446
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
447 # attach files
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
448 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
449 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
450 part = writer.nextpart()
665
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
451 part.addheader('Content-Transfer-Encoding', 'quoted-printable')
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
452 body = part.startbody('text/plain')
665
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
453 body.write(content_encoded)
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
454 for fileid in message_files:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
455 name = files.get(fileid, 'name')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
456 mime_type = files.get(fileid, 'type')
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
457 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
458 part = writer.nextpart()
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
459 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
460 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
461 '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
462 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
463 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
464 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
465 else:
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
466 # some other type, so encode it
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
467 if not mime_type:
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
468 # this should have been done when the file was saved
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
469 mime_type = mimetypes.guess_type(name)[0]
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
470 if mime_type is None:
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
471 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
472 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
473 '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
474 part.addheader('Content-Transfer-Encoding', 'base64')
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
475 body = part.startbody(mime_type)
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
476 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
477 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
478 else:
665
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
479 writer.addheader('Content-Transfer-Encoding', 'quoted-printable')
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
480 body = writer.startbody('text/plain')
665
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
481 body.write(content_encoded)
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
482
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
483 # now try to send the message
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
484 if SENDMAILDEBUG:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
485 open(SENDMAILDEBUG, 'w').write('FROM: %s\nTO: %s\n%s\n'%(
718
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
486 self.db.config.ADMIN_EMAIL,
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
487 ', '.join(sendto),message.getvalue()))
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
488 else:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
489 try:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
490 # 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
491 # instead of to roundup
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
492 smtp = smtplib.SMTP(self.db.config.MAILHOST)
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
493 smtp.sendmail(self.db.config.ADMIN_EMAIL, sendto,
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
494 message.getvalue())
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
495 except socket.error, value:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
496 raise MessageSendError, \
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
497 "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
498 except smtplib.SMTPException, value:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
499 raise MessageSendError, \
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
500 "Couldn't send confirmation email: %s"%value
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
501
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
502 def email_signature(self, nodeid, msgid):
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
503 ''' 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
504 '''
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
505 web = self.db.config.ISSUE_TRACKER_WEB + 'issue'+ nodeid
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
506 email = '"%s" <%s>'%(self.db.config.INSTANCE_NAME,
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
507 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
508 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
509 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
510
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
511 def generateCreateNote(self, nodeid):
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
512 """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
513 """
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
514 cn = self.classname
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
515 cl = self.db.classes[cn]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
516 props = cl.getprops(protected=0)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
517
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
518 # list the values
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
519 m = []
559
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
520 l = props.items()
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
521 l.sort()
537
ad6dbc21a570 [SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents: 534
diff changeset
522 for propname, prop in l:
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
523 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
524 # skip boring entries
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
525 if not value:
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
526 continue
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
527 if isinstance(prop, hyperdb.Link):
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
528 link = self.db.classes[prop.classname]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
529 if value:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
530 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
531 if key:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
532 value = link.get(value, key)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
533 else:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
534 value = ''
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
535 elif isinstance(prop, hyperdb.Multilink):
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
536 if value is None: value = []
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
537 l = []
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
538 link = self.db.classes[prop.classname]
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
539 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
540 if key:
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
541 value = [link.get(entry, key) for entry in value]
718
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
542 value.sort()
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
543 value = ', '.join(value)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
544 m.append('%s: %s'%(propname, value))
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
545 m.insert(0, '----------')
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
546 m.insert(0, '')
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
547 return '\n'.join(m)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
548
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
549 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
550 """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
551 """
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
552 cn = self.classname
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
553 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
554 changed = {}
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
555 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
556
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
557 # determine what changed
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
558 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
559 if key in ['files','messages']: continue
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
560 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
561 # 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
562 try:
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
563 old_value = oldvalues[key]
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
564 if type(new_value) is type([]):
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
565 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
566 old_value.sort()
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
567 if new_value != old_value:
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
568 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
569 except:
434
2441743e335b Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 428
diff changeset
570 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
571
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
572 # list the changes
440
de5bf4191f11 Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents: 439
diff changeset
573 m = []
559
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
574 l = changed.items()
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
575 l.sort()
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
576 for propname, oldvalue in l:
647
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
577 prop = props[propname]
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
578 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
579 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
580 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
581 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
582 if key:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
583 if value:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
584 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
585 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
586 value = ''
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
587 if oldvalue:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
588 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
589 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
590 oldvalue = ''
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
591 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
592 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
593 change = ''
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
594 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
595 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
596 l = []
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
597 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
598 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
599 # check for additions
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
600 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
601 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
602 if key:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
603 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
604 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
605 l.append(entry)
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
606 if l:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
607 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
608 l = []
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
609 # check for removals
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
610 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
611 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
612 if key:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
613 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
614 else:
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
615 l.append(entry)
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
616 if l:
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
617 change += ' -%s'%(', '.join(l))
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
618 else:
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
619 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
620 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
621 if m:
442
52b5f53d12f3 fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents: 440
diff changeset
622 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
623 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
624 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
625
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
626 #
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
627 # $Log: not supported by cvs2svn $
718
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
628 # Revision 1.51 2002/04/08 03:46:42 richard
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
629 # make it work
e10c37f53efd fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
Richard Jones <richard@users.sourceforge.net>
parents: 685
diff changeset
630 #
685
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
631 # Revision 1.50 2002/04/08 03:40:31 richard
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
632 # . added a "detectors" directory for people to put their useful auditors and
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
633 # reactors in. Note - the roundupdb.IssueClass.sendmessage method has been
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
634 # split and renamed "nosymessage" specifically for things like the nosy
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
635 # reactor, and "send_message" which just sends the message.
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
636 #
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
637 # The initial detector is one that we'll be using here at ekit - it bounces new
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
638 # issue messages to a team address.
de6dc74a4148 make it work
Richard Jones <richard@users.sourceforge.net>
parents: 684
diff changeset
639 #
684
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
640 # Revision 1.49 2002/03/19 06:41:49 richard
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
641 # Faster, easier, less mess ;)
5b23ff865f3a added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents: 667
diff changeset
642 #
667
52ca0ae46044 Faster, easier, less mess ;)
Richard Jones <richard@users.sourceforge.net>
parents: 665
diff changeset
643 # Revision 1.48 2002/03/18 18:32:00 rochecompaan
52ca0ae46044 Faster, easier, less mess ;)
Richard Jones <richard@users.sourceforge.net>
parents: 665
diff changeset
644 # All messages sent to the nosy list are now encoded as quoted-printable.
52ca0ae46044 Faster, easier, less mess ;)
Richard Jones <richard@users.sourceforge.net>
parents: 665
diff changeset
645 #
665
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
646 # Revision 1.47 2002/02/27 03:16:02 richard
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
647 # Fixed a couple of dodgy bits found by pychekcer.
9382ad731c1c All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 647
diff changeset
648 #
647
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
649 # Revision 1.46 2002/02/25 14:22:59 grubert
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
650 # . roundup db: catch only IOError in getfile.
b3b483e0fd5e Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents: 644
diff changeset
651 #
631
993e0162b7c2 roundupdb catches retrieving none existing files.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 617
diff changeset
652 # 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
653 # . 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
654 # 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
655 #
617
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 612
diff changeset
656 # 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
657 # . 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
658 #
612
a2aeebf3d6bd Added a uniquely Roundup header to email, "X-Roundup-Name"
Richard Jones <richard@users.sourceforge.net>
parents: 559
diff changeset
659 # 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
660 # 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
661 #
559
bb5ee2f24ee0 Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 537
diff changeset
662 # 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
663 # #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
664 #
537
ad6dbc21a570 [SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents: 534
diff changeset
665 # 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
666 # #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
667 #
534
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
668 # 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
669 # . 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
670 # 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
671 # 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
672 # 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
673 #
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
674 # 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
675 # 0.5.0 switch, I hope!)
d17c60d16f7f [SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
676 #
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
677 # 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
678 # namespace clobberation
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 509
diff changeset
679 #
509
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
680 # Revision 1.37 2002/01/08 04:12:05 richard
4291a31bfa89 namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents: 499
diff changeset
681 # 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
682 #
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
683 # 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
684 # 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
685 # 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
686 # . 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
687 # 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
688 # . 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
689 # . 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
690 #
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
691 # 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
692 # 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
693 # . #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
694 # . 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
695 # . 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
696 # . 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
697 #
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
698 # 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
699 # Features added:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
700 # . 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
701 # a textbox
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
702 # . 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
703 # . 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
704 # addresses if ANONYMOUS_ACCESS is denied
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 467
diff changeset
705 #
467
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
706 # Revision 1.34 2001/12/17 03:52:48 richard
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
707 # 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
708 # 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
709 # the file is called designator.property.
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
710 # 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
711 # scheme - the FileClass just doesn't specify the property name.
103f521810f7 Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 461
diff changeset
712 #
461
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 460
diff changeset
713 # 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
714 # 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
715 # operation doesn't modify the oldvalues structure
b579418f7ed1 Implemented file store rollback.
Richard Jones <richard@users.sourceforge.net>
parents: 460
diff changeset
716 #
460
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 458
diff changeset
717 # 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
718 # 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
719 # actually sending mail :)
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 458
diff changeset
720 #
458
fcda73536034 Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents: 453
diff changeset
721 # 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
722 # . 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
723 # 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
724 # . 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
725 # . 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
726 # nosy list.
fcda73536034 Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents: 453
diff changeset
727 #
453
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
728 # Revision 1.30 2001/12/12 21:47:45 richard
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
729 # . 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
730 # (which still appears in the Reply-To:)
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
731 # . 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
732 # delivery reports aren't sent to roundup (thanks Patrick Ohly)
5b422e3bd05d Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 445
diff changeset
733 #
445
208697858c8b Message author's name appears in From: instead of roundup instance name
Richard Jones <richard@users.sourceforge.net>
parents: 442
diff changeset
734 # 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
735 # 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
736 #
442
52b5f53d12f3 fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents: 440
diff changeset
737 # 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
738 # 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
739 # 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
740 # btree opener specifically.)
52b5f53d12f3 fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents: 440
diff changeset
741 # 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
742 # 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
743 #
440
de5bf4191f11 Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents: 439
diff changeset
744 # 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
745 # 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
746 #
439
6e27cb83aacb only insert the -------- change note marker if there is a change note
Richard Jones <richard@users.sourceforge.net>
parents: 434
diff changeset
747 # 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
748 # 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
749 # 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
750 #
434
2441743e335b Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 428
diff changeset
751 # 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
752 # 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
753 # 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
754 #
428
7956563d49ae Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 425
diff changeset
755 # 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
756 # 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
757 #
425
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
758 # 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
759 # oops
fc907b6ef135 Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 416
diff changeset
760 #
416
Richard Jones <richard@users.sourceforge.net>
parents: 414
diff changeset
761 # Revision 1.22 2001/11/27 03:00:50 richard
Richard Jones <richard@users.sourceforge.net>
parents: 414
diff changeset
762 # couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 414
diff changeset
763 #
414
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
764 # 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
765 # Feature:
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
766 # . 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
767 # the instance.
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
768 # . 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
769 # signature info in e-mails.
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
770 # . 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
771 # . 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
772 #
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
773 # Fixed:
fc6d03e9dbc1 couple of bugfixes from latest patch integration
Richard Jones <richard@users.sourceforge.net>
parents: 411
diff changeset
774 # . 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
775 #
411
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
776 # Revision 1.20 2001/11/25 10:11:14 jhermann
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
777 # Typo fix
a6088556e9ba Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 410
diff changeset
778 #
410
3a192fe4e709 Typo fix
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 406
diff changeset
779 # Revision 1.19 2001/11/22 15:46:42 jhermann
3a192fe4e709 Typo fix
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 406
diff changeset
780 # Added module docstrings to all modules.
3a192fe4e709 Typo fix
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 406
diff changeset
781 #
406
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 393
diff changeset
782 # 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
783 # . 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
784 # e-mail
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 393
diff changeset
785 #
393
f40388721e40 incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
786 # 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
787 # 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
788 #
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
789 # 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
790 # Features:
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 337
diff changeset
791 # . #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
792 # . #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
793 # . 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
794 #
337
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
795 # Revision 1.15 2001/10/23 01:00:18 richard
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
796 # Re-enabled login and registration access after lopping them off via
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
797 # disabling access for anonymous users.
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
798 # Major re-org of the htmltemplate code, cleaning it up significantly. Fixed
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
799 # 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
800 # things seem to work OK at the moment.
8cd545738d8e Features:
Richard Jones <richard@users.sourceforge.net>
parents: 318
diff changeset
801 #
318
e18dd7227780 Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents: 313
diff changeset
802 # 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
803 # 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
804 # 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
805 # information is displayed.
e18dd7227780 Re-enabled login and registration access...
Richard Jones <richard@users.sourceforge.net>
parents: 313
diff changeset
806 #
313
489b70c37f32 feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents: 308
diff changeset
807 # 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
808 # Added author identification to e-mail messages from roundup.
489b70c37f32 feature [SF#473127]: Filenames.
Richard Jones <richard@users.sourceforge.net>
parents: 308
diff changeset
809 #
308
e32af1eff4ea Added author identification to e-mail messages from roundup.
Richard Jones <richard@users.sourceforge.net>
parents: 263
diff changeset
810 # 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
811 # 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
812 #
263
e13d55912cd4 Forgot to pass the protected flag down *sigh*.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
813 # 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
814 # 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
815 # 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
816 # 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
817 # 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
818 # 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
819 # 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
820 #
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
821 # 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
822 # stupid typo
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
823 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
824 # Revision 1.9 2001/08/07 00:15:51 richard
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
825 # 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
826 # Bizar Software.
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
827 #
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
828 # 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
829 # 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
830 # 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
831 # 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
832 # instructions, etc).
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
833 #
188
1536be43d2fa Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
834 # 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
835 # 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
836 #
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
837 # 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
838 # 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
839 # hard-coded to "issue".
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 138
diff changeset
840 #
138
e012bb958238 Fixed IssueClass so that superseders links to its classname...
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
841 # 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
842 # 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
843 #
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
844 # 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
845 # 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
846 #
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
847 # 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
848 # Moved the database backends off into backends.
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 44
diff changeset
849 #
44
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
850 # 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
851 # Final commit of Grande Splite
c1f3e058c58d Moved the database backends off into backends.
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
852 #
26
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents: 25
diff changeset
853 # 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
854 # More Grande Splite
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
855 #
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
856 #
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
857 # vim: set filetype=python ts=4 sw=4 et si

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