Mercurial > p > roundup > code
annotate roundup/roundupdb.py @ 2089:93f03c6714d8
A few big changes in this commit:
1. The current indexer has been moved to backends/indexer_dbm in
anticipation of my writing an indexer_rdbms,
2. Changed indexer invocation during create / set to follow the pattern
set by the metakit backend, which was much cleaner, and
3. The "content" property of FileClass is now mutable in all but the
metakit backend.
Metakit needs to be changed to support the editing of "content". Hey, and
I learnt today that the metakit backend implements its own indexer. How
about that... :)
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Fri, 19 Mar 2004 04:47:59 +0000 |
| parents | 3e0961d6d44d |
| children | 7d886a79ab67 |
| rev | line source |
|---|---|
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
1 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
3 # This module is free software, and you may redistribute it and/or modify |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
4 # under the same terms as Python, so long as this copyright message and |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
5 # disclaimer are retained in their original form. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
6 # |
| 214 | 7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
10 # POSSIBILITY OF SUCH DAMAGE. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
11 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
17 # |
|
2089
93f03c6714d8
A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
18 # $Id: roundupdb.py,v 1.102 2004-03-19 04:47:59 richard Exp $ |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
19 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
20 """Extending hyperdb with types specific to issue-tracking. |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
21 """ |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
22 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
23 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
24 from __future__ import nested_scopes |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
25 |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
26 import re, os, smtplib, socket, time, random |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
27 import cStringIO, base64, quopri, mimetypes |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1379
diff
changeset
|
28 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1379
diff
changeset
|
29 from rfc2822 import encode_header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1379
diff
changeset
|
30 |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
31 from roundup import password, date, hyperdb |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
32 |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
33 # MessageSendError is imported for backwards compatibility |
|
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
34 from roundup.mailer import Mailer, straddr, MessageSendError |
|
458
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
35 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 class Database: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 def getuid(self): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 """Return the id of the "user" node associated with the user |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 that owns this connection to the hyperdatabase.""" |
|
1800
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
40 if self.journaltag is None: |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
41 return None |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
42 elif self.journaltag == 'admin': |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
43 # admin user may not exist, but always has ID 1 |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
44 return '1' |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
45 else: |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
46 return self.user.lookup(self.journaltag) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
48 def getUserTimezone(self): |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
49 """Return user timezone defined in 'timezone' property of user class. |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
50 If no such property exists return 0 |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
51 """ |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
52 userid = self.getuid() |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
53 try: |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
54 timezone = int(self.user.get(userid, 'timezone')) |
|
1404
f7d3421ce7e7
Handle situation when timezone is not set
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1402
diff
changeset
|
55 except (KeyError, ValueError, TypeError): |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
56 # If there is no class 'user' or current user doesn't have timezone |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
57 # property or that property is not numeric assume he/she lives in |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
58 # Greenwich :) |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
59 timezone = 0 |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
60 return timezone |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
61 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
62 def confirm_registration(self, otk): |
|
2089
93f03c6714d8
A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
63 props = self.getOTKManager().getall(otk) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
64 for propname, proptype in self.user.getprops().items(): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
65 value = props.get(propname, None) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
66 if value is None: |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
67 pass |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
68 elif isinstance(proptype, hyperdb.Date): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
69 props[propname] = date.Date(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
70 elif isinstance(proptype, hyperdb.Interval): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
71 props[propname] = date.Interval(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
72 elif isinstance(proptype, hyperdb.Password): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
73 props[propname] = password.Password() |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
74 props[propname].unpack(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
75 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
76 # tag new user creation with 'admin' |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
77 self.journaltag = 'admin' |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
78 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
79 # create the new user |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
80 cl = self.user |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
81 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
82 props['roles'] = self.config.NEW_WEB_USER_ROLES |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
83 userid = cl.create(**props) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
84 # clear the props from the otk database |
|
2089
93f03c6714d8
A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
85 self.getOTKManager().destroy(otk) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
86 self.commit() |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
87 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
88 return userid |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
89 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
90 |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
91 class DetectorError(RuntimeError): |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
92 """ Raised by detectors that want to indicate that something's amiss |
|
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
93 """ |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
94 pass |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
95 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
96 # deviation from spec - was called IssueClass |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
97 class IssueClass: |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
98 """This class is intended to be mixed-in with a hyperdb backend |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
99 implementation. The backend should provide a mechanism that |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
100 enforces the title, messages, files, nosy and superseder |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
101 properties: |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
102 |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
103 - title = hyperdb.String(indexme='yes') |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
104 - messages = hyperdb.Multilink("msg") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
105 - files = hyperdb.Multilink("file") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
106 - nosy = hyperdb.Multilink("user") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
107 - superseder = hyperdb.Multilink(classname) |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
108 """ |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 # New methods: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
111 def addmessage(self, nodeid, summary, text): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 """Add a message to an issue's mail spool. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 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
|
115 owns the database connection as the author, and the specified summary |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 text. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 The "files" and "recipients" fields are left empty. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 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
|
121 appended to the "messages" field of the specified issue. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 |
|
1379
98ec0c4ce7ab
missed a fix to the mailing patches
Richard Jones <richard@users.sourceforge.net>
parents:
1360
diff
changeset
|
124 # XXX "bcc" is an optional extra here... |
|
1360
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
125 def nosymessage(self, nodeid, msgid, oldvalues, whichnosy='nosy', |
|
1379
98ec0c4ce7ab
missed a fix to the mailing patches
Richard Jones <richard@users.sourceforge.net>
parents:
1360
diff
changeset
|
126 from_address=None, cc=[]): #, bcc=[]): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 """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
|
128 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 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
|
130 already on the "recipients" list for the message. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
132 These users are then added to the message's "recipients" list. |
|
1379
98ec0c4ce7ab
missed a fix to the mailing patches
Richard Jones <richard@users.sourceforge.net>
parents:
1360
diff
changeset
|
133 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
134 If 'msgid' is None, the message gets sent only to the nosy |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
135 list, and it's called a 'System Message'. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
136 """ |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
137 authid = self.db.msg.safeget(msgid, 'author') |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
138 recipients = self.db.msg.safeget(msgid, 'recipients', []) |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
139 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
140 sendto = [] |
|
1949
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
141 seen_message = {} |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
142 for recipient in recipients: |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
143 seen_message[recipient] = 1 |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
144 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
145 def add_recipient(userid): |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
146 # make sure they have an address |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
147 address = self.db.user.get(userid, 'address') |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
148 if address: |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
149 sendto.append(address) |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
150 recipients.append(userid) |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2059
diff
changeset
|
151 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
152 def good_recipient(userid): |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
153 # Make sure we don't send mail to either the anonymous |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
154 # user or a user who has already seen the message. |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
155 return (userid and |
|
1928
7c1ddebe7589
Small readability improvements.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1927
diff
changeset
|
156 (self.db.user.get(userid, 'username') != 'anonymous') and |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
157 not seen_message.has_key(userid)) |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2059
diff
changeset
|
158 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
159 # 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
|
160 # anonymous |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
161 if (good_recipient(authid) and |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
162 (self.db.config.MESSAGES_TO_AUTHOR == 'yes' or |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
163 (self.db.config.MESSAGES_TO_AUTHOR == 'new' and not oldvalues))): |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
164 add_recipient(authid) |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
165 |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
166 if authid: |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
167 seen_message[authid] = 1 |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
168 |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
169 # now deal with the nosy and cc people who weren't recipients. |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
170 for userid in cc + self.get(nodeid, whichnosy): |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
171 if good_recipient(userid): |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
172 add_recipient(userid) |
| 337 | 173 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
174 if oldvalues: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
175 note = self.generateChangeNote(nodeid, oldvalues) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
176 else: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
177 note = self.generateCreateNote(nodeid) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
178 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
179 # If we have new recipients, update the message's recipients |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
180 # and send the mail. |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
181 if sendto: |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
182 if msgid: |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
183 self.db.msg.set(msgid, recipients=recipients) |
|
1360
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
184 self.send_message(nodeid, msgid, note, sendto, from_address) |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
185 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
186 # backwards compatibility - don't remove |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
187 sendmessage = nosymessage |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
188 |
|
1360
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
189 def send_message(self, nodeid, msgid, note, sendto, from_address=None): |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
190 '''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
|
191 recipients, with the note appended. |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
192 ''' |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
193 users = self.db.user |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
194 messages = self.db.msg |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
195 files = self.db.file |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
196 |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
197 inreplyto = messages.safeget(msgid, 'inreplyto') |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
198 messageid = messages.safeget(msgid, 'messageid') |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
199 |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
200 # make up a messageid if there isn't one (web edit) |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
201 if not messageid: |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
202 # this is an old message that didn't get a messageid, so |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
203 # create one |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
204 messageid = "<%s.%s.%s%s@%s>"%(time.time(), random.random(), |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
205 self.classname, nodeid, |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
206 self.db.config.MAIL_DOMAIN) |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
207 messages.set(msgid, messageid=messageid) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
208 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
209 # compose title |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
210 cn = self.classname |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
211 title = self.get(nodeid, 'title') or '%s message copy'%cn |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
212 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
213 # figure author information |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
214 authid = messages.safeget(msgid, 'author') |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
215 authname = users.safeget(authid, 'realname') |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
216 if not authname: |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
217 authname = users.safeget(authid, 'username', '') |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
218 authaddr = users.safeget(authid, 'address', '') |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
219 if authaddr: |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
220 authaddr = " <%s>" % straddr( ('',authaddr) ) |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
221 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
222 # make the message body |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
223 m = [''] |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
224 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
225 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
226 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
|
227 m.append(self.email_signature(nodeid, msgid)) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
228 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
229 # add author information |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
230 if authid: |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
231 if len(self.get(nodeid,'messages')) == 1: |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
232 m.append("New submission from %s%s:"%(authname, authaddr)) |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
233 else: |
|
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
234 m.append("%s%s added the comment:"%(authname, authaddr)) |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
235 else: |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
236 m.append("System message:") |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
237 m.append('') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
238 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
239 # add the content |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
240 m.append(messages.safeget(msgid, 'content', '')) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
241 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
242 # add the change note |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
243 if note: |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
244 m.append(note) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
245 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
246 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
247 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
|
248 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
|
249 |
|
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
|
250 # encode the content as quoted-printable |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
251 charset = getattr(self.db.config, 'EMAIL_CHARSET', 'utf-8') |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
252 m = '\n'.join(m) |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
253 if charset != 'utf-8': |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
254 m = unicode(m, 'utf-8').encode(charset) |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
255 content = cStringIO.StringIO(m) |
|
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
|
256 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
|
257 quopri.encode(content, content_encoded, 0) |
|
667
52ca0ae46044
Faster, easier, less mess ;)
Richard Jones <richard@users.sourceforge.net>
parents:
665
diff
changeset
|
258 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
|
259 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
260 # get the files for this message |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
261 message_files = msgid and messages.get(msgid, 'files') or None |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
262 |
|
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
|
263 # 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
|
264 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
|
265 |
|
1360
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
266 # make sure we have a from address |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
267 if from_address is None: |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
268 from_address = self.db.config.TRACKER_EMAIL |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
269 |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
270 # additional bit for after the From: "name" |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
271 from_tag = getattr(self.db.config, 'EMAIL_FROM_TAG', '') |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
272 if from_tag: |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
273 from_tag = ' ' + from_tag |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
274 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
275 subject = '[%s%s] %s'%(cn, nodeid, title) |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
276 author = (authname + from_tag, from_address) |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
277 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
278 # create the message |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
279 mailer = Mailer(self.db.config) |
|
1830
4ac11e7fa11a
Fix mailer bug [SF#817470]...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1812
diff
changeset
|
280 message, writer = mailer.get_standard_message(sendto, subject, author) |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
281 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
282 # set reply-to to the tracker |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
283 tracker_name = self.db.config.TRACKER_NAME |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
284 if charset != 'utf-8': |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
285 tracker = unicode(tracker_name, 'utf-8').encode(charset) |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
286 tracker_name = encode_header(tracker_name, charset) |
|
1439
0634f815b90c
rfc2822-ify the tracker name in mail headers
Richard Jones <richard@users.sourceforge.net>
parents:
1404
diff
changeset
|
287 writer.addheader('Reply-To', straddr((tracker_name, from_address))) |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
288 |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
289 # message ids |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
290 if messageid: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
291 writer.addheader('Message-Id', messageid) |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
292 if inreplyto: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
293 writer.addheader('In-Reply-To', inreplyto) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
294 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
295 # attach files |
|
509
4291a31bfa89
namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
296 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
|
297 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
|
298 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
|
299 part.addheader('Content-Transfer-Encoding', 'quoted-printable') |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
300 body = part.startbody('text/plain; charset=%s'%charset) |
|
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
|
301 body.write(content_encoded) |
|
509
4291a31bfa89
namespace clobberation
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
302 for fileid in message_files: |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
303 name = files.get(fileid, 'name') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
304 mime_type = files.get(fileid, 'type') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
305 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
|
306 part = writer.nextpart() |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
307 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
|
308 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
|
309 '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
|
310 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
|
311 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
|
312 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
|
313 else: |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
314 # some other type, so encode it |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
315 if not mime_type: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
316 # this should have been done when the file was saved |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
317 mime_type = mimetypes.guess_type(name)[0] |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
318 if mime_type is None: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
319 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
|
320 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
|
321 '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
|
322 part.addheader('Content-Transfer-Encoding', 'base64') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
323 body = part.startbody(mime_type) |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
324 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
|
325 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
|
326 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
|
327 writer.addheader('Content-Transfer-Encoding', 'quoted-printable') |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
328 body = writer.startbody('text/plain; charset=%s'%charset) |
|
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
|
329 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
|
330 |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
331 mailer.smtp_send(sendto, message) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
332 |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
333 def email_signature(self, nodeid, msgid): |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
334 ''' 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
|
335 ''' |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
336 # simplistic check to see if the url is valid, |
|
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
337 # then append a trailing slash if it is missing |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
338 base = self.db.config.TRACKER_WEB |
|
1250
deab62016de7
https URLs from config now recognised as valid [SF#619829]
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
339 if (not isinstance(base , type('')) or |
|
1253
fe67477e678f
fixes from changes today
Richard Jones <richard@users.sourceforge.net>
parents:
1252
diff
changeset
|
340 not (base.startswith('http://') or base.startswith('https://'))): |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
341 base = "Configuration Error: TRACKER_WEB isn't a " \ |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
342 "fully-qualified URL" |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
343 elif base[-1] != '/' : |
|
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
344 base += '/' |
|
1112
70f187da3cf2
remove hard-coded "issue"
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
345 web = base + self.classname + nodeid |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
346 |
|
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
347 # ensure the email address is properly quoted |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
348 email = straddr((self.db.config.TRACKER_NAME, |
|
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
349 self.db.config.TRACKER_EMAIL)) |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
350 |
|
1586
d1bab419f2a2
web url got longer
Richard Jones <richard@users.sourceforge.net>
parents:
1577
diff
changeset
|
351 line = '_' * max(len(web)+2, len(email)) |
|
1577
e0f4e3561572
URL cited in roundup email confusing dumb Email clients [SF#716585]
Richard Jones <richard@users.sourceforge.net>
parents:
1465
diff
changeset
|
352 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
|
353 |
|
769
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
354 |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
355 def generateCreateNote(self, nodeid): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
356 """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
|
357 """ |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
358 cn = self.classname |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
359 cl = self.db.classes[cn] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
360 props = cl.getprops(protected=0) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
361 |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
362 # list the values |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
363 m = [] |
|
559
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
364 l = props.items() |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
365 l.sort() |
|
537
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
534
diff
changeset
|
366 for propname, prop in l: |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
367 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
|
368 # skip boring entries |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
369 if not value: |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
370 continue |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
371 if isinstance(prop, hyperdb.Link): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
372 link = self.db.classes[prop.classname] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
373 if value: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
374 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
|
375 if key: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
376 value = link.get(value, key) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
377 else: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
378 value = '' |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
379 elif isinstance(prop, hyperdb.Multilink): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
380 if value is None: value = [] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
381 l = [] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
382 link = self.db.classes[prop.classname] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
383 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
|
384 if key: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
385 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
|
386 value.sort() |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
387 value = ', '.join(value) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
388 m.append('%s: %s'%(propname, value)) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
389 m.insert(0, '----------') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
390 m.insert(0, '') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
391 return '\n'.join(m) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
392 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
393 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
|
394 """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
|
395 """ |
|
772
db5daf396518
Removed temporary workaround.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
770
diff
changeset
|
396 if __debug__ : |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
397 if not isinstance(oldvalues, type({})) : |
|
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
398 raise TypeError("'oldvalues' must be dict-like, not %s."% |
|
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
399 type(oldvalues)) |
|
772
db5daf396518
Removed temporary workaround.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
770
diff
changeset
|
400 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
401 cn = self.classname |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
402 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
|
403 changed = {} |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
404 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
|
405 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
406 # determine what changed |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
407 for key in oldvalues.keys(): |
|
1174
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1112
diff
changeset
|
408 if key in ['files','messages']: |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1112
diff
changeset
|
409 continue |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2073
diff
changeset
|
410 if key in ('actor', 'activity', 'creator', 'creation'): |
|
1174
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1112
diff
changeset
|
411 continue |
|
1812
6f3b92a817aa
fixed Apply Error that was raised when property was deleted from class...
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1800
diff
changeset
|
412 # not all keys from oldvalues might be available in database |
|
6f3b92a817aa
fixed Apply Error that was raised when property was deleted from class...
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1800
diff
changeset
|
413 # this happens when property was deleted |
|
6f3b92a817aa
fixed Apply Error that was raised when property was deleted from class...
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1800
diff
changeset
|
414 try: |
|
6f3b92a817aa
fixed Apply Error that was raised when property was deleted from class...
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1800
diff
changeset
|
415 new_value = cl.get(nodeid, key) |
|
6f3b92a817aa
fixed Apply Error that was raised when property was deleted from class...
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1800
diff
changeset
|
416 except KeyError: |
|
6f3b92a817aa
fixed Apply Error that was raised when property was deleted from class...
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1800
diff
changeset
|
417 continue |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
418 # the old value might be non existent |
|
1812
6f3b92a817aa
fixed Apply Error that was raised when property was deleted from class...
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1800
diff
changeset
|
419 # this happens when property was added |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
420 try: |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
421 old_value = oldvalues[key] |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
422 if type(new_value) is type([]): |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
423 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
|
424 old_value.sort() |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
425 if new_value != old_value: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
426 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
|
427 except: |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
428 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
|
429 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
430 # list the changes |
|
440
de5bf4191f11
Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents:
439
diff
changeset
|
431 m = [] |
|
559
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
432 l = changed.items() |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
433 l.sort() |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
434 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
|
435 prop = props[propname] |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
436 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
|
437 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
|
438 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
|
439 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
|
440 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
441 if value: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
442 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
|
443 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
444 value = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
445 if oldvalue: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
446 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
|
447 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
448 oldvalue = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
449 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
|
450 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
|
451 change = '' |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
452 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
|
453 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
|
454 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
455 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
|
456 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
|
457 # check for additions |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
458 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
|
459 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
|
460 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
461 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
|
462 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
463 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
464 if l: |
|
1095
711f2ecee20f
unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
465 l.sort() |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
466 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
|
467 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
468 # check for removals |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
469 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
|
470 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
|
471 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
472 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
|
473 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
474 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
475 if l: |
|
1095
711f2ecee20f
unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
476 l.sort() |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
477 change += ' -%s'%(', '.join(l)) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
478 else: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
479 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
|
480 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
|
481 if m: |
|
442
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
482 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
|
483 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
|
484 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
|
485 |
|
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
|
486 # vim: set filetype=python ts=4 sw=4 et si |
