Единая интернационализация сервера без доменов
This commit is contained in:
parent
f0d5481dfe
commit
ec054bbaad
29 changed files with 1313 additions and 1412 deletions
|
|
@ -16,7 +16,7 @@ auth_service = AuthService()
|
|||
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login")
|
||||
|
||||
@router.post("/register", response_model=UserResponse)
|
||||
async def register(user: UserCreate, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def register(user: UserCreate, translations: Translations = Depends(get_translations())):
|
||||
"""Регистрирует нового пользователя.
|
||||
|
||||
Создаёт нового пользователя на основе предоставленных данных и возвращает
|
||||
|
|
@ -44,7 +44,7 @@ async def register(user: UserCreate, translations: Translations = Depends(get_tr
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Не удалось зарегистрировать пользователя"))
|
||||
|
||||
@router.post("/login", response_model=Token)
|
||||
async def login(user: UserLogin, request: Request, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def login(user: UserLogin, request: Request, translations: Translations = Depends(get_translations())):
|
||||
"""Авторизует пользователя и создаёт сессию.
|
||||
|
||||
Проверяет учетные данные пользователя и возвращает токен и session_id для
|
||||
|
|
@ -75,7 +75,7 @@ async def login(user: UserLogin, request: Request, translations: Translations =
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Не удалось авторизовать пользователя"))
|
||||
|
||||
@router.get("/me")
|
||||
async def get_current_user(request: Request, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def get_current_user(request: Request, translations: Translations = Depends(get_translations())):
|
||||
"""Возвращает данные текущего пользователя и токен.
|
||||
|
||||
Проверяет активную сессию по client_id и возвращает информацию о пользователе
|
||||
|
|
@ -109,7 +109,7 @@ async def get_current_user(request: Request, translations: Translations = Depend
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Не удалось получить данные пользователя"))
|
||||
|
||||
@router.get("/logout")
|
||||
async def logout(request: Request, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def logout(request: Request, translations: Translations = Depends(get_translations())):
|
||||
"""Выход из системы, удаление сессии.
|
||||
|
||||
Удаляет активную сессию пользователя по client_id.
|
||||
|
|
@ -136,7 +136,7 @@ async def logout(request: Request, translations: Translations = Depends(get_tran
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Не удалось выйти из системы"))
|
||||
|
||||
@router.get("/check_json")
|
||||
async def check_users_file(translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def check_users_file(translations: Translations = Depends(get_translations())):
|
||||
"""Проверяет, существует ли файл users.json и содержит ли он пользователей.
|
||||
|
||||
Возвращает информацию о состоянии файла и наличии пользователей.
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
from typing import Dict, Any
|
||||
from fastapi import APIRouter, Body, HTTPException, Depends
|
||||
from services.ip_service import IPService
|
||||
from utils.i18n import get_translations, _
|
||||
from utils.i18n import get_translations
|
||||
from babel.support import Translations
|
||||
|
||||
router = APIRouter()
|
||||
ip_service = IPService()
|
||||
|
||||
@router.post("/check_ip")
|
||||
async def check_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def check_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations())):
|
||||
"""Проверяет доступность IP-адреса перед его применением.
|
||||
|
||||
Выполняет ARP-сканирование для проверки, занят ли указанный IP-адрес,
|
||||
|
|
@ -28,7 +28,7 @@ async def check_ip_config(data: Dict[str, Any] = Body(...), translations: Transl
|
|||
HTTPException: Если произошла внутренняя ошибка (status_code=500).
|
||||
"""
|
||||
try:
|
||||
result = await ip_service.check_ip_config(data)
|
||||
result = await ip_service.check_ip_config(data, translations)
|
||||
return result
|
||||
except Exception as e:
|
||||
raise HTTPException(
|
||||
|
|
@ -37,7 +37,7 @@ async def check_ip_config(data: Dict[str, Any] = Body(...), translations: Transl
|
|||
)
|
||||
|
||||
@router.post("/apply_ip")
|
||||
async def apply_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def apply_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations())):
|
||||
"""Применяет проверенные IP-настройки к указанному сетевому профилю.
|
||||
|
||||
Обновляет настройки соединения через NetworkManager, отключает и
|
||||
|
|
@ -58,7 +58,7 @@ async def apply_ip_config(data: Dict[str, Any] = Body(...), translations: Transl
|
|||
произошла внутренняя ошибка (status_code=500).
|
||||
"""
|
||||
try:
|
||||
await ip_service.apply_ip_config(data)
|
||||
await ip_service.apply_ip_config(data, translations)
|
||||
return {
|
||||
"success": True,
|
||||
"message": translations.gettext("Настройки сетевого профиля для {connection_id} применены").format(
|
||||
|
|
@ -74,7 +74,7 @@ async def apply_ip_config(data: Dict[str, Any] = Body(...), translations: Transl
|
|||
)
|
||||
|
||||
@router.post("/save_ip")
|
||||
async def save_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def save_ip_config(data: Dict[str, Any] = Body(...), translations: Translations = Depends(get_translations())):
|
||||
"""Применяет проверенные IP-настройки для отката сетевого профиля.
|
||||
|
||||
Используется для сохранения и отката настроек сетевого профиля к предыдущему
|
||||
|
|
@ -95,7 +95,7 @@ async def save_ip_config(data: Dict[str, Any] = Body(...), translations: Transla
|
|||
произошла внутренняя ошибка (status_code=500).
|
||||
"""
|
||||
try:
|
||||
await ip_service.apply_ip_config(data)
|
||||
await ip_service.apply_ip_config(data, translations)
|
||||
return {
|
||||
"success": True,
|
||||
"message": translations.gettext("Настройки сетевого профиля для {connection_id} применены").format(
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ class ContainerPositionManager:
|
|||
},
|
||||
}
|
||||
|
||||
def get_position_and_state(self, container_name: str, translations: Translations = Depends(get_translations("api_v1"))) -> Tuple[int, int, bool]:
|
||||
def get_position_and_state(self, container_name: str, translations: Translations = Depends(get_translations())) -> Tuple[int, int, bool]:
|
||||
"""Получает текущие координаты и состояние указанного контейнера.
|
||||
|
||||
Args:
|
||||
|
|
@ -79,7 +79,7 @@ class ContainerPositionManager:
|
|||
|
||||
container_manager = ContainerPositionManager()
|
||||
|
||||
async def get_network_data(translations: Translations = Depends(get_translations("api_v1"))) -> Dict[str, Dict]:
|
||||
async def get_network_data(translations: Translations = Depends(get_translations())) -> Dict[str, Dict]:
|
||||
"""Возвращает текущие сетевые данные в виде словаря.
|
||||
|
||||
Получает данные о сетевых интерфейсах, разделяет их на активные и неактивные,
|
||||
|
|
@ -150,7 +150,7 @@ def _split_interfaces(
|
|||
return activation_interfaces, deactivation_interfaces
|
||||
|
||||
@router.post("/update_container_position")
|
||||
async def update_container_position(data: Dict[str, Union[int, bool]] = Body(...), translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def update_container_position(data: Dict[str, Union[int, bool]] = Body(...), translations: Translations = Depends(get_translations())):
|
||||
"""Обновляет позицию и состояние контейнера.
|
||||
|
||||
Принимает данные о новом положении и состоянии контейнера и обновляет их
|
||||
|
|
@ -203,7 +203,7 @@ async def update_container_position(data: Dict[str, Union[int, bool]] = Body(...
|
|||
raise HTTPException(status_code=400, detail=translations.gettext("Не удалось обновить положение контейнера: {error}").format(error=str(e)))
|
||||
|
||||
@router.get("/get_hostname")
|
||||
async def get_hostname(translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def get_hostname(translations: Translations = Depends(get_translations())):
|
||||
"""Возвращает имя хоста системы.
|
||||
|
||||
Выполняет запрос к сервису для получения имени хоста.
|
||||
|
|
|
|||
|
|
@ -3,10 +3,9 @@ import logging
|
|||
from fastapi import APIRouter, HTTPException, Depends, Response, Request
|
||||
from starlette.responses import FileResponse
|
||||
from services.settings_service import SettingsService
|
||||
from utils.i18n import get_translations, _
|
||||
from utils.i18n import get_translations
|
||||
from babel.support import Translations
|
||||
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
@ -14,7 +13,7 @@ router = APIRouter()
|
|||
settings_service = SettingsService()
|
||||
|
||||
@router.post("/clear_subnet")
|
||||
def clear_subnet(translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def clear_subnet(translations: Translations = Depends(get_translations())):
|
||||
"""Очищает данные узлов подсети, сохранённые в devices.json.
|
||||
|
||||
Удаляет все записи об узлах подсети, оставляя файл пустым.
|
||||
|
|
@ -39,7 +38,7 @@ def clear_subnet(translations: Translations = Depends(get_translations("api_v1")
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка очистки: {error}").format(error=str(e)))
|
||||
|
||||
@router.post("/clear_wifi")
|
||||
def clear_wifi(translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def clear_wifi(translations: Translations = Depends(get_translations())):
|
||||
"""Очищает данные точек доступа Wi-Fi, сохранённые в wifi.json.
|
||||
|
||||
Удаляет все записи о точках доступа, оставляя файл пустым.
|
||||
|
|
@ -64,7 +63,7 @@ def clear_wifi(translations: Translations = Depends(get_translations("api_v1")))
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка очистки: {error}").format(error=str(e)))
|
||||
|
||||
@router.post("/clear_all_data")
|
||||
def clear_all_data(translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def clear_all_data(translations: Translations = Depends(get_translations())):
|
||||
"""Очищает данные узлов подсети и точек доступа Wi-Fi в обоих файлах.
|
||||
|
||||
Удаляет все записи из devices.json и wifi.json.
|
||||
|
|
@ -92,7 +91,7 @@ DEVICE_PATH = "storage/devices/devices.json"
|
|||
WIFI_PATH = "storage/wifi/wifi.json"
|
||||
|
||||
@router.get("/export_devices", response_class=FileResponse)
|
||||
async def export_devices(translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def export_devices(translations: Translations = Depends(get_translations())):
|
||||
"""
|
||||
Экспортирует файл с данными устройств в формате JSON.
|
||||
|
||||
|
|
@ -116,7 +115,7 @@ async def export_devices(translations: Translations = Depends(get_translations("
|
|||
)
|
||||
|
||||
@router.get("/export_wifi", response_class=FileResponse)
|
||||
async def export_wifi(translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def export_wifi(translations: Translations = Depends(get_translations())):
|
||||
"""
|
||||
Экспортирует файл с данными устройств в формате JSON.
|
||||
|
||||
|
|
@ -140,7 +139,7 @@ async def export_wifi(translations: Translations = Depends(get_translations("api
|
|||
)
|
||||
|
||||
@router.post("/set_language")
|
||||
def set_language(locale: str, response: Response, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def set_language(locale: str, response: Response, translations: Translations = Depends(get_translations())):
|
||||
"""
|
||||
Устанавливает куку locale для смены языка пользователя.
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
|
||||
@router.post("/devices", response_model=SubnetScanResult)
|
||||
def scan_subnet(request: SubnetScanRequest = Body(...), translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def scan_subnet(request: SubnetScanRequest = Body(...), translations: Translations = Depends(get_translations())):
|
||||
"""Сканирует локальную подсеть и возвращает данные об устройствах.
|
||||
|
||||
Выполняет сканирование указанной подсети для обнаружения активных устройств.
|
||||
|
|
@ -45,7 +45,7 @@ def scan_subnet(request: SubnetScanRequest = Body(...), translations: Translatio
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка сканирования: {error}").format(error=str(e)))
|
||||
|
||||
@router.get("/wifi", response_model=WifiScanResult)
|
||||
def scan_wifi(timeout: int = 30, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def scan_wifi(timeout: int = 30, translations: Translations = Depends(get_translations())):
|
||||
"""Сканирует Wi-Fi точки доступа и возвращает данные о них.
|
||||
|
||||
Выполняет сканирование доступных Wi-Fi сетей с указанным таймаутом.
|
||||
|
|
@ -68,7 +68,7 @@ def scan_wifi(timeout: int = 30, translations: Translations = Depends(get_transl
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка сканирования Wi-Fi: {error}").format(error=str(e)))
|
||||
|
||||
@router.post("/devices/{mac}/note")
|
||||
def add_note(mac: str, request: NoteRequest, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def add_note(mac: str, request: NoteRequest, translations: Translations = Depends(get_translations())):
|
||||
"""Добавляет заметку для устройства по MAC-адресу.
|
||||
|
||||
Привязывает заметку к устройству, идентифицируемому по MAC-адресу.
|
||||
|
|
@ -100,7 +100,7 @@ def add_note(mac: str, request: NoteRequest, translations: Translations = Depend
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка добавления заметки: {error}").format(error=str(e)))
|
||||
|
||||
@router.put("/devices/{mac}/note")
|
||||
def update_note(mac: str, request: NoteRequest, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def update_note(mac: str, request: NoteRequest, translations: Translations = Depends(get_translations())):
|
||||
"""Обновляет заметку для устройства по MAC-адресу.
|
||||
|
||||
Изменяет существующую заметку, привязанную к устройству.
|
||||
|
|
@ -132,7 +132,7 @@ def update_note(mac: str, request: NoteRequest, translations: Translations = Dep
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка обновления заметки: {error}").format(error=str(e)))
|
||||
|
||||
@router.delete("/devices/{mac}/note")
|
||||
def delete_note(mac: str, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def delete_note(mac: str, translations: Translations = Depends(get_translations())):
|
||||
"""Удаляет заметку для устройства по MAC-адресу.
|
||||
|
||||
Удаляет привязанную заметку для указанного устройства.
|
||||
|
|
@ -163,7 +163,7 @@ def delete_note(mac: str, translations: Translations = Depends(get_translations(
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка удаления заметки: {error}").format(error=str(e)))
|
||||
|
||||
@router.post("/wifi/{ssid}/note")
|
||||
def add_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def add_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(get_translations())):
|
||||
"""Добавляет заметку для сети Wi-Fi по SSID.
|
||||
|
||||
Привязывает заметку к Wi-Fi сети, идентифицируемой по SSID.
|
||||
|
|
@ -195,7 +195,7 @@ def add_wifi_note(ssid: str, request: NoteRequest, translations: Translations =
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка добавления заметки: {error}").format(error=str(e)))
|
||||
|
||||
@router.put("/wifi/{ssid}/note")
|
||||
def update_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def update_wifi_note(ssid: str, request: NoteRequest, translations: Translations = Depends(get_translations())):
|
||||
"""Обновляет заметку для сети Wi-Fi по SSID.
|
||||
|
||||
Изменяет существующую заметку, привязанную к Wi-Fi сети.
|
||||
|
|
@ -227,7 +227,7 @@ def update_wifi_note(ssid: str, request: NoteRequest, translations: Translations
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка обновления заметки: {error}").format(error=str(e)))
|
||||
|
||||
@router.delete("/wifi/{ssid}/note")
|
||||
def delete_wifi_note(ssid: str, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def delete_wifi_note(ssid: str, translations: Translations = Depends(get_translations())):
|
||||
"""Удаляет заметку для сети Wi-Fi по SSID.
|
||||
|
||||
Удаляет привязанную заметку для указанной Wi-Fi сети.
|
||||
|
|
@ -258,7 +258,7 @@ def delete_wifi_note(ssid: str, translations: Translations = Depends(get_transla
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка удаления заметки: {error}").format(error=str(e)))
|
||||
|
||||
@router.post("/wifi/connect")
|
||||
def connect_to_wifi(request: WifiConnectRequest, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def connect_to_wifi(request: WifiConnectRequest, translations: Translations = Depends(get_translations())):
|
||||
"""Подключается к Wi-Fi сети по SSID и паролю.
|
||||
|
||||
Выполняет подключение к указанной Wi-Fi сети с использованием предоставленных
|
||||
|
|
@ -286,7 +286,7 @@ def connect_to_wifi(request: WifiConnectRequest, translations: Translations = De
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка подключения к Wi-Fi: {error}").format(error=str(e)))
|
||||
|
||||
@router.post("/wifi/disconnect")
|
||||
def disconnect_from_wifi(request: WifiDisconnectRequest, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def disconnect_from_wifi(request: WifiDisconnectRequest, translations: Translations = Depends(get_translations())):
|
||||
"""Отключается от Wi-Fi сети по указанному SSID.
|
||||
|
||||
Выполняет отключение от указанной Wi-Fi сети.
|
||||
|
|
@ -313,7 +313,7 @@ def disconnect_from_wifi(request: WifiDisconnectRequest, translations: Translati
|
|||
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка отключения от Wi-Fi: {error}").format(error=str(e)))
|
||||
|
||||
@router.get("/wifi/status")
|
||||
def get_wifi_status(translations: Translations = Depends(get_translations("api_v1"))):
|
||||
def get_wifi_status(translations: Translations = Depends(get_translations())):
|
||||
"""Проверяет статус текущего подключения к Wi-Fi.
|
||||
|
||||
Возвращает информацию о текущем состоянии подключения и SSID, если подключение активно.
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ class WebSocketManager:
|
|||
manager = WebSocketManager()
|
||||
|
||||
@router.websocket("/api/v1")
|
||||
async def websocket_endpoint(websocket: WebSocket, translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def websocket_endpoint(websocket: WebSocket, translations: Translations = Depends(get_translations())):
|
||||
"""Обработчик WebSocket-соединения.
|
||||
|
||||
Управляет соединением клиента, принимает данные для обновления позиций
|
||||
|
|
@ -126,7 +126,7 @@ async def startup_event():
|
|||
"""
|
||||
asyncio.create_task(broadcast_data())
|
||||
|
||||
async def broadcast_data(translations: Translations = Depends(get_translations("api_v1"))):
|
||||
async def broadcast_data(translations: Translations = Depends(get_translations())):
|
||||
"""Таск для периодической трансляции сетевых данных.
|
||||
|
||||
Выполняет сканирование сети и отправляет данные всем подключённым клиентам
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue