Rename directories

This commit is contained in:
Merelden 2025-10-14 16:19:35 +05:00
parent c55acba709
commit ca047c4248
95 changed files with 77 additions and 77 deletions

View file

@ -0,0 +1,90 @@
# api.v1.auth
### *async* api.v1.auth.check_users_file(translations: Translations = Depends(translations_dependency))
Проверяет, существует ли файл users.json и содержит ли он пользователей.
Возвращает информацию о состоянии файла и наличии пользователей.
* **Returns:**
Словарь с ключами:
: - ”exists” (bool): Существует ли файл.
- ”has_users” (bool): Содержит ли файл пользователей.
- ”message” (str): Сообщение с описанием результата.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если произошла ошибка при проверке файла (status_code=500).
### *async* api.v1.auth.get_current_user(request: Request, translations: Translations = Depends(translations_dependency))
Возвращает данные текущего пользователя и токен.
Проверяет активную сессию по client_id и возвращает информацию о пользователе
и токен для дальнейшего использования.
* **Parameters:**
* **request** (*Request*) – Объект запроса для получения client_id (IP-адрес клиента).
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с ключами “user” (UserResponse), “access_token” (str) и
: ”token_type” (str, всегда “bearer”).
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если сессия не найдена или истекла (status_code=401) или
произошла внутренняя ошибка (status_code=500).
### *async* api.v1.auth.login(user: UserLogin, request: Request, translations: Translations = Depends(translations_dependency))
Авторизует пользователя и создаёт сессию.
Проверяет учетные данные пользователя и возвращает токен и session_id для
последующей авторизации.
* **Parameters:**
* **user** (*UserLogin*) – Объект с данными для входа (username, password).
* **request** (*Request*) – Объект запроса для получения client_id (IP-адрес клиента).
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Объект с access_token и session_id для авторизации.
* **Return type:**
Token
* **Raises:**
**HTTPException** – Если учетные данные неверны (status_code=401) или произошла
внутренняя ошибка (status_code=500).
### *async* api.v1.auth.logout(request: Request, translations: Translations = Depends(translations_dependency))
Выход из системы, удаление сессии.
Удаляет активную сессию пользователя по client_id.
* **Parameters:**
* **request** (*Request*) – Объект запроса для получения client_id (IP-адрес клиента).
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Пустой словарь или сообщение об успешном выходе.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если сессия не найдена (status_code=401) или произошла
внутренняя ошибка (status_code=500).
### *async* api.v1.auth.register(user: UserCreate, translations: Translations = Depends(translations_dependency))
Регистрирует нового пользователя.
Создаёт нового пользователя на основе предоставленных данных и возвращает
информацию о зарегистрированном пользователе.
* **Parameters:**
* **user** (*UserCreate*) – Объект с данными нового пользователя (username, password, is_admin).
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Объект с данными зарегистрированного пользователя (id, username, is_admin).
* **Return type:**
UserResponse
* **Raises:**
**HTTPException** – Если пользователь уже существует (status_code=400) или произошла
внутренняя ошибка (status_code=500).

View file

@ -0,0 +1,63 @@
# api.v1.ip
### *async* api.v1.ip.apply_ip_config(data: Dict[str, Any] = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency))
Применяет проверенные IP-настройки к указанному сетевому профилю.
Обновляет настройки соединения через NetworkManager, отключает и
переподключает устройство к сети.
* **Parameters:**
* **data** (*Dict* *[**str* *,* *Any* *]*) – Словарь с данными конфигурации, включая
“connection_id” и “ipv4_updates” с обновлениями IP-настроек.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с ключами:
: - ”success” (bool): Успешность операции.
- ”message” (str): Сообщение об успешном применении настроек.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если подключение не найдено (status_code=404) или
произошла внутренняя ошибка (status_code=500).
### *async* api.v1.ip.check_ip_config(data: Dict[str, Any] = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency))
Проверяет доступность IP-адреса перед его применением.
Выполняет ARP-сканирование для проверки, занят ли указанный IP-адрес,
и возвращает результат проверки.
* **Parameters:**
* **data** (*Dict* *[**str* *,* *Any* *]*) – Словарь с данными конфигурации, включая
“ipv4_updates” с полем “ipv4.address-data” для нового IP-адреса.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с ключами:
: - ”available” (bool): Доступен ли IP-адрес.
- ”message” (str): Сообщение о результате проверки.
* **Return type:**
Dict[str, Any]
* **Raises:**
**HTTPException** – Если произошла внутренняя ошибка (status_code=500).
### *async* api.v1.ip.save_ip_config(data: Dict[str, Any] = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency))
Применяет проверенные IP-настройки для отката сетевого профиля.
Используется для сохранения и отката настроек сетевого профиля к предыдущему
состоянию через NetworkManager.
* **Parameters:**
* **data** (*Dict* *[**str* *,* *Any* *]*) – Словарь с данными конфигурации, включая
“connection_id” и “ipv4_updates” с обновлениями IP-настроек.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с ключами:
: - ”success” (bool): Успешность операции.
- ”message” (str): Сообщение об успешном применении настроек.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если подключение не найдено (status_code=404) или
произошла внутренняя ошибка (status_code=500).

