SPB Git forge

spb/lou-ka

Public

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

232commits 1branches 0releases
172.9 MBsize
maindefault branch
2 days agolast push
HTML 98.9% Python 0.6%

[ka2] fix connecteur novelo: échec honnête si aucune section « Appartement — … » parsée — un « 0 trouvé ok » menaçait les 4 annonces. Contexte du broken (3 syncs) : 2 échecs DNS à 14:15/15:22 le 2026-09-10 étaient SYSTÉMIQUES (372 connecteurs touchés en même temps, panne réseau/DNS du nœud, rien à corriger côté connecteur), mais le 3e sync (19:19) a rapporté found=0 ok=1 missed=4 sur une page 200 — un rendu partiel avalé en silence, invisible du disjoncteur, qui aurait dépublié les 4 annonces. Or la page /louer-un-appartement/ saine affiche TOUJOURS les 4 sections par type (Loft, 3½, 4½, 5½ — granularité par type, prix « à partir de », jamais de vrai zéro) : on lève désormais RuntimeError si 0 section parsée (ok=0 dans sync_log), même pattern que le_fjord 472920e, logiluxx 1814e48 et thrace e5379b0. Distinct du cas lienard (rollback d1571fc) : ici la source est SAINE et le volume est restauré. Testé : reproduit live 4/4 via venv (loft 901 $, 3½ 1 090 $, 4½ 1 160 $, 5½ 1 415 $), pytest fixtures 2 passed, run.py sync novelo → found=4 ok (médiane 2, doc 4 actives), pm2 restart lou-ka-sync, site :8095 → 200.

Simon-Pierre Boucher committed 14 days ago (Sep 11, 2026) parent b4c26fe

1 changed file +8 −0

modified louka/connectors/novelo.py +8 −0
@@ -53,6 +53,14 @@ class NoveloConnector(BaseConnector):
53 53 self._parse_section(h, m.group(1).strip(), listings)
54 54 except Exception:
55 55 continue
56 + # échec HONNÊTE : une page saine affiche TOUJOURS les 4 sections par
57 + # type (granularité par type, jamais de vrai zéro) — un rendu partiel
58 + # servi 200 doit lever (ok=0) et non dépublier les annonces via un
59 + # « 0 trouvé ok » (vu le 2026-09-10 19:19, missed=4)
60 + if not listings:
61 + raise RuntimeError(
62 + "appartementsnovelo.com : aucune section « Appartement — … » "
63 + "parsée (rendu partiel ou page restructurée)")
56 64 return list(listings.values())
57 65
58 66 # -- section « Appartement — <type> » ---------------------------------------------
59 67