Files
script.service.ultimate/lib/streaming_providers/providers/_template/epg_manager.py
T
2026-10-04 16:41:49 +02:00

56 lines
1.8 KiB
Python

# streaming_providers/providers/_template/epg_manager.py
"""
{TODO: Provider name} EPG manager.
Subclasses base.managers.EpgManager. See ../_template/README.md.
EPG does not participate in the provider's content-id router; get_epg
goes straight to this manager. EpgManager has handles_channel_id(),
used internally by get_epg_grid().
TIME HANDLING (TODO: state it for your provider): start_time/end_time are
datetimes. Decide and document whether you require tz-aware UTC values
and convert provider-local times at the boundary. Mixing naive and aware
datetimes (or local time zones) is the classic source of off-by-N-hours
guide bugs. Catchup, by contrast, takes integer epoch seconds.
"""
from datetime import datetime
from typing import Dict, List, Optional, Tuple
from ...base.managers import EpgManager
from ...base.models.epg_models import EPGEntry, EPGProgramDetails
from ...base.utils.logger import logger
class YourEpgManager(EpgManager):
"""EPG for {TODO: provider name}."""
@property
def epg_window(self) -> Tuple[int, int]:
"""(past_days, future_days). (0, 0) means no EPG support."""
return 0, 0 # TODO: e.g. (2, 7)
def get_epg(
self,
channel_id: str,
start_time: Optional[datetime] = None,
end_time: Optional[datetime] = None,
**kw,
) -> List[EPGEntry]:
raise NotImplementedError("YourEpgManager.get_epg")
# ----- Optional overrides -----
# def get_epg_grid(
# self,
# channel_ids: List[str],
# start_time: Optional[datetime] = None,
# end_time: Optional[datetime] = None,
# **kw,
# ) -> Dict[str, List[EPGEntry]]:
# # Override if the provider has a native batch endpoint.
# return super().get_epg_grid(
# channel_ids, start_time=start_time,
# end_time=end_time, **kw
# )