fix(view): fix index pages api resolving

This commit is contained in:
2026-07-02 01:30:35 +03:00
parent 1d13f6e05d
commit 4fdb7e9717
4 changed files with 24 additions and 16 deletions

View File

@@ -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",

View File

@@ -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",

View File

@@ -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)]

View File

@@ -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