Mercurial > p > roundup > code
annotate roundup/roundupdb.py @ 4736:8a32d8223aa4
CHANGES.txt: Mention demo.py fixes
| author | anatoly techtonik <techtonik@gmail.com> |
|---|---|
| date | Mon, 14 Jan 2013 18:26:09 +0300 |
| parents | dfbc0cfa9811 |
| children | 9cc6d463cfbe |
| 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 # |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
19 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
20 """Extending hyperdb with types specific to issue-tracking. |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
21 """ |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
22 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
23 |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
24 import re, os, smtplib, socket, time, random |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
25 import cStringIO, base64, mimetypes |
|
3882
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
26 import os.path |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
27 import logging |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
28 from email import Encoders |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
29 from email.Utils import formataddr |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
30 from email.Header import Header |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
31 from email.MIMEText import MIMEText |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
32 from email.MIMEBase import MIMEBase |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
33 from email.MIMEMultipart import MIMEMultipart |
|
4426
25085aec7d5a
fix py2.4 compatibility
Richard Jones <richard@users.sourceforge.net>
parents:
4424
diff
changeset
|
34 |
|
4447
9d37875416c3
python2.3 compatibility fixes
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4426
diff
changeset
|
35 from anypy.email_ import FeedParser |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1379
diff
changeset
|
36 |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
37 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
|
38 from roundup.i18n import _ |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
39 from roundup.hyperdb import iter_roles |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
40 |
|
4338
94ee533613ac
Attempt to generate more human-readable addresses in email
Richard Jones <richard@users.sourceforge.net>
parents:
4290
diff
changeset
|
41 from roundup.mailer import Mailer, MessageSendError, encode_quopri, \ |
|
94ee533613ac
Attempt to generate more human-readable addresses in email
Richard Jones <richard@users.sourceforge.net>
parents:
4290
diff
changeset
|
42 nice_sender_header |
|
458
fcda73536034
Added ROUNDUPDBSENDMAILDEBUG so one can test the sendmail method...
Richard Jones <richard@users.sourceforge.net>
parents:
453
diff
changeset
|
43 |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
44 try: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
45 import pyme, pyme.core |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
46 except ImportError: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
47 pyme = None |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
48 |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
49 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 class Database: |
|
2735
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
51 |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
52 # 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
|
53 # 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
|
54 # 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
|
55 # (eg. the current user edits their username) |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
56 journal_uid = None |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 def getuid(self): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 """Return the id of the "user" node associated with the user |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 that owns this connection to the hyperdatabase.""" |
|
1800
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
60 if self.journaltag is None: |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
61 return None |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
62 elif self.journaltag == 'admin': |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
63 # 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
|
64 return '1' |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
65 else: |
|
2735
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
66 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
|
67 self.journaltag): |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
68 uid = self.user.lookup(self.journaltag) |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
69 self.journal_uid = (self.journaltag, uid) |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
70 return self.journal_uid[1] |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 |
|
2906
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
72 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
|
73 """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
|
74 activities. |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
75 """ |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
76 self.journaltag = username |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
77 |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
78 def isCurrentUser(self, username): |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
79 """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
|
80 """ |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
81 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
|
82 |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
83 def getUserTimezone(self): |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
84 """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
|
85 If no such property exists return 0 |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
86 """ |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
87 userid = self.getuid() |
|
3621
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
88 timezone = None |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
89 try: |
|
3621
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
90 tz = self.user.get(userid, 'timezone') |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
91 date.get_timezone(tz) |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
92 timezone = tz |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
93 except KeyError: |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
94 pass |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
95 # 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
|
96 # 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
|
97 # the timezone set in the tracker config. |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
98 if timezone is None: |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
99 timezone = self.config['TIMEZONE'] |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
100 return timezone |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
101 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
102 def confirm_registration(self, otk): |
|
2089
93f03c6714d8
A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
103 props = self.getOTKManager().getall(otk) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
104 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
|
105 value = props.get(propname, None) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
106 if value is None: |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
107 pass |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
108 elif isinstance(proptype, hyperdb.Date): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
109 props[propname] = date.Date(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
110 elif isinstance(proptype, hyperdb.Interval): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
111 props[propname] = date.Interval(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
112 elif isinstance(proptype, hyperdb.Password): |
|
4480
1613754d2646
Fix first part of Password handling security issue2550688
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4447
diff
changeset
|
113 props[propname] = password.Password(encrypted=value) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
114 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
115 # tag new user creation with 'admin' |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
116 self.journaltag = 'admin' |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
117 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
118 # create the new user |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
119 cl = self.user |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
120 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
121 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
|
122 userid = cl.create(**props) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
123 # 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
|
124 self.getOTKManager().destroy(otk) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
125 self.commit() |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
126 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
127 return userid |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
128 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
129 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
130 def log_debug(self, msg, *args, **kwargs): |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
131 """Log a message with level DEBUG.""" |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
132 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
133 logger = self.get_logger() |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
134 logger.debug(msg, *args, **kwargs) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
135 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
136 def log_info(self, msg, *args, **kwargs): |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
137 """Log a message with level INFO.""" |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
138 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
139 logger = self.get_logger() |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
140 logger.info(msg, *args, **kwargs) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
141 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
142 def get_logger(self): |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
143 """Return the logger for this database.""" |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
144 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
145 # Because getting a logger requires acquiring a lock, we want |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
146 # to do it only once. |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
147 if not hasattr(self, '__logger'): |
|
4420
9655a1b65974
- more logger fixes -- use correct hierarchical logger names...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4358
diff
changeset
|
148 self.__logger = logging.getLogger('roundup.hyperdb') |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
149 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
150 return self.__logger |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
151 |
|
4652
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
152 def clearCache(self): |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
153 """ Backends may keep a cache. |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
154 It must be cleared at end of commit and rollback methods. |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
155 We allow to register user-defined cache-clearing routines |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
156 that are called by this routine. |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
157 """ |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
158 if getattr (self, 'cache_callbacks', None) : |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
159 for method, param in self.cache_callbacks: |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
160 method(param) |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
161 |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
162 def registerClearCacheCallback(self, method, param = None): |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
163 """ Register a callback method for clearing the cache. |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
164 It is called with the given param as the only parameter. |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
165 Even if the parameter is not specified, the method has to |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
166 accept a single parameter. |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
167 """ |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
168 if not getattr (self, 'cache_callbacks', None) : |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
169 self.cache_callbacks = [] |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
170 self.cache_callbacks.append ((method, param)) |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
171 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
172 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
173 class DetectorError(RuntimeError): |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
174 """ 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
|
175 """ |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
176 pass |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
177 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
178 # 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
|
179 class IssueClass: |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
180 """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
|
181 implementation. The backend should provide a mechanism that |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
182 enforces the title, messages, files, nosy and superseder |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
183 properties: |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
184 |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
185 - title = hyperdb.String(indexme='yes') |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
186 - messages = hyperdb.Multilink("msg") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
187 - files = hyperdb.Multilink("file") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
188 - nosy = hyperdb.Multilink("user") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
189 - 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
|
190 """ |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
191 |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
192 # 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
|
193 # 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
|
194 # marked for message extraction tool. |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
195 # |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
196 # 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
|
197 # |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
198 # 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
|
199 # defined in the classic template: |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3892
diff
changeset
|
200 # assignedto, keyword, priority, status. |
|
2545
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
201 ( |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
202 ''"title", ''"messages", ''"files", ''"nosy", ''"superseder", |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3892
diff
changeset
|
203 ''"assignedto", ''"keyword", ''"priority", ''"status", |
|
2545
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
204 # following properties are common for all hyperdb classes |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
205 # 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
|
206 ''"actor", ''"activity", ''"creator", ''"creation", |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
207 ) |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
208 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
209 # New methods: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
210 def addmessage(self, issueid, summary, text): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
211 """Add a message to an issue's mail spool. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
212 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
213 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
|
214 owns the database connection as the author, and the specified summary |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
215 text. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
216 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
217 The "files" and "recipients" fields are left empty. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
218 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
219 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
|
220 appended to the "messages" field of the specified issue. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
221 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
222 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
223 def nosymessage(self, issueid, msgid, oldvalues, whichnosy='nosy', |
|
4497
29576edb45d5
Allow to specify additional cc and bcc emails (not roundup users)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4480
diff
changeset
|
224 from_address=None, cc=[], bcc=[], cc_emails = [], bcc_emails = []): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
225 """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
|
226 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
227 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
|
228 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
|
229 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
230 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
|
231 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
232 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
|
233 list, and it's called a 'System Message'. |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
234 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
235 The "cc" argument indicates additional recipients to send the |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
236 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
|
237 list. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
238 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
239 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
|
240 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
|
241 list. These recipients will not be included in the To: or Cc: |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
242 address lists. Note that the list of bcc users *is* updated in |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
243 the recipient list of the message, so this field has to be |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
244 protected (using appropriate permissions), otherwise the bcc |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
245 will be decuceable for users who have web access to the tracker. |
|
4497
29576edb45d5
Allow to specify additional cc and bcc emails (not roundup users)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4480
diff
changeset
|
246 |
|
29576edb45d5
Allow to specify additional cc and bcc emails (not roundup users)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4480
diff
changeset
|
247 The cc_emails and bcc_emails arguments take a list of additional |
|
29576edb45d5
Allow to specify additional cc and bcc emails (not roundup users)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4480
diff
changeset
|
248 recipient email addresses (just the mail address not roundup users) |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
249 this can be useful for sending to additional email addresses |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
250 which are no roundup users. These arguments are currently not |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
251 used by roundups nosyreaction but can be used by customized |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
252 (nosy-)reactors. |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
253 |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
254 A note on encryption: If pgp encryption for outgoing mails is |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
255 turned on in the configuration and no specific pgp roles are |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
256 defined, we try to send encrypted mail to *all* users |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
257 *including* cc, bcc, cc_emails and bcc_emails and this might |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
258 fail if not all the keys are available in roundups keyring. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
259 """ |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
260 encrypt = self.db.config.PGP_ENABLE and self.db.config.PGP_ENCRYPT |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
261 pgproles = self.db.config.PGP_ROLES |
|
3515
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
262 if msgid: |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
263 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
|
264 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
|
265 else: |
|
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
266 # "system message" |
|
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
267 authid = None |
|
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
268 recipients = [] |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
269 |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
270 sendto = dict (plain = [], crypt = []) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
271 bcc_sendto = dict (plain = [], crypt = []) |
|
1949
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
272 seen_message = {} |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
273 for recipient in recipients: |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
274 seen_message[recipient] = 1 |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
275 |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
276 def add_recipient(userid, to): |
|
4289
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
277 """ make sure they have an 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
|
278 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
|
279 if address: |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
280 ciphered = encrypt and (not pgproles or |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
281 self.db.user.has_role(userid, *iter_roles(pgproles))) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
282 type = ['plain', 'crypt'][ciphered] |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
283 to[type].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
|
284 recipients.append(userid) |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2059
diff
changeset
|
285 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
286 def good_recipient(userid): |
|
4289
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
287 """ Make sure we don't send mail to either the anonymous |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
288 user or a user who has already seen the message. |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
289 Also check permissions on the message if not a system |
|
4290
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4289
diff
changeset
|
290 message: A user must have view permission on content and |
|
4480
1613754d2646
Fix first part of Password handling security issue2550688
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4447
diff
changeset
|
291 files to be on the receiver list. We do *not* check the |
|
4289
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
292 author etc. for now. |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
293 """ |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
294 allowed = True |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
295 if msgid: |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
296 for prop in 'content', 'files': |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
297 if prop in self.db.msg.properties: |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
298 allowed = allowed and self.db.security.hasPermission( |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
299 'View', userid, 'msg', prop, msgid) |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
300 return (userid and |
|
1928
7c1ddebe7589
Small readability improvements.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1927
diff
changeset
|
301 (self.db.user.get(userid, 'username') != 'anonymous') and |
|
4289
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
302 allowed and not seen_message.has_key(userid)) |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2059
diff
changeset
|
303 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
304 # 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
|
305 # 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
|
306 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
|
307 (self.db.config.MESSAGES_TO_AUTHOR == 'yes' or |
|
4547
d9d7319afffa
Add config-option "nosy" to messages_to_author setting in [nosy] section...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4542
diff
changeset
|
308 (self.db.config.MESSAGES_TO_AUTHOR == 'new' and not oldvalues) or |
|
d9d7319afffa
Add config-option "nosy" to messages_to_author setting in [nosy] section...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4542
diff
changeset
|
309 (self.db.config.MESSAGES_TO_AUTHOR == 'nosy' and authid in |
|
d9d7319afffa
Add config-option "nosy" to messages_to_author setting in [nosy] section...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4542
diff
changeset
|
310 self.get(issueid, whichnosy)))): |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
311 add_recipient(authid, sendto) |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
312 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
313 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
|
314 seen_message[authid] = 1 |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
315 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
316 # now deal with the nosy and cc people who weren't recipients. |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
317 for userid in cc + self.get(issueid, whichnosy): |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
318 if good_recipient(userid): |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
319 add_recipient(userid, sendto) |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
320 if encrypt and not pgproles: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
321 sendto['crypt'].extend (cc_emails) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
322 else: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
323 sendto['plain'].extend (cc_emails) |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
324 |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
325 # now deal with bcc people. |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
326 for userid in bcc: |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
327 if good_recipient(userid): |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
328 add_recipient(userid, bcc_sendto) |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
329 if encrypt and not pgproles: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
330 bcc_sendto['crypt'].extend (bcc_emails) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
331 else: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
332 bcc_sendto['plain'].extend (bcc_emails) |
| 337 | 333 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
334 if oldvalues: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
335 note = self.generateChangeNote(issueid, oldvalues) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
336 else: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
337 note = self.generateCreateNote(issueid) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
338 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
339 # 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
|
340 # and send the mail. |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
341 if sendto['plain'] or sendto['crypt']: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
342 # update msgid and recipients only if non-bcc have changed |
|
2738
3a7039bc2f97
couple more msgid == None fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2737
diff
changeset
|
343 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
|
344 self.db.msg.set(msgid, recipients=recipients) |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
345 if sendto['plain'] or bcc_sendto['plain']: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
346 self.send_message(issueid, msgid, note, sendto['plain'], |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
347 from_address, bcc_sendto['plain']) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
348 if sendto['crypt'] or bcc_sendto['crypt']: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
349 self.send_message(issueid, msgid, note, sendto['crypt'], |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
350 from_address, bcc_sendto['crypt'], crypt=True) |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
351 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
352 # backwards compatibility - don't remove |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
353 sendmessage = nosymessage |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
354 |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
355 def encrypt_to(self, message, sendto): |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
356 """ Encrypt given message to sendto receivers. |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
357 Returns a new RFC 3156 conforming message. |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
358 """ |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
359 plain = pyme.core.Data(message.as_string()) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
360 cipher = pyme.core.Data() |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
361 ctx = pyme.core.Context() |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
362 ctx.set_armor(1) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
363 keys = [] |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
364 for adr in sendto: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
365 ctx.op_keylist_start(adr, 0) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
366 # only first key per email |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
367 k = ctx.op_keylist_next() |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
368 if k is not None: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
369 keys.append(k) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
370 else: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
371 msg = _('No key for "%(adr)s" in keyring')%locals() |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
372 raise MessageSendError, msg |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
373 ctx.op_keylist_end() |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
374 ctx.op_encrypt(keys, 1, plain, cipher) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
375 cipher.seek(0,0) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
376 msg = MIMEMultipart('encrypted', boundary=None, _subparts=None, |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
377 protocol="application/pgp-encrypted") |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
378 part = MIMEBase('application', 'pgp-encrypted') |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
379 part.set_payload("Version: 1\r\n") |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
380 msg.attach(part) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
381 part = MIMEBase('application', 'octet-stream') |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
382 part.set_payload(cipher.read()) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
383 msg.attach(part) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
384 return msg |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
385 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
386 def send_message(self, issueid, msgid, note, sendto, from_address=None, |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
387 bcc_sendto=[], crypt=False): |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
388 '''Actually send the nominated message from this issue to the sendto |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
389 recipients, with the note appended. |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
390 ''' |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
391 users = self.db.user |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
392 messages = self.db.msg |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
393 files = self.db.file |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
394 |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
395 if msgid is None: |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
396 inreplyto = None |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
397 messageid = None |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
398 else: |
|
2765
3468f74bd7ce
fix copy/paste error made in r1.114
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2738
diff
changeset
|
399 inreplyto = messages.get(msgid, 'inreplyto') |
|
3468f74bd7ce
fix copy/paste error made in r1.114
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2738
diff
changeset
|
400 messageid = messages.get(msgid, 'messageid') |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
401 |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
402 # 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
|
403 if not messageid: |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
404 # 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
|
405 # create one |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
406 messageid = "<%s.%s.%s%s@%s>"%(time.time(), random.random(), |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
407 self.classname, issueid, |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
408 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
|
409 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
|
410 messages.set(msgid, messageid=messageid) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
411 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
412 # compose title |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
413 cn = self.classname |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
414 title = self.get(issueid, '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
|
415 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
416 # 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
|
417 if msgid: |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
418 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
|
419 else: |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
420 authid = self.db.getuid() |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
421 authname = users.get(authid, 'realname') |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
422 if not authname: |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
423 authname = users.get(authid, 'username', '') |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
424 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
|
425 |
|
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
|
426 if authaddr and self.db.config.MAIL_ADD_AUTHOREMAIL: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
427 authaddr = " <%s>" % formataddr( ('',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
|
428 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
|
429 authaddr = "" |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
430 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
431 # make the message body |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
432 m = [''] |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
433 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
434 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
435 if self.db.config.EMAIL_SIGNATURE_POSITION == 'top': |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
436 m.append(self.email_signature(issueid, msgid)) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
437 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
438 # 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
|
439 if authid and self.db.config.MAIL_ADD_AUTHORINFO: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
440 if msgid and len(self.get(issueid, 'messages')) == 1: |
|
3599
f607494f5578
send_message: translate UI strings (patch [SF#1462491])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3515
diff
changeset
|
441 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
|
442 % locals()) |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
443 elif msgid: |
|
3601
7b25567f0f54
indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents:
3599
diff
changeset
|
444 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
|
445 % locals()) |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
446 else: |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
447 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
|
448 m.append('') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
449 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
450 # add the content |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
451 if msgid is not None: |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
452 m.append(messages.get(msgid, 'content', '')) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
453 |
|
3882
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
454 # 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
|
455 message_files = [] |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
456 if msgid : |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
457 for fileid in messages.get(msgid, 'files') : |
|
3941
9997b941dd6d
remove some metakit references
Richard Jones <richard@users.sourceforge.net>
parents:
3939
diff
changeset
|
458 # check the attachment size |
|
4347
0e33bf5571dc
make some more memorydb tests pass
Richard Jones <richard@users.sourceforge.net>
parents:
4338
diff
changeset
|
459 filesize = self.db.filesize('file', fileid, None) |
|
3882
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
460 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
|
461 message_files.append(fileid) |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
462 else: |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
463 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
|
464 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
|
465 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
|
466 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
|
467 "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
|
468 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
469 # add the change note |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
470 if note: |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
471 m.append(note) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
472 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
473 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
474 if self.db.config.EMAIL_SIGNATURE_POSITION == 'bottom': |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
475 m.append(self.email_signature(issueid, 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
|
476 |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
477 # figure the encoding |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
478 charset = getattr(self.db.config, 'EMAIL_CHARSET', 'utf-8') |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
479 |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
480 # construct the content and convert to unicode object |
|
4225
7baf1925c4c1
fix construction of individual messages to nosy recipents with attachments
Richard Jones <richard@users.sourceforge.net>
parents:
4214
diff
changeset
|
481 body = unicode('\n'.join(m), 'utf-8').encode(charset) |
|
665
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
482 |
|
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
|
483 # 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
|
484 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
|
485 |
|
1360
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
486 # 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
|
487 if from_address is None: |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
488 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
|
489 |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
490 # 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
|
491 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
|
492 if from_tag: |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
493 from_tag = ' ' + from_tag |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
494 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
495 subject = '[%s%s] %s'%(cn, issueid, title) |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
496 author = (authname + from_tag, from_address) |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
497 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
498 # 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
|
499 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
|
500 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
|
501 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
502 sendto = [sendto] |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
503 |
|
4338
94ee533613ac
Attempt to generate more human-readable addresses in email
Richard Jones <richard@users.sourceforge.net>
parents:
4290
diff
changeset
|
504 # tracker sender info |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
505 tracker_name = unicode(self.db.config.TRACKER_NAME, 'utf-8') |
|
4338
94ee533613ac
Attempt to generate more human-readable addresses in email
Richard Jones <richard@users.sourceforge.net>
parents:
4290
diff
changeset
|
506 tracker_name = nice_sender_header(tracker_name, from_address, |
|
94ee533613ac
Attempt to generate more human-readable addresses in email
Richard Jones <richard@users.sourceforge.net>
parents:
4290
diff
changeset
|
507 charset) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
508 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
509 # 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
|
510 # 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
|
511 # 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
|
512 # and/or fixing some day |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
513 first = True |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
514 for sendto in sendto: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
515 # create the message |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
516 mailer = Mailer(self.db.config) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
517 |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4497
diff
changeset
|
518 message = mailer.get_standard_message(multipart=message_files) |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
519 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
520 # set reply-to to the tracker |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
521 message['Reply-To'] = tracker_name |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
522 |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
523 # message ids |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
524 if messageid: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
525 message['Message-Id'] = messageid |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
526 if inreplyto: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
527 message['In-Reply-To'] = inreplyto |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
528 |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
529 # Generate a header for each link or multilink to |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
530 # a class that has a name attribute |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
531 for propname, prop in self.getprops().items(): |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
532 if not isinstance(prop, (hyperdb.Link, hyperdb.Multilink)): |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
533 continue |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
534 cl = self.db.getclass(prop.classname) |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
535 if not 'name' in cl.getprops(): |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
536 continue |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
537 if isinstance(prop, hyperdb.Link): |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
538 value = self.get(issueid, propname) |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
539 if value is None: |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
540 continue |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
541 values = [value] |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
542 else: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
543 values = self.get(issueid, propname) |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
544 if not values: |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
545 continue |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
546 values = [cl.get(v, 'name') for v in values] |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
547 values = ', '.join(values) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
548 header = "X-Roundup-%s-%s"%(self.classname, propname) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
549 try: |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
550 message[header] = values.encode('ascii') |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
551 except UnicodeError: |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
552 message[header] = Header(values, charset) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
553 |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
554 if not inreplyto: |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
555 # Default the reply to the first message |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
556 msgs = self.get(issueid, 'messages') |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
557 # Assume messages are sorted by increasing message number here |
|
3986
68accc7d4b69
indexerror when there are no messages to the issue
Richard Jones <richard@users.sourceforge.net>
parents:
3958
diff
changeset
|
558 # If the issue is just being created, and the submitter didn't |
|
68accc7d4b69
indexerror when there are no messages to the issue
Richard Jones <richard@users.sourceforge.net>
parents:
3958
diff
changeset
|
559 # provide a message, then msgs will be empty. |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
560 if msgs and msgs[0] != msgid: |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
561 inreplyto = messages.get(msgs[0], 'messageid') |
|
3958
642201ee1d75
paranoia from Toby Dickenson
Richard Jones <richard@users.sourceforge.net>
parents:
3957
diff
changeset
|
562 if inreplyto: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
563 message['In-Reply-To'] = inreplyto |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
564 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
565 # attach files |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
566 if message_files: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
567 # first up the text as a part |
|
4225
7baf1925c4c1
fix construction of individual messages to nosy recipents with attachments
Richard Jones <richard@users.sourceforge.net>
parents:
4214
diff
changeset
|
568 part = MIMEText(body) |
|
4423
579802067547
Fix charset of first text-part of outgoing multipart messages...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4420
diff
changeset
|
569 part.set_charset(charset) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
570 encode_quopri(part) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
571 message.attach(part) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
572 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
573 for fileid in message_files: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
574 name = files.get(fileid, 'name') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
575 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
|
576 content = files.get(fileid, 'content') |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
577 if mime_type == 'text/plain': |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
578 try: |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
579 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
|
580 except UnicodeError: |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
581 # 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
|
582 # use quoted printable |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
583 # XXX stuffed if we know the charset though :( |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
584 part = MIMEText(content) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
585 encode_quopri(part) |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
586 else: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
587 part = MIMEText(content) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
588 part['Content-Transfer-Encoding'] = '7bit' |
|
4424
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
589 elif mime_type == 'message/rfc822': |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
590 main, sub = mime_type.split('/') |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
591 p = FeedParser() |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
592 p.feed(content) |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
593 part = MIMEBase(main, sub) |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
594 part.set_payload([p.close()]) |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
595 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
596 # 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
|
597 if not mime_type: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
598 # 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
|
599 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
|
600 if mime_type is None: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
601 mime_type = 'application/octet-stream' |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
602 main, sub = mime_type.split('/') |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
603 part = MIMEBase(main, sub) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
604 part.set_payload(content) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
605 Encoders.encode_base64(part) |
|
4424
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
606 cd = 'Content-Disposition' |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
607 part[cd] = 'attachment;\n filename="%s"'%name |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
608 message.attach(part) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
609 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
610 else: |
|
4225
7baf1925c4c1
fix construction of individual messages to nosy recipents with attachments
Richard Jones <richard@users.sourceforge.net>
parents:
4214
diff
changeset
|
611 message.set_payload(body) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
612 encode_quopri(message) |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
613 |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
614 if crypt: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
615 send_msg = self.encrypt_to (message, sendto) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
616 else: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
617 send_msg = message |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
618 mailer.set_message_attributes(send_msg, sendto, subject, author) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
619 send_msg ['Message-Id'] = message ['Message-Id'] |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
620 send_msg ['Reply-To'] = message ['Reply-To'] |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
621 if message.get ('In-Reply-To'): |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
622 send_msg ['In-Reply-To'] = message ['In-Reply-To'] |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
623 mailer.smtp_send(sendto, send_msg.as_string()) |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
624 if first: |
|
4542
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
625 if crypt: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
626 # send individual bcc mails, otherwise receivers can |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
627 # deduce bcc recipients from keys in message |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
628 for bcc in bcc_sendto: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
629 send_msg = self.encrypt_to (message, [bcc]) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
630 send_msg ['Message-Id'] = message ['Message-Id'] |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
631 send_msg ['Reply-To'] = message ['Reply-To'] |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
632 if message.get ('In-Reply-To'): |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
633 send_msg ['In-Reply-To'] = message ['In-Reply-To'] |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
634 mailer.smtp_send([bcc], send_msg.as_string()) |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
635 elif bcc_sendto: |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
636 mailer.smtp_send(bcc_sendto, send_msg.as_string()) |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
637 first = False |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
638 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
639 def email_signature(self, issueid, msgid): |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
640 ''' 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
|
641 ''' |
|
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
|
642 # 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
|
643 # 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
|
644 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
|
645 if (not isinstance(base , type('')) or |
|
1253
fe67477e678f
fixes from changes today
Richard Jones <richard@users.sourceforge.net>
parents:
1252
diff
changeset
|
646 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
|
647 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
|
648 "fully-qualified URL" |
|
2183
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
649 else: |
|
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
650 if not base.endswith('/'): |
|
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
651 base = base + '/' |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
652 web = base + self.classname + issueid |
|
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
|
653 |
|
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
654 # ensure the email address is properly quoted |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
655 email = formataddr((self.db.config.TRACKER_NAME, |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
656 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
|
657 |
|
1586
d1bab419f2a2
web url got longer
Richard Jones <richard@users.sourceforge.net>
parents:
1577
diff
changeset
|
658 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
|
659 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
|
660 |
|
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
|
661 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
662 def generateCreateNote(self, issueid): |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
663 """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
|
664 """ |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
665 cn = self.classname |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
666 cl = self.db.classes[cn] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
667 props = cl.getprops(protected=0) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
668 |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
669 # list the values |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
670 m = [] |
|
3132
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
671 prop_items = props.items() |
|
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
672 prop_items.sort() |
|
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
673 for propname, prop in prop_items: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
674 value = cl.get(issueid, propname, None) |
|
559
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
675 # skip boring entries |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
676 if not value: |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
677 continue |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
678 if isinstance(prop, hyperdb.Link): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
679 link = self.db.classes[prop.classname] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
680 if value: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
681 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
|
682 if key: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
683 value = link.get(value, key) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
684 else: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
685 value = '' |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
686 elif isinstance(prop, hyperdb.Multilink): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
687 if value is None: value = [] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
688 l = [] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
689 link = self.db.classes[prop.classname] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
690 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
|
691 if key: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
692 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
|
693 value.sort() |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
694 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
|
695 else: |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
696 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
|
697 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
|
698 value = '\n'+self.indentChangeNoteValue(value) |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
699 m.append('%s: %s'%(propname, value)) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
700 m.insert(0, '----------') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
701 m.insert(0, '') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
702 return '\n'.join(m) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
703 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
704 def generateChangeNote(self, issueid, oldvalues): |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
705 """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
|
706 """ |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2228
diff
changeset
|
707 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
|
708 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
|
709 type(oldvalues)) |
|
772
db5daf396518
Removed temporary workaround.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
770
diff
changeset
|
710 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
711 cn = self.classname |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
712 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
|
713 changed = {} |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
714 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
|
715 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
716 # determine what changed |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
717 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
|
718 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
|
719 continue |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2073
diff
changeset
|
720 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
|
721 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
|
722 # 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
|
723 # 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
|
724 try: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
725 new_value = cl.get(issueid, key) |
|
1812
6f3b92a817aa
fixed Apply Error that was raised when property was deleted from class...
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1800
diff
changeset
|
726 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
|
727 continue |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
728 # 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
|
729 # 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
|
730 try: |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
731 old_value = oldvalues[key] |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
732 if type(new_value) is type([]): |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
733 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
|
734 old_value.sort() |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
735 if new_value != old_value: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
736 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
|
737 except: |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
738 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
|
739 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
740 # list the changes |
|
440
de5bf4191f11
Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents:
439
diff
changeset
|
741 m = [] |
|
3132
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
742 changed_items = changed.items() |
|
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
743 changed_items.sort() |
|
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
744 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
|
745 prop = props[propname] |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
746 value = cl.get(issueid, propname, None) |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
747 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
|
748 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
|
749 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
|
750 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
751 if value: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
752 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
|
753 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
754 value = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
755 if oldvalue: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
756 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
|
757 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
758 oldvalue = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
759 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
|
760 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
|
761 change = '' |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
762 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
|
763 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
|
764 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
765 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
|
766 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
|
767 # check for additions |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
768 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
|
769 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
|
770 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
771 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
|
772 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
773 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
774 if l: |
|
1095
711f2ecee20f
unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
775 l.sort() |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
776 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
|
777 l = [] |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
778 # check for removals |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
779 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
|
780 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
|
781 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
782 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
|
783 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
784 l.append(entry) |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
785 if l: |
|
1095
711f2ecee20f
unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
786 l.sort() |
|
428
7956563d49ae
Property changes are now completely traceable, whether changes are
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
425
diff
changeset
|
787 change += ' -%s'%(', '.join(l)) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
788 else: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
789 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
|
790 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
|
791 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
|
792 oldvalue = self.indentChangeNoteValue(str(oldvalue)) |
|
3790
9171e01ac932
use named variable slots in translation string
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3750
diff
changeset
|
793 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
|
794 "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
|
795 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
|
796 if m: |
|
442
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
797 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
|
798 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
|
799 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
|
800 |
|
3740
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
801 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
|
802 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
|
803 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
|
804 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
|
805 |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
806 # vim: set filetype=python sts=4 sw=4 et si : |
