spb/qwhpi Public
QHPI — Quebec Housing Price Index: quality-adjusted, hierarchically pooled housing price indexes.
Python 63.9%
TypeScript 25.4%
CSS 5.5%
TeX 3.5%
SQL 0.8%
Makefile 0.5%
Dockerfile 0.5%
1# =============================================================================2# QWHPI — Quebec Weekly Housing Price Index3# Author : Simon-Pierre Boucher4# Contact : contact@spboucher.ai5# File : api/app/routers/liquidity.py6# Purpose : Weekly transaction-volume (liquidity) endpoint per series.7# =============================================================================8"""Liquidity endpoints."""910from __future__ import annotations1112import polars as pl13from fastapi import APIRouter, HTTPException, Request, Response1415from app.deps import etag_for, validate_series16from app.schemas import LiquidityPoint, LiquidityResponse17from app.services import data1819router = APIRouter()202122@router.get("/liquidity", response_model=LiquidityResponse)23def liquidity(request: Request, response: Response,24 geography: str, type: str = "all"):25 """Weekly transaction counts for one series."""26 validate_series(geography, type)27 df = data.liquidity().filter(28 (pl.col("geography_id") == geography)29 & (pl.col("property_type") == type)30 ).sort("period")31 if df.height == 0:32 raise HTTPException(404, "no liquidity data")33 if etag_for(request, response, geography, type):34 return Response(status_code=304)35 return LiquidityResponse(36 geography=geography,37 property_type=type,38 median_monthly_transactions=float(df["transactions"].median()),39 observations=[LiquidityPoint(period=r["period"], transactions=r["transactions"])40 for r in df.iter_rows(named=True)],41 )42