Skip to content
GitLab
Explore
Sign in
Commits on Source (1)
Refactor the script to extract the mails that are registered to an events mailing list
· 0107dd0a
ynerant
authored
Sep 08, 2020
0107dd0a
Hide whitespace changes
Inline
Side-by-side
management/commands/extract_ml_registrations.py
0 → 100644
View file @
0107dd0a
# 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