View file

@ -0,0 +1,93 @@
# api.v1.network
### *class* api.v1.network.ContainerPositionManager
Bases: `object`
Класс для управления позициями и состоянием контейнеров.
Хранит и обновляет координаты (x, y) и состояние (isOpen) для контейнеров
активации и деактивации.
#### get_position_and_state(container_name: str, translations: Translations = Depends(translations_dependency)) → Tuple[int, int, bool]
Получает текущие координаты и состояние указанного контейнера.
* **Parameters:**
* **container_name** (*str*) – Имя контейнера (“activation” или “deactivation”).
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Кортеж с координатами (x, y) и состоянием (isOpen).
* **Return type:**
Tuple[int, int, bool]
* **Raises:**
**ValueError** – Если указан неверный идентификатор контейнера.
#### update_position(container_id: int, x: int, y: int, isOpen: bool) → None
Обновляет позицию и состояние контейнера по его идентификатору.
* **Parameters:**
* **container_id** (*int*) – Идентификатор контейнера (1 для “activation”, 2 для “deactivation”).
* **x** (*int*) – Новая координата X.
* **y** (*int*) – Новая координата Y.
* **isOpen** (*bool*) – Новое состояние контейнера (открыт/закрыт).
* **Raises:**
**ValueError** – Если container_id не соответствует ни одному контейнеру.
### *async* api.v1.network.get_hostname(translations: Translations = Depends(translations_dependency))
Возвращает имя хоста системы.
Выполняет запрос к сервису для получения имени хоста.
* **Parameters:**
**translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с ключом “hostname” и значением имени хоста.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если произошла ошибка при получении имени хоста (status_code=500).
### *async* api.v1.network.get_network_data(translations: Translations = Depends(translations_dependency)) → Dict[str, Dict]
Возвращает текущие сетевые данные в виде словаря.
Получает данные о сетевых интерфейсах, разделяет их на активные и неактивные,
и возвращает их в формате Activation и Deactivation с учётом позиций и состояний
контейнеров.
* **Parameters:**
**translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с ключами “activation” и “deactivation”, содержащими
: данные о соответствующих контейнерах.
* **Return type:**
Dict[str, Dict]
* **Raises:**
**HTTPException** – Если произошла ошибка при получении данных (status_code=500).
### *async* api.v1.network.update_container_position(data: Dict[str, int | bool] = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency))
Обновляет позицию и состояние контейнера.
Принимает данные о новом положении и состоянии контейнера и обновляет их
в менеджере позиций.
* **Parameters:**
* **data** (*Dict* *[**str* *,* *Union* *[**int* *,* *bool* *]* *]*) – Словарь с ключами:
- “container_id” (int): Идентификатор контейнера (1 или 2).
- “container_x” (int): Новая координата X.
- “container_y” (int): Новая координата Y.
- “isOpen” (bool): Новое состояние контейнера (открыт/закрыт).
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с ключами:
: - ”success” (bool): Успешность операции.
- ”message” (str): Сообщение об успешном обновлении.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если отсутствуют обязательные поля (status_code=400) или
типы данных неверны.

View file

