Mercurial > p > roundup > code
annotate roundup/roundupdb.py @ 3892:f762fa13cd8d
Automatically find out author of property-only changes...
...and add that information in the header of the generated message,
replacing "System Message".
| author | Erik Forsberg <forsberg@users.sourceforge.net> |
|---|---|
| date | Mon, 10 Sep 2007 19:18:39 +0000 |
| parents | 5c4a039aa465 |
| children | 91008ec8f9a0 |
| rev | line source |
|---|---|
|
3702
06d7816976bc
python 2.6 compatibility
Richard Jones <richard@users.sourceforge.net>
parents:
3621
diff
changeset
|
1 from __future__ import nested_scopes |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
2 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
3 # 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
|
4 # 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
|
5 # 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
|
6 # 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
|
7 # |
| 214 | 8 # 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
|
9 # 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
|
10 # 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
|
11 # POSSIBILITY OF SUCH DAMAGE. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
12 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
13 # 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
|
14 # 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
|
15 # 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
|
16 # 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
|
17 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
18 # |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
19 # $Id: roundupdb.py,v 1.132 2007-09-10 19:18:31 forsberg Exp $ |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
20 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
21 """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
|
22 """ |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
23 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
24 |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
25 import re, os, smtplib, socket, time, random |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
26 import cStringIO, base64, quopri, mimetypes |
|
3882
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
27 import os.path |
|
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 |
|
3599
f607494f5578
send_message: translate UI strings (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3515
diff
changeset
|
32 from roundup.i18n import _ |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
33 |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
34 # MessageSendError is imported for backwards compatibility |
|
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
35 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
|
36 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 class Database: |
|
2735
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
38 |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
39 # remember the journal uid for the current journaltag so that: |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
40 # a. we don't have to look it up every time we need it, and |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
41 # b. if the journaltag disappears during a transaction, we don't barf |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
42 # (eg. the current user edits their username) |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
43 journal_uid = None |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 def getuid(self): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 """Return the id of the "user" node associated with the user |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 that owns this connection to the hyperdatabase.""" |
|
1800
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
47 if self.journaltag is None: |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
48 return None |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
49 elif self.journaltag == 'admin': |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
50 # 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
|
51 return '1' |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
52 else: |
|
2735
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
53 if (self.journal_uid is None or self.journal_uid[0] != |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
54 self.journaltag): |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
55 uid = self.user.lookup(self.journaltag) |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
56 self.journal_uid = (self.journaltag, uid) |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
57 return self.journal_uid[1] |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 |
|
2906
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
59 def setCurrentUser(self, username): |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
60 """Set the user that is responsible for current database |
|
2906
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
61 activities. |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
62 """ |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
63 self.journaltag = username |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
64 |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
65 def isCurrentUser(self, username): |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
66 """Check if a given username equals the already active user. |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
67 """ |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
68 return self.journaltag == username |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
69 |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
70 def getUserTimezone(self): |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
71 """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
|
72 If no such property exists return 0 |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
73 """ |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
74 userid = self.getuid() |
|
3621
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
75 timezone = None |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
76 try: |
|
3621
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
77 tz = self.user.get(userid, 'timezone') |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
78 date.get_timezone(tz) |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
79 timezone = tz |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
80 except KeyError: |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
81 pass |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
82 # If there is no class 'user' or current user doesn't have timezone |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
83 # property or that property is not set assume he/she lives in |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
84 # the timezone set in the tracker config. |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
85 if timezone is None: |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
86 timezone = self.config['TIMEZONE'] |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
87 return timezone |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
88 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
89 def confirm_registration(self, otk): |
|
2089
93f03c6714d8
A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
90 props = self.getOTKManager().getall(otk) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
91 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
|
92 value = props.get(propname, None) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
93 if value is None: |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
94 pass |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
95 elif isinstance(proptype, hyperdb.Date): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
96 props[propname] = date.Date(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
97 elif isinstance(proptype, hyperdb.Interval): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
98 props[propname] = date.Interval(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
99 elif isinstance(proptype, hyperdb.Password): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
100 props[propname] = password.Password() |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
101 props[propname].unpack(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
102 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
103 # tag new user creation with 'admin' |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
104 self.journaltag = 'admin' |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
105 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
106 # create the new user |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
107 cl = self.user |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
108 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
109 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
|
110 userid = cl.create(**props) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
111 # 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
|
112 self.getOTKManager().destroy(otk) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
113 self.commit() |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
114 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
115 return userid |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
116 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
117 |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
118 class DetectorError(RuntimeError): |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
119 """ 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
|
120 """ |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
121 pass |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
122 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
123 # 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
|
124 class IssueClass: |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
125 """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
|
126 implementation. The backend should provide a mechanism that |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
127 enforces the title, messages, files, nosy and superseder |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
128 properties: |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
129 |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
130 - title = hyperdb.String(indexme='yes') |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
131 - messages = hyperdb.Multilink("msg") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
132 - files = hyperdb.Multilink("file") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
133 - nosy = hyperdb.Multilink("user") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
134 - 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
|
135 """ |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
136 |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
137 # The tuple below does not affect the class definition. |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
138 # It just lists all names of all issue properties |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
139 # marked for message extraction tool. |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
140 # |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
141 # XXX is there better way to get property names into message catalog?? |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
142 # |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
143 # Note that this list also includes properties |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
144 # defined in the classic template: |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
145 # assignedto, topic, priority, status. |
|
2545
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
146 ( |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
147 ''"title", ''"messages", ''"files", ''"nosy", ''"superseder", |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
148 ''"assignedto", ''"topic", ''"priority", ''"status", |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
149 # following properties are common for all hyperdb classes |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
150 # they are listed here to keep things in one place |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
151 ''"actor", ''"activity", ''"creator", ''"creation", |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
152 ) |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
153 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
154 # New methods: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
155 def addmessage(self, nodeid, summary, text): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
156 """Add a message to an issue's mail spool. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
157 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
158 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
|
159 owns the database connection as the author, and the specified summary |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
160 text. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
161 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
162 The "files" and "recipients" fields are left empty. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
163 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
164 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
|
165 appended to the "messages" field of the specified issue. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
166 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
167 |
|
1360
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
168 def nosymessage(self, nodeid, msgid, oldvalues, whichnosy='nosy', |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
169 from_address=None, cc=[], bcc=[]): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
170 """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
|
171 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
172 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
|
173 already on the "recipients" list for the message. |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
174 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
175 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
|
176 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
177 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
|
178 list, and it's called a 'System Message'. |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
179 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
180 The "cc" argument indicates additional recipients to send the |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
181 message to that may not be specified in the message's recipients |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
182 list. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
183 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
184 The "bcc" argument also indicates additional recipients to send the |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
185 message to that may not be specified in the message's recipients |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
186 list. These recipients will not be included in the To: or Cc: |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
187 address lists. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
188 """ |
|
3515
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
189 if msgid: |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
190 authid = self.db.msg.get(msgid, 'author') |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
191 recipients = self.db.msg.get(msgid, 'recipients', []) |
|
3515
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
192 else: |
|
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
193 # "system message" |
|
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
194 authid = None |
|
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
195 recipients = [] |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
196 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
197 sendto = [] |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
198 bcc_sendto = [] |
|
1949
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
199 seen_message = {} |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
200 for recipient in recipients: |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
201 seen_message[recipient] = 1 |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
202 |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
203 def add_recipient(userid, to): |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
204 # 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
|
205 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
|
206 if address: |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
207 to.append(address) |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
208 recipients.append(userid) |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2059
diff
changeset
|
209 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
210 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
|
211 # 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
|
212 # 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
|
213 return (userid and |
|
1928
7c1ddebe7589
Small readability improvements.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1927
diff
changeset
|
214 (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
|
215 not seen_message.has_key(userid)) |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2059
diff
changeset
|
216 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
217 # 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
|
218 # 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
|
219 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
|
220 (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
|
221 (self.db.config.MESSAGES_TO_AUTHOR == 'new' and not oldvalues))): |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
222 add_recipient(authid, sendto) |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
223 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
224 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
|
225 seen_message[authid] = 1 |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
226 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
227 # 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
|
228 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
|
229 if good_recipient(userid): |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
230 add_recipient(userid, sendto) |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
231 |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
232 # now deal with bcc people. |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
233 for userid in bcc: |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
234 if good_recipient(userid): |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
235 add_recipient(userid, bcc_sendto) |
| 337 | 236 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
237 if oldvalues: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
238 note = self.generateChangeNote(nodeid, oldvalues) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
239 else: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
240 note = self.generateCreateNote(nodeid) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
241 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
242 # 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
|
243 # and send the mail. |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
244 if sendto or bcc_sendto: |
|
2738
3a7039bc2f97
couple more msgid == None fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2737
diff
changeset
|
245 if msgid is not None: |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
246 self.db.msg.set(msgid, recipients=recipients) |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
247 self.send_message(nodeid, msgid, note, sendto, from_address, |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
248 bcc_sendto) |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
249 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
250 # backwards compatibility - don't remove |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
251 sendmessage = nosymessage |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
252 |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
253 def send_message(self, nodeid, msgid, note, sendto, from_address=None, |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
254 bcc_sendto=[]): |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
255 '''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
|
256 recipients, with the note appended. |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
257 ''' |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
258 users = self.db.user |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
259 messages = self.db.msg |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
260 files = self.db.file |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
261 |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
262 if msgid is None: |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
263 inreplyto = None |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
264 messageid = None |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
265 else: |
|
2765
3468f74bd7ce
fix copy/paste error made in r1.114
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2738
diff
changeset
|
266 inreplyto = messages.get(msgid, 'inreplyto') |
|
3468f74bd7ce
fix copy/paste error made in r1.114
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2738
diff
changeset
|
267 messageid = messages.get(msgid, 'messageid') |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
268 |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
269 # 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
|
270 if not messageid: |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
271 # 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
|
272 # create one |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
273 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
|
274 self.classname, nodeid, |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
275 self.db.config.MAIL_DOMAIN) |
|
2569
eca3383a27a6
fix messageid generated when msgid is None for send_message [SF#987933]
Richard Jones <richard@users.sourceforge.net>
parents:
2545
diff
changeset
|
276 if msgid is not None: |
|
eca3383a27a6
fix messageid generated when msgid is None for send_message [SF#987933]
Richard Jones <richard@users.sourceforge.net>
parents:
2545
diff
changeset
|
277 messages.set(msgid, messageid=messageid) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
278 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
279 # compose title |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
280 cn = self.classname |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
281 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
|
282 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
283 # figure author information |
|
3515
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
284 if msgid: |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
285 authid = messages.get(msgid, 'author') |
|
3515
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
286 else: |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
287 authid = self.db.getuid() |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
288 authname = users.get(authid, 'realname') |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
289 if not authname: |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
290 authname = users.get(authid, 'username', '') |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
291 authaddr = users.get(authid, 'address', '') |
|
3515
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
292 |
|
3877
83748b2de465
Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3790
diff
changeset
|
293 if authaddr and self.db.config.MAIL_ADD_AUTHOREMAIL: |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
294 authaddr = " <%s>" % straddr( ('',authaddr) ) |
|
3877
83748b2de465
Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3790
diff
changeset
|
295 elif authaddr: |
|
83748b2de465
Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3790
diff
changeset
|
296 authaddr = "" |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
297 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
298 # make the message body |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
299 m = [''] |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
300 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
301 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
302 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
|
303 m.append(self.email_signature(nodeid, msgid)) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
304 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
305 # add author information |
|
3877
83748b2de465
Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3790
diff
changeset
|
306 if authid and self.db.config.MAIL_ADD_AUTHORINFO: |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
307 if len(self.get(nodeid,'messages')) == 1: |
|
3877
83748b2de465
Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3790
diff
changeset
|
308 |
|
3599
f607494f5578
send_message: translate UI strings (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3515
diff
changeset
|
309 m.append(_("New submission from %(authname)s%(authaddr)s:") |
|
f607494f5578
send_message: translate UI strings (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3515
diff
changeset
|
310 % locals()) |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
311 elif msgid: |
|
3601
7b25567f0f54
indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents:
3599
diff
changeset
|
312 m.append(_("%(authname)s%(authaddr)s added the comment:") |
|
3599
f607494f5578
send_message: translate UI strings (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3515
diff
changeset
|
313 % locals()) |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
314 else: |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
315 m.append(_("Change by %(authname)s%(authaddr)s:") % locals()) |
|
3877
83748b2de465
Make addition of line about new submission/comment at top of each message...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3790
diff
changeset
|
316 m.append('') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
317 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
318 # add the content |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
319 if msgid is not None: |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
320 m.append(messages.get(msgid, 'content', '')) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
321 |
|
3882
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
322 # get the files for this message |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
323 message_files = [] |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
324 if msgid : |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
325 for fileid in messages.get(msgid, 'files') : |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
326 # try to avoid reading in the file contents just to check the size |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
327 # backends that inherit from blobfiles.FileStorage have a filename class |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
328 if hasattr(self.db, 'filename'): |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
329 filename = self.db.filename('file', fileid, None) |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
330 filesize = os.path.getsize(filename) |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
331 else: |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
332 # metakit doesn't inherit from FileStorage so we read the |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
333 # full file contents to get the size :-/ |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
334 filesize = len(self.db.file.get(fileid, 'content')) |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
335 |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
336 if filesize <= self.db.config.NOSY_MAX_ATTACHMENT_SIZE: |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
337 message_files.append(fileid) |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
338 else: |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
339 base = self.db.config.TRACKER_WEB |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
340 link = "".join((base, files.classname, fileid)) |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
341 filename = files.get(fileid, 'name') |
|
3886
5c4a039aa465
.send_message: fix translation for the "file not attached" message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3882
diff
changeset
|
342 m.append(_("File '%(filename)s' not attached - " |
|
5c4a039aa465
.send_message: fix translation for the "file not attached" message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3882
diff
changeset
|
343 "you can download it from %(link)s.") % locals()) |
|
3882
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
344 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
345 # add the change note |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
346 if note: |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
347 m.append(note) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
348 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
349 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
350 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
|
351 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
|
352 |
|
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
|
353 # encode the content as quoted-printable |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
354 charset = getattr(self.db.config, 'EMAIL_CHARSET', 'utf-8') |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
355 m = '\n'.join(m) |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
356 if charset != 'utf-8': |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
357 m = unicode(m, 'utf-8').encode(charset) |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
358 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
|
359 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
|
360 quopri.encode(content, content_encoded, 0) |
|
667
52ca0ae46044
Faster, easier, less mess ;)
Richard Jones <richard@users.sourceforge.net>
parents:
665
diff
changeset
|
361 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
|
362 |
|
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
|
363 # 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
|
364 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
|
365 |
|
1360
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
366 # 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
|
367 if from_address is None: |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
368 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
|
369 |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
370 # 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
|
371 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
|
372 if from_tag: |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
373 from_tag = ' ' + from_tag |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
374 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
375 subject = '[%s%s] %s'%(cn, nodeid, title) |
|
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
376 author = (authname + from_tag, from_address) |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
377 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
378 # send an individual message per recipient? |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
379 if self.db.config.NOSY_EMAIL_SENDING != 'single': |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
380 sendto = [[address] for address in sendto] |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
381 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
382 sendto = [sendto] |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
383 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
384 # now send one or more messages |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
385 # TODO: I believe we have to create a new message each time as we |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
386 # can't fiddle the recipients in the message ... worth testing |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
387 # and/or fixing some day |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
388 first = True |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
389 for sendto in sendto: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
390 # create the message |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
391 mailer = Mailer(self.db.config) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
392 message, writer = mailer.get_standard_message(sendto, subject, |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
393 author) |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
394 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
395 # set reply-to to the tracker |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
396 tracker_name = self.db.config.TRACKER_NAME |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
397 if charset != 'utf-8': |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
398 tracker = unicode(tracker_name, 'utf-8').encode(charset) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
399 tracker_name = encode_header(tracker_name, charset) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
400 writer.addheader('Reply-To', straddr((tracker_name, from_address))) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
401 |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
402 # message ids |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
403 if messageid: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
404 writer.addheader('Message-Id', messageid) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
405 if inreplyto: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
406 writer.addheader('In-Reply-To', inreplyto) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
407 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
408 # attach files |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
409 if message_files: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
410 part = writer.startmultipartbody('mixed') |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
411 part = writer.nextpart() |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
412 part.addheader('Content-Transfer-Encoding', 'quoted-printable') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
413 body = part.startbody('text/plain; charset=%s'%charset) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
414 body.write(content_encoded) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
415 for fileid in message_files: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
416 name = files.get(fileid, 'name') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
417 mime_type = files.get(fileid, 'type') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
418 content = files.get(fileid, 'content') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
419 part = writer.nextpart() |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
420 if mime_type == 'text/plain': |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
421 part.addheader('Content-Disposition', |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
422 'attachment;\n filename="%s"'%name) |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
423 try: |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
424 content.decode('ascii') |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
425 except UnicodeError: |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
426 # the content cannot be 7bit-encoded. |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
427 # use quoted printable |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
428 part.addheader('Content-Transfer-Encoding', |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
429 'quoted-printable') |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
430 body = part.startbody('text/plain') |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
431 body.write(quopri.encodestring(content)) |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
432 else: |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
433 part.addheader('Content-Transfer-Encoding', '7bit') |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
434 body = part.startbody('text/plain') |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
435 body.write(content) |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
436 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
437 # some other type, so encode it |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
438 if not mime_type: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
439 # this should have been done when the file was saved |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
440 mime_type = mimetypes.guess_type(name)[0] |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
441 if mime_type is None: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
442 mime_type = 'application/octet-stream' |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
443 part.addheader('Content-Disposition', |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
444 'attachment;\n filename="%s"'%name) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
445 part.addheader('Content-Transfer-Encoding', 'base64') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
446 body = part.startbody(mime_type) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
447 body.write(base64.encodestring(content)) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
448 writer.lastpart() |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
449 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
450 writer.addheader('Content-Transfer-Encoding', |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
451 'quoted-printable') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
452 body = writer.startbody('text/plain; charset=%s'%charset) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
453 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
|
454 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
455 if first: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
456 mailer.smtp_send(sendto + bcc_sendto, message) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
457 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
458 mailer.smtp_send(sendto, message) |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
459 first = False |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
460 |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
461 def email_signature(self, nodeid, msgid): |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
462 ''' 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
|
463 ''' |
|
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
|
464 # 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
|
465 # then append a trailing slash if it is missing |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
466 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
|
467 if (not isinstance(base , type('')) or |
|
1253
fe67477e678f
fixes from changes today
Richard Jones <richard@users.sourceforge.net>
parents:
1252
diff
changeset
|
468 not (base.startswith('http://') or base.startswith('https://'))): |
|
2183
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
469 web = "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
|
470 "fully-qualified URL" |
|
2183
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
471 else: |
|
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
472 if not base.endswith('/'): |
|
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
473 base = base + '/' |
|
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
474 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
|
475 |
|
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
476 # 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
|
477 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
|
478 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
|
479 |
|
1586
d1bab419f2a2
web url got longer
Richard Jones <richard@users.sourceforge.net>
parents:
1577
diff
changeset
|
480 line = '_' * max(len(web)+2, len(email)) |
|
2095
7d886a79ab67
make sure email signature starts on a newline [SF#919759]
Richard Jones <richard@users.sourceforge.net>
parents:
2089
diff
changeset
|
481 return '\n%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
|
482 |
|
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
|
483 |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
484 def generateCreateNote(self, nodeid): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
485 """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
|
486 """ |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
487 cn = self.classname |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
488 cl = self.db.classes[cn] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
489 props = cl.getprops(protected=0) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
490 |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
491 # list the values |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
492 m = [] |
|
3132
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
493 prop_items = props.items() |
|
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
494 prop_items.sort() |
|
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
495 for propname, prop in prop_items: |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
496 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
|
497 # skip boring entries |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
498 if not value: |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
499 continue |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
500 if isinstance(prop, hyperdb.Link): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
501 link = self.db.classes[prop.classname] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
502 if value: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
503 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
|
504 if key: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
505 value = link.get(value, key) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
506 else: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
507 value = '' |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
508 elif isinstance(prop, hyperdb.Multilink): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
509 if value is None: value = [] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
510 l = [] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
511 link = self.db.classes[prop.classname] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
512 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
|
513 if key: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
514 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
|
515 value.sort() |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
516 value = ', '.join(value) |
|
3740
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
517 else: |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
518 value = str(value) |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
519 if '\n' in value: |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
520 value = '\n'+self.indentChangeNoteValue(value) |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
521 m.append('%s: %s'%(propname, value)) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
522 m.insert(0, '----------') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
523 m.insert(0, '') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
524 return '\n'.join(m) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
525 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
526 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
|
527 """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
|
528 """ |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2228
diff
changeset
|
529 if not isinstance(oldvalues, type({})): |
|
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2228
diff
changeset
|
530 raise TypeError("'oldvalues' must be dict-like, not %s."% |
|
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2228
diff
changeset
|
531 type(oldvalues)) |
|
772
db5daf396518
Removed temporary workaround.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
770
diff
changeset
|
532 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
533 cn = self.classname |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
534 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
|
535 changed = {} |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
536 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
|
537 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
538 # determine what changed |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
539 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
|
540 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
|
541 continue |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2073
diff
changeset
|
542 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
|
543 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
|
544 # 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
|
545 # this happens when property was deleted |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2228
diff
changeset
|
546 try: |
|
1812
6f3b92a817aa
fixed Apply Error that was raised when property was deleted from class...
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1800
diff
changeset
|
547 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
|
548 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
|
549 continue |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
550 # 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
|
551 # 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
|
552 try: |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
553 old_value = oldvalues[key] |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
554 if type(new_value) is type([]): |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
555 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
|
556 old_value.sort() |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
557 if new_value != old_value: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
558 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
|
559 except: |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
560 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
|
561 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
562 # list the changes |
|
440
de5bf4191f11
Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents:
439
diff
changeset
|
563 m = [] |
|
3132
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
564 changed_items = changed.items() |
|
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
565 changed_items.sort() |
|
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
566 for propname, oldvalue in changed_items: |
|
647
b3b483e0fd5e
Fixed a couple of dodgy bits found by pychekcer.
Richard Jones <richard@users.sourceforge.net>
parents:
644
diff
changeset
|
567 prop = props[propname] |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
568 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
|
569 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
|
570 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
|
571 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
|
572 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
573 if value: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
574 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
|
575 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
576 value = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
577 if oldvalue: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
578 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
|
579 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
580 oldvalue = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
581 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
|
582 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
|
583 change = '' |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
584 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
|
585 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
|
586 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
587 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
|
588 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
|
589 # check for additions |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
590 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
|
591 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
|
592 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
593 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
|
594 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
595 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
596 if l: |
|
1095
711f2ecee20f
unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
597 l.sort() |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
598 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
|
599 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
600 # check for removals |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
601 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
|
602 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
|
603 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
604 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
|
605 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
606 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
607 if l: |
|
1095
711f2ecee20f
unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
608 l.sort() |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
609 change += ' -%s'%(', '.join(l)) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
610 else: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
611 change = '%s -> %s'%(oldvalue, value) |
|
3740
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
612 if '\n' in change: |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
613 value = self.indentChangeNoteValue(str(value)) |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
614 oldvalue = self.indentChangeNoteValue(str(oldvalue)) |
|
3790
9171e01ac932
use named variable slots in translation string
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3750
diff
changeset
|
615 change = _('\nNow:\n%(new)s\nWas:\n%(old)s') % { |
|
9171e01ac932
use named variable slots in translation string
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3750
diff
changeset
|
616 "new": value, "old": oldvalue} |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
617 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
|
618 if m: |
|
442
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
619 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
|
620 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
|
621 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
|
622 |
|
3740
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
623 def indentChangeNoteValue(self, text): |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
624 lines = text.rstrip('\n').split('\n') |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
625 lines = [ ' '+line for line in lines ] |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
626 return '\n'.join(lines) |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
627 |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
628 # vim: set filetype=python sts=4 sw=4 et si : |
