sounds.models ============= .. py:module:: sounds.models Attributes ---------- .. autoapisummary:: sounds.models.SoundsTypes Classes ------- .. autoapisummary:: sounds.models.BaseObject sounds.models.Network sounds.models.Container sounds.models.PlayableItem sounds.models.TimedContent sounds.models.Broadcast sounds.models.ScheduleItem sounds.models.Station sounds.models.StationSearchResult sounds.models.LiveProgramme sounds.models.LiveStation sounds.models.Stream sounds.models.Segment sounds.models.Schedule sounds.models.RadioShow sounds.models.RadioClip sounds.models.PodcastEpisode sounds.models.Podcast sounds.models.RadioSeries sounds.models.Collection sounds.models.Category sounds.models.CategoryItemContainer sounds.models.CollectionItemContainer sounds.models.MenuItem sounds.models.RecommendedMenuItem sounds.models.Menu sounds.models.DisplayItem sounds.models.PromoItem sounds.models.SearchResults Functions --------- .. autoapisummary:: sounds.models.model_factory Module Contents --------------- .. py:type:: SoundsTypes :canonical: models.Broadcast | models.Category | models.CategoryItemContainer | models.Container | models.Collection | models.LiveStation | models.MenuItem | models.Network | models.Podcast | models.PodcastEpisode | models.RadioClip | models.RadioSeries | models.RadioShow | models.RecommendedMenuItem | models.Segment | models.Schedule | models.ScheduleItem | models.Station | models.StationSearchResult .. py:class:: BaseObject Base class for all objects with common functionality. .. py:attribute:: type :type: Optional[str] :value: None .. py:attribute:: uris :type: Optional[dict] :value: None .. py:attribute:: recommendation :type: Optional[dict] :value: None .. py:class:: Network Represents a network/brand with basic metadata. .. py:attribute:: id :type: str .. py:attribute:: key :type: Optional[str] :value: None .. py:attribute:: short_title :type: Optional[str] :value: None .. py:attribute:: logo_url :type: Optional[str] :value: None .. py:attribute:: current_programme :type: Optional[LiveProgramme] :value: None .. py:attribute:: sort :type: Optional[int] :value: None .. py:attribute:: group :type: Optional[str] :value: None .. py:attribute:: contacts :type: Optional[dict] :value: None .. py:attribute:: services :type: Optional[dict] :value: None .. py:attribute:: promoted_category_summaries :type: Optional[dict] :value: None .. py:attribute:: active :type: Optional[bool] :value: None .. py:attribute:: international :type: Optional[bool] :value: None .. py:class:: Container Bases: :py:obj:`BaseObject` Base container for organizing content - not directly playable. .. py:attribute:: id :type: str .. py:attribute:: title :type: Optional[str] :value: None .. py:attribute:: description :type: Optional[str] :value: None .. py:attribute:: image_url :type: Optional[str] :value: None .. py:attribute:: synopses :type: Optional[dict] :value: None .. py:attribute:: titles :type: Optional[dict] :value: None .. py:attribute:: urn :type: Optional[str] :value: None .. py:attribute:: network :type: Optional[Network] :value: None .. py:attribute:: sub_items :type: Optional[List[SoundsTypes]] :value: None .. py:property:: item_id .. py:class:: PlayableItem Bases: :py:obj:`BaseObject` Base class for actual playable content. .. py:attribute:: id :type: str .. py:attribute:: urn :type: Optional[str] :value: None .. py:attribute:: pid :type: Optional[str] :value: None .. py:attribute:: type :type: Optional[str] :value: None .. py:attribute:: duration :type: Optional[dict] :value: None .. py:attribute:: progress :type: Optional[dict] :value: None .. py:attribute:: image_url :type: Optional[str] :value: None .. py:attribute:: titles :type: Optional[dict] :value: None .. py:attribute:: synopses :type: Optional[dict] :value: None .. py:attribute:: network :type: Optional[Network] :value: None .. py:attribute:: container :type: Optional[Container] :value: None .. py:attribute:: start :type: Optional[datetime.datetime] :value: None .. py:attribute:: end :type: Optional[datetime.datetime] :value: None .. py:attribute:: release :type: Optional[dict] :value: None .. py:attribute:: availability :type: Optional[dict] :value: None .. py:attribute:: stream :type: Optional[str] :value: None .. py:property:: item_id .. py:class:: TimedContent Mixin for content with timing information. .. py:method:: is_live(timezone: zoneinfo.ZoneInfo | pytz.tzinfo.BaseTzInfo) -> bool .. py:method:: has_already_aired(timezone: zoneinfo.ZoneInfo | pytz.tzinfo.BaseTzInfo) -> bool .. py:class:: Broadcast Represents a broadcast item. .. py:attribute:: type :type: str .. py:attribute:: pid :type: str .. py:attribute:: start :type: datetime.datetime .. py:attribute:: end :type: datetime.datetime .. py:attribute:: service_id :type: str .. py:attribute:: duration :type: int .. py:attribute:: progress :type: int .. py:attribute:: live :type: bool .. py:attribute:: blanked :type: bool .. py:attribute:: repeat :type: bool .. py:attribute:: critical :type: bool .. py:attribute:: on_air :type: bool .. py:attribute:: programme :type: RadioShow .. py:class:: ScheduleItem Bases: :py:obj:`PlayableItem` Represents a scheduled program item. .. py:attribute:: container :type: Optional[Container] :value: None .. py:attribute:: stream :type: Optional[str] :value: None .. py:method:: is_live(timezone: zoneinfo.ZoneInfo | pytz.tzinfo.BaseTzInfo) -> bool .. py:method:: has_already_aired(timezone: zoneinfo.ZoneInfo | pytz.tzinfo.BaseTzInfo) -> bool .. py:class:: Station Bases: :py:obj:`Container` Represents a radio/media station. .. py:attribute:: local :type: bool :value: False .. py:attribute:: stream :type: Optional[Stream] :value: None .. py:attribute:: schedule :type: Optional[Schedule] :value: None .. py:class:: StationSearchResult Represents a search result showing a station. Keys are different enough to warrant a separate model .. py:attribute:: id :type: str .. py:attribute:: type :type: str .. py:attribute:: urn :type: str .. py:attribute:: service_id :type: str .. py:attribute:: episode_image_url :type: str | None .. py:attribute:: station_image_url :type: str | None .. py:attribute:: station_name :type: str .. py:attribute:: title :type: str .. py:attribute:: short_synopsis :type: str .. py:attribute:: progress :type: dict[int, str] .. py:attribute:: duration :type: dict[int, str] .. py:property:: item_id .. py:class:: LiveProgramme Bases: :py:obj:`PlayableItem` Base class for actual playable content. .. py:class:: LiveStation Bases: :py:obj:`PlayableItem` Base class for actual playable content. .. py:attribute:: local :type: bool :value: False .. py:attribute:: schedule :type: Optional[Schedule] :value: None .. py:property:: item_id .. py:class:: Stream Bases: :py:obj:`TimedContent` Represents a station stream. .. py:attribute:: id :type: str .. py:attribute:: uri :type: str .. py:attribute:: image_url :type: str | None .. py:attribute:: show_title :type: str .. py:attribute:: show_description :type: str .. py:attribute:: container :type: Any | None :value: None .. py:property:: can_seek :type: bool Indicates if the stream supports seeking. .. py:class:: Segment Represents a segment within a stream. .. py:attribute:: id :type: str .. py:attribute:: segment_type :type: str .. py:attribute:: titles :type: dict .. py:attribute:: image_url :type: str | None .. py:attribute:: offset :type: dict .. py:class:: Schedule Bases: :py:obj:`Container` Represents a schedule for a given date. .. py:attribute:: id :type: str .. py:method:: get_current_item(timezone: zoneinfo.ZoneInfo | pytz.tzinfo.BaseTzInfo = pytz.timezone('UTC')) -> Optional[ScheduleItem] Get the currently airing schedule item. .. py:class:: RadioShow Bases: :py:obj:`PlayableItem`, :py:obj:`TimedContent` Represents a playable radio show. .. py:property:: item_id .. py:class:: RadioClip Bases: :py:obj:`PlayableItem`, :py:obj:`TimedContent` Represents a playable radio clip. .. py:class:: PodcastEpisode Bases: :py:obj:`PlayableItem` Represents a playable podcast episode. .. py:class:: Podcast Bases: :py:obj:`Container` Represents a podcast container (holds episodes). .. py:class:: RadioSeries Bases: :py:obj:`Podcast` Represents a radio series container (holds episodes). .. py:class:: Collection Bases: :py:obj:`Container` Represents a collection container. .. py:class:: Category Bases: :py:obj:`Container` Represents a content category. .. py:class:: CategoryItemContainer Represents a content category container. .. py:attribute:: id :type: Optional[str] :value: None .. py:attribute:: total :type: int .. py:attribute:: limit :type: int .. py:attribute:: offset :type: int .. py:attribute:: sub_items :type: Optional[List[SoundsTypes]] :value: None .. py:class:: CollectionItemContainer Bases: :py:obj:`CategoryItemContainer` Represents a content collection container. .. py:class:: MenuItem Bases: :py:obj:`Container` Represents a menu item container. .. py:class:: RecommendedMenuItem Bases: :py:obj:`MenuItem` Represents a recommended menu item. .. py:class:: Menu Represents a menu container with items. .. py:attribute:: sub_items :type: List[MenuItem] | Sequence[MenuItem] | None .. py:method:: get(key: str) -> Optional[MenuItem | RecommendedMenuItem] Get a menu item by ID. .. py:class:: DisplayItem Bases: :py:obj:`Container` Base container for organizing content - not directly playable. .. py:attribute:: item :type: PlayableItem | None :value: None .. py:class:: PromoItem Bases: :py:obj:`Container` Base container for organizing content - not directly playable. .. py:attribute:: item :type: PlayableItem .. py:class:: SearchResults .. py:attribute:: stations :type: List[LiveStation | StationSearchResult] .. py:attribute:: shows :type: List[Podcast | RadioShow] .. py:attribute:: episodes :type: List[PodcastEpisode | RadioClip | RadioShow] .. py:function:: model_factory(object)