@ -0,0 +1,104 @@
# api.v1.settings
### api.v1.settings.clear_all_data(translations: Translations = Depends(translations_dependency))
Очищает данные узлов подсети и точек доступа Wi-Fi в обоих файлах.
Удаляет все записи из devices.json и wifi.json.
* **Parameters:**
**translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешной очистке.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если произошла ошибка очистки (status_code=500).
### api.v1.settings.clear_subnet(subnet: str | None = None, translations: Translations = Depends(translations_dependency))
Очищает данные узлов подсети, сохранённые в devices.json.
Удаляет все записи об узлах подсети, оставляя файл пустым.
* **Parameters:**
* **subnet** (*Optional* *[**str* *]*) – Подсеть в формате CIDR (например, “10.1.1.0/24”).
Если None, очищает все подсети.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешной очистке.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если произошла ошибка очистки (status_code=500).
### api.v1.settings.clear_wifi(translations: Translations = Depends(translations_dependency))
Очищает данные точек доступа Wi-Fi, сохранённые в wifi.json.
Удаляет все записи о точках доступа, оставляя файл пустым.
* **Parameters:**
**translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешной очистке.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если произошла ошибка очистки (status_code=500).
### *async* api.v1.settings.export_devices(request: SubnetScanRequest = Body(PydanticUndefined), translations: Translations = Depends(translations_dependency))
Экспортирует файл с данными устройств в формате JSON для указанной подсети.
* **Parameters:**
* **request** (*SubnetScanRequest*) – Объект с полем subnet в формате CIDR.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Файл <subnet>.json для скачивания.
* **Return type:**
FileResponse
* **Raises:**
**HTTPException** – Если файл не найден (status_code=404).
### *async* api.v1.settings.export_wifi(translations: Translations = Depends(translations_dependency))
Экспортирует файл с данными устройств в формате JSON.
* **Parameters:**
**translations** – Объект переводов для текущего языка.
* **Returns:**
Файл wifi.json для скачивания.
* **Return type:**
FileResponse
* **Raises:**
**HTTPException** – Если файл не найден (status_code=404).
### *async* api.v1.settings.get_system_language(request: Request, translations: Translations = Depends(translations_dependency))
Выводит текущий язык, установленный в системе на основе locale.
Выполняет команду ‘locale’ в системе и извлекает параметры LANG
* **Parameters:**
* **request** (*Request*) – Объект запроса для доступа к параметрам.
* **translations** – Объект переводов текущего языка.
* **Returns:**
Словарь с текущим языком системы.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если не удалось извлечь системный язык (status_code=500).
### api.v1.settings.set_language(locale: str, response: Response, translations: Translations = Depends(translations_dependency))
Устанавливает куку locale для смены языка пользователя.
* **Parameters:**
* **locale** (*str*) – Используемый язык.
* **response** (*Response*) – Запрос.
* **translations** – Объект переводов текущего языка.
* **Returns:**
Сообщение об успешной установке языка.
* **Return type:**
dict

View file

