General A/B testing.
[wolnelektury.git] / src / funding / management / commands / funding_notify.py
1 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
2 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
3 #
4 from django.core.management.base import BaseCommand
5
6
7 class Command(BaseCommand):
8     help = 'Sends relevant funding notifications.'
9
10     def add_arguments(self, parser):
11         parser.add_argument(
12             '-q', '--quiet', action='store_false', dest='verbose',
13             default=True, help='Suppress output')
14
15     def handle(self, **options):
16
17         from datetime import date, timedelta
18         from funding.models import Offer
19         from funding import app_settings
20         from django.core.cache import caches
21         from django.conf import settings
22
23         verbose = options['verbose']
24
25         for offer in Offer.past().filter(notified_end=None):
26             if verbose:
27                 print('Notify end:', offer)
28             # The 'WL fund' list needs to be updated.
29             caches[settings.CACHE_MIDDLEWARE_ALIAS].clear()
30             offer.clear_cache()
31             offer.notify_end()
32
33         current = Offer.current()
34         if (current is not None and
35                 current.end <= date.today() + timedelta(app_settings.DAYS_NEAR - 1) and
36                 not current.notified_near):
37             if verbose:
38                 print('Notify near:', current)
39             current.notify_near()