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.easel.core import AppRequest
|
||||||
from gallery.sketch.api import API
|
from gallery.sketch.api import API
|
||||||
|
|
||||||
|
|
||||||
def api_resolver(api_type: type[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 request.app.state.api.get_api(api_type, provider)
|
||||||
|
|
||||||
return get_api
|
return get_api
|
||||||
|
|||||||
@@ -3,18 +3,25 @@ import datetime
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
|
|
||||||
from gallery.easel.core import AppRequest
|
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
|
from gallery.sketch.schedule.model import Channel, Schedule
|
||||||
|
|
||||||
router = APIRouter(prefix="/schedule")
|
router = APIRouter(prefix="/schedule")
|
||||||
|
|
||||||
|
|
||||||
@router.get("/channels")
|
@router.get("/providers")
|
||||||
async def get_api_schedule_channels(request: AppRequest) -> list[Channel]:
|
async def get_api_weather_providers(request: AppRequest) -> list[str]:
|
||||||
schedule_api = request.app.state.api.schedule
|
return request.app.state.api.get_api_providers(ScheduleApi)
|
||||||
return await schedule_api.get_channels()
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{channel}/{date}")
|
@router.get("/{provider}/channels")
|
||||||
async def get_api_schedule_channel_schedule(request: AppRequest, channel: str, date: datetime.date) -> Schedule:
|
async def find_api_schedule_channels(schedule_api: ScheduleApiDepends, query: str) -> list[Channel]:
|
||||||
schedule_api = request.app.state.api.schedule
|
return await schedule_api.find_channels(query)
|
||||||
return await schedule_api.get_channel_schedule(ChannelId(channel), date)
|
|
||||||
|
|
||||||
|
@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.core import AppRequest
|
||||||
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.model import Location, WeatherResponse
|
from gallery.sketch.weather.model import Location, WeatherResponse
|
||||||
|
|
||||||
router = APIRouter(prefix="/weather")
|
router = APIRouter(prefix="/weather")
|
||||||
@@ -11,11 +12,11 @@ router = APIRouter(prefix="/weather")
|
|||||||
|
|
||||||
@router.get("/providers")
|
@router.get("/providers")
|
||||||
async def get_api_weather_providers(request: AppRequest) -> list[str]:
|
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")
|
@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)
|
return await weather_api.find_locations(query)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
636
gallery/easel/route/doc/static/redoc.standalone.js
vendored
636
gallery/easel/route/doc/static/redoc.standalone.js
vendored
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
@@ -5,7 +5,7 @@ from .schedule import router as schedule_router
|
|||||||
from .translation import set_language
|
from .translation import set_language
|
||||||
from .weather import router as weather_router
|
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(root_router)
|
||||||
router.include_router(weather_router)
|
router.include_router(weather_router)
|
||||||
router.include_router(schedule_router)
|
router.include_router(schedule_router)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from .filters import timedelta_format
|
|||||||
|
|
||||||
def context_procesor(request: AppRequest) -> dict:
|
def context_procesor(request: AppRequest) -> dict:
|
||||||
return {
|
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:
|
def context_procesor(request: AppRequest) -> dict:
|
||||||
return {
|
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,
|
lon=item.lon,
|
||||||
country=item.country,
|
country=item.country,
|
||||||
country_code=item.country.lower(),
|
country_code=item.country.lower(),
|
||||||
district=item.state,
|
district=item.state or "",
|
||||||
subdistrict="",
|
subdistrict="",
|
||||||
)
|
)
|
||||||
for item in result
|
for item in result
|
||||||
|
|||||||
@@ -69,11 +69,11 @@ class Forecast(Model):
|
|||||||
|
|
||||||
class Location(Model):
|
class Location(Model):
|
||||||
name: str
|
name: str
|
||||||
local_names: dict[str, str] | None = None
|
|
||||||
lat: float
|
lat: float
|
||||||
lon: float
|
lon: float
|
||||||
country: str
|
country: str
|
||||||
state: str
|
state: str | None = None
|
||||||
|
local_names: dict[str, str] | None = None
|
||||||
|
|
||||||
|
|
||||||
class OpenWeather:
|
class OpenWeather:
|
||||||
|
|||||||
@@ -46,7 +46,10 @@ class YandexTvApi(ScheduleApi):
|
|||||||
SOURCE = ApiSource("https://tv.yandex.ru", headers=HEADERS)
|
SOURCE = ApiSource("https://tv.yandex.ru", headers=HEADERS)
|
||||||
|
|
||||||
async def find_channels(self, query: str) -> list[Channel]:
|
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))
|
_, values = json.loads(await self.SOURCE.request(url))
|
||||||
result = []
|
result = []
|
||||||
for _, name, content in values:
|
for _, name, content in values:
|
||||||
|
|||||||
@@ -6,16 +6,16 @@ class ApiBundle:
|
|||||||
self._values = values
|
self._values = values
|
||||||
self._by_provider = {value.provider: value for value in 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 = []
|
result = []
|
||||||
for value in self._values:
|
for value in self._values:
|
||||||
if value.type == api_type:
|
if isinstance(value, api_type):
|
||||||
result.append(value.provider)
|
result.append(value.provider)
|
||||||
return result
|
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:
|
for value in self._values:
|
||||||
if isinstance(value, api_type):
|
if isinstance(value, api_type):
|
||||||
if provider is None or provider == value.provider:
|
if provider == value.provider:
|
||||||
return value
|
return value
|
||||||
raise ValueError(api_type, provider)
|
raise ValueError(api_type, provider)
|
||||||
|
|||||||
Reference in New Issue
Block a user