Commit f3fb614f authored by Lukas Fleischer's avatar Lukas Fleischer
Browse files

Send reminders before the TU voting period ends

Add a new script that checks for TU votes ending within the next 48
hours and sends reminder emails to all Trusted Users who did not cast
their votes yet.

The script is designed to be executed as a cron job, such that the check
is performed periodically. Since the script does not remember users it
already sent emails to, the interval should not be chosen too small to
avoid spamming.

Signed-off-by: Lukas Fleischer's avatarLukas Fleischer <>
parent 5f43e2aa
......@@ -139,6 +139,15 @@ def get_request_recipients(cur, reqid):
return [row[0] for row in cur.fetchall()]
def get_tu_vote_reminder_recipients(cur, vote_id):
cur.execute('SELECT Users.Email FROM Users WHERE AccountTypeID = 2 ' +
'EXCEPT SELECT Users.Email FROM Users ' +
'INNER JOIN TU_Votes ' +
'ON TU_Votes.UserID = Users.ID ' +
'WHERE TU_Votes.VoteID = %s', [vote_id])
return [row[0] for row in cur.fetchall()]
def get_comment(cur, comment_id):
cur.execute('SELECT Comments FROM PackageComments WHERE ID = %s',
......@@ -405,6 +414,19 @@ def request_close(cur, uid, reqid, reason):
send_notification(to, subject, body, refs, headers)
def tu_vote_reminder(cur, vote_id):
to = get_tu_vote_reminder_recipients(cur, vote_id)
vote_uri = aur_location + '/tu/?id=' + vote_id
subject = 'TU Vote Reminder: Proposal %d' % (int(vote_id))
body = 'Please remember to cast your vote on proposal %d [1]. ' \
'The voting period ends in less than 48 hours.' % (int(vote_id))
refs = '[1] ' + vote_uri
send_notification(to, subject, body, refs)
if __name__ == '__main__':
action = sys.argv[1]
action_map = {
......@@ -420,6 +442,7 @@ if __name__ == '__main__':
'delete': delete,
'request-open': request_open,
'request-close': request_close,
'tu-vote-reminder': tu_vote_reminder,
db = mysql.connector.connect(host=aur_db_host, user=aur_db_user,
import configparser
import mysql.connector
import os
import subprocess
import time
config = configparser.RawConfigParser() + "/../conf/config")
aur_db_host = config.get('database', 'host')
aur_db_name = config.get('database', 'name')
aur_db_user = config.get('database', 'user')
aur_db_pass = config.get('database', 'password')
aur_db_socket = config.get('database', 'socket')
notify_cmd = config.get('notifications', 'notify-cmd')
db = mysql.connector.connect(host=aur_db_host, user=aur_db_user,
passwd=aur_db_pass, db=aur_db_name,
unix_socket=aur_db_socket, buffered=True)
cur = db.cursor()
now = int(time.time())
filter_from = now + 500
filter_to = now + 172800
cur.execute("SELECT ID FROM TU_VoteInfo WHERE End >= %s AND End <= %s",
[filter_from, filter_to])
for vote_id in [row[0] for row in cur.fetchall()]:
subprocess.Popen((notify_cmd, 'tu-vote-reminder', str(vote_id)))
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment