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 = [
]
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)'
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
126
127
128
129
130
)
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:
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é
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:
__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é
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)