fix(view): fix index pages api resolving
This commit is contained in:
@@ -5,6 +5,7 @@ from fastapi import APIRouter
|
|||||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||||
|
|
||||||
from gallery.easel.core import AppRequest
|
from gallery.easel.core import AppRequest
|
||||||
|
from gallery.easel.depends.api import api_resolver
|
||||||
from gallery.easel.depends.schedule import ScheduleApiDepends
|
from gallery.easel.depends.schedule import ScheduleApiDepends
|
||||||
from gallery.sketch.schedule.api import ScheduleApi
|
from gallery.sketch.schedule.api import ScheduleApi
|
||||||
|
|
||||||
@@ -31,8 +32,12 @@ router = APIRouter(prefix="/schedule")
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/", response_class=HTMLResponse)
|
@router.get("/", response_class=HTMLResponse)
|
||||||
async def get_schedule_index(request: AppRequest, schedule_api: ScheduleApiDepends, query: str | None = None):
|
async def get_schedule_index(request: AppRequest, provider: str | None = None, query: str | None = None):
|
||||||
channels = (await schedule_api.find_channels(query)) if query else []
|
if query and provider:
|
||||||
|
schedule_api = api_resolver(ScheduleApi)(request, provider)
|
||||||
|
channels = await schedule_api.find_channels(query)
|
||||||
|
else:
|
||||||
|
channels = []
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request=request,
|
request=request,
|
||||||
name="index.html",
|
name="index.html",
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from fastapi import APIRouter
|
|||||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||||
|
|
||||||
from gallery.easel.core import AppRequest
|
from gallery.easel.core import AppRequest
|
||||||
|
from gallery.easel.depends.api import api_resolver
|
||||||
from gallery.easel.depends.weather import WeatherApiDepends
|
from gallery.easel.depends.weather import WeatherApiDepends
|
||||||
from gallery.sketch.weather.api import WeatherApi
|
from gallery.sketch.weather.api import WeatherApi
|
||||||
from gallery.sketch.weather.model import WeatherResponse
|
from gallery.sketch.weather.model import WeatherResponse
|
||||||
@@ -44,8 +45,12 @@ router = APIRouter(prefix="/weather")
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/", response_class=HTMLResponse)
|
@router.get("/", response_class=HTMLResponse)
|
||||||
async def get_weather_index(request: AppRequest, weather_api: WeatherApiDepends, query: str | None = None):
|
async def get_weather_index(request: AppRequest, provider: str | None = None, query: str | None = None):
|
||||||
locations = (await weather_api.find_locations(query)) if query else []
|
if query and provider:
|
||||||
|
weather_api = api_resolver(WeatherApi)(request, provider)
|
||||||
|
locations = await weather_api.find_locations(query)
|
||||||
|
else:
|
||||||
|
locations = []
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request=request,
|
request=request,
|
||||||
name="index.html",
|
name="index.html",
|
||||||
|
|||||||
@@ -1,21 +1,19 @@
|
|||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
from .api import API, Api
|
from .api import API, Api
|
||||||
|
|
||||||
|
|
||||||
class ApiBundle:
|
class ApiBundle:
|
||||||
def __init__(self, values: list[Api]):
|
def __init__(self, values: list[Api]):
|
||||||
self._values = values
|
self._values = values
|
||||||
self._by_provider = {value.provider: value for value in values}
|
self._providers_by_api = defaultdict(list)
|
||||||
|
self._api_map = {}
|
||||||
|
for value in self._values:
|
||||||
|
self._providers_by_api[value.type].append(value.provider)
|
||||||
|
self._api_map[(value.type, value.provider)] = value
|
||||||
|
|
||||||
def get_api_providers(self, api_type: type[API]) -> list[str]:
|
def get_api_providers(self, api_type: type[API]) -> list[str]:
|
||||||
result = []
|
return self._providers_by_api[api_type.TYPE]
|
||||||
for value in self._values:
|
|
||||||
if isinstance(value, api_type):
|
|
||||||
result.append(value.provider)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_api(self, api_type: type[API], provider: str) -> API:
|
def get_api(self, api_type: type[API], provider: str) -> API:
|
||||||
for value in self._values:
|
return self._api_map[(api_type.TYPE, provider)]
|
||||||
if isinstance(value, api_type):
|
|
||||||
if provider == value.provider:
|
|
||||||
return value
|
|
||||||
raise ValueError(api_type, provider)
|
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ cd "$(dirname $(dirname "$0"))" || exit
|
|||||||
|
|
||||||
TARGET="gallery"
|
TARGET="gallery"
|
||||||
|
|
||||||
poetry run pylint $TARGET
|
poetry run pylint $TARGET -sn
|
||||||
poetry run isort $TARGET --check-only
|
poetry run isort $TARGET --check-only
|
||||||
poetry run black $TARGET -q --check --diff
|
poetry run black $TARGET -q --check --diff
|
||||||
|
|||||||
Reference in New Issue
Block a user