10637.3.1
by Guilherme Salgado
Use the default python version instead of a hard-coded version |
1 |
#!/usr/bin/python -S
|
8687.15.7
by Karl Fogel
Add the copyright header block to more files. |
2 |
#
|
3 |
# Copyright 2009 Canonical Ltd. This software is licensed under the
|
|
4 |
# GNU Affero General Public License version 3 (see the file LICENSE).
|
|
5 |
||
4935.3.7
by Curtis Hovey
Added bad name suppression to cronscripts. |
6 |
# pylint: disable-msg=C0103,W0403
|
3254.1.21
by Bjorn Tillenius
add the actual cronscript. |
7 |
|
8 |
"""Send bug notifications.
|
|
9 |
||
10 |
This script sends out all the pending bug notifications, and sets
|
|
11 |
date_emailed to the current date.
|
|
12 |
"""
|
|
13 |
||
14 |
__metaclass__ = type |
|
15 |
||
16 |
import _pythonpath |
|
17 |
||
18 |
from zope.component import getUtility |
|
19 |
||
3361.2.1
by Bjorn Tillenius
make send-bug-notifications.py connect as a specific db user. |
20 |
from canonical.config import config |
3254.1.21
by Bjorn Tillenius
add the actual cronscript. |
21 |
from canonical.database.constants import UTC_NOW |
13668.1.23
by Curtis Hovey
Fixed imports that relied on globs. |
22 |
from lp.services.mail.sendmail import sendmail |
12366.6.20
by Gary Poster
convert is_omitted to status enum on BugNotification, per review. |
23 |
from lp.bugs.enum import BugNotificationStatus |
11882.2.2
by Jonathan Lange
Clear up a heck of a lot of imports from canonical.launchpad.interfaces. |
24 |
from lp.bugs.interfaces.bugnotification import IBugNotificationSet |
13506.10.2
by Brad Crittenden
Horrible checkpoint |
25 |
from lp.bugs.scripts.bugnotification import ( |
26 |
get_email_notifications, |
|
13506.10.3
by Brad Crittenden
Working version of deferred bug duplicate notifications |
27 |
process_deferred_notifications, |
13506.10.2
by Brad Crittenden
Horrible checkpoint |
28 |
)
|
8356.1.1
by Leonard Richardson
Partial move. |
29 |
from lp.services.scripts.base import LaunchpadCronScript |
4264.2.1
by James Henstridge
add a LaunchpadCronScript subclass, and make cronscripts/*.py use it |
30 |
|
31 |
||
32 |
class SendBugNotifications(LaunchpadCronScript): |
|
3691.348.18
by kiko
Convert most other scripts; 6 remain, of which one looks like it's going to be a bit tricky... |
33 |
def main(self): |
34 |
notifications_sent = False |
|
13506.10.2
by Brad Crittenden
Horrible checkpoint |
35 |
bug_notification_set = getUtility(IBugNotificationSet) |
13627.2.9
by Brad Crittenden
Additional test coverage for deferred bug notifications |
36 |
deferred_notifications = \ |
37 |
bug_notification_set.getDeferredNotifications() |
|
13506.10.2
by Brad Crittenden
Horrible checkpoint |
38 |
process_deferred_notifications(deferred_notifications) |
39 |
pending_notifications = get_email_notifications( |
|
40 |
bug_notification_set.getNotificationsToSend()) |
|
12366.6.12
by Gary Poster
set omitted notifications as handled in the database. |
41 |
for (bug_notifications, |
42 |
omitted_notifications, |
|
43 |
messages) in pending_notifications: |
|
3945.2.1
by kiko
Implement first cut of a rationale-gathering mail system. We supply a BugNotificationRationale instance to the relevant IBug methods, which add to the rationale the person and reason for mailing him. Support teams and dupes rather nicely, though not 100% perfectly. |
44 |
for message in messages: |
3691.348.18
by kiko
Convert most other scripts; 6 remain, of which one looks like it's going to be a bit tricky... |
45 |
self.logger.info("Notifying %s about bug %d." % ( |
3945.2.1
by kiko
Implement first cut of a rationale-gathering mail system. We supply a BugNotificationRationale instance to the relevant IBug methods, which add to the rationale the person and reason for mailing him. Support teams and dupes rather nicely, though not 100% perfectly. |
46 |
message['To'], bug_notifications[0].bug.id)) |
47 |
sendmail(message) |
|
48 |
self.logger.debug(message.as_string()) |
|
3254.1.21
by Bjorn Tillenius
add the actual cronscript. |
49 |
for notification in bug_notifications: |
50 |
notification.date_emailed = UTC_NOW |
|
12366.6.20
by Gary Poster
convert is_omitted to status enum on BugNotification, per review. |
51 |
notification.status = BugNotificationStatus.SENT |
12366.6.12
by Gary Poster
set omitted notifications as handled in the database. |
52 |
for notification in omitted_notifications: |
53 |
notification.date_emailed = UTC_NOW |
|
12366.6.20
by Gary Poster
convert is_omitted to status enum on BugNotification, per review. |
54 |
notification.status = BugNotificationStatus.OMITTED |
3254.1.21
by Bjorn Tillenius
add the actual cronscript. |
55 |
notifications_sent = True |
56 |
# Commit after each batch of email sent, so that we won't
|
|
57 |
# re-mail the notifications in case of something going wrong
|
|
58 |
# in the middle.
|
|
3691.348.18
by kiko
Convert most other scripts; 6 remain, of which one looks like it's going to be a bit tricky... |
59 |
self.txn.commit() |
3254.1.21
by Bjorn Tillenius
add the actual cronscript. |
60 |
|
61 |
if not notifications_sent: |
|
3691.348.18
by kiko
Convert most other scripts; 6 remain, of which one looks like it's going to be a bit tricky... |
62 |
self.logger.debug("No notifications are pending to be sent.") |
3254.1.21
by Bjorn Tillenius
add the actual cronscript. |
63 |
|
64 |
||
65 |
if __name__ == '__main__': |
|
3691.348.18
by kiko
Convert most other scripts; 6 remain, of which one looks like it's going to be a bit tricky... |
66 |
script = SendBugNotifications('send-bug-notifications', |
67 |
dbuser=config.malone.bugnotification_dbuser) |
|
68 |
script.lock_and_run() |