SPB Git

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.5 KB · 42 lines python
Raw Blame History
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