annotate scripts/roundup-reminder @ 5525:bb7865241f8a

Make CSV import/export compatible across Python versions (also RDBMS journals) (issue 2550976, issue 2550975). The roundup-admin export and import commands are used for migrating between different database backends. It is desirable that they should be usable also for migrations between Python 2 and Python 3, and in some cases (e.g. with the anydbm backend) this may be required. To be usable for such migrations, the format of the generated CSV files needs to be stable, meaning the same as currently used with Python 2. The export process uses repr() to produce the fields in the CSV files and eval() to convert them back to Python data structures. repr() of strings with non-ASCII characters produces different results for Python 2 and Python 3. This patch adds repr_export and eval_import functions to roundup/anypy/strings.py which provide the required operations that are just repr() and eval() in Python 2, but are more complicated in Python 3 to use data representations compatible with Python 2. These functions are then used in the required places for export and import. repr() and eval() are also used in storing the dict of changed values in the journal for the RDBMS backends. It is similarly desirable that the database be compatible between Python 2 and Python 3, so that export and import do not need to be used for a migration between Python versions for non-anydbm back ends. Thus, this patch changes rdbms_common.py in the places involved in storing journals in the database, not just in those involved in import/export. Given this patch, import/export with non-ASCII characters appear based on some limited testing to work across Python versions, and an instance using the sqlite backend appears to be compatible between Python versions without needing import/export, *if* the sessions/otks databases (which use anydbm) are deleted when changing Python version.
author Joseph Myers <jsm@polyomino.org.uk>
date Sun, 02 Sep 2018 23:48:04 +0000
parents 55f09ca366c4
children e124d76311e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4041
5db2dfff85d8 Fix issue1891328
Stefan Seefeld <stefan@seefeld.name>
parents: 3817
diff changeset
1 #! /usr/bin/env python
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 # Copyright (c) 2002 ekit.com Inc (http://www.ekit-inc.com/)
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 #
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # Permission is hereby granted, free of charge, to any person obtaining a copy
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 # of this software and associated documentation files (the "Software"), to deal
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 # in the Software without restriction, including without limitation the rights
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # copies of the Software, and to permit persons to whom the Software is
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # furnished to do so, subject to the following conditions:
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 #
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 # The above copyright notice and this permission notice shall be included in
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 # all copies or substantial portions of the Software.
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 #
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 # SOFTWARE.
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 '''
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 Simple script that emails all users of a tracker with the issues that
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 are currently assigned to them.
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 TODO: introduce some structure ;)
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 TODO: possibly make this more general and configurable...
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 '''
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
30 from __future__ import print_function
5418
55f09ca366c4 Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5414
diff changeset
31 import sys, MimeWriter, smtplib
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 from roundup import instance, date
2001
1e96ed79f0c3 fix for new mailer API
Richard Jones <richard@users.sourceforge.net>
parents: 1999
diff changeset
33 from roundup.mailer import SMTPConnection
5418
55f09ca366c4 Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5414
diff changeset
34 from roundup.anypy.strings import StringIO
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 # open the instance
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 if len(sys.argv) != 2:
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
38 print('You need to specify an instance home dir')
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 instance_home = sys.argv[1]
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 instance = instance.open(instance_home)
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 db = instance.open('admin')
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 resolved_id = db.status.lookup('resolved')
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5412
diff changeset
45 def listKey(x):
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5412
diff changeset
46 "key for tuples such that order is positive on [0] and negative on [1]"
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5412
diff changeset
47 return (x[0], -x[1])
1999
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
48 return 0
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
49
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 # loop through all the users
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 for user_id in db.user.list():
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 # make sure we care aboue this user
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 name = db.user.get(user_id, 'realname')
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 if name is None:
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 name = db.user.get(user_id, 'username')
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 address = db.user.get(user_id, 'address')
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 if address is None:
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 continue
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 # extract this user's issues
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 l = []
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 for issue_id in db.issue.find(assignedto=user_id):
1999
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
63 if db.issue.get(issue_id, 'status') == resolved_id:
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
64 continue
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
65 order = db.priority.get(db.issue.get(issue_id, 'priority'), 'order')
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
66 l.append((order, db.issue.get(issue_id, 'activity'),
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
67 db.issue.get(issue_id, 'creation'), issue_id))
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 # sort the issues by timeliness and creation date
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5412
diff changeset
70 l.sort(key=listKey)
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 if not l:
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 continue
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 # generate the email message
5418
55f09ca366c4 Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5414
diff changeset
75 message = StringIO()
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 writer = MimeWriter.MimeWriter(message)
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
77 writer.addheader('Subject', 'Your active %s issues'%db.config.TRACKER_NAME)
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 writer.addheader('To', address)
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
79 writer.addheader('From', '%s <%s>'%(db.config.TRACKER_NAME,
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 db.config.ADMIN_EMAIL))
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
81 writer.addheader('Reply-To', '%s <%s>'%(db.config.TRACKER_NAME,
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 db.config.ADMIN_EMAIL))
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 writer.addheader('MIME-Version', '1.0')
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
84 writer.addheader('X-Roundup-Name', db.config.TRACKER_NAME)
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 # start the multipart
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 part = writer.startmultipartbody('alternative')
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 part = writer.nextpart()
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 body = part.startbody('text/plain')
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 # do the plain text bit
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
92 print('Created ID Activity Title', file=body)
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
93 print('='*75, file=body)
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 # '2 months 213 immediate cc_daemon barfage
1999
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
95 old_priority = None
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
96 for priority_order, activity_date, creation_date, issue_id in l:
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
97 priority = db.issue.get(issue_id, 'priority')
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
98 if (priority != old_priority):
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
99 old_priority = priority
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
100 print(' ', db.priority.get(priority,'name'), file=body)
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 # pretty creation
3817
ce2c88d83eb6 Fix scripts/roundup-reminder date calculation [SF#1649979]
Richard Jones <richard@users.sourceforge.net>
parents: 2001
diff changeset
102 creation = (creation_date - date.Date('.')).pretty()
ce2c88d83eb6 Fix scripts/roundup-reminder date calculation [SF#1649979]
Richard Jones <richard@users.sourceforge.net>
parents: 2001
diff changeset
103 activity = (activity_date - date.Date('.')).pretty()
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 title = db.issue.get(issue_id, 'title')
1999
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
105 if len(title) > 42:
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
106 title = title[:38] + ' ...'
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
107 print('%-11s %-4s %-9s %-42s'%(creation, issue_id,
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
108 activity, title), file=body)
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109
711
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
110 # some help to finish off
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
111 print('''
711
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
112 To view or respond to any of the issues listed above, visit the URL
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
113
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
114 %s
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
115
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
116 and click on "My Issues". Do NOT respond to this message.
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
117 '''%db.config.TRACKER_WEB, file=body)
711
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
118
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
119
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 # now the HTML one
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 part = writer.nextpart()
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 body = part.startbody('text/html')
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 colours = {
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 'immediate': ' bgcolor="#ffcdcd"',
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 'day': ' bgcolor="#ffdecd"',
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 'week': ' bgcolor="#ffeecd"',
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 'month': ' bgcolor="#ffffcd"',
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 'whenever': ' bgcolor="#ffffff"',
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 }
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
130 print('''<table border>
1999
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
131 <tr><th>Created</th> <th>ID</th> <th>Activity</th> <th>Title</th></tr>
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
132 ''', file=body)
1999
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
133 old_priority = None
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
134 for priority_order, activity_date, creation_date, issue_id in l:
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
135 priority = db.issue.get(issue_id,'priority')
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
136 if (priority != old_priority):
1b7f730e7037 fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
Richard Jones <richard@users.sourceforge.net>
parents: 1612
diff changeset
137 old_priority = priority
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
138 print('<tr><td>-></td><td>-></td><td>-></td><td><b>%s</b></td></tr>'%db.priority.get(priority,'name'), file=body)
4658
838e0e0c5e9f Incorrect 'Created' value in round-reminder script (issue2550769)
John Kristensen <john@jerrykan.com>
parents: 4041
diff changeset
139 creation = (creation_date - date.Date('.')).pretty()
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 title = db.issue.get(issue_id, 'title')
1409
8dc60d87ab42 Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
141 issue_id = '<a href="%sissue%s">%s</a>'%(db.config.TRACKER_WEB,
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 issue_id, issue_id)
3817
ce2c88d83eb6 Fix scripts/roundup-reminder date calculation [SF#1649979]
Richard Jones <richard@users.sourceforge.net>
parents: 2001
diff changeset
143 activity = (activity_date - date.Date('.')).pretty()
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
144 print('''<tr><td>%s</td><td>%s</td><td>%s</td>
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
145 <td>%s</td></tr>'''%(creation, issue_id, activity, title), file=body)
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
146 print('</table>', file=body)
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
148 print('''<p>To view or respond to any of the issues listed
711
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
149 above, simply click on the issue ID. Do <b>not</b> respond to
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4658
diff changeset
150 this message.</p>''', file=body)
711
9c76498f1ac3 Added simple help to the reminder emailer.
Richard Jones <richard@users.sourceforge.net>
parents: 689
diff changeset
151
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 # finish of the multipart
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 writer.lastpart()
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 # all done, send!
2001
1e96ed79f0c3 fix for new mailer API
Richard Jones <richard@users.sourceforge.net>
parents: 1999
diff changeset
156 smtp = SMTPConnection(db.config)
689
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 smtp.sendmail(db.config.ADMIN_EMAIL, address, message.getvalue())
456a1ed04650 Here's a cron-job reminder script...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158
1092
e5826025eeb7 more Log removal
Richard Jones <richard@users.sourceforge.net>
parents: 711
diff changeset
159 # vim: set filetype=python ts=4 sw=4 et si

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