Source code for pybragerone.models.api.modules

"""Module-related models for BragerOne API."""

from __future__ import annotations

from datetime import datetime
from typing import Any

from pydantic import BaseModel, Field, field_validator


[docs] class ModuleGateway(BaseModel): """Gateway information for a module.""" address: str = "" interface: str = "" version: str = "" @field_validator("address", "interface", "version", mode="before") @classmethod def _coerce_optional_str(cls, value: Any) -> Any: if value is None: return "" return value
[docs] class ModuleParameterSchema(BaseModel): """Parameter schema for a module.""" name: str id: int value: dict[str, Any]
[docs] class Module(BaseModel): """Module information model.""" devid: str name: str gateway: ModuleGateway = Field(default_factory=ModuleGateway) deviceMenu: int deviceLanguageVariant: int devices: list[Any] services: list[Any] permissions: list[str] acceptedAt: int connectedAt: int = 0 moduleAlarms: int parameterSchemas: list[ModuleParameterSchema] id: int moduleAddress: str = "" moduleInterface: str = "" moduleVersion: str = "" moduleServices: list[Any] moduleTitle: str isAcceptedAt: datetime isConnectedAt: datetime | None = None @field_validator("moduleAddress", "moduleInterface", "moduleVersion", mode="before") @classmethod def _coerce_optional_str(cls, value: Any) -> Any: if value is None: return "" return value @field_validator("connectedAt", mode="before") @classmethod def _coerce_null_connected_at(cls, value: Any) -> Any: """Upstream sends ``null`` for disconnected / placeholder module rows.""" if value is None: return 0 return value @field_validator("gateway", mode="before") @classmethod def _coerce_empty_gateway(cls, value: Any) -> Any: if value is None: return {} return value
[docs] class ModuleCard(BaseModel): """Module card information with client details.""" id: int moduleId: int clientFullName: str clientPhoneNumber: str clientAddressStreetAndNumber: str clientAddressPostalCode: str clientAddressCity: str createdAt: datetime updatedAt: datetime