gonets/SRV/models/network.py

169 lines
5.4 KiB
Python

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: 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