[ka2] fix connecteur agence_sherbrooke: retry (3 essais, backoff 5/10 s) de la page liste — un raté transitoire (vu 2026-08-30 ~03:42) produisait un faux « 0 trouvé ok » (médiane 12) car le fetch hérité de DynamicConnector avale les exceptions et retourne [] sans cartes; wrapper de retry scopé au connecteur (la classe de base sert aussi dynamic et gestimmo_estrie), erreur franche après 3 essais infructueux au lieu d'un zéro silencieux. Testé: run.py sync agence_sherbrooke → 12 annonces (= médiane 12)
1 changed file +17 −0
modified
louka/connectors/agence_sherbrooke.py
+17 −0
@@ -15,6 +15,9 @@ | ||
| 15 | 15 | # ----------------------------------------------------------------------------- |
| 16 | 16 | from __future__ import annotations |
| 17 | 17 | |
| 18 | +import time | |
| 19 | + | |
| 20 | +from ..schema import Listing | |
| 18 | 21 | from .dynamic import DynamicConnector |
| 19 | 22 | |
| 20 | 23 | |
@@ -26,6 +29,20 @@ class AgenceSherbrookeConnector(DynamicConnector): | ||
| 26 | 29 | CITY_DEFAULT = "Sherbrooke" |
| 27 | 30 | max_pages = 6 |
| 28 | 31 | |
| 32 | + def fetch(self) -> list[Listing]: | |
| 33 | + # Un raté transitoire de la page liste (vu 2026-08-30 ~03:42) | |
| 34 | + # produisait un faux « 0 trouvé ok » (médiane 12) : le fetch hérité | |
| 35 | + # avale les exceptions et retourne [] sans cartes. Retry court | |
| 36 | + # (backoff 5/10 s), puis erreur franche plutôt qu'un zéro silencieux. | |
| 37 | + for attempt in range(3): | |
| 38 | + listings = super().fetch() | |
| 39 | + if listings: | |
| 40 | + return listings | |
| 41 | + if attempt < 2: | |
| 42 | + time.sleep(5 * (attempt + 1)) | |
| 43 | + raise RuntimeError( | |
| 44 | + "0 annonce extraite de la page liste après 3 essais") | |
| 45 | + | |
| 29 | 46 | # -- crochets par site -------------------------------------------------------- |
| 30 | 47 | def _card_availability(self, card, title: str) -> str: |
| 31 | 48 | """Agence : étiquette /label/ de la carte (« Libre maintenant », |
| 32 | 49 | |