refactor(weather.app): move routes to weather.app module
This commit is contained in:
66
weather/app/route/view/__init__.py
Normal file
66
weather/app/route/view/__init__.py
Normal file
@@ -0,0 +1,66 @@
|
||||
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 datehelp
|
||||
from gismeteo.location import LOCATION_BUNDLE
|
||||
from gismeteo.mock import MOCK_DATA
|
||||
from weather.model import WeatherResponse
|
||||
|
||||
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
|
||||
|
||||
def build_weather_response(request: Request, response: WeatherResponse):
|
||||
return templates.TemplateResponse(
|
||||
request=request,
|
||||
name="weather.html",
|
||||
context={
|
||||
"datetime": datetime,
|
||||
"response": response,
|
||||
},
|
||||
)
|
||||
|
||||
@app.get("/", response_class=RedirectResponse)
|
||||
async def get_weather_root():
|
||||
return RedirectResponse("weather")
|
||||
|
||||
@app.get("/weather", response_class=HTMLResponse)
|
||||
async def get_weather_list(request: Request):
|
||||
return templates.TemplateResponse(
|
||||
request=request,
|
||||
name="index.html",
|
||||
context={
|
||||
"locations": LOCATION_BUNDLE._values,
|
||||
},
|
||||
)
|
||||
|
||||
@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 build_weather_response(request, response)
|
||||
|
||||
# @app.get("/weather/{location}/{day}", response_class=HTMLResponse)
|
||||
async def get_weather_day(request: Request, location: str, day: datehelp.Day):
|
||||
date = datehelp.parse(day)
|
||||
response = await request.app.state.weather_api.get_day(location, date)
|
||||
return build_weather_response(request, response)
|
||||
|
||||
@app.get("/weather/{location}/{date}", response_class=HTMLResponse)
|
||||
async def get_weather(request: Request, location: str, date: datetime.date):
|
||||
response = await request.app.state.weather_api.get_day(location, date)
|
||||
return build_weather_response(request, response)
|
||||
Reference in New Issue
Block a user