Files
Victor Alexandrovich Tsyrenschikov 373ed28445 python
2026-03-30 20:25:42 +05:00

139 lines
4.1 KiB
Python

"""Schema for device capabilities."""
from __future__ import annotations
from enum import StrEnum
from typing import Annotated, Any, Literal, TypeVar, Union
from pydantic import BaseModel, ConfigDict, Field
from .base import APIModel
from .capability_color import (
ColorSettingCapabilityInstance,
ColorSettingCapabilityInstanceActionState,
ColorSettingCapabilityParameters,
RGBInstanceActionState,
SceneInstanceActionState,
TemperatureKInstanceActionState,
)
from .capability_mode import ModeCapabilityInstance, ModeCapabilityInstanceActionState, ModeCapabilityParameters
from .capability_onoff import OnOffCapabilityInstance, OnOffCapabilityInstanceActionState, OnOffCapabilityParameters
from .capability_range import RangeCapabilityInstance, RangeCapabilityInstanceActionState, RangeCapabilityParameters
from .capability_toggle import ToggleCapabilityInstance, ToggleCapabilityInstanceActionState, ToggleCapabilityParameters
from .capability_video import (
GetStreamInstanceActionResultValue,
GetStreamInstanceActionState,
VideoStreamCapabilityInstance,
VideoStreamCapabilityParameters,
)
class CapabilityType(StrEnum):
ON_OFF = "devices.capabilities.on_off"
COLOR_SETTING = "devices.capabilities.color_setting"
MODE = "devices.capabilities.mode"
RANGE = "devices.capabilities.range"
TOGGLE = "devices.capabilities.toggle"
VIDEO_STREAM = "devices.capabilities.video_stream"
@property
def short(self) -> str:
return str(self).replace("devices.capabilities.", "")
CapabilityParameters = Union[
OnOffCapabilityParameters,
ColorSettingCapabilityParameters,
ModeCapabilityParameters,
RangeCapabilityParameters,
ToggleCapabilityParameters,
VideoStreamCapabilityParameters,
]
CapabilityInstance = Union[
OnOffCapabilityInstance,
ColorSettingCapabilityInstance,
ModeCapabilityInstance,
RangeCapabilityInstance,
ToggleCapabilityInstance,
VideoStreamCapabilityInstance,
]
class CapabilityDescription(APIModel):
type: CapabilityType
retrievable: bool
reportable: bool
parameters: CapabilityParameters | None = None
class CapabilityInstanceStateValue(APIModel):
instance: CapabilityInstance
value: Any
class CapabilityInstanceState(APIModel):
type: CapabilityType
state: CapabilityInstanceStateValue
class OnOffCapabilityInstanceAction(APIModel):
type: Literal[CapabilityType.ON_OFF] = CapabilityType.ON_OFF
state: OnOffCapabilityInstanceActionState
class ColorSettingCapabilityInstanceAction(APIModel):
type: Literal[CapabilityType.COLOR_SETTING] = CapabilityType.COLOR_SETTING
state: ColorSettingCapabilityInstanceActionState
class ModeCapabilityInstanceAction(APIModel):
type: Literal[CapabilityType.MODE] = CapabilityType.MODE
state: ModeCapabilityInstanceActionState
class RangeCapabilityInstanceAction(APIModel):
type: Literal[CapabilityType.RANGE] = CapabilityType.RANGE
state: RangeCapabilityInstanceActionState
class ToggleCapabilityInstanceAction(APIModel):
type: Literal[CapabilityType.TOGGLE] = CapabilityType.TOGGLE
state: ToggleCapabilityInstanceActionState
class VideoStreamCapabilityInstanceAction(APIModel):
type: Literal[CapabilityType.VIDEO_STREAM] = CapabilityType.VIDEO_STREAM
state: GetStreamInstanceActionState
CapabilityInstanceAction = Annotated[
Union[
OnOffCapabilityInstanceAction,
ColorSettingCapabilityInstanceAction,
ModeCapabilityInstanceAction,
RangeCapabilityInstanceAction,
ToggleCapabilityInstanceAction,
VideoStreamCapabilityInstanceAction,
],
Field(discriminator="type"),
]
CapabilityInstanceActionState = TypeVar(
"CapabilityInstanceActionState",
OnOffCapabilityInstanceActionState,
ColorSettingCapabilityInstanceActionState,
RGBInstanceActionState,
TemperatureKInstanceActionState,
SceneInstanceActionState,
ModeCapabilityInstanceActionState,
RangeCapabilityInstanceActionState,
ToggleCapabilityInstanceActionState,
GetStreamInstanceActionState,
contravariant=True,
)
CapabilityInstanceActionResultValue = GetStreamInstanceActionResultValue | None