Lou·Ka — tous les logements à louer du Québec, un seul endroit.
HTML 98.9%
Python 0.6%
1# -----------------------------------------------------------------------------2# Lou-Ka — Location court terme3# connectors/base.py : classe de base des connecteurs court terme.4# Hérite des backends de fetch de BaseConnector (get direct + escalade5# anti-bot Oxylabs→Scrapfly→Bright Data, get_rendered, scrapfly) mais son6# cache détail vit dans la base court terme (louka_ct.db) et son contrat7# retourne des StListing.8# -----------------------------------------------------------------------------9from __future__ import annotations1011from ...connectors.base import BaseConnector12from ..schema import StListing131415class StConnector(BaseConnector):16 """Un connecteur court terme = un adaptateur propre à une plateforme17 d'hébergement (chalets, séjours, gîtes…).1819 Sous-classes : définir `source_id` et implémenter `fetch()` qui retourne20 la liste des hébergements actuellement affichés. Le pipeline21 (shortterm/ingest.py) s'occupe du diff avec la base court terme.22 """2324 source_id: str = ""2526 def detail(self, external_id: str, key: str, fetch_fn) -> dict:27 """Cache détail dans louka_ct.db (jamais dans la base long terme)."""28 if not self.use_detail_cache:29 return fetch_fn() or {}30 from .. import db31 if self._detail_con is None:32 self._detail_con = db.connect()33 cached = db.get_cached_detail(self._detail_con, self.source_id,34 str(external_id), key)35 if cached is not None:36 return cached37 payload = fetch_fn() or {}38 db.put_cached_detail(self._detail_con, self.source_id,39 str(external_id), key, payload)40 return payload4142 # -- contrat --------------------------------------------------------------43 def fetch(self) -> list[StListing]:44 raise NotImplementedError45