@ -0,0 +1,193 @@
# api.v1.subnet
### api.v1.subnet.add_note(mac: str, request: NoteRequest, subnet_service: SubnetService = Depends(get_subnet_service), translations: Translations = Depends(translations_dependency))
Добавляет заметку для устройства по MAC-адресу.
Привязывает заметку к устройству, идентифицируемому по MAC-адресу.
* **Parameters:**
* **mac** (*str*) – MAC-адрес устройства.
* **request** (*NoteRequest*) – Объект с полем “note” для текста заметки.
* **subnet_service** – Сервис сканирования подсети.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешном добавлении заметки.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если устройство не найдено (status_code=404), заметка уже
существует (status_code=400), или произошла внутренняя ошибка (status_code=500).
### api.v1.subnet.add_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(translations_dependency))
Добавляет заметку для сети Wi-Fi по SSID.
Привязывает заметку к Wi-Fi сети, идентифицируемой по SSID.
* **Parameters:**
* **ssid** (*str*) – Идентификатор Wi-Fi сети.
* **request** (*NoteRequest*) – Объект с полем “note” для текста заметки.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешном добавлении заметки.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если сеть не найдена (status_code=404), заметка уже
существует (status_code=400), или произошла внутренняя ошибка (status_code=500).
### api.v1.subnet.connect_to_wifi(request: WifiConnectRequest, translations: Translations = Depends(translations_dependency))
Подключается к Wi-Fi сети по SSID и паролю.
Выполняет подключение к указанной Wi-Fi сети с использованием предоставленных
учетных данных.
* **Parameters:**
* **request** (*WifiConnectRequest*) – Объект с полями “ssid” и “password”.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешном подключении.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если подключение не удалось (status_code=400).
### api.v1.subnet.delete_note(mac: str, subnet_service: SubnetService = Depends(get_subnet_service), translations: Translations = Depends(translations_dependency))
Удаляет заметку для устройства по MAC-адресу.
Удаляет привязанную заметку для указанного устройства.
* **Parameters:**
* **mac** (*str*) – MAC-адрес устройства.
* **subnet_service** – Сервис сканирования подсети.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешном удалении заметки.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если устройство не найдено (status_code=404), заметка не
существует (status_code=400), или произошла внутренняя ошибка (status_code=500).
### api.v1.subnet.delete_wifi_note(ssid: str, translations: Translations = Depends(translations_dependency))
Удаляет заметку для сети Wi-Fi по SSID.
Удаляет привязанную заметку для указанной Wi-Fi сети.
* **Parameters:**
* **ssid** (*str*) – Идентификатор Wi-Fi сети.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешном удалении заметки.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если сеть не найдена (status_code=404), заметка не
существует (status_code=400), или произошла внутренняя ошибка (status_code=500).
### api.v1.subnet.disconnect_from_wifi(request: WifiDisconnectRequest, translations: Translations = Depends(translations_dependency))
Отключается от Wi-Fi сети по указанному SSID.
Выполняет отключение от указанной Wi-Fi сети.
* **Parameters:**
* **request** (*WifiDisconnectRequest*) – Объект с полем “ssid”.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешном отключении.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если отключение не удалось (status_code=400).
### api.v1.subnet.get_wifi_status(translations: Translations = Depends(translations_dependency))
Проверяет статус текущего подключения к Wi-Fi.
Возвращает информацию о текущем состоянии подключения и SSID, если подключение активно.
* **Parameters:**
**translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с ключами:
: - ”status” (str): Состояние (“connected” или другое).
- ”ssid” (str, optional): SSID текущей сети, если подключено.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если проверка статуса не удалась (status_code=400).
### api.v1.subnet.scan_subnet(request: SubnetScanRequest = Body(PydanticUndefined), subnet_service: SubnetService = Depends(get_subnet_service), translations: Translations = Depends(translations_dependency))
Сканирует локальную подсеть и возвращает данные об устройствах.
Выполняет сканирование указанной подсети для обнаружения активных устройств.
* **Parameters:**
* **request** (*SubnetScanRequest*) – Объект с полем subnet.
* **subnet_service** – Сервис сканирования подсети.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Объект с результатами сканирования (устройства и их данные).
* **Return type:**
SubnetScanResult
* **Raises:**
**HTTPException** – Если произошла ошибка сканирования (status_code=500).
### api.v1.subnet.scan_wifi(timeout: int = 30, translations: Translations = Depends(translations_dependency))
Сканирует Wi-Fi точки доступа и возвращает данные о них.
Выполняет сканирование доступных Wi-Fi сетей с указанным таймаутом.
* **Parameters:**
* **timeout** (*int* *,* *optional*) – Таймаут сканирования в секундах. По умолчанию 30.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Объект с результатами сканирования (список Wi-Fi сетей).
* **Return type:**
WifiScanResult
* **Raises:**
**HTTPException** – Если произошла ошибка сканирования Wi-Fi (status_code=500).
### api.v1.subnet.update_note(mac: str, request: NoteRequest, subnet_service: SubnetService = Depends(get_subnet_service), translations: Translations = Depends(translations_dependency))
Обновляет заметку для устройства по MAC-адресу.
Изменяет существующую заметку, привязанную к устройству.
* **Parameters:**
* **mac** (*str*) – MAC-адрес устройства.
* **request** (*NoteRequest*) – Объект с полем “note” для нового текста заметки.
* **subnet_service** – Сервис сканирования подсети.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешном обновлении заметки.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если устройство не найдено (status_code=404), заметка не
существует (status_code=400), или произошла внутренняя ошибка (status_code=500).
### api.v1.subnet.update_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(translations_dependency))
Обновляет заметку для сети Wi-Fi по SSID.
Изменяет существующую заметку, привязанную к Wi-Fi сети.
* **Parameters:**
* **ssid** (*str*) – Идентификатор Wi-Fi сети.
* **request** (*NoteRequest*) – Объект с полем “note” для нового текста заметки.
* **translations** – Объект переводов для текущего языка.
* **Returns:**
Словарь с сообщением об успешном обновлении заметки.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если сеть не найдена (status_code=404), заметка не
существует (status_code=400), или произошла внутренняя ошибка (status_code=500).

View file

