refactor(doc): update docs static

This commit is contained in:
2026-07-01 22:48:24 +03:00
parent fcb000afb0
commit 1d13f6e05d
13 changed files with 389 additions and 314 deletions

View File

@@ -1,9 +1,17 @@
from fastapi import HTTPException, status
from gallery.easel.core import AppRequest
from gallery.sketch.api import API
def api_resolver(api_type: type[API]):
def get_api(request: AppRequest, provider: str | None = None) -> API:
def get_api(request: AppRequest, provider: str) -> API:
providers = request.app.state.api.get_api_providers(api_type)
if provider not in providers:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail={"provider": f"'{provider}' not in {providers}"},
)
return request.app.state.api.get_api(api_type, provider)
return get_api

View File

@@ -3,18 +3,25 @@ import datetime
from fastapi import APIRouter
from gallery.easel.core import AppRequest
from gallery.easel.depends.schedule import ScheduleApiDepends
from gallery.sketch.schedule.api import ScheduleApi
from gallery.sketch.schedule.model import Channel, Schedule
router = APIRouter(prefix="/schedule")
@router.get("/channels")
async def get_api_schedule_channels(request: AppRequest) -> list[Channel]:
schedule_api = request.app.state.api.schedule
return await schedule_api.get_channels()
@router.get("/providers")
async def get_api_weather_providers(request: AppRequest) -> list[str]:
return request.app.state.api.get_api_providers(ScheduleApi)
@router.get("/{channel}/{date}")
async def get_api_schedule_channel_schedule(request: AppRequest, channel: str, date: datetime.date) -> Schedule:
schedule_api = request.app.state.api.schedule
return await schedule_api.get_channel_schedule(ChannelId(channel), date)
@router.get("/{provider}/channels")
async def find_api_schedule_channels(schedule_api: ScheduleApiDepends, query: str) -> list[Channel]:
return await schedule_api.find_channels(query)
@router.get("/{provider}/{channel}/{date}")
async def get_api_schedule_channel_schedule(
schedule_api: ScheduleApiDepends, channel: str, date: datetime.date
) -> Schedule:
return await schedule_api.get_schedule(channel, date)

View File

@@ -4,6 +4,7 @@ from fastapi import APIRouter
from gallery.easel.core import AppRequest
from gallery.easel.depends.weather import WeatherApiDepends
from gallery.sketch.weather.api import WeatherApi
from gallery.sketch.weather.model import Location, WeatherResponse
router = APIRouter(prefix="/weather")
@@ -11,11 +12,11 @@ router = APIRouter(prefix="/weather")
@router.get("/providers")
async def get_api_weather_providers(request: AppRequest) -> list[str]:
return request.app.state.api.get_api_providers("weather")
return request.app.state.api.get_api_providers(WeatherApi)
@router.get("/{provider}/locations")
async def get_api_weather_locations(weather_api: WeatherApiDepends, query: str) -> list[Location]:
async def find_api_weather_locations(weather_api: WeatherApiDepends, query: str) -> list[Location]:
return await weather_api.find_locations(query)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -5,7 +5,7 @@ from .schedule import router as schedule_router
from .translation import set_language
from .weather import router as weather_router
router = APIRouter(tags=["view"], dependencies=[Depends(set_language)])
router = APIRouter(tags=["view"], dependencies=[Depends(set_language)], include_in_schema=False)
router.include_router(root_router)
router.include_router(weather_router)
router.include_router(schedule_router)

View File

@@ -15,7 +15,7 @@ from .filters import timedelta_format
def context_procesor(request: AppRequest) -> dict:
return {
"providers": request.app.state.api.get_api_providers(ScheduleApi.TYPE),
"providers": request.app.state.api.get_api_providers(ScheduleApi),
}

View File

@@ -16,7 +16,7 @@ from .filters import cloudness_icon, wind_direction_icon
def context_procesor(request: AppRequest) -> dict:
return {
"providers": request.app.state.api.get_api_providers(WeatherApi.TYPE),
"providers": request.app.state.api.get_api_providers(WeatherApi),
}

View File

@@ -53,7 +53,7 @@ class OpenWeatherApi(WeatherApi):
lon=item.lon,
country=item.country,
country_code=item.country.lower(),
district=item.state,
district=item.state or "",
subdistrict="",
)
for item in result

View File

@@ -69,11 +69,11 @@ class Forecast(Model):
class Location(Model):
name: str
local_names: dict[str, str] | None = None
lat: float
lon: float
country: str
state: str
state: str | None = None
local_names: dict[str, str] | None = None
class OpenWeather:

View File

@@ -46,7 +46,10 @@ class YandexTvApi(ScheduleApi):
SOURCE = ApiSource("https://tv.yandex.ru", headers=HEADERS)
async def find_channels(self, query: str) -> list[Channel]:
url = f"https://suggest-multi.yandex.ru/suggest-tv2?v=4&uil=ru&lr=10&count_channels=4&count_programs=4&sn=50&part={query}"
url = (
"https://suggest-multi.yandex.ru/suggest-tv2?"
f"v=4&uil=ru&lr=10&count_channels=4&count_programs=4&sn=50&part={query}"
)
_, values = json.loads(await self.SOURCE.request(url))
result = []
for _, name, content in values:

View File

@@ -6,16 +6,16 @@ class ApiBundle:
self._values = values
self._by_provider = {value.provider: value for value in values}
def get_api_providers(self, api_type: str) -> list[str]:
def get_api_providers(self, api_type: type[API]) -> list[str]:
result = []
for value in self._values:
if value.type == api_type:
if isinstance(value, api_type):
result.append(value.provider)
return result
def get_api(self, api_type: type[API], provider: str | None = None) -> API:
def get_api(self, api_type: type[API], provider: str) -> API:
for value in self._values:
if isinstance(value, api_type):
if provider is None or provider == value.provider:
if provider == value.provider:
return value
raise ValueError(api_type, provider)