import data import polars as pl from data import etl_property_capacities as etl_pc from data import etl_property_capacities_monthly as etl_pcm from data import etl_property_capacities_weekdays as etl_pcw from data import etl_property_neighbours as etl_pn from data import etl_region_capacities as etl_rc from data import etl_region_capacities_comparison as etl_rcc from fastapi import FastAPI, Response d = data.load() app = FastAPI() @app.get("/") def read_root(): return {"Hi there!"} @app.get("/items/{item_id}") def read_item(item_id: int): ext = d.extractions_for(item_id).pl() out = ext.with_columns(pl.col("calendar").str.extract_all(r"([0-9]{4}-[0-9]{2}-[0-9]{2})|[0-2]").alias("calendar_data")) out = out.drop(['calendar', 'property_id']) return Response(content=out.write_json(), media_type="application/json") @app.get("/region/properties") def properties_region(): return d.properties_per_region().pl().to_dicts() @app.get("/properties/growth") def properties_growth(): options = {"dates" : d.properties_growth().pl()['date'].to_list(), "total_all" : d.properties_growth().pl()['total_all'].to_list(), "total_heidiland" : d.properties_growth().pl()['total_heidiland'].to_list(), "total_engadin" : d.properties_growth().pl()['total_engadin'].to_list(), "total_davos" : d.properties_growth().pl()['total_davos'].to_list(), "total_stmoritz" : d.properties_growth().pl()['total_stmoritz'].to_list()} return options @app.get("/properties/geo") def properties_geo(): return d.properties_geo().pl().to_dicts() @app.get("/property/{id}/neighbours") def property_neighbours(id: int): capacities = etl_pn.property_neighbours(id) return capacities @app.get("/property/{id}/extractions") def property_extractions(id: int): return d.extractions_for(property_id = id).pl().to_dicts() @app.get("/property/{id}/capacities") def property_capacities_data(id: int): capacities = etl_pc.property_capacities(id) return capacities @app.get("/property/{id}/capacities/monthly/{scrapeDate}") def property_capacities_data(id: int, scrapeDate: str): capacities = etl_pcm.property_capacities_monthly(id, scrapeDate) return capacities @app.get("/property/{id}/capacities/weekdays/{scrapeDate}") def property_capacities_data(id: int, scrapeDate: str): capacities = etl_pcw.property_capacities_weekdays(id, scrapeDate) return capacities @app.get("/property/{id}/base") def property_base_data(id: int): return d.property_base_data(id).pl().to_dicts() @app.get("/region/{id}/capacities") def region_capacities_data(id: int): capacities = etl_rc.region_capacities(id) return capacities @app.get("/region/capacities/comparison/{id_1}/{id_2}") def region_capacities_data(id_1: int, id_2: int): capacities = etl_rcc.region_capacities_comparison(id_1, id_2) return capacities