refactor(doc): update docs static
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
+346
-290
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
@@ -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)
|
||||
|
||||
@@ -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),
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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),
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user