36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
"""Service layer for cache-aware fetching of FINN ads and Eiendom.no units."""
|
|
|
|
import logging
|
|
|
|
from .ad import fetch_ad_details
|
|
from .cache import get_eiendom_unit as get_cached_eiendom_unit
|
|
from .cache import get_finn_ad, init_db, save_eiendom_unit, save_finn_ad
|
|
from .config import FINN_CACHE_PATH
|
|
from .eiendom_no import get_unit
|
|
from .models import EiendomUnit, FinnAd
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
async def get_or_fetch_ad(finnkode: str, force_refresh: bool = False) -> FinnAd:
|
|
"""Get FinnAd from cache or fetch fresh. Never returns None."""
|
|
conn = init_db(FINN_CACHE_PATH)
|
|
ad = None if force_refresh else get_finn_ad(conn, finnkode, ttl_hours=24)
|
|
if ad is None:
|
|
ad = await fetch_ad_details(finnkode)
|
|
save_finn_ad(conn, ad)
|
|
return ad
|
|
|
|
|
|
async def get_or_fetch_eiendom_unit(
|
|
unit_code: str, force_refresh: bool = False
|
|
) -> EiendomUnit | None:
|
|
"""Get EiendomUnit from cache or fetch fresh."""
|
|
conn = init_db(FINN_CACHE_PATH)
|
|
unit = None if force_refresh else get_cached_eiendom_unit(conn, unit_code, ttl_hours=24)
|
|
if unit is None:
|
|
unit = await get_unit(unit_code)
|
|
if unit is not None:
|
|
save_eiendom_unit(conn, unit)
|
|
return unit
|