import datetime from pathlib import Path from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from gismeteo.mock import MOCK_DATA from weather.api import get_api from .filters import cloudness_icon, wind_direction_icon def mount(app: FastAPI): base_dir = Path(__file__).parent app.mount("/static", StaticFiles(directory=base_dir / "static"), name="static") templates = Jinja2Templates(directory=base_dir / "templates") templates.env.filters["wind_direction_icon"] = wind_direction_icon templates.env.filters["cloudness_icon"] = cloudness_icon @app.get("/weather/{location}", response_class=RedirectResponse) async def get_weather_default(location: str): return RedirectResponse(f"{location}/{datetime.date.today()}") @app.get("/weather/{location}/mock", response_class=HTMLResponse) async def get_weather_mock(request: Request): response = MOCK_DATA.response return templates.TemplateResponse( request=request, name="weather.html", context={ "datetime": datetime, "response": response, }, ) @app.get("/weather/{location}/{date}", response_class=HTMLResponse) async def get_weather(request: Request, location: str, date: datetime.date): response = await get_api().get_day(location, date) return templates.TemplateResponse( request=request, name="weather.html", context={ "datetime": datetime, "response": response, }, )