SPB Git

spb/lou-ka

Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

[ka2] fix connecteur simplex: pagination plafonnée par la RPC + erreur franche sur réponse non-liste — le zéro depuis le 2026-09-30 est un VRAI zéro. La RPC Supabase get_public_rental_listings_page plafonne désormais côté serveur à 24 lignes/appel quel que soit p_limit (le site utilise p_limit:12 et ne le voit pas) : le connecteur demandait 100, recevait 24, avançait l'offset de 100 (≥ total 28) et SAUTAIT les lignes 24-27 — où se trouvaient précisément les 3 anciennes annonces disponibles (dont le 2½ du Cégep 740 $). Chute found=3→0 le 2026-09-30 08:33, puis 49 runs « found=0 ok » ; le dernier run (10-07 21:08) était un échec DNS transitoire (vague systémique connue du nœud). Vérifié live : RPC 200, 28 fiches (25 rented + 3 unavailable) ; le code du site (publicRentalCatalog.js) ne considère « disponible » que available/coming_soon et affiche tout le reste « Indisponible » → le filtre _KEEP du connecteur est aligné, found=0 est le vrai état du marché. Fix minimal : offset += len(batch) au lieu de PAGE (toutes les lignes vues : 28/28 au lieu de 24/28), et _rpc lève une erreur FRANCHE si la réponse n'est pas une liste (clé révoquée/dict d'erreur → plus jamais de zéro silencieux, indétectable avec médiane 0.0 — pattern sotramont bcdf125). Pas de fixture enregistrée : test_listings_are_valid exige des annonces non vides, impossible pendant un vrai zéro. Testé : fetch() venv → 28/28 lignes brutes, 0 annonce (vrai zéro), run.py sync simplex → found=0 ok (1,1 s), pm2 restart lou-ka-sync, site :8095 → 200.

Simon-Pierre Boucher committed (Oct 8, 2026) parent a259afc Browse files

1 changed file +9 −2

Unified Split
modified louka/connectors/simplex.py +9 −2
@@ -49,7 +49,12 @@ class SimplexConnector(BaseConnector):
49 49 "Authorization": f"Bearer {API_KEY}",
50 50 "Content-Type": "application/json"})
51 51 data = resp.json()
52 − return data if isinstance(data, list) else []
52 + if not isinstance(data, list):
53 + # clé révoquée / RPC renommée → dict d'erreur : erreur FRANCHE,
54 + # jamais un zéro silencieux (médiane 0.0 → indétectable sinon)
55 + raise RuntimeError(
56 + f"simplex : réponse RPC inattendue — {str(data)[:200]}")
57 + return data
53 58
54 59 def fetch(self) -> list[Listing]:
55 60 rows: list[dict] = []
@@ -58,7 +63,9 @@ class SimplexConnector(BaseConnector):
58 63 batch = self._rpc(offset)
59 64 rows.extend(batch)
60 65 total = batch[0].get("total_count", 0) if batch else 0
61 − offset += PAGE
66 + # la RPC plafonne côté serveur (~24 lignes/appel, quel que soit
67 + # p_limit) : avancer de la taille reçue, sinon la queue est sautée
68 + offset += len(batch)
62 69 if not batch or offset >= total:
63 70 break
64 71 listings: dict[str, Listing] = {}
65 72
Menu

Theme