# ============================================================================= # QWHPI — Quebec Weekly Housing Price Index # Author : Simon-Pierre Boucher # Contact : contact@spboucher.ai # File : api/app/routers/liquidity.py # Purpose : Weekly transaction-volume (liquidity) endpoint per series. # ============================================================================= """Liquidity endpoints.""" from __future__ import annotations import polars as pl from fastapi import APIRouter, HTTPException, Request, Response from app.deps import etag_for, validate_series from app.schemas import LiquidityPoint, LiquidityResponse from app.services import data router = APIRouter() @router.get("/liquidity", response_model=LiquidityResponse) def liquidity(request: Request, response: Response, geography: str, type: str = "all"): """Weekly transaction counts for one series.""" validate_series(geography, type) df = data.liquidity().filter( (pl.col("geography_id") == geography) & (pl.col("property_type") == type) ).sort("period") if df.height == 0: raise HTTPException(404, "no liquidity data") if etag_for(request, response, geography, type): return Response(status_code=304) return LiquidityResponse( geography=geography, property_type=type, median_monthly_transactions=float(df["transactions"].median()), observations=[LiquidityPoint(period=r["period"], transactions=r["transactions"]) for r in df.iter_rows(named=True)], )