@ -0,0 +1,104 @@
# api.v1.ufw
### *class* api.v1.ufw.RuleNumbers(, numbers: List[int])
Bases: `BaseModel`
#### model_config *: ClassVar[ConfigDict]* *= {}*
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
#### numbers *: List[int]*
### *async* api.v1.ufw.add_ufw_in_rules(rules: List[UFWRule])
Добавляет входящие (in) правила UFW.
* **Parameters:**
**rules** (*List* *[**UFWRule* *]*) – Список правил, определяющих направления,
порты/диапазоны/протоколы и действия (allow/deny/reject).
* **Returns:**
Итог выполнения с количеством успешно добавленных правил и деталями
по каждому правилу.
* **Return type:**
dict
* **Raises:**
* **HTTPException** – Если UFW отключен (status_code=400) или при внутренних
* **ошибках** **(****status_code=500****)****.** –
### *async* api.v1.ufw.add_ufw_out_rules(rules: List[UFWRule])
Добавляет исходящие (out) правила UFW.
* **Parameters:**
**rules** (*List* *[**UFWRule* *]*) – Список правил исходящего трафика для добавления.
* **Returns:**
Объект статуса с сообщением об успешном добавлении.
* **Return type:**
dict
* **Raises:**
* **HTTPException** – Если UFW отключен (status_code=400) или при внутренних
* **ошибках** **(****status_code=500****)****.** –
### *async* api.v1.ufw.delete_ufw_rules(rule_numbers: RuleNumbers)
Удаляет правила UFW по их номерам.
* **Parameters:**
**rule_numbers** (*RuleNumbers*) – Номера правил, подлежащих удалению (как в
выводе ufw status numbered).
* **Returns:**
Информация об общем количестве удаляемых правил, числе успешных и
возможной ошибке.
* **Return type:**
dict
* **Raises:**
**HTTPException** – При ошибках удаления (status_code=500).
### *async* api.v1.ufw.disable_ufw()
Выключает UFW.
* **Returns:**
Словарь с ключами status и message при успешном выполнении.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если выключение завершилось неуспешно (status_code=500).
### *async* api.v1.ufw.enable_ufw()
Включает UFW.
* **Returns:**
Словарь с ключами status и message при успешном выполнении.
* **Return type:**
dict
* **Raises:**
**HTTPException** – Если включение завершилось неуспешно (status_code=500).
### *async* api.v1.ufw.get_ufw_rules()
Возвращает все правила UFW.
Осуществляет обращение к сервису UFWService для чтения текущего списка
правил брандмауэра и возвращает результат в сериализованном виде для клиента.
* **Returns:**
Структура с коллекцией правил и сопутствующей
информацией о состоянии.
* **Return type:**
UFWRulesResponse
* **Raises:**
**HTTPException** – В случае ошибок взаимодействия с UFW (status_code=500).
### *async* api.v1.ufw.get_ufw_status()
Возвращает текущий статус UFW.
* **Returns:**
Объект со сведениями о включенности UFW и деталями статуса.
* **Return type:**
UFWStatus
* **Raises:**
**HTTPException** – Если не удалось получить статус (status_code=500).

View file

@ -0,0 +1,78 @@
# api.v1.websocket
### *class* api.v1.websocket.WebSocketManager
Bases: `object`
Класс для управления подключениями к WebSocket-серверу.
Обрабатывает подключение, отключение и трансляцию сообщений для клиентов,
подключённых через WebSocket.
#### *async* broadcast(message: dict)
Транслирует сообщения всем подключённым клиентам.
Отправляет JSON-данные всем активным соединениям, обрабатывая
отключения клиентов.
* **Parameters:**
**message** (*dict*) – Сообщение для трансляции в формате JSON.
* **Raises:**
* **WebSocketDisconnect** – Если клиент неожиданно отключился.
* **Exception** – Если произошла другая ошибка при отправке.
#### *async* connect(websocket: WebSocket)
Подключает клиента к WebSocket-серверу.
Принимает подключение и добавляет WebSocket в список активных соединений.
* **Parameters:**
**websocket** (*WebSocket*) – Объект WebSocket для подключения.
* **Raises:**
**Exception** – Если произошла ошибка при принятии подключения.
#### disconnect(websocket: WebSocket)
Отключает клиента от WebSocket-серверу.
Удаляет WebSocket из списка активных соединений.
* **Parameters:**
**websocket** (*WebSocket*) – Объект WebSocket для отключения.
### *async* api.v1.websocket.broadcast_data(translations: Translations = Depends(translations_dependency))
Таск для периодической трансляции сетевых данных.
Выполняет сканирование сети и отправляет данные всем подключённым клиентам
с интервалом в 2 секунды.
* **Parameters:**
**translations** – Объект переводов для текущего языка.
* **Raises:**
**Exception** – Если произошла ошибка при получении данных или трансляции.
### *async* api.v1.websocket.startup_event()
Запуск таска для трансляции сетевых данных при старте приложения.
Создаёт асинхронную задачу для периодической трансляции данных.
* **Raises:**
**Exception** – Если произошла ошибка при запуске таска.
### *async* api.v1.websocket.websocket_endpoint(websocket: WebSocket, translations: Translations = Depends(translations_dependency))
Обработчик WebSocket-соединения.
Управляет соединением клиента, принимает данные для обновления позиций
контейнеров и транслирует сетевые данные.
* **Parameters:**
* **websocket** (*WebSocket*) – Объект WebSocket для обработки соединения.
* **translations** – Объект переводов для текущего языка.
* **Raises:**
* **WebSocketDisconnect** – Если клиент отключился.
* **Exception** – Если произошла ошибка при обработке данных.