From 0107dd0a94ee61dc1846b54afe430da5a81d89b1 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Tue, 8 Sep 2020 10:11:08 +0200 Subject: [PATCH] Refactor the script to extract the mails that are registered to an events mailing list --- .../commands/extract_ml_registrations.py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 management/commands/extract_ml_registrations.py diff --git a/management/commands/extract_ml_registrations.py b/management/commands/extract_ml_registrations.py new file mode 100644 index 0000000..1e8f472 --- /dev/null +++ b/management/commands/extract_ml_registrations.py @@ -0,0 +1,57 @@ +# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay +# SPDX-License-Identifier: GPL-3.0-or-later + +from datetime import date + +from django.contrib.auth.models import User +from django.core.management import BaseCommand +from django.db.models import Q +from member.models import Membership, Club +from wei.models import WEIClub + + +class Command(BaseCommand): + help = "Get mailing list registrations from the last wei. " \ + "Usage: manage.py extract_ml_registrations -t {events,art,sport} -t {fr, en}. " \ + "You can write this into a file with a pipe, then paste the document into your mail manager." + + def add_arguments(self, parser): + parser.add_argument('--type', '-t', choices=["members", "clubs", "events", "art", "sport"], default="members", + help='Select the type of the mailing list (default members)') + parser.add_argument('--lang', '-l', type=str, choices=['fr', 'en'], default='fr', + help='Select the registred users of the ML of the given language. Useful only for the ' + 'events mailing list.') + + def handle(self, *args, **options): + # TODO: Improve the mailing list extraction system, and link it automatically with Mailman. + + if options["type"] == "members": + for membership in Membership.objects.filter( + club__name="BDE", + date_start__lte=date.today(), + date_end__gte=date.today(), + ).all(): + self.stdout.write(membership.user.email) + return + + if options["type"] == "clubs": + for club in Club.objects.all(): + self.stdout.write(club.email) + return + + # Get the list of mails that want to be registered to the events mailing list. + # Don't filter to valid members, old members can receive these mails as long as they want. + if options["type"] == "events": + for user in User.objects.filter(profile__ml_events_registration=options["lang"]).all(): + self.stdout.write(user.email) + return + + if options["type"] == "art": + for user in User.objects.filter(profile__ml_art_registration=True).all(): + self.stdout.write(user.email) + return + + if options["type"] == "sport": + for user in User.objects.filter(profile__ml_sport_registration=True).all(): + self.stdout.write(user.email) + return