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 location_saguenay: cache-buster sur les retries — le retry simple relisait 3 fois la même copie cachée sans menu. Le sync du 2026-09-08 03:31 a échoué honnêtement (RuntimeError « menu introuvable après 3 essais », ok=0) alors que le site est sain : reproduit en live, la page d'accueil (200, 92 Ko) contient bien le menu « Logements disponibles » et ses 21 fiches. Cause probable : le site sert ses pages via un cache HTTP (cache-control: max-age=600, vary: User-Agent) — une variante partielle figée pour l'UA LouKaBot faisait échouer les 3 essais du retry de 2026-08-29 sur la MÊME copie (fenêtre ~30 s « 10 s de throttling), insuffisant contre un cache de 10 min. Fix (changement d'angle, même pattern que brio 2c52899) : les essais 2 et 3 passent un paramètre cache-buster (?lkb=<ts>) pour forcer un rendu frais ; l'erreur franche après 3 essais est conservée. Testé : LIST_URL?lkb=… → menu présent ; run.py sync location_saguenay → found=21 ok (médiane 21), pm2 restart lou-ka-sync, site :8095 → 200.

Simon-Pierre Boucher committed 17 days ago (Sep 8, 2026) parent 2c52899

1 changed file +8 −2

modified louka/connectors/location_saguenay.py +8 −2
@@ -18,6 +18,7 @@ from __future__ import annotations
18 18
19 19 import hashlib
20 20 import re
21 +import time
21 22
22 23 from bs4 import BeautifulSoup
23 24
@@ -41,8 +42,13 @@ class LocationSaguenayConnector(BaseConnector):
41 42 # vu 2026-08-29) produisait un faux « 0 trouvé ok » : retry court, puis
42 43 # erreur franche plutôt qu'un zéro silencieux. Le throttling de get()
43 44 # (10 s) espace naturellement les essais.
44 − for _ in range(3):
45 − html = self.get(LIST_URL).text
45 + # Vu 2026-09-08 : le site cache ses pages (cache-control max-age=600,
46 + # vary: User-Agent) — une variante partielle figée pour notre UA fait
47 + # échouer les 3 essais sur la MÊME copie. Les essais 2 et 3 passent
48 + # donc un cache-buster pour forcer un rendu frais (pattern brio).
49 + for attempt in range(3):
50 + params = {"lkb": int(time.time())} if attempt else None
51 + html = self.get(LIST_URL, params=params).text
46 52 soup = BeautifulSoup(html, "html.parser")
47 53 root = self._find_menu_root(soup)
48 54 if root is not None:
49 55