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%
1.8 KB · 45 lines python
Raw Blame History
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