File: models.py

package info (click to toggle)
python-go2rtc-client 0.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 684 kB
  • sloc: python: 945; makefile: 3
file content (83 lines) | stat: -rw-r--r-- 1,786 bytes parent folder | download
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)