138 lines
2.4 KiB
Python
138 lines
2.4 KiB
Python
# License: GNU AGPL v3: http://www.gnu.org/licenses/
|
|
# This file is part of `delarte` (https://git.afpy.org/fcode/delarte.git)
|
|
|
|
"""Provide data model types."""
|
|
|
|
|
|
from typing import NamedTuple, Optional
|
|
|
|
|
|
#
|
|
# Metadata objects
|
|
#
|
|
class Program(NamedTuple):
|
|
"""A program metadata."""
|
|
|
|
id: str
|
|
language: str
|
|
title: str
|
|
subtitle: str
|
|
|
|
|
|
class Rendition(NamedTuple):
|
|
"""A program rendition metadata."""
|
|
|
|
code: str
|
|
label: str
|
|
|
|
|
|
class Variant(NamedTuple):
|
|
"""A program variant metadata."""
|
|
|
|
code: str
|
|
average_bandwidth: int
|
|
|
|
|
|
#
|
|
# Track objects
|
|
#
|
|
class VideoTrack(NamedTuple):
|
|
"""A video track."""
|
|
|
|
width: int
|
|
height: int
|
|
frame_rate: float
|
|
|
|
|
|
class AudioTrack(NamedTuple):
|
|
"""An audio track."""
|
|
|
|
name: str
|
|
language: str
|
|
original: bool
|
|
visual_impaired: bool
|
|
|
|
|
|
class SubtitlesTrack(NamedTuple):
|
|
"""A subtitles track."""
|
|
|
|
name: str
|
|
language: str
|
|
hearing_impaired: bool
|
|
|
|
|
|
#
|
|
# Source objects
|
|
#
|
|
class ProgramSource(NamedTuple):
|
|
"""A program source item."""
|
|
|
|
program: Program
|
|
player_config_url: str
|
|
|
|
|
|
class RenditionSource(NamedTuple):
|
|
"""A rendition source item."""
|
|
|
|
program: Program
|
|
rendition: Rendition
|
|
protocol: str
|
|
program_index_url: Program
|
|
|
|
|
|
class VariantSource(NamedTuple):
|
|
"""A variant source item."""
|
|
|
|
class VideoMedia(NamedTuple):
|
|
"""A video media."""
|
|
|
|
track: VideoTrack
|
|
track_index_url: str
|
|
|
|
class AudioMedia(NamedTuple):
|
|
"""An audio media."""
|
|
|
|
track: AudioTrack
|
|
track_index_url: str
|
|
|
|
class SubtitlesMedia(NamedTuple):
|
|
"""A subtitles media."""
|
|
|
|
track: SubtitlesTrack
|
|
track_index_url: str
|
|
|
|
program: Program
|
|
rendition: Rendition
|
|
variant: Variant
|
|
video_media: VideoMedia
|
|
audio_media: AudioMedia
|
|
subtitles_media: Optional[SubtitlesMedia]
|
|
|
|
|
|
class Target(NamedTuple):
|
|
"""A download target item."""
|
|
|
|
class VideoInput(NamedTuple):
|
|
"""A video input."""
|
|
|
|
track: VideoTrack
|
|
url: str
|
|
|
|
class AudioInput(NamedTuple):
|
|
"""An audio input."""
|
|
|
|
track: AudioTrack
|
|
url: str
|
|
|
|
class SubtitlesInput(NamedTuple):
|
|
"""A subtitles input."""
|
|
|
|
track: SubtitlesTrack
|
|
url: str
|
|
|
|
video_input: VideoInput
|
|
audio_input: AudioInput
|
|
subtitles_input: Optional[SubtitlesInput]
|
|
title: str | tuple[str, str]
|
|
output: str
|