from typing import List, Optional, Union from pydantic import BaseModel # Класс для маршрутов IPv4 class IPv4Route(BaseModel): destination: str prefix: int next_hop: str metric: int # Класс для маршрутов IPv6 class IPv6Route(BaseModel): destination: str prefix: int next_hop: str metric: int # Класс для индивидуальной конфигурации IP class IndividualIPConfig(BaseModel): address: str routes: List[Union[IPv4Route, IPv6Route]] method: Optional[str] gateway: str dns: List[str] # Класс для конфигурации IP class IPConfig(BaseModel): configurations: List[IndividualIPConfig] # Класс для сетевого интерфейса class NetworkInterface(BaseModel): 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 # Класс для WiFi устройства class WiFiDevice(NetworkInterface): 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 container_y: int class Activation(BaseModel): 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 container_y: int isOpen: bool = True