Экспорт конкретный подсетей. Обновление локалей учитывая жти изменения

This commit is contained in:
parent b1306ff66f
commit 0c8533257d
8 changed files with 81 additions and 63 deletions

2
.gitignore vendored
View file

@ -6,5 +6,5 @@ __pycache__
.wheels .wheels
.vendor .vendor
.python3-deb .python3-deb
SRV/storage/devices/devices.json SRV/storage/subnets/*
SRV/storage/wifi/wifi.json SRV/storage/wifi/wifi.json

3
SRV/.gitignore vendored
View file

@ -6,4 +6,5 @@ __pycache__
.wheels .wheels
.vendor .vendor
.python3-deb .python3-deb
storage/devices/ storage/subnets/
storage/wifi/

View file

@ -1,11 +1,12 @@
import os import os
import logging import logging
from typing import Optional from typing import Optional
from fastapi import APIRouter, HTTPException, Depends, Response, Request from fastapi import APIRouter, HTTPException, Depends, Response, Request, Body
from starlette.responses import FileResponse from starlette.responses import FileResponse
from services.settings_service import SettingsService from services.settings_service import SettingsService
from utils.i18n import get_translations from utils.i18n import get_translations
from babel.support import Translations from babel.support import Translations
from models.subnet import SubnetScanRequest # Предполагается, что модель определена
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -96,13 +97,13 @@ def clear_all_data(translations: Translations = Depends(get_translations())):
DEVICE_PATH = "storage/devices/devices.json" DEVICE_PATH = "storage/devices/devices.json"
WIFI_PATH = "storage/wifi/wifi.json" WIFI_PATH = "storage/wifi/wifi.json"
@router.get("/export_devices", response_class=FileResponse) @router.post("/export_devices", response_class=FileResponse)
async def export_devices(subnet: str, translations: Translations = Depends(get_translations())): async def export_devices(request: SubnetScanRequest = Body(...), translations: Translations = Depends(get_translations())):
""" """
Экспортирует файл с данными устройств в формате JSON для указанной подсети. Экспортирует файл с данными устройств в формате JSON для указанной подсети.
Args: Args:
subnet (str): Подсеть в формате CIDR (например, "10.1.1.0/24"). request (SubnetScanRequest): Объект с полем subnet в формате CIDR.
translations: Объект переводов для текущего языка. translations: Объект переводов для текущего языка.
Returns: Returns:
@ -111,10 +112,11 @@ async def export_devices(subnet: str, translations: Translations = Depends(get_t
Raises: Raises:
HTTPException: Если файл не найден (status_code=404). HTTPException: Если файл не найден (status_code=404).
""" """
subnet = request.subnet
file_path = f"storage/subnets/{subnet.replace('/', '_')}.json" file_path = f"storage/subnets/{subnet.replace('/', '_')}.json"
if not os.path.exists(file_path): if not os.path.exists(file_path):
logger.warning(f"Export file not found: {file_path}") logger.warning(f"Export file not found: {file_path}")
raise HTTPException(status_code=404, detail=translations.gettext("Файл не найден")) raise HTTPException(status_code=404, detail=translations.gettext("Файл для подсети {subnet} не найден").format(subnet=subnet))
logger.info(f"Exporting file: {file_path}") logger.info(f"Exporting file: {file_path}")
return FileResponse( return FileResponse(
path=file_path, path=file_path,

View file

@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2025-07-16 13:15+0500\n" "POT-Creation-Date: 2025-07-16 13:39+0500\n"
"PO-Revision-Date: 2025-07-16 13:15+0500\n" "PO-Revision-Date: 2025-07-16 13:39+0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n" "Language: en\n"
"Language-Team: en <LL@li.org>\n" "Language-Team: en <LL@li.org>\n"
@ -96,55 +96,60 @@ msgstr "Failed to update container position: {error}"
msgid "Не удалось получить имя хоста" msgid "Не удалось получить имя хоста"
msgstr "Failed to retrieve hostname" msgstr "Failed to retrieve hostname"
#: api/v1/settings.py:37 #: api/v1/settings.py:38
#, python-brace-format #, python-brace-format
msgid "Данные узлов подсети {subnet} успешно очищены" msgid "Данные узлов подсети {subnet} успешно очищены"
msgstr "Subnet node data for {subnet} successfully cleared" msgstr "Subnet node data for {subnet} successfully cleared"
#: api/v1/settings.py:39 #: api/v1/settings.py:40
msgid "Данные всех подсетей успешно очищены" msgid "Данные всех подсетей успешно очищены"
msgstr "All subnet data successfully cleared" msgstr "All subnet data successfully cleared"
#: api/v1/settings.py:41 #: api/v1/settings.py:42
msgid "Не удалось очистить данные узлов подсети" msgid "Не удалось очистить данные узлов подсети"
msgstr "Failed to clear subnet node data" msgstr "Failed to clear subnet node data"
#: api/v1/settings.py:44 api/v1/settings.py:69 api/v1/settings.py:94 #: api/v1/settings.py:45 api/v1/settings.py:70 api/v1/settings.py:95
#, python-brace-format #, python-brace-format
msgid "Ошибка очистки: {error}" msgid "Ошибка очистки: {error}"
msgstr "Clear error: {error}" msgstr "Clear error: {error}"
#: api/v1/settings.py:64 #: api/v1/settings.py:65
msgid "Данные точек доступа Wi-Fi успешно очищены" msgid "Данные точек доступа Wi-Fi успешно очищены"
msgstr "Wi-Fi access point data successfully cleared" msgstr "Wi-Fi access point data successfully cleared"
#: api/v1/settings.py:66 #: api/v1/settings.py:67
msgid "Не удалось очистить данные точек доступа Wi-Fi" msgid "Не удалось очистить данные точек доступа Wi-Fi"
msgstr "Failed to clear Wi-Fi access point data" msgstr "Failed to clear Wi-Fi access point data"
#: api/v1/settings.py:89 #: api/v1/settings.py:90
msgid "Все сетевые данные успешно очищены" msgid "Все сетевые данные успешно очищены"
msgstr "All network data successfully cleared" msgstr "All network data successfully cleared"
#: api/v1/settings.py:91 #: api/v1/settings.py:92
msgid "Не удалось очистить все сетевые данные" msgid "Не удалось очистить все сетевые данные"
msgstr "Failed to clear all network data" msgstr "Failed to clear all network data"
#: api/v1/settings.py:117 api/v1/settings.py:141 #: api/v1/settings.py:119
#, python-brace-format
msgid "Файл для подсети {subnet} не найден"
msgstr "File for subnet {subnet} not found"
#: api/v1/settings.py:143
msgid "Файл не найден" msgid "Файл не найден"
msgstr "File not found" msgstr "File not found"
#: api/v1/settings.py:166 #: api/v1/settings.py:168
#, python-brace-format #, python-brace-format
msgid "Язык '{locale}' не поддерживается." msgid "Язык '{locale}' не поддерживается."
msgstr "Language '{locale}' is not supported." msgstr "Language '{locale}' is not supported."
#: api/v1/settings.py:172 #: api/v1/settings.py:174
#, python-brace-format #, python-brace-format
msgid "Язык '{locale}' не поддерживается (нет файлов переводов)." msgid "Язык '{locale}' не поддерживается (нет файлов переводов)."
msgstr "Language '{locale}' is not supported (no translation files)." msgstr "Language '{locale}' is not supported (no translation files)."
#: api/v1/settings.py:175 #: api/v1/settings.py:177
#, python-brace-format #, python-brace-format
msgid "Язык успешно установлен: {locale}" msgid "Язык успешно установлен: {locale}"
msgstr "Language successfully set: {locale}" msgstr "Language successfully set: {locale}"
@ -421,24 +426,24 @@ msgstr "Wi-Fi access point clear error: {error}"
msgid "Ошибка очистки всех сетевых данных: {error}" msgid "Ошибка очистки всех сетевых данных: {error}"
msgstr "All network data clear error: {error}" msgstr "All network data clear error: {error}"
#: services/subnet_service.py:75 services/wifi_service.py:115 #: services/subnet_service.py:151 services/wifi_service.py:115
msgid "Неизвестный" msgid "Неизвестный"
msgstr "Unknown" msgstr "Unknown"
#: services/subnet_service.py:185 #: services/subnet_service.py:327
#, python-brace-format #, python-brace-format
msgid "Ошибка при сохранении устройств: {error}" msgid "Ошибка при сохранении устройств: {error}"
msgstr "Error saving devices: {error}" msgstr "Error saving devices: {error}"
#: services/subnet_service.py:268 #: services/subnet_service.py:441
msgid "Недопустимая подсеть по умолчанию" msgid "Недопустимая подсеть по умолчанию"
msgstr "Invalid default subnet" msgstr "Invalid default subnet"
#: services/subnet_service.py:288 #: services/subnet_service.py:461
msgid "В данной подсети не обнаружено устройств" msgid "В данной подсети не обнаружено устройств"
msgstr "No devices found in this subnet" msgstr "No devices found in this subnet"
#: services/subnet_service.py:345 #: services/subnet_service.py:518
#, python-brace-format #, python-brace-format
msgid "Ошибка сканирования: {error}" msgid "Ошибка сканирования: {error}"
msgstr "Scan error: {error}" msgstr "Scan error: {error}"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2025-07-16 13:15+0500\n" "POT-Creation-Date: 2025-07-16 13:39+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -95,55 +95,60 @@ msgstr ""
msgid "Не удалось получить имя хоста" msgid "Не удалось получить имя хоста"
msgstr "" msgstr ""
#: api/v1/settings.py:37 #: api/v1/settings.py:38
#, python-brace-format #, python-brace-format
msgid "Данные узлов подсети {subnet} успешно очищены" msgid "Данные узлов подсети {subnet} успешно очищены"
msgstr "" msgstr ""
#: api/v1/settings.py:39 #: api/v1/settings.py:40
msgid "Данные всех подсетей успешно очищены" msgid "Данные всех подсетей успешно очищены"
msgstr "" msgstr ""
#: api/v1/settings.py:41 #: api/v1/settings.py:42
msgid "Не удалось очистить данные узлов подсети" msgid "Не удалось очистить данные узлов подсети"
msgstr "" msgstr ""
#: api/v1/settings.py:44 api/v1/settings.py:69 api/v1/settings.py:94 #: api/v1/settings.py:45 api/v1/settings.py:70 api/v1/settings.py:95
#, python-brace-format #, python-brace-format
msgid "Ошибка очистки: {error}" msgid "Ошибка очистки: {error}"
msgstr "" msgstr ""
#: api/v1/settings.py:64 #: api/v1/settings.py:65
msgid "Данные точек доступа Wi-Fi успешно очищены" msgid "Данные точек доступа Wi-Fi успешно очищены"
msgstr "" msgstr ""
#: api/v1/settings.py:66 #: api/v1/settings.py:67
msgid "Не удалось очистить данные точек доступа Wi-Fi" msgid "Не удалось очистить данные точек доступа Wi-Fi"
msgstr "" msgstr ""
#: api/v1/settings.py:89 #: api/v1/settings.py:90
msgid "Все сетевые данные успешно очищены" msgid "Все сетевые данные успешно очищены"
msgstr "" msgstr ""
#: api/v1/settings.py:91 #: api/v1/settings.py:92
msgid "Не удалось очистить все сетевые данные" msgid "Не удалось очистить все сетевые данные"
msgstr "" msgstr ""
#: api/v1/settings.py:117 api/v1/settings.py:141 #: api/v1/settings.py:119
#, python-brace-format
msgid "Файл для подсети {subnet} не найден"
msgstr ""
#: api/v1/settings.py:143
msgid "Файл не найден" msgid "Файл не найден"
msgstr "" msgstr ""
#: api/v1/settings.py:166 #: api/v1/settings.py:168
#, python-brace-format #, python-brace-format
msgid "Язык '{locale}' не поддерживается." msgid "Язык '{locale}' не поддерживается."
msgstr "" msgstr ""
#: api/v1/settings.py:172 #: api/v1/settings.py:174
#, python-brace-format #, python-brace-format
msgid "Язык '{locale}' не поддерживается (нет файлов переводов)." msgid "Язык '{locale}' не поддерживается (нет файлов переводов)."
msgstr "" msgstr ""
#: api/v1/settings.py:175 #: api/v1/settings.py:177
#, python-brace-format #, python-brace-format
msgid "Язык успешно установлен: {locale}" msgid "Язык успешно установлен: {locale}"
msgstr "" msgstr ""
@ -420,24 +425,24 @@ msgstr ""
msgid "Ошибка очистки всех сетевых данных: {error}" msgid "Ошибка очистки всех сетевых данных: {error}"
msgstr "" msgstr ""
#: services/subnet_service.py:75 services/wifi_service.py:115 #: services/subnet_service.py:151 services/wifi_service.py:115
msgid "Неизвестный" msgid "Неизвестный"
msgstr "" msgstr ""
#: services/subnet_service.py:185 #: services/subnet_service.py:327
#, python-brace-format #, python-brace-format
msgid "Ошибка при сохранении устройств: {error}" msgid "Ошибка при сохранении устройств: {error}"
msgstr "" msgstr ""
#: services/subnet_service.py:268 #: services/subnet_service.py:441
msgid "Недопустимая подсеть по умолчанию" msgid "Недопустимая подсеть по умолчанию"
msgstr "" msgstr ""
#: services/subnet_service.py:288 #: services/subnet_service.py:461
msgid "В данной подсети не обнаружено устройств" msgid "В данной подсети не обнаружено устройств"
msgstr "" msgstr ""
#: services/subnet_service.py:345 #: services/subnet_service.py:518
#, python-brace-format #, python-brace-format
msgid "Ошибка сканирования: {error}" msgid "Ошибка сканирования: {error}"
msgstr "" msgstr ""

View file

@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2025-07-16 13:15+0500\n" "POT-Creation-Date: 2025-07-16 13:39+0500\n"
"PO-Revision-Date: 2025-07-16 13:15+0500\n" "PO-Revision-Date: 2025-07-16 13:39+0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: ru\n" "Language: ru\n"
"Language-Team: ru <LL@li.org>\n" "Language-Team: ru <LL@li.org>\n"
@ -99,55 +99,60 @@ msgstr "Не удалось обновить положение контейне
msgid "Не удалось получить имя хоста" msgid "Не удалось получить имя хоста"
msgstr "Не удалось получить имя хоста" msgstr "Не удалось получить имя хоста"
#: api/v1/settings.py:37 #: api/v1/settings.py:38
#, python-brace-format #, python-brace-format
msgid "Данные узлов подсети {subnet} успешно очищены" msgid "Данные узлов подсети {subnet} успешно очищены"
msgstr "Данные узлов подсети {subnet} успешно очищены" msgstr "Данные узлов подсети {subnet} успешно очищены"
#: api/v1/settings.py:39 #: api/v1/settings.py:40
msgid "Данные всех подсетей успешно очищены" msgid "Данные всех подсетей успешно очищены"
msgstr "Данные всех подсетей успешно очищены" msgstr "Данные всех подсетей успешно очищены"
#: api/v1/settings.py:41 #: api/v1/settings.py:42
msgid "Не удалось очистить данные узлов подсети" msgid "Не удалось очистить данные узлов подсети"
msgstr "Не удалось очистить данные узлов подсети" msgstr "Не удалось очистить данные узлов подсети"
#: api/v1/settings.py:44 api/v1/settings.py:69 api/v1/settings.py:94 #: api/v1/settings.py:45 api/v1/settings.py:70 api/v1/settings.py:95
#, python-brace-format #, python-brace-format
msgid "Ошибка очистки: {error}" msgid "Ошибка очистки: {error}"
msgstr "Ошибка очистки: {error}" msgstr "Ошибка очистки: {error}"
#: api/v1/settings.py:64 #: api/v1/settings.py:65
msgid "Данные точек доступа Wi-Fi успешно очищены" msgid "Данные точек доступа Wi-Fi успешно очищены"
msgstr "Данные точек доступа Wi-Fi успешно очищены" msgstr "Данные точек доступа Wi-Fi успешно очищены"
#: api/v1/settings.py:66 #: api/v1/settings.py:67
msgid "Не удалось очистить данные точек доступа Wi-Fi" msgid "Не удалось очистить данные точек доступа Wi-Fi"
msgstr "Не удалось очистить данные точек доступа Wi-Fi" msgstr "Не удалось очистить данные точек доступа Wi-Fi"
#: api/v1/settings.py:89 #: api/v1/settings.py:90
msgid "Все сетевые данные успешно очищены" msgid "Все сетевые данные успешно очищены"
msgstr "Все сетевые данные успешно очищены" msgstr "Все сетевые данные успешно очищены"
#: api/v1/settings.py:91 #: api/v1/settings.py:92
msgid "Не удалось очистить все сетевые данные" msgid "Не удалось очистить все сетевые данные"
msgstr "Не удалось очистить все сетевые данные" msgstr "Не удалось очистить все сетевые данные"
#: api/v1/settings.py:117 api/v1/settings.py:141 #: api/v1/settings.py:119
#, python-brace-format
msgid "Файл для подсети {subnet} не найден"
msgstr "Файл для подсети {subnet} не найден"
#: api/v1/settings.py:143
msgid "Файл не найден" msgid "Файл не найден"
msgstr "Файл не найден" msgstr "Файл не найден"
#: api/v1/settings.py:166 #: api/v1/settings.py:168
#, python-brace-format #, python-brace-format
msgid "Язык '{locale}' не поддерживается." msgid "Язык '{locale}' не поддерживается."
msgstr "Язык '{locale}' не поддерживается." msgstr "Язык '{locale}' не поддерживается."
#: api/v1/settings.py:172 #: api/v1/settings.py:174
#, python-brace-format #, python-brace-format
msgid "Язык '{locale}' не поддерживается (нет файлов переводов)." msgid "Язык '{locale}' не поддерживается (нет файлов переводов)."
msgstr "Язык '{locale}' не поддерживается (нет файлов переводов)." msgstr "Язык '{locale}' не поддерживается (нет файлов переводов)."
#: api/v1/settings.py:175 #: api/v1/settings.py:177
#, python-brace-format #, python-brace-format
msgid "Язык успешно установлен: {locale}" msgid "Язык успешно установлен: {locale}"
msgstr "Язык успешно установлен: {locale}" msgstr "Язык успешно установлен: {locale}"
@ -426,24 +431,24 @@ msgstr "Ошибка очистки точек доступа Wi-Fi: {error}"
msgid "Ошибка очистки всех сетевых данных: {error}" msgid "Ошибка очистки всех сетевых данных: {error}"
msgstr "Ошибка очистки всех сетевых данных: {error}" msgstr "Ошибка очистки всех сетевых данных: {error}"
#: services/subnet_service.py:75 services/wifi_service.py:115 #: services/subnet_service.py:151 services/wifi_service.py:115
msgid "Неизвестный" msgid "Неизвестный"
msgstr "Неизвестный" msgstr "Неизвестный"
#: services/subnet_service.py:185 #: services/subnet_service.py:327
#, python-brace-format #, python-brace-format
msgid "Ошибка при сохранении устройств: {error}" msgid "Ошибка при сохранении устройств: {error}"
msgstr "Ошибка при сохранении устройств: {error}" msgstr "Ошибка при сохранении устройств: {error}"
#: services/subnet_service.py:268 #: services/subnet_service.py:441
msgid "Недопустимая подсеть по умолчанию" msgid "Недопустимая подсеть по умолчанию"
msgstr "Недопустимая подсеть по умолчанию" msgstr "Недопустимая подсеть по умолчанию"
#: services/subnet_service.py:288 #: services/subnet_service.py:461
msgid "В данной подсети не обнаружено устройств" msgid "В данной подсети не обнаружено устройств"
msgstr "В данной подсети не обнаружено устройств" msgstr "В данной подсети не обнаружено устройств"
#: services/subnet_service.py:345 #: services/subnet_service.py:518
#, python-brace-format #, python-brace-format
msgid "Ошибка сканирования: {error}" msgid "Ошибка сканирования: {error}"
msgstr "Ошибка сканирования: {error}" msgstr "Ошибка сканирования: {error}"