Collecteurs, chacun isolé et tolérant à l'échec : - legifrance : OAuth PISTE validé en production. Deux pièges vérifiés sur le compte réel — seul le couple « Client ID / Client secret » ouvre un jeton (la clé d'API donne invalid_client), et les identifiants de production ne passent pas en bac à sable. - senat : liste chronologique des lois promulguées. L'URL du §5.1 (senat.fr/lois/index.html) est morte ; l'équivalent fonctionnel est /dossiers-legislatifs/lois-promulguees.html — 31 lois 2026 relevées. - conseil_constitutionnel : sans le paramètre ?id=32246 la page des affaires en instance ne rend que des QPC et aucune affaire DC. Les colonnes DC et QPC diffèrent : lecture par en-tête, jamais par position. Rapprochement à trois issues — numéro officiel, similarité de titre, et une zone de signalement où le pipeline s'abstient plutôt que de fusionner. make update-dry contre les sources réelles : aucun faux positif sur les 52 textes du corpus, et trois apports que le rapport n'avait pas — le numéro d'affaire 2026-907 DC de la programmation militaire, la date de saisine du 16 juillet pour l'aide à mourir, les décisions du 23 juillet sur 908 et 909. Une asymétrie de sources est documentée par un test plutôt que corrigée en douce : le Sénat ne qualifie pas la loi 2026-650 d'organique, Légifrance si. Le collecteur rapporte ce que sa source dit ; le champ n'est pas comparé. Fixtures HTML figées : aucun test ne touche au réseau. 156 tests, 91 % de couverture (chaque module au-dessus du seuil de 70 %). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
15 lines
664 B
Python
15 lines
664 B
Python
"""Collecteurs des sources officielles.
|
|
|
|
Chaque collecteur est isolé : il déclare ce qu'il sait faire, tente sa collecte,
|
|
et rend un `ResultatCollecte` — jamais une exception. Un collecteur en panne ne
|
|
doit pas empêcher les autres de tourner ni faire échouer le run.
|
|
|
|
Tous passent par le client HTTP commun (`http.py`), qui impose un user-agent
|
|
honnête avec adresse de contact, un délai minimal entre deux requêtes vers un
|
|
même hôte, et un cache disque. Aucun collecteur n'ouvre de connexion en direct.
|
|
"""
|
|
|
|
from pipeline.collecteurs.base import Collecteur, ResultatCollecte, TexteCollecte
|
|
|
|
__all__ = ["Collecteur", "ResultatCollecte", "TexteCollecte"]
|