123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- """ Send reminders for contribution that are about to expire
- It offers a way for contributors to opt-in keeping the data one year more (or
- deleting it right now).
- Reminders are sent when the script is called exactly `n` days before the
- expiration date.
- This `n` can be configured via `DATA_EXPIRATION_REMINDERS` setting.
- """
- from django.conf import settings
- from django.core.mail import send_mail
- from django.core.management.base import BaseCommand, CommandError
- from django.template.loader import get_template
- from ...models import Contrib
- class Command(BaseCommand):
- help = __doc__
- def add_arguments(self, parser):
- parser.add_argument(
- '--dry-run', default=False, action='store_true',
- help="Do not actually send emails, just pretend to")
- def handle(self, dry_run, *args, **options):
- if dry_run:
- self.stderr.write('DRY RUN MODE: we do not actually send emails.')
- for ndays in settings.DATA_EXPIRATION_REMINDERS:
- expirating_contribs = Contrib.objects.expires_in_days(ndays)
- for contrib in expirating_contribs:
- if not contrib.email:
- self._warn_no_email(contrib, ndays)
- else:
- if not dry_run:
- self.send_expiration_reminder(contrib, ndays)
- self._log_sent_email(contrib, ndays)
- def _warn_no_email(self, contrib, ndays):
- self.stderr.write(
- 'WARNING : the contribution {} is about to expire in {} days but'
- + 'do not define a contact email.'.format(
- contrib, ndays))
- def _log_sent_email(self, contrib, ndays):
- self.stderr.write(
- "Sent reminder email to for {} expiration in {} days".format(
- contrib, ndays))
- def send_expiration_reminder(self, contrib, ndays):
- subject = get_template(
- 'contribmap/mails/expiration_reminder.subject')
- body = get_template(
- 'contribmap/mails/expiration_reminder.txt')
- context = {
- 'contrib': contrib,
- 'ndays': ndays,
- }
- send_mail(
- subject.render(context),
- body.render(context),
- settings.DEFAULT_FROM_EMAIL,
- [contrib.email],
- )
|