1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
"""Go2rtc Python models."""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Literal
from awesomeversion import AwesomeVersion
from mashumaro import field_options
from mashumaro.mixins.orjson import DataClassORJSONMixin
from mashumaro.types import SerializationStrategy
class _AwesomeVersionSerializer(SerializationStrategy):
def serialize(self, value: AwesomeVersion) -> str:
return str(value)
def deserialize(self, value: str) -> AwesomeVersion:
return AwesomeVersion(value)
@dataclass
class ApplicationInfo(DataClassORJSONMixin):
"""Application info model.
Currently only the server version is exposed.
"""
version: AwesomeVersion = field(
metadata=field_options(serialization_strategy=_AwesomeVersionSerializer())
)
@dataclass
class Streams(DataClassORJSONMixin):
"""Streams model."""
streams: dict[str, Stream]
@dataclass
class Stream:
"""Stream model."""
producers: list[Producer]
@classmethod
def __pre_deserialize__(cls, d: dict[Any, Any]) -> dict[Any, Any]:
"""Pre deserialize."""
# Ensure producers is always a list
if "producers" in d and d["producers"] is None:
d["producers"] = []
return d
@dataclass
class Producer:
"""Producer model."""
url: str
@dataclass
class WebRTCSdp(DataClassORJSONMixin):
"""WebRTC SDP model."""
type: Literal["offer", "answer"]
sdp: str
@dataclass
class WebRTCSdpOffer(WebRTCSdp):
"""WebRTC SDP offer model."""
type: Literal["offer"] = field(default="offer", init=False)
@dataclass
class WebRTCSdpAnswer(WebRTCSdp):
"""WebRTC SDP answer model."""
type: Literal["answer"] = field(default="answer", init=False)
|