Newer
Older
import datetime
import importlib
from Attrap import Attrap
__KEYWORDS = os.getenv('KEYWORDS') or ''
__DATA_DIR_ROOT = os.path.dirname(os.path.abspath(__file__)) + '/data/'
__SMTP_HOSTNAME = os.getenv('SMTP_HOSTNAME') or 'localhost'
__SMTP_USERNAME = os.getenv('SMTP_USERNAME') or ''
__SMTP_PASSWORD = os.getenv('SMTP_PASSWORD') or ''
__EMAIL_FROM = os.getenv('EMAIL_FROM')
__EMAIL_TO = os.getenv('EMAIL_TO')
if os.getenv('SMTP_PORT'):
__SMTP_PORT = int(os.getenv('SMTP_PORT'))
if os.getenv('NOT_BEFORE'):
try:
relative_date = dateparser.parse(os.getenv('NOT_BEFORE'))
__NOT_BEFORE = datetime.datetime(year=relative_date.year, month=relative_date.month, day=relative_date.day)
except Exception as exc:
__NOT_BEFORE = datetime.datetime.strptime(
os.getenv('NOT_BEFORE'), '%Y-%m-%d'
)
else:
__NOT_BEFORE = datetime.datetime(2024, 1, 1)
__MASTODON_ACCESS_TOKEN = os.getenv('MASTODON_ACCESS_TOKEN')
__MASTODON_INSTANCE = os.getenv('MASTODON_INSTANCE')

Bastien Le Querrec
a validé
# Liste des administrations supportées
available_administrations = [
]
parser = argparse.ArgumentParser(
prog='cli.py',

Bastien Le Querrec
a validé
description='Télécharge les RAA d\'une administration donnée et recherche des mots-clés'

Bastien Le Querrec
a validé
'administration',

Bastien Le Querrec
a validé
help='identifiant de l\'administration',
choices=available_administrations
)
parser.add_argument(
'-k',
'--keywords',
action='store',
help='liste des termes recherchés, séparés par une virgule (aucun par défaut)'
)
parser.add_argument(
'--not-before',
action='store',
help='n\'analyse pas les RAA datant d\'avant la date indiquée, au format YYYY-MM-DD (par défaut : 2024-01-01)'
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
)
parser.add_argument(
'--smtp-hostname',
action='store',
help='nom d\'hôte SMTP (par défaut : localhost)'
)
parser.add_argument(
'--smtp-username',
action='store',
help='nom d\'utilisateur SMTP (par défaut : vide)'
)
parser.add_argument(
'--smtp-password',
action='store',
help='mot de passe SMTP (par défaut : vide)'
)
parser.add_argument(
'--smtp-port',
action='store',
help='port SMTP (par défaut : 587)'
)
parser.add_argument(
'--smtp-starttls',
action='store_true',
help='connexion SMTP avec STARTTLS'
)
parser.add_argument(
'--smtp-ssl',
action='store_true',
help='connexion SMTP avec SSL'
)
parser.add_argument(
'-f',
'--email-from',
action='store',
help='adresse de courrier électronique expéditrice des notifications'
)
parser.add_argument(
'-t',
'--email-to',
action='store',
help='adresses de courriers électroniques destinataires des notifications (séparées par une virgule)'

Bastien Le Querrec
a validé

Bastien Le Querrec
a validé
for administration in available_administrations:

Bastien Le Querrec
a validé
f'--{administration}-email-to',

Bastien Le Querrec
a validé
help=f'adresses de courrier électronique destinataires des notifications (séparées par une virgule) uniquement si l\'analyse concerne {administration} (s\'ajoute à celles précisées dans --email-to)'
)
parser.add_argument(
'--mastodon-access-token',
action='store',
help='jeton d\'accès pour publier sur Mastodon (par défaut : vide)'
)
parser.add_argument(
'--mastodon-instance',
action='store',
help='URL de l\'instance (doit inclure "http://" ou "https://" ; par défaut : vide)'
)
parser.add_argument(
'-v',
action='store_true',
help='relève le niveau de verbosité à INFO'
)
parser.add_argument(
'-vv',
action='store_true',
help='relève le niveau de verbosité à DEBUG'
)
if (args.v or os.getenv('VERBOSE')) and not args.vv and not os.getenv('VVERBOSE'):
logging.basicConfig(level=logging.INFO)

Bastien Le Querrec
a validé
logging.getLogger("stem").setLevel(logging.WARNING)

Bastien Le Querrec
a validé
if args.vv or os.getenv('VVERBOSE'):
logging.basicConfig(level=logging.DEBUG)

Bastien Le Querrec
a validé
logging.getLogger("stem").setLevel(logging.WARNING)
if args.not_before:
try:
relative_date = dateparser.parse(args.not_before)
__NOT_BEFORE = datetime.datetime(year=relative_date.year, month=relative_date.month, day=relative_date.day)
except Exception as exc:
__NOT_BEFORE = datetime.datetime.strptime(args.not_before, '%Y-%m-%d')
__SMTP_HOSTNAME = args.smtp_hostname
__SMTP_USERNAME = args.smtp_username
__SMTP_PASSWORD = args.smtp_password
if args.mastodon_access_token:
__MASTODON_ACCESS_TOKEN = args.mastodon_access_token
if args.mastodon_instance:
__MASTODON_INSTANCE = args.mastodon_instance

Bastien Le Querrec
a validé
__DATA_DIR = f'{__DATA_DIR_ROOT}{args.administration}/'
# On calcule la liste des mails à notifier (liste générale EMAIL_TO + liste

Bastien Le Querrec
a validé
# administration EMAIL_TO_ADMINISTRATION**)
__ADMINISTRATION_EMAIL_TO = ''
administration_var_name = f'{args.administration}_EMAIL_TO'.upper()
if os.getenv(administration_var_name):
__ADMINISTRATION_EMAIL_TO = os.getenv(administration_var_name)

Bastien Le Querrec
a validé
else:

Bastien Le Querrec
a validé
if arg[0] == f'{args.administration}_email_to':
__ADMINISTRATION_EMAIL_TO = arg[1]

Bastien Le Querrec
a validé

Bastien Le Querrec
a validé
if __ADMINISTRATION_EMAIL_TO and not __ADMINISTRATION_EMAIL_TO == '':
if __EMAIL_TO:
__EMAIL_TO = f'{__EMAIL_TO},{__ADMINISTRATION_EMAIL_TO}'
else:
__EMAIL_TO = __ADMINISTRATION_EMAIL_TO

Bastien Le Querrec
a validé
module = importlib.import_module(f'Attrap_{args.administration}')
attrap = getattr(module, f'Attrap_{args.administration}')(__DATA_DIR)
attrap.not_before = __NOT_BEFORE
attrap.configure_mailer(__SMTP_HOSTNAME, __SMTP_USERNAME, __SMTP_PASSWORD, __SMTP_PORT, __SMTP_STARTTLS, __SMTP_SSL,
__EMAIL_FROM, __EMAIL_TO, f'[Attrap] [{attrap.full_name}] Nouveaux éléments trouvés')
attrap.configure_mastodon(__MASTODON_ACCESS_TOKEN, __MASTODON_INSTANCE, f'[{attrap.full_name}]', f'#{attrap.short_code}')
attrap.get_raa(__KEYWORDS)