[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 | 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 | 28 | def run(sources: list[str] | None = None) -> list[dict]: |
| 18 | 29 | """Exécute l'ingestion pour toutes les sources (ou celles demandées).""" |
| 19 | 30 | con = db.connect() |
| 20 | 31 | results = [] |
| 21 | − targets = sources or list(CONNECTORS.keys()) | |
| 32 | + targets = sources or _stale_first(con, list(CONNECTORS.keys())) | |
| 22 | 33 | for sid in targets: |
| 23 | 34 | cls = CONNECTORS.get(sid) |
| 24 | 35 | if cls is None: |
| 25 | 36 | |