Files
finn-mcp/finn_eiendom/service.py
T
2026-05-16 06:54:17 +00:00

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