diff --git a/gallery/easel/route/view/schedule/__init__.py b/gallery/easel/route/view/schedule/__init__.py index 26c7388..5762552 100644 --- a/gallery/easel/route/view/schedule/__init__.py +++ b/gallery/easel/route/view/schedule/__init__.py @@ -5,6 +5,7 @@ from fastapi import APIRouter from fastapi.responses import HTMLResponse, RedirectResponse from gallery.easel.core import AppRequest +from gallery.easel.depends.api import api_resolver from gallery.easel.depends.schedule import ScheduleApiDepends from gallery.sketch.schedule.api import ScheduleApi @@ -31,8 +32,12 @@ router = APIRouter(prefix="/schedule") @router.get("/", response_class=HTMLResponse) -async def get_schedule_index(request: AppRequest, schedule_api: ScheduleApiDepends, query: str | None = None): - channels = (await schedule_api.find_channels(query)) if query else [] +async def get_schedule_index(request: AppRequest, provider: str | None = None, query: str | None = None): + if query and provider: + schedule_api = api_resolver(ScheduleApi)(request, provider) + channels = await schedule_api.find_channels(query) + else: + channels = [] return templates.TemplateResponse( request=request, name="index.html", diff --git a/gallery/easel/route/view/weather/__init__.py b/gallery/easel/route/view/weather/__init__.py index e463b65..e4ea4f8 100644 --- a/gallery/easel/route/view/weather/__init__.py +++ b/gallery/easel/route/view/weather/__init__.py @@ -5,6 +5,7 @@ from fastapi import APIRouter from fastapi.responses import HTMLResponse, RedirectResponse from gallery.easel.core import AppRequest +from gallery.easel.depends.api import api_resolver from gallery.easel.depends.weather import WeatherApiDepends from gallery.sketch.weather.api import WeatherApi from gallery.sketch.weather.model import WeatherResponse @@ -44,8 +45,12 @@ router = APIRouter(prefix="/weather") @router.get("/", response_class=HTMLResponse) -async def get_weather_index(request: AppRequest, weather_api: WeatherApiDepends, query: str | None = None): - locations = (await weather_api.find_locations(query)) if query else [] +async def get_weather_index(request: AppRequest, provider: str | None = None, query: str | None = None): + if query and provider: + weather_api = api_resolver(WeatherApi)(request, provider) + locations = await weather_api.find_locations(query) + else: + locations = [] return templates.TemplateResponse( request=request, name="index.html", diff --git a/gallery/sketch/bundle.py b/gallery/sketch/bundle.py index 00a067b..134d65f 100644 --- a/gallery/sketch/bundle.py +++ b/gallery/sketch/bundle.py @@ -1,21 +1,19 @@ +from collections import defaultdict + from .api import API, Api class ApiBundle: def __init__(self, values: list[Api]): 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]: - result = [] - for value in self._values: - if isinstance(value, api_type): - result.append(value.provider) - return result + return self._providers_by_api[api_type.TYPE] def get_api(self, api_type: type[API], provider: str) -> API: - for value in self._values: - if isinstance(value, api_type): - if provider == value.provider: - return value - raise ValueError(api_type, provider) + return self._api_map[(api_type.TYPE, provider)] diff --git a/scripts/lint b/scripts/lint index 7437b5b..52ee238 100755 --- a/scripts/lint +++ b/scripts/lint @@ -4,6 +4,6 @@ cd "$(dirname $(dirname "$0"))" || exit TARGET="gallery" -poetry run pylint $TARGET +poetry run pylint $TARGET -sn poetry run isort $TARGET --check-only poetry run black $TARGET -q --check --diff