from typing import List, Optional, Union from pydantic import BaseModel class IPv4Route(BaseModel): """Модель маршрута IPv4. Атрибуты: - ``destination`` (str): IP-адрес назначения. - ``prefix`` (int): Префикс подсети в формате CIDR. - ``next_hop`` (str): Адрес следующего узла (маршрутизатор). - ``metric`` (int): Метрика маршрута. """ destination: str prefix: int next_hop: str metric: int class IPv6Route(BaseModel): """Модель маршрута IPv6. Атрибуты: - ``destination`` (str): IP-адрес назначения. - ``prefix`` (int): Префикс подсети в формате CIDR. - ``next_hop`` (str): Адрес следующего узла. - ``metric`` (int): Метрика маршрута. """ destination: str prefix: int next_hop: str metric: int class IndividualIPConfig(BaseModel): """Модель индивидуальной конфигурации IP-адреса. Атрибуты: - ``address`` (str): IP-адрес интерфейса. - ``routes`` (List[Union[IPv4Route, IPv6Route]]): Список маршрутов. - ``method`` (Optional[str]): Метод назначения IP. - ``gateway`` (str): Шлюз по умолчанию. - ``dns`` (List[str]): Список DNS-серверов. """ address: str routes: List[Union[IPv4Route, IPv6Route]] method: Optional[str] gateway: str dns: List[str] class IPConfig(BaseModel): """Групповая конфигурация IP-адресов. Атрибуты: - ``configurations`` (List[IndividualIPConfig]): Индивидуальные IP-конфигурации. """ configurations: List[IndividualIPConfig] class NetworkInterface(BaseModel): """Модель базового сетевого интерфейса. Атрибуты: - ``name`` (str): Название интерфейса. - ``type`` (str): Тип устройства. - ``mac_address`` (str): MAC-адрес. - ``device_state`` (str): Текущее состояние. - ``active_connection`` (str): Название активного соединения. - ``device_mtu`` (str): MTU устройства. - ``ipv4`` (IPConfig): IPv4-конфигурация. - ``ipv6`` (IPConfig): IPv6-конфигурация. - ``container_x`` (int): Положение по оси X на холсте. - ``container_y`` (int): Положение по оси Y на холсте. """ name: str type: str mac_address: str device_state: str active_connection: str device_mtu: str ipv4: IPConfig ipv6: IPConfig container_x: int = 0 container_y: int = 0 class WiFiDevice(NetworkInterface): """Расширенная модель Wi-Fi устройства. Атрибуты: - ``ssid`` (Optional[str]): Название Wi-Fi сети. - ``bssid`` (Optional[str]): MAC-адрес точки доступа. - ``bitrate`` (Optional[int]): Скорость соединения. - ``strength`` (Optional[int]): Уровень сигнала. - ``frequency`` (Optional[float]): Рабочая частота. - ``mode`` (Union[str, int]): Режим работы. """ ssid: Optional[str] = None bssid: Optional[str] = None bitrate: Optional[int] = None strength: Optional[int] = None frequency: Optional[float] = None mode: Optional[Union[str, int]] = None class NetworkInterfacesContainer(BaseModel): """Контейнер для набора сетевых интерфейсов. Атрибуты: - ``interfaces`` (List[Union[NetworkInterface, WiFiDevice]]): Список интерфейсов. - ``container_x`` (int): Положение по оси X. - ``container_y`` (int): Положение по оси Y. """ interfaces: List[Union[NetworkInterface, WiFiDevice]] container_x: int container_y: int class Activation(BaseModel): """Модель узла активных интерфейсов. Атрибуты: - ``id`` (int): Идентификатор ноды. - ``interfaces`` (List[Union[NetworkInterface, WiFiDevice]]): Активные интерфейсы. - ``container_x`` (int): Координата X на холсте. - ``container_y`` (int): Координата Y на холсте. - ``isOpen`` (bool): Флаг отображения узла на холсте. """ id: int interfaces: List[Union[NetworkInterface, WiFiDevice]] container_x: int container_y: int isOpen: bool = True class Deactivation(BaseModel): """Модель узла отключённых интерфейсов. Атрибуты: - ``id`` (int): Идентификатор ноды. - ``interfaces`` (List[Union[NetworkInterface, WiFiDevice]]): Список отключённых интерфейсов. - ``container_x`` (int): Координата X на холсте. - ``container_y`` (int): Координата Y на холсте. - ``isOpen`` (bool): Флаг отображения узла на холсте. """ id: int interfaces: List[Union[NetworkInterface, WiFiDevice]] container_x: int container_y: int isOpen: bool = True