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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+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 .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