chore(lint): interdire d avaler une exception sans laisser de trace

Regle BLE de ruff activee. Ce qu'elle enforce n'est pas "ne jamais attraper
large" : elle se satisfait d'un logger.exception. C'est exactement la
discipline visee — une frontiere peut tout avaler, a condition de laisser de
quoi distinguer un defaut d'une panne. Les cinq noqa que j'avais prepares
d'avance etaient donc inertes ; la raison reste en commentaire simple.

Ce que la regle a trouve, une fois activee :

app.py, demarrage du bot — les deux facons d'echouer, jeton invalide et
import casse, se lisaient a l'identique sur une seule ligne et aucune
n'etait diagnosticable. Passe en error avec exc_info : un club qui ne
recoit plus aucun rappel a perdu une fonctionnalite, et warning mettait ca
a cote des avis de depreciation.

services/notifications.py — le bloc webhook attrapait large autour d'un
requests.post. RequestException couvre toutes les facons dont un appel HTTP
echoue ; le reste est un defaut. La branche DM et la branche webhook etaient
en plus imbriquees dans un seul try alors qu'elles s'excluent.

logging_config.py et les deux scripts CLI gardent leur largeur, avec la
raison sur la ligne. Le filtre de journalisation est le cas ou la trace que
BLE001 reclame est precisement ce qu'il ne faut pas produire : journaliser
depuis un filtre rentre dans le meme filtre.

RUF100 (noqa inutile) n'est volontairement pas active : il ferait remonter
des directives preexistantes sans rapport avec ce chantier.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
GGThed
2026-08-11 16:29:13 -04:00
co-authored by Claude Opus 5
parent 546f28571b
commit 66f2838402
6 changed files with 102 additions and 60 deletions
+5 -1
View File
@@ -249,7 +249,11 @@ def backup_documents():
try:
shutil.make_archive(archive_basename, 'zip', DOCUMENTS_DIR)
except Exception as exc:
except Exception as exc: # noqa: BLE001 — a failed document archive must not lose the dump
# This runs after the database dump has already succeeded. Letting
# anything through here would abort the script with a traceback and
# take the one part that worked down with it. Reported to stdout, in
# the format the rest of this script uses; it has no logger.
print(f'[ERROR] Document backup failed: {exc}')
return None
+6 -1
View File
@@ -332,10 +332,15 @@ def check_flask_config():
else:
print('[OK] DEBUG mode: disabled')
except Exception as e:
except Exception as e: # noqa: BLE001 — any failure to load the app is a failed check
# Returning all_ok (still True) here meant that failing to load the
# application at all was counted as a passing check — the most
# important section of the report silently never ran.
#
# The breadth is the point: this section's question is "does the
# application load with a safe configuration", and every way of not
# loading answers it the same way. Reported on stdout because this
# script is read by a CI job, not by a log collector.
print(f'[FAIL] Cannot check Flask config: {e}')
return False