[ka2] fix connecteur rp_ag_denisedunnrealtor: ordre stale-first de la boucle sync (queue de liste affamée par cycles >24h + restarts)
1 changed file +12 −1
modified
immoka/ingest.py
+12 −1
@@ -14,11 +14,22 @@ from . import db | |||||
| 14 | from .connectors import CONNECTORS | 14 | from .connectors import CONNECTORS | ||
| 15 | 15 | ||||
| 16 | 16 | ||||
| 17 | +def _stale_first(con, targets: list[str]) -> list[str]: | ||||
| 18 | + """Ordonne les sources par dernier succès croissant (jamais synchronisées | ||||
| 19 | + d'abord). Une passe complète dure ~24 h : dans l'ordre fixe du registre, | ||||
| 20 | + un restart mi-cycle repart de zéro et affame la fin de la liste (hanlon, | ||||
| 21 | + denisedunn, raymondanthony marquées stale le 2026-08-29). Ici, les plus | ||||
| 22 | + en retard passent en tête de chaque cycle.""" | ||||
| 23 | + last = {r[0]: r[1] for r in con.execute( | ||||
| 24 | + "SELECT source, MAX(ts) FROM sync_log WHERE ok=1 GROUP BY source")} | ||||
| 25 | + return sorted(targets, key=lambda sid: last.get(sid) or 0.0) | ||||
| 26 | + | ||||
| 27 | + | ||||
| 17 | def run(sources: list[str] | None = None) -> list[dict]: | 28 | def run(sources: list[str] | None = None) -> list[dict]: | ||
| 18 | """Exécute l'ingestion pour toutes les sources (ou celles demandées).""" | 29 | """Exécute l'ingestion pour toutes les sources (ou celles demandées).""" | ||
| 19 | con = db.connect() | 30 | con = db.connect() | ||
| 20 | results = [] | 31 | results = [] | ||
| 21 | − targets = sources or list(CONNECTORS.keys()) | 32 | + targets = sources or _stale_first(con, list(CONNECTORS.keys())) | ||
| 22 | for sid in targets: | 33 | for sid in targets: | ||
| 23 | cls = CONNECTORS.get(sid) | 34 | cls = CONNECTORS.get(sid) | ||
| 24 | if cls is None: | 35 | if cls is None: | ||
| 25 | 36 | ||||