#!/srv/venv/bin/python import sys import os from django.core.management.base import BaseCommand from rowers.models import Alert, Condition, User from rowers.tasks import handle_send_email_alert from rowers import alerts from rowers.utils import myqueue, dologging import datetime import django_rq PY3K = sys.version_info >= (3, 0) queue = django_rq.get_queue('default') queuelow = django_rq.get_queue('low') queuehigh = django_rq.get_queue('low') class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument( '--testing', action='store_true', dest='testing', default=False, help="Run in testing mode, don't send emails", ) def handle(self, *args, **options): if 'testing' in options: testing = options['testing'] else: testing = False todaysalerts = Alert.objects.filter( next_run__lt=datetime.date.today(), emailalert=True) for alert in todaysalerts: stats = alerts.alert_get_stats(alert) # explanatorytexts othertexts = [alert.description()] # send email _ = myqueue(queue, handle_send_email_alert, alert.manager.email, alert.manager.first_name, alert.manager.last_name, alert.rower.user.first_name, alert.rower.user.last_name, alert.name, stats, debug=True, othertexts=othertexts) dologging('alerts.log', 'Sent alert {id} to {email}'.format( id = alert.id, email = alert.manager.email, )) # advance next_run if not testing: alert.next_run = datetime.date.today() + datetime.timedelta(days=alert.period-1) alert.save() if testing: print('{nr} alerts found'.format(nr=len(todaysalerts))) self.stdout.write(self.style.SUCCESS( 'Successfully processed alerts'))