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]]): Список маршрутов (IPv4/IPv6) 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 (IPv4/IPv6) Атрибуты: 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 устройства (наследуется от NetworkInterface) Атрибуты: 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: 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