45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from fastapi import APIRouter
|
|
|
|
from gallery.easel.core import AppRequest
|
|
from gallery.easel.depends.schedule import (
|
|
GROUP_CANNELS_MAP,
|
|
ScheduleApiDepends,
|
|
ScheduleGroupChannelsDepends,
|
|
)
|
|
from gallery.sketch.schedule.api import ScheduleApi
|
|
from gallery.sketch.schedule.model import Channel, Schedule
|
|
|
|
from ...depends.date import DateDepends
|
|
|
|
router = APIRouter(prefix="/schedule", tags=["Schedule"])
|
|
|
|
|
|
@router.get("/groups")
|
|
async def get_api_schedule_groups():
|
|
return list(GROUP_CANNELS_MAP.keys())
|
|
|
|
|
|
@router.get("/group/{group_id}/{date}")
|
|
async def get_api_schedule_group_schedule(
|
|
request: AppRequest, channels: ScheduleGroupChannelsDepends, date: DateDepends
|
|
) -> list[Schedule]:
|
|
api = request.app.state.api
|
|
return [await api.get_api(ScheduleApi, channel.provider).get_schedule(channel.id, date) for channel in 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("/{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: DateDepends
|
|
) -> Schedule:
|
|
return await schedule_api.get_schedule(channel, date)
|