Mercurial > p > roundup > code
annotate roundup/roundupdb.py @ 8543:1ffa1f42e1da
refactor: rework mime type comparison and clean code
rest.py:
accept application/* as match for application/json in non
/binary_context rest path.
allow defining default mime type to return when file/message is
missing mime type. Make it a class variable to it can be changed from
text/plain to text/markdown or whatever.
extract code from determine_output_format() to create
create_valid_content_types() method which returns a list of matching
mime types for a given type/subtype.
Eliminate mostly duplicate return statements by introducing a variable
to specify valid mime types in error message.
rest_common.py:
Fix error messages that now return application/* as valid mime type.
CHANGES.txt upgrading.txt rest.txt:
top level notes and corrections.
Also correct rst syntax on earlier change.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 24 Mar 2026 21:30:47 -0400 |
| parents | 24549122f9b1 |
| children |
| rev | line source |
|---|---|
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
1 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
3 # This module is free software, and you may redistribute it and/or modify |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
4 # under the same terms as Python, so long as this copyright message and |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
5 # disclaimer are retained in their original form. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
6 # |
| 214 | 7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
10 # POSSIBILITY OF SUCH DAMAGE. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
11 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
188
diff
changeset
|
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
17 # |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
393
diff
changeset
|
18 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
19 """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
|
20 """ |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
21 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
22 |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
23 import base64 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
24 import logging |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
25 import mimetypes |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
26 import time |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
27 |
|
5422
a0ed8d5d744f
Python 3 preparation: update email module names.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
28 from email import encoders |
|
a0ed8d5d744f
Python 3 preparation: update email module names.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
29 from email.header import Header |
|
a0ed8d5d744f
Python 3 preparation: update email module names.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
30 from email.mime.base import MIMEBase |
|
a0ed8d5d744f
Python 3 preparation: update email module names.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
31 from email.mime.multipart import MIMEMultipart |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
32 from email.mime.text import MIMEText |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
33 from email.parser import FeedParser |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
34 from email.utils import formataddr |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
35 |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5473
diff
changeset
|
36 import roundup.anypy.random_ as random_ |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
37 |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
38 from roundup import date, hyperdb, password |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
39 from roundup.anypy.strings import b2s, s2u |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
40 from roundup.hyperdb import iter_roles |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
41 from roundup.i18n import _, RoundupNullTranslations |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
42 from roundup.mailer import Mailer, MessageSendError, nice_sender_header |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
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: |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
45 import gpg, gpg.core # noqa: E401 |
|
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
|
46 except ImportError: |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
47 gpg = 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
|
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 |
|
6148
8497bf3f23a1
Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6008
diff
changeset
|
50 class Database(object): |
|
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 |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
57 |
|
6658
408fd477761f
Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6426
diff
changeset
|
58 def __init__(self): |
|
408fd477761f
Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6426
diff
changeset
|
59 self.i18n = RoundupNullTranslations() |
|
408fd477761f
Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6426
diff
changeset
|
60 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 def getuid(self): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 """Return the id of the "user" node associated with the user |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 that owns this connection to the hyperdatabase.""" |
|
1800
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
64 if self.journaltag is None: |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
65 return None |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
66 elif self.journaltag == 'admin': |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
67 # 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
|
68 return '1' |
|
a3b1b1dcf639
Use getuid(), not figure_curuserid()
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1799
diff
changeset
|
69 else: |
|
2735
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
70 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
|
71 self.journaltag): |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
72 uid = self.user.lookup(self.journaltag) |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
73 self.journal_uid = (self.journaltag, uid) |
|
85b9dcf908a2
record journaltag lookup ("fixes" [SF#998140])
Richard Jones <richard@users.sourceforge.net>
parents:
2569
diff
changeset
|
74 return self.journal_uid[1] |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 |
|
2906
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
76 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
|
77 """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
|
78 activities. |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
79 """ |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
80 self.journaltag = username |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
81 |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
82 def isCurrentUser(self, username): |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
83 """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
|
84 """ |
|
a8808157f892
fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents:
2765
diff
changeset
|
85 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
|
86 |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
87 def getUserTimezone(self): |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
88 """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
|
89 If no such property exists return 0 |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
90 """ |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
91 userid = self.getuid() |
|
3621
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
92 timezone = None |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
93 try: |
|
3621
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
94 tz = self.user.get(userid, 'timezone') |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
95 date.get_timezone(tz) |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
96 timezone = tz |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
97 except KeyError: |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
98 pass |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
99 # 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
|
100 # 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
|
101 # the timezone set in the tracker config. |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
102 if timezone is None: |
|
77ed6c517793
timezone support (patch [SF#1465296])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3601
diff
changeset
|
103 timezone = self.config['TIMEZONE'] |
|
1402
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
104 return timezone |
|
27586da5557c
Added users' timezone support
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1383
diff
changeset
|
105 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
106 def confirm_registration(self, otk): |
|
2089
93f03c6714d8
A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents:
2077
diff
changeset
|
107 props = self.getOTKManager().getall(otk) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
108 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
|
109 value = props.get(propname, None) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
110 if value is None: |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
111 pass |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
112 elif isinstance(proptype, hyperdb.Date): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
113 props[propname] = date.Date(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
114 elif isinstance(proptype, hyperdb.Interval): |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
115 props[propname] = date.Interval(value) |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
116 elif isinstance(proptype, hyperdb.Password): |
|
7211
506c86823abb
Add config argument to more password.Password invocations.
John Rouillard <rouilj@ieee.org>
parents:
6962
diff
changeset
|
117 props[propname] = password.Password(encrypted=value, |
|
506c86823abb
Add config argument to more password.Password invocations.
John Rouillard <rouilj@ieee.org>
parents:
6962
diff
changeset
|
118 config=self.config) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
119 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
120 # tag new user creation with 'admin' |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
121 self.journaltag = 'admin' |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
122 |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
123 # create the new user |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
124 cl = self.user |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
125 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
126 props['roles'] = self.config.NEW_WEB_USER_ROLES |
|
5976
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
127 try: |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
128 # ASSUME:: ValueError raised during create due to key value |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
129 # conflict. I an use message in exception to determine |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
130 # when I should intercept the exception with a more |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
131 # friendly error message. If i18n is used to translate |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
132 # original exception message this will fail and translated |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
133 # text (probably unfriendly) will be used. |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
134 userid = cl.create(**props) |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
135 except ValueError as e: |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
136 username = props['username'] |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
137 # Try to make error message less cryptic to the user. |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
138 if str(e) == 'node with key "%s" exists' % username: |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
139 raise ValueError( |
|
7750
216662fbaaee
fix(i18n): fix incorrect lookup of some translations
John Rouillard <rouilj@ieee.org>
parents:
7575
diff
changeset
|
140 _("Username '%s' already exists.") % username) |
|
5976
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
141 else: |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
142 raise |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
143 |
|
71c68961d9f4
- issue2550920 - Optionally detect duplicate username at registration.
John Rouillard <rouilj@ieee.org>
parents:
5970
diff
changeset
|
144 # 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
|
145 self.getOTKManager().destroy(otk) |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5312
diff
changeset
|
146 # commit cl.create (and otk changes) |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
147 self.commit() |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
148 |
|
1790
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
149 return userid |
|
c8614db86be2
Extract confirm_registration() from client to roundupdb...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1622
diff
changeset
|
150 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
151 def log_debug(self, msg, *args, **kwargs): |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
152 """Log a message with level DEBUG.""" |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
153 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
154 logger = self.get_logger() |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
155 logger.debug(msg, *args, **kwargs) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
156 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
157 def log_info(self, msg, *args, **kwargs): |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
158 """Log a message with level INFO.""" |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
159 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
160 logger = self.get_logger() |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
161 logger.info(msg, *args, **kwargs) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
162 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
163 def get_logger(self): |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
164 """Return the logger for this database.""" |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
165 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
166 # Because getting a logger requires acquiring a lock, we want |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
167 # to do it only once. |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
168 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
|
169 self.__logger = logging.getLogger('roundup.hyperdb') |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
170 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
171 return self.__logger |
|
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
172 |
|
4652
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
173 def clearCache(self): |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
174 """ Backends may keep a cache. |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
175 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
|
176 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
|
177 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
|
178 """ |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
179 if getattr(self, 'cache_callbacks', None): |
|
4652
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
180 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
|
181 method(param) |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
182 |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
183 def registerClearCacheCallback(self, method, param=None): |
|
4652
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
184 """ 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
|
185 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
|
186 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
|
187 accept a single parameter. |
|
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
188 """ |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
189 if not getattr(self, 'cache_callbacks', None): |
|
4652
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
190 self.cache_callbacks = [] |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
191 self.cache_callbacks.append((method, param)) |
|
4652
dfbc0cfa9811
Add an interface to register clearCache callbacks in roundupdb.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4547
diff
changeset
|
192 |
|
4059
ef0b4396888a
Enhance and simplify logging.
Stefan Seefeld <stefan@seefeld.name>
parents:
3986
diff
changeset
|
193 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
194 class DetectorError(RuntimeError): |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
195 """ 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
|
196 """ |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
197 pass |
|
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
198 |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
199 |
|
8304
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
200 # deviation from spec - was called ItemClass |
|
858
2dd862af72ee
all storage-specific code (ie. backend) is now implemented by the backends
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
201 class IssueClass: |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
202 """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
|
203 implementation. The backend should provide a mechanism that |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
204 enforces the title, messages, files, nosy and superseder |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
205 properties: |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
206 |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
207 - title = hyperdb.String(indexme='yes') |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
208 - messages = hyperdb.Multilink("msg") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
209 - files = hyperdb.Multilink("file") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
210 - nosy = hyperdb.Multilink("user") |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1949
diff
changeset
|
211 - 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
|
212 """ |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
213 |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
214 # 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
|
215 # 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
|
216 # marked for message extraction tool. |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
217 # |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
218 # 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
|
219 # |
|
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
220 # 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
|
221 # defined in the classic template: |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3892
diff
changeset
|
222 # assignedto, keyword, priority, status. |
|
2545
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
223 ( |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
224 ''"title", ''"messages", ''"files", ''"nosy", ''"superseder", |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3892
diff
changeset
|
225 ''"assignedto", ''"keyword", ''"priority", ''"status", |
|
2545
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
226 # following properties are common for all hyperdb classes |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
227 # 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
|
228 ''"actor", ''"activity", ''"creator", ''"creation", |
|
f313ea652571
add common audit properties...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2518
diff
changeset
|
229 ) |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
230 |
|
8304
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
231 def _update_properties(self, classname, properties): |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
232 """The newly-created class automatically includes the "messages", |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
233 "files", "nosy", and "superseder" properties. If the 'properties' |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
234 dictionary attempts to specify any of these properties or a |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
235 "creation", "creator", "activity" or "actor" property, a ValueError |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
236 is raised. This method must be called by __init__. |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
237 |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
238 """ |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
239 if 'title' not in properties: |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
240 properties['title'] = hyperdb.String(indexme='yes') |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
241 if 'messages' not in properties: |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
242 properties['messages'] = hyperdb.Multilink("msg") |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
243 if 'files' not in properties: |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
244 properties['files'] = hyperdb.Multilink("file") |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
245 if 'nosy' not in properties: |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
246 # note: journalling is turned off as it really just wastes |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
247 # space. this behaviour may be overridden in an instance |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
248 properties['nosy'] = hyperdb.Multilink("user", do_journal="no") |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
249 if 'superseder' not in properties: |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
250 properties['superseder'] = hyperdb.Multilink(classname) |
|
24549122f9b1
Factor common code to hyperdb/roundupdb
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7750
diff
changeset
|
251 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
252 # New methods: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
253 def addmessage(self, issueid, summary, text): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
254 """Add a message to an issue's mail spool. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
255 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
256 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
|
257 owns the database connection as the author, and the specified summary |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
258 text. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
259 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
260 The "files" and "recipients" fields are left empty. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
261 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
262 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
|
263 appended to the "messages" field of the specified issue. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
264 """ |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
265 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
266 def nosymessage(self, issueid, msgid, oldvalues, whichnosy='nosy', |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
267 from_address=None, cc=None, bcc=None, |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
268 cc_emails=None, |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
269 bcc_emails=None, subject=None, |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
270 note_filter=None, add_headers=None): |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
271 """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
|
272 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
273 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
|
274 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
|
275 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
276 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
|
277 |
|
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 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
|
279 list, and it's called a 'System Message'. |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
280 |
|
5081
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
281 The "subject" argument is used as subject for the message. If no |
|
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
282 subject is passed, a subject will be generated from the message. |
|
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
283 Note the subject does not include the item designator [classID] |
|
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
284 prefix that allows proper processing of reply emails. The caller |
|
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
285 needs to include that label in the subject if needed. |
|
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
286 |
|
2228
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
287 The "cc" argument indicates additional recipients to send the |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
288 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
|
289 list. |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
290 |
|
1d1362c54c94
Some doc / comment fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
2218
diff
changeset
|
291 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
|
292 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
|
293 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
|
294 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
|
295 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
|
296 protected (using appropriate permissions), otherwise the bcc |
|
5081
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
297 will be deduceable 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
|
298 |
|
29576edb45d5
Allow to specify additional cc and bcc emails (not roundup users)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4480
diff
changeset
|
299 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
|
300 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
|
301 this can be useful for sending to additional email addresses |
|
5081
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
302 which are not roundup users. These arguments are currently not |
|
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
|
303 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
|
304 (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
|
305 |
|
46239c21a1eb
Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4541
diff
changeset
|
306 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
|
307 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
|
308 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
|
309 *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
|
310 fail if not all the keys are available in roundups keyring. |
|
5675
f3d68c1bb96e
issue2551018 add new nosy_filter parameter to nosymessage. Function
John Rouillard <rouilj@ieee.org>
parents:
5494
diff
changeset
|
311 |
|
f3d68c1bb96e
issue2551018 add new nosy_filter parameter to nosymessage. Function
John Rouillard <rouilj@ieee.org>
parents:
5494
diff
changeset
|
312 If note_filter is specified it is a function with this |
|
f3d68c1bb96e
issue2551018 add new nosy_filter parameter to nosymessage. Function
John Rouillard <rouilj@ieee.org>
parents:
5494
diff
changeset
|
313 prototype: |
|
f3d68c1bb96e
issue2551018 add new nosy_filter parameter to nosymessage. Function
John Rouillard <rouilj@ieee.org>
parents:
5494
diff
changeset
|
314 note_filter(original_note, issueid, newvalues, oldvalues) |
|
f3d68c1bb96e
issue2551018 add new nosy_filter parameter to nosymessage. Function
John Rouillard <rouilj@ieee.org>
parents:
5494
diff
changeset
|
315 If called, note_filter returns the new value for the message body. |
|
5970
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
316 |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
317 The add_headers parameter allows to set additional headers for |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
318 the outgoing email. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
319 """ |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
320 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
321 if cc is None: cc = [] # noqa: E701 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
322 if bcc is None: bcc = [] # noqa: E701 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
323 if cc_emails is None: cc_emails = [] # noqa: E701 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
324 if bcc_emails is None: bcc_emails = [] # noqa: E701 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
325 if add_headers is None: add_headers = {} # noqa: E701 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
326 |
|
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
|
327 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
|
328 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
|
329 if msgid: |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
330 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
|
331 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
|
332 else: |
|
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
333 # "system message" |
|
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
334 authid = None |
|
7015c1961013
have "System Messages" be marked as such again [SF#1281907]
Richard Jones <richard@users.sourceforge.net>
parents:
3440
diff
changeset
|
335 recipients = [] |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
336 |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
337 sendto = dict(plain=[], crypt=[]) |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
338 bcc_sendto = dict(plain=[], crypt=[]) |
|
1949
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
339 seen_message = {} |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
340 for recipient in recipients: |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
341 seen_message[recipient] = 1 |
|
3fa6df0d120d
must be backward-compatible to py2.1
Richard Jones <richard@users.sourceforge.net>
parents:
1928
diff
changeset
|
342 |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
343 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
|
344 """ 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
|
345 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
|
346 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
|
347 ciphered = encrypt and (not pgproles or |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
348 self.db.user.has_role( |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
349 userid, *iter_roles(pgproles))) |
|
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
|
350 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
|
351 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
|
352 recipients.append(userid) |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2059
diff
changeset
|
353 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
354 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
|
355 """ 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
|
356 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
|
357 Also check permissions on the message if not a system |
|
4290
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4289
diff
changeset
|
358 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
|
359 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
|
360 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
|
361 """ |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
362 allowed = True |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
363 if msgid: |
|
7275e3dec0e0
Fix security-problem: If user hasn't permission on a message...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4225
diff
changeset
|
364 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
|
365 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
|
366 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
|
367 '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
|
368 return (userid and |
|
1928
7c1ddebe7589
Small readability improvements.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1927
diff
changeset
|
369 (self.db.user.get(userid, 'username') != 'anonymous') and |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
370 allowed and userid not in seen_message) |
|
2073
261c2e6ceb1e
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2059
diff
changeset
|
371 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
372 # 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
|
373 # 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
|
374 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
|
375 (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
|
376 (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
|
377 (self.db.config.MESSAGES_TO_AUTHOR == 'nosy' and authid in |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
378 self.get(issueid, whichnosy)))): |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
379 add_recipient(authid, sendto) |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
380 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
381 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
|
382 seen_message[authid] = 1 |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
383 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
384 # 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
|
385 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
|
386 if good_recipient(userid): |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
387 add_recipient(userid, sendto) |
|
5312
a4fe76fba54a
issue2550957: Duplicate emails (with patch).
John Rouillard <rouilj@ieee.org>
parents:
5224
diff
changeset
|
388 seen_message[userid] = 1 |
|
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
|
389 if encrypt and not pgproles: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
390 sendto['crypt'].extend(cc_emails) |
|
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
|
391 else: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
392 sendto['plain'].extend(cc_emails) |
|
2218
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
393 |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
394 # now deal with bcc people. |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
395 for userid in bcc: |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
396 if good_recipient(userid): |
|
5673b24ceb0d
roundupdb nosymessage() takes an optional bcc list
Richard Jones <richard@users.sourceforge.net>
parents:
2183
diff
changeset
|
397 add_recipient(userid, bcc_sendto) |
|
5312
a4fe76fba54a
issue2550957: Duplicate emails (with patch).
John Rouillard <rouilj@ieee.org>
parents:
5224
diff
changeset
|
398 seen_message[userid] = 1 |
|
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
|
399 if encrypt and not pgproles: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
400 bcc_sendto['crypt'].extend(bcc_emails) |
|
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
|
401 else: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
402 bcc_sendto['plain'].extend(bcc_emails) |
| 337 | 403 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
404 if oldvalues: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
405 note = self.generateChangeNote(issueid, oldvalues) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
406 else: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
407 note = self.generateCreateNote(issueid) |
|
5675
f3d68c1bb96e
issue2551018 add new nosy_filter parameter to nosymessage. Function
John Rouillard <rouilj@ieee.org>
parents:
5494
diff
changeset
|
408 if note_filter: |
|
f3d68c1bb96e
issue2551018 add new nosy_filter parameter to nosymessage. Function
John Rouillard <rouilj@ieee.org>
parents:
5494
diff
changeset
|
409 cn = self.classname |
|
f3d68c1bb96e
issue2551018 add new nosy_filter parameter to nosymessage. Function
John Rouillard <rouilj@ieee.org>
parents:
5494
diff
changeset
|
410 cl = self.db.classes[cn] |
|
f3d68c1bb96e
issue2551018 add new nosy_filter parameter to nosymessage. Function
John Rouillard <rouilj@ieee.org>
parents:
5494
diff
changeset
|
411 note = note_filter(note, issueid, self.db, cl, oldvalues) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
749
diff
changeset
|
412 |
|
1903
98b5f2c54dab
Change nosymessage and send_message to accept msgid=None (RFE [SF#707235]).
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1830
diff
changeset
|
413 # 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
|
414 # 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
|
415 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
|
416 # 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
|
417 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
|
418 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
|
419 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
|
420 self.send_message(issueid, msgid, note, sendto['plain'], |
|
5970
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
421 from_address, bcc_sendto['plain'], |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
422 subject, add_headers=add_headers) |
|
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
|
423 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
|
424 self.send_message(issueid, msgid, note, sendto['crypt'], |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
425 from_address, bcc_sendto['crypt'], subject, |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
426 crypt=True, add_headers=add_headers) |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
427 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
428 # backwards compatibility - don't remove |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
429 sendmessage = nosymessage |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
430 |
|
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
|
431 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
|
432 """ 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
|
433 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
|
434 """ |
|
5494
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
435 plain = gpg.core.Data(message.as_string()) |
|
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
436 cipher = gpg.core.Data() |
|
b7fa56ced601
use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5493
diff
changeset
|
437 ctx = gpg.core.Context() |
|
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
|
438 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
|
439 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
|
440 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
|
441 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
|
442 # 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
|
443 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
|
444 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
|
445 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
|
446 else: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
447 msg = _('No key for "%(adr)s" in keyring') % locals() |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
448 raise MessageSendError(msg) |
|
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
|
449 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
|
450 ctx.op_encrypt(keys, 1, plain, cipher) |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
451 cipher.seek(0, 0) |
|
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
|
452 msg = MIMEMultipart('encrypted', boundary=None, _subparts=None, |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
453 protocol="application/pgp-encrypted") |
|
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
|
454 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
|
455 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
|
456 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
|
457 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
|
458 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
|
459 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
|
460 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
|
461 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
462 def send_message(self, issueid, msgid, note, sendto, from_address=None, |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
463 bcc_sendto=None, subject=None, crypt=False, |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
464 add_headers=None, authid=None): |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
465 '''Actually send the nominated message from this issue to the sendto |
|
5970
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
466 recipients, with the note appended. It's possible to add |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
467 headers to the message with the add_headers variable. |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
468 ''' |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
469 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
470 if bcc_sendto is None: bcc_sendto = [] # noqa: E701 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
471 if add_headers is None: add_headers = {} # noqa: E701 |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
472 users = self.db.user |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
473 messages = self.db.msg |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
474 files = self.db.file |
|
2518
cf17ba0a72f9
list IssueClass property names for message extraction tool
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2514
diff
changeset
|
475 |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
476 if msgid is None: |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
477 inreplyto = None |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
478 messageid = None |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
479 else: |
|
2765
3468f74bd7ce
fix copy/paste error made in r1.114
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2738
diff
changeset
|
480 inreplyto = messages.get(msgid, 'inreplyto') |
|
3468f74bd7ce
fix copy/paste error made in r1.114
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2738
diff
changeset
|
481 messageid = messages.get(msgid, 'messageid') |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
482 |
|
1927
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
483 # 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
|
484 if not messageid: |
|
f5e8aeb1382d
Add 'safeget' method to hyperdb, including tests...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1903
diff
changeset
|
485 # 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
|
486 # create one |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
487 messageid = "<%s.%s.%s%s@%s>" % ( |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
488 time.time(), |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5473
diff
changeset
|
489 b2s(base64.b32encode(random_.token_bytes(10))), |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5473
diff
changeset
|
490 self.classname, issueid, 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
|
491 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
|
492 messages.set(msgid, messageid=messageid) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
493 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
494 # compose title |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
495 cn = self.classname |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
496 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
|
497 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
498 # figure author information |
|
6425
443f80297ac1
send_message allows setting message sender via authid.
John Rouillard <rouilj@ieee.org>
parents:
6148
diff
changeset
|
499 if authid: |
|
443f80297ac1
send_message allows setting message sender via authid.
John Rouillard <rouilj@ieee.org>
parents:
6148
diff
changeset
|
500 pass |
|
443f80297ac1
send_message allows setting message sender via authid.
John Rouillard <rouilj@ieee.org>
parents:
6148
diff
changeset
|
501 elif msgid: |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
502 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
|
503 else: |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
504 authid = self.db.getuid() |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
505 authname = users.get(authid, 'realname') |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
506 if not authname: |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
507 authname = users.get(authid, 'username', '') |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
508 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
|
509 |
|
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
|
510 if authaddr and self.db.config.MAIL_ADD_AUTHOREMAIL: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
511 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
|
512 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
|
513 authaddr = "" |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
514 |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
515 # make the message body |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
516 m = [''] |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
517 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
518 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
519 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
|
520 m.append(self.email_signature(issueid, msgid)) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
521 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
522 # 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
|
523 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
|
524 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
|
525 m.append(_("New submission from %(authname)s%(authaddr)s:") |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
526 % locals()) |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
527 elif msgid: |
|
3601
7b25567f0f54
indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents:
3599
diff
changeset
|
528 m.append(_("%(authname)s%(authaddr)s added the comment:") |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
529 % locals()) |
|
3892
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
530 else: |
|
f762fa13cd8d
Automatically find out author of property-only changes...
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3886
diff
changeset
|
531 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
|
532 m.append('') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
533 |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
337
diff
changeset
|
534 # add the content |
|
2737
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
535 if msgid is not None: |
|
37e2b70105f7
removed safeget() from the API [SF#994750]
Richard Jones <richard@users.sourceforge.net>
parents:
2735
diff
changeset
|
536 m.append(messages.get(msgid, 'content', '')) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
537 |
|
3882
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
538 # 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
|
539 message_files = [] |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
540 if msgid: |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
541 for fileid in messages.get(msgid, 'files'): |
|
3941
9997b941dd6d
remove some metakit references
Richard Jones <richard@users.sourceforge.net>
parents:
3939
diff
changeset
|
542 # check the attachment size |
|
4347
0e33bf5571dc
make some more memorydb tests pass
Richard Jones <richard@users.sourceforge.net>
parents:
4338
diff
changeset
|
543 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
|
544 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
|
545 message_files.append(fileid) |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
546 else: |
|
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
547 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
|
548 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
|
549 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
|
550 m.append(_("File '%(filename)s' not attached - " |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
551 "you can download it from %(link)s.") % |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
552 locals()) |
|
3882
46ef2a6fd79d
config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3877
diff
changeset
|
553 |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
554 # add the change note |
|
684
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
555 if note: |
|
5b23ff865f3a
added a "detectors" directory...
Richard Jones <richard@users.sourceforge.net>
parents:
667
diff
changeset
|
556 m.append(note) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
557 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
558 # put in roundup's signature |
|
524
dce4c75bef5a
changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents:
509
diff
changeset
|
559 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
|
560 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
|
561 |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
562 # figure the encoding |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
563 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
|
564 |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
565 # construct the content and convert to unicode object |
|
5473
3afda04c96a1
mailer string encoding fixes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5422
diff
changeset
|
566 body = s2u('\n'.join(m)) |
|
665
9382ad731c1c
All messages sent to the nosy list are now encoded as quoted-printable.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
647
diff
changeset
|
567 |
|
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
|
568 # 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
|
569 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
|
570 |
|
1360
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
571 # 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
|
572 if from_address is None: |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
573 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
|
574 |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
575 # 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
|
576 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
|
577 if from_tag: |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
578 from_tag = ' ' + from_tag |
|
aa7e4e8b14be
allow additional control over the roundupdb email sending...
Richard Jones <richard@users.sourceforge.net>
parents:
1329
diff
changeset
|
579 |
|
5081
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
580 if subject is None: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
581 subject = '[%s%s] %s' % (cn, issueid, title) |
|
5081
786f0581bc90
issue2109308 add subject argument to nosymessage. Initial patch Frank Niessink. Test and application with slight mods by rouilj
John Rouillard <rouilj@ieee.org>
parents:
5063
diff
changeset
|
582 |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
583 author = (authname + from_tag, from_address) |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
584 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
585 # 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
|
586 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
|
587 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
|
588 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
589 sendto = [sendto] |
|
1799
071ea6fc803f
Extracted duplicated mail-sending code...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1794
diff
changeset
|
590 |
|
4338
94ee533613ac
Attempt to generate more human-readable addresses in email
Richard Jones <richard@users.sourceforge.net>
parents:
4290
diff
changeset
|
591 # tracker sender info |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5395
diff
changeset
|
592 tracker_name = s2u(self.db.config.TRACKER_NAME) |
|
4338
94ee533613ac
Attempt to generate more human-readable addresses in email
Richard Jones <richard@users.sourceforge.net>
parents:
4290
diff
changeset
|
593 tracker_name = nice_sender_header(tracker_name, from_address, |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
594 charset) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
595 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
596 # 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
|
597 # 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
|
598 # 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
|
599 # and/or fixing some day |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
600 first = True |
|
7575
2b0089104f08
flake8: rename loop variable in 'for sendto in sendto:'
John Rouillard <rouilj@ieee.org>
parents:
7211
diff
changeset
|
601 for to_addr in sendto: |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
602 # create the message |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
603 mailer = Mailer(self.db.config) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
604 |
|
4541
62239a524beb
PGP support is again working (pyme API has changed significantly)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4497
diff
changeset
|
605 message = mailer.get_standard_message(multipart=message_files) |
|
2059
48600089c73d
email charset fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
606 |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
607 # set reply-to as requested by config option |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
608 # TRACKER_REPLYTO_ADDRESS |
|
5098
99e289359798
issue2550803: Replying to NOSY mail goes to the tracker through
John Rouillard <rouilj@ieee.org>
parents:
5081
diff
changeset
|
609 replyto_config = self.db.config.TRACKER_REPLYTO_ADDRESS |
|
99e289359798
issue2550803: Replying to NOSY mail goes to the tracker through
John Rouillard <rouilj@ieee.org>
parents:
5081
diff
changeset
|
610 if replyto_config: |
|
99e289359798
issue2550803: Replying to NOSY mail goes to the tracker through
John Rouillard <rouilj@ieee.org>
parents:
5081
diff
changeset
|
611 if replyto_config == "AUTHOR": |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
612 # note that authaddr at this point is already |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
613 # surrounded by < >, so get the original address |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
614 # from the db as nice_send_header adds < > |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
615 replyto_addr = nice_sender_header( |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
616 authname, |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
617 users.get(authid, 'address', ''), |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
618 charset) |
|
5098
99e289359798
issue2550803: Replying to NOSY mail goes to the tracker through
John Rouillard <rouilj@ieee.org>
parents:
5081
diff
changeset
|
619 else: |
|
99e289359798
issue2550803: Replying to NOSY mail goes to the tracker through
John Rouillard <rouilj@ieee.org>
parents:
5081
diff
changeset
|
620 replyto_addr = replyto_config |
|
99e289359798
issue2550803: Replying to NOSY mail goes to the tracker through
John Rouillard <rouilj@ieee.org>
parents:
5081
diff
changeset
|
621 else: |
|
99e289359798
issue2550803: Replying to NOSY mail goes to the tracker through
John Rouillard <rouilj@ieee.org>
parents:
5081
diff
changeset
|
622 replyto_addr = tracker_name |
|
99e289359798
issue2550803: Replying to NOSY mail goes to the tracker through
John Rouillard <rouilj@ieee.org>
parents:
5081
diff
changeset
|
623 message['Reply-To'] = replyto_addr |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
624 |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
625 # message ids |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
626 if messageid: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
627 message['Message-Id'] = messageid |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
628 if inreplyto: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
629 message['In-Reply-To'] = inreplyto |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
630 |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
631 # 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
|
632 # a class that has a name attribute |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
633 for propname, prop in self.getprops().items(): |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
634 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
|
635 continue |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
636 cl = self.db.getclass(prop.classname) |
|
5063
2840a9e86ef2
New Link/Multilink attribute 'msg_header_property'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4983
diff
changeset
|
637 label = None |
|
2840a9e86ef2
New Link/Multilink attribute 'msg_header_property'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4983
diff
changeset
|
638 if 'name' in cl.getprops(): |
|
2840a9e86ef2
New Link/Multilink attribute 'msg_header_property'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4983
diff
changeset
|
639 label = 'name' |
|
2840a9e86ef2
New Link/Multilink attribute 'msg_header_property'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4983
diff
changeset
|
640 if prop.msg_header_property in cl.getprops(): |
|
2840a9e86ef2
New Link/Multilink attribute 'msg_header_property'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4983
diff
changeset
|
641 label = prop.msg_header_property |
|
5124
a927f9549af0
Fix issue2550751: Email Header Issue.
John Rouillard <rouilj@ieee.org>
parents:
5112
diff
changeset
|
642 if prop.msg_header_property == "": |
|
a927f9549af0
Fix issue2550751: Email Header Issue.
John Rouillard <rouilj@ieee.org>
parents:
5112
diff
changeset
|
643 # if msg_header_property is set to empty string |
|
a927f9549af0
Fix issue2550751: Email Header Issue.
John Rouillard <rouilj@ieee.org>
parents:
5112
diff
changeset
|
644 # suppress the header entirely. You can't use |
|
a927f9549af0
Fix issue2550751: Email Header Issue.
John Rouillard <rouilj@ieee.org>
parents:
5112
diff
changeset
|
645 # 'msg_header_property == None'. None is the |
|
a927f9549af0
Fix issue2550751: Email Header Issue.
John Rouillard <rouilj@ieee.org>
parents:
5112
diff
changeset
|
646 # default value. |
|
a927f9549af0
Fix issue2550751: Email Header Issue.
John Rouillard <rouilj@ieee.org>
parents:
5112
diff
changeset
|
647 label = None |
|
5063
2840a9e86ef2
New Link/Multilink attribute 'msg_header_property'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4983
diff
changeset
|
648 if not label: |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
649 continue |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
650 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
|
651 value = self.get(issueid, propname) |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
652 if value is None: |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
653 continue |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
654 values = [value] |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
655 else: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
656 values = self.get(issueid, propname) |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
657 if not values: |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
658 continue |
|
5063
2840a9e86ef2
New Link/Multilink attribute 'msg_header_property'
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4983
diff
changeset
|
659 values = [cl.get(v, label) for v in values] |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
660 values = ', '.join(values) |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
661 header = "X-Roundup-%s-%s" % (self.classname, propname) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
662 try: |
|
5473
3afda04c96a1
mailer string encoding fixes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5422
diff
changeset
|
663 values.encode('ascii') |
|
3afda04c96a1
mailer string encoding fixes
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5422
diff
changeset
|
664 message[header] = values |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
665 except UnicodeError: |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
666 message[header] = Header(values, charset) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
667 |
|
5750
2c0f89edabe1
issue2551043: Add X-Roundup-issue-id email header.
John Rouillard <rouilj@ieee.org>
parents:
5675
diff
changeset
|
668 # Add header for main id number to make filtering |
|
2c0f89edabe1
issue2551043: Add X-Roundup-issue-id email header.
John Rouillard <rouilj@ieee.org>
parents:
5675
diff
changeset
|
669 # email easier than extracting from subject line. |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
670 header = "X-Roundup-%s-Id" % (self.classname) |
|
5750
2c0f89edabe1
issue2551043: Add X-Roundup-issue-id email header.
John Rouillard <rouilj@ieee.org>
parents:
5675
diff
changeset
|
671 values = issueid |
|
2c0f89edabe1
issue2551043: Add X-Roundup-issue-id email header.
John Rouillard <rouilj@ieee.org>
parents:
5675
diff
changeset
|
672 try: |
|
2c0f89edabe1
issue2551043: Add X-Roundup-issue-id email header.
John Rouillard <rouilj@ieee.org>
parents:
5675
diff
changeset
|
673 values.encode('ascii') |
|
2c0f89edabe1
issue2551043: Add X-Roundup-issue-id email header.
John Rouillard <rouilj@ieee.org>
parents:
5675
diff
changeset
|
674 message[header] = values |
|
2c0f89edabe1
issue2551043: Add X-Roundup-issue-id email header.
John Rouillard <rouilj@ieee.org>
parents:
5675
diff
changeset
|
675 except UnicodeError: |
|
2c0f89edabe1
issue2551043: Add X-Roundup-issue-id email header.
John Rouillard <rouilj@ieee.org>
parents:
5675
diff
changeset
|
676 message[header] = Header(values, charset) |
|
5970
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
677 # Generate additional headers |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
678 for k in add_headers: |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
679 v = add_headers[k] |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
680 try: |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
681 v.encode('ascii') |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
682 message[k] = v |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
683 except UnicodeError: |
|
11a9c5b2efd4
Additional headers for nosymessage
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5750
diff
changeset
|
684 message[k] = Header(v, charset) |
|
5750
2c0f89edabe1
issue2551043: Add X-Roundup-issue-id email header.
John Rouillard <rouilj@ieee.org>
parents:
5675
diff
changeset
|
685 |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
686 if not inreplyto: |
|
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
687 # 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
|
688 msgs = self.get(issueid, 'messages') |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
689 # 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
|
690 # 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
|
691 # 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
|
692 if msgs and msgs[0] != msgid: |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
693 inreplyto = messages.get(msgs[0], 'messageid') |
|
3958
642201ee1d75
paranoia from Toby Dickenson
Richard Jones <richard@users.sourceforge.net>
parents:
3957
diff
changeset
|
694 if inreplyto: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
695 message['In-Reply-To'] = inreplyto |
|
3956
bb2722260e47
Fixes from Martin v. Löwis:
Richard Jones <richard@users.sourceforge.net>
parents:
3941
diff
changeset
|
696 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
697 # attach files |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
698 if message_files: |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
699 # first up the text as a part |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
700 part = mailer.get_standard_message() |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
701 part.set_payload(body, part.get_charset()) |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
702 message.attach(part) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
703 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
704 for fileid in message_files: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
705 name = files.get(fileid, 'name') |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
706 mime_type = (files.get(fileid, 'type') or |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
707 mimetypes.guess_type(name)[0] or |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
708 'application/octet-stream') |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
709 if mime_type == 'text/plain': |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
710 content = files.get(fileid, 'content') |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
711 part = MIMEText('') |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
712 del part['Content-Transfer-Encoding'] |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
713 try: |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
714 enc = content.encode('ascii') |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
715 part = mailer.get_text_message('us-ascii') |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
716 part.set_payload(enc) |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
717 except UnicodeError: |
|
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
718 # 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
|
719 # use quoted printable |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
720 # XXX stuffed if we know the charset though :( |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
721 part = mailer.get_text_message('utf-8') |
|
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
722 part.set_payload(content, part.get_charset()) |
|
4424
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
723 elif mime_type == 'message/rfc822': |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
724 content = files.get(fileid, 'content') |
|
4424
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
725 main, sub = mime_type.split('/') |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
726 p = FeedParser() |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
727 p.feed(content) |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
728 part = MIMEBase(main, sub) |
|
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
729 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
|
730 else: |
|
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
731 # some other type, so encode it |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
732 content = files.get(fileid, 'binary_content') |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
733 main, sub = mime_type.split('/') |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
734 part = MIMEBase(main, sub) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
735 part.set_payload(content) |
|
5422
a0ed8d5d744f
Python 3 preparation: update email module names.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
736 encoders.encode_base64(part) |
|
4424
f1affb6b7a08
Mail gateway fixes and improvements.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4423
diff
changeset
|
737 cd = 'Content-Disposition' |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
738 part[cd] = 'attachment;\n filename="%s"' % name |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
739 message.attach(part) |
|
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
740 |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
741 else: |
|
5493
725266c03eab
updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5488
diff
changeset
|
742 message.set_payload(body, message.get_charset()) |
|
393
f40388721e40
incorporated patch from Roch'e Compaan implementing attachments in nosy e-mail
Richard Jones <richard@users.sourceforge.net>
parents:
380
diff
changeset
|
743 |
|
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
|
744 if crypt: |
|
7575
2b0089104f08
flake8: rename loop variable in 'for sendto in sendto:'
John Rouillard <rouilj@ieee.org>
parents:
7211
diff
changeset
|
745 send_msg = self.encrypt_to(message, to_addr) |
|
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
|
746 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
|
747 send_msg = message |
|
7575
2b0089104f08
flake8: rename loop variable in 'for sendto in sendto:'
John Rouillard <rouilj@ieee.org>
parents:
7211
diff
changeset
|
748 mailer.set_message_attributes(send_msg, to_addr, subject, author) |
|
4969
010ce624b320
Fixing duplicated email headers message-id, reply-to, in-reply-to. (part of issue2550869).
Bernhard Reiter <bernhard@intevation.de>
parents:
4745
diff
changeset
|
749 if crypt: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
750 send_msg['Message-Id'] = message['Message-Id'] |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
751 send_msg['Reply-To'] = message['Reply-To'] |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
752 if message.get('In-Reply-To'): |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
753 send_msg['In-Reply-To'] = message['In-Reply-To'] |
|
4969
010ce624b320
Fixing duplicated email headers message-id, reply-to, in-reply-to. (part of issue2550869).
Bernhard Reiter <bernhard@intevation.de>
parents:
4745
diff
changeset
|
754 |
|
7575
2b0089104f08
flake8: rename loop variable in 'for sendto in sendto:'
John Rouillard <rouilj@ieee.org>
parents:
7211
diff
changeset
|
755 if to_addr: |
|
2b0089104f08
flake8: rename loop variable in 'for sendto in sendto:'
John Rouillard <rouilj@ieee.org>
parents:
7211
diff
changeset
|
756 mailer.smtp_send(to_addr, send_msg.as_string()) |
|
3417
07c696890f55
mailgw subject parsing has configurable levels of strictness
Richard Jones <richard@users.sourceforge.net>
parents:
3132
diff
changeset
|
757 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
|
758 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
|
759 # 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
|
760 # 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
|
761 for bcc in bcc_sendto: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
762 send_msg = self.encrypt_to(message, [bcc]) |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
763 send_msg['Message-Id'] = message['Message-Id'] |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
764 send_msg['Reply-To'] = message['Reply-To'] |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
765 if message.get('In-Reply-To'): |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
766 send_msg['In-Reply-To'] = message['In-Reply-To'] |
|
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
|
767 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
|
768 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
|
769 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
|
770 first = False |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
771 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
772 def email_signature(self, issueid, msgid): |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
410
diff
changeset
|
773 ''' 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
|
774 ''' |
|
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
|
775 # 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
|
776 # 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
|
777 base = self.db.config.TRACKER_WEB |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
778 if (not isinstance(base, type('')) or |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
779 not (base.startswith('http://') or |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
780 base.startswith('https://'))): |
|
2183
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
781 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
|
782 "fully-qualified URL" |
|
2183
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
783 else: |
|
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
784 if not base.endswith('/'): |
|
ac24a9c74cca
be paranoid about TRACKER_WEB
Richard Jones <richard@users.sourceforge.net>
parents:
2153
diff
changeset
|
785 base = base + '/' |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
786 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
|
787 |
|
17208b487199
[SF#565992] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
Derrick Hudson <dman13@users.sourceforge.net>
parents:
758
diff
changeset
|
788 # ensure the email address is properly quoted |
|
4092
4b0ddce43d08
migrate from MimeWriter to email
Richard Jones <richard@users.sourceforge.net>
parents:
4059
diff
changeset
|
789 email = formataddr((self.db.config.TRACKER_NAME, |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
790 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
|
791 |
|
1586
d1bab419f2a2
web url got longer
Richard Jones <richard@users.sourceforge.net>
parents:
1577
diff
changeset
|
792 line = '_' * max(len(web)+2, len(email)) |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
793 return '\n%s\n%s\n<%s>\n%s' % (line, email, web, line) |
|
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
|
794 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
795 def generateCreateNote(self, issueid): |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
796 """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
|
797 """ |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
798 cn = self.classname |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
799 cl = self.db.classes[cn] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
800 props = cl.getprops(protected=0) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
801 |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
802 # list the values |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
803 m = [] |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
804 prop_items = sorted(props.items()) |
|
3132
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
805 for propname, prop in prop_items: |
|
5112
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5098
diff
changeset
|
806 # Omit quiet properties from history/changelog |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5098
diff
changeset
|
807 if prop.quiet: |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5098
diff
changeset
|
808 continue |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
809 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
|
810 # skip boring entries |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
811 if not value: |
|
bb5ee2f24ee0
Properties in change note are now sorted
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
537
diff
changeset
|
812 continue |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
813 if isinstance(prop, hyperdb.Link): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
814 link = self.db.classes[prop.classname] |
|
6962
ff879aa00987
remove some unreachable code. If condition is always the same.
John Rouillard <rouilj@ieee.org>
parents:
6961
diff
changeset
|
815 key = link.labelprop(default_to_id=1) |
|
ff879aa00987
remove some unreachable code. If condition is always the same.
John Rouillard <rouilj@ieee.org>
parents:
6961
diff
changeset
|
816 if key: |
|
ff879aa00987
remove some unreachable code. If condition is always the same.
John Rouillard <rouilj@ieee.org>
parents:
6961
diff
changeset
|
817 value = link.get(value, key) |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
818 elif isinstance(prop, hyperdb.Multilink): |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
819 link = self.db.classes[prop.classname] |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
820 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
|
821 if key: |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
822 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
|
823 value.sort() |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
824 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
|
825 else: |
|
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
826 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
|
827 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
|
828 value = '\n'+self.indentChangeNoteValue(value) |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
829 m.append('%s: %s' % (propname, value)) |
|
534
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
830 m.insert(0, '----------') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
831 m.insert(0, '') |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
832 return '\n'.join(m) |
|
d17c60d16f7f
[SF#503353] setting properties in initial email
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
833 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
834 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
|
835 """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
|
836 """ |
|
2514
091711fb2f8c
Initial logging integration: replace all debug prints with logging calls...
Richard Jones <richard@users.sourceforge.net>
parents:
2228
diff
changeset
|
837 if not isinstance(oldvalues, type({})): |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
838 raise TypeError("'oldvalues' must be dict-like, not %s." % |
|
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
839 type(oldvalues)) |
|
772
db5daf396518
Removed temporary workaround.
Derrick Hudson <dman13@users.sourceforge.net>
parents:
770
diff
changeset
|
840 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
841 cn = self.classname |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
842 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
|
843 changed = {} |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
844 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
|
845 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
846 # determine what changed |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
847 for key in oldvalues.keys(): |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
848 if key in ['files', 'messages']: |
|
1174
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1112
diff
changeset
|
849 continue |
|
2077
3e0961d6d44d
Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents:
2073
diff
changeset
|
850 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
|
851 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
|
852 # 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
|
853 # 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
|
854 try: |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
855 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
|
856 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
|
857 continue |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
858 # 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
|
859 # 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
|
860 try: |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
861 old_value = oldvalues[key] |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
862 if isinstance(new_value, type([])): |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
863 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
|
864 old_value.sort() |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
865 if new_value != old_value: |
|
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
866 changed[key] = old_value |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
867 except Exception: |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
428
diff
changeset
|
868 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
|
869 |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
870 # list the changes |
|
440
de5bf4191f11
Enabled transaction support in the bsddb backend.
Richard Jones <richard@users.sourceforge.net>
parents:
439
diff
changeset
|
871 m = [] |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
872 changed_items = sorted(changed.items()) |
|
3132
3475ae520f19
code cleanup (patch [SF#115329] and additional)
Richard Jones <richard@users.sourceforge.net>
parents:
2906
diff
changeset
|
873 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
|
874 prop = props[propname] |
|
5112
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5098
diff
changeset
|
875 # Omit quiet properties from history/changelog |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5098
diff
changeset
|
876 if prop.quiet: |
|
8901cc4ef0e0
- issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents:
5098
diff
changeset
|
877 continue |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
878 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
|
879 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
|
880 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
|
881 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
|
882 if key: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
883 if value: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
884 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
|
885 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
886 value = '' |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
887 if oldvalue: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
888 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
|
889 else: |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
890 oldvalue = '' |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
891 change = '%s -> %s' % (oldvalue, value) |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
892 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
|
893 change = '' |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
894 if value is None: value = [] # noqa: E701 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
895 if oldvalue is None: oldvalue = [] # noqa: E701 |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
896 changed_links = [] |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
897 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
|
898 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
|
899 # check for additions |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
900 for entry in value: |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
901 if entry in oldvalue: continue # noqa: E701 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
902 if key: |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
903 changed_links.append(link.get(entry, key)) |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
904 else: |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
905 changed_links.append(entry) |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
906 if changed_links: |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
907 changed_links.sort() |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
908 change = '+%s' % (', '.join(changed_links)) |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
909 changed_links = [] |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
910 # check for removals |
|
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
911 for entry in oldvalue: |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
912 if entry in value: continue # noqa: E701 |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
913 if key: |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
914 changed_links.append(link.get(entry, key)) |
|
425
fc907b6ef135
Property changes are now listed in emails generated by Roundup
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
416
diff
changeset
|
915 else: |
|
6961
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
916 changed_links.append(entry) |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
917 if changed_links: |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
918 changed_links.sort() |
|
de3118b4d224
flake8 fixes - use None as sentinel
John Rouillard <rouilj@ieee.org>
parents:
6658
diff
changeset
|
919 change += ' -%s' % (', '.join(changed_links)) |
|
453
5b422e3bd05d
Performance tuning.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
445
diff
changeset
|
920 else: |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
921 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
|
922 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
|
923 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
|
924 oldvalue = self.indentChangeNoteValue(str(oldvalue)) |
|
3790
9171e01ac932
use named variable slots in translation string
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3750
diff
changeset
|
925 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
|
926 "new": value, "old": oldvalue} |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
927 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
|
928 if m: |
|
442
52b5f53d12f3
fixed the order of the blank line and '-------' line
Richard Jones <richard@users.sourceforge.net>
parents:
440
diff
changeset
|
929 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
|
930 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
|
931 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
|
932 |
|
3740
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
933 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
|
934 lines = text.rstrip('\n').split('\n') |
|
6008
2b53c310089f
flake8 cleanup formatting plus
John Rouillard <rouilj@ieee.org>
parents:
5976
diff
changeset
|
935 lines = [' '+line for line in lines] |
|
3740
1442ba0c4850
fix email change note rendering of multiline properties (patch [SF#1575223])
Richard Jones <richard@users.sourceforge.net>
parents:
3702
diff
changeset
|
936 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
|
937 |
|
3440
0c78c9bbb542
in nosy messages, use quoted printable encoding for text/plain files...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3417
diff
changeset
|
938 # vim: set filetype=python sts=4 sw=4 et si : |
