44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
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 import dateutil
|
|
from gismeteo.api import GismeteoApi
|
|
from gismeteo.mock import MOCK_DATA
|
|
|
|
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}")
|
|
async def get_weather_base(location: str):
|
|
return RedirectResponse(f"{location}/today")
|
|
|
|
@app.get("/weather/{location}/{date}", response_class=HTMLResponse)
|
|
async def get_weather(request: Request, location: str, date: str):
|
|
if date == "mock":
|
|
values = MOCK_DATA.values
|
|
else:
|
|
api = GismeteoApi()
|
|
values = await api.get_day(location, dateutil.parse(date))
|
|
return templates.TemplateResponse(
|
|
request=request,
|
|
name="weather.html",
|
|
context={
|
|
"datetime": datetime,
|
|
"location": location,
|
|
"date": dateutil.parse(date),
|
|
"values": values,
|
|
},
|
|
)
|