Newer
Older
import datetime
import importlib
__KEYWORDS = os.getenv('KEYWORDS') or \
'vidéoprotection,caméras,captation,aéronef'
__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'):
__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')
# Liste des préfectures supportées
available_prefs = [
'ppparis',
'pref04',
'pref06',
'pref13',
'pref34',
'pref35',
'pref38',
'pref59',
'pref62',
'pref65',
'pref69',
'pref83',
'pref976'
]
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
parser = argparse.ArgumentParser(
prog='cli.py',
description='Télécharge les RAA d\'une préfecture donnée et recherche des '
'mots-clés'
)
parser.add_argument(
'-p',
'--pref',
action='store',
help='identifiant de la préfecture',
required=True,
choices=available_prefs
)
parser.add_argument(
'-k',
'--keywords',
action='store',
help='liste des termes recherchés, séparés par une virgule (par défaut : '
'vidéoprotection,caméras,captation,aéronef)'
)
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)'
)
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 courrier électronique destinataires des notifications '
'(séparées par une virgule)'
)

Bastien Le Querrec
a validé
for pref in available_prefs:
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
parser.add_argument(
f'--{pref}-email-to',
action='store',
help=f'adresses de courrier électronique destinataires des '
'notifications (séparées par une virgule) uniquement si '
'l\'analyse concerne {pref} (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'
)

Bastien Le Querrec
a validé
if args.v or os.getenv('VERBOSE'):
logging.basicConfig(level=logging.INFO)

Bastien Le Querrec
a validé
if args.vv or os.getenv('VVERBOSE'):
logging.basicConfig(level=logging.DEBUG)
if args.not_before:
__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
__DATA_DIR = f'{__DATA_DIR_ROOT}{args.pref}/'
# On calcule la liste des mails à notifier (liste générale EMAIL_TO + liste
# prefecture EMAIL_TO_PREF**)

Bastien Le Querrec
a validé
__PREF_EMAIL_TO = ''
pref_var_name = f'{args.pref}_EMAIL_TO'.upper()
if os.getenv(pref_var_name):
__PREF_EMAIL_TO = os.getenv(pref_var_name)

Bastien Le Querrec
a validé
else:
for arg in vars(args).items():
if arg[0] == f'{args.pref}_email_to':
__PREF_EMAIL_TO = arg[1]

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

Bastien Le Querrec
a validé
# On crée le dossier de téléchargement
os.makedirs(__DATA_DIR, exist_ok=True)
module = importlib.import_module(f'RAAspotter_{args.pref}')
raa_spotter = getattr(module, f'RAAspotter_{args.pref}')(__DATA_DIR)
raa_spotter.not_before = __NOT_BEFORE
raa_spotter.configure_mailer(__SMTP_HOSTNAME, __SMTP_USERNAME, __SMTP_PASSWORD,
__SMTP_PORT, __SMTP_STARTTLS, __SMTP_SSL,
__EMAIL_FROM, __EMAIL_TO,
f'[RAAspotter] [{raa_spotter.full_name}] '
'Nouveaux éléments trouvés')
raa_spotter.configure_mastodon(__MASTODON_ACCESS_TOKEN, __MASTODON_INSTANCE,
f'[{raa_spotter.full_name}]',
f'#{raa_spotter.short_code}')
raa_spotter.get_raa(__KEYWORDS)