Единая интернационализация сервера без доменов
This commit is contained in:
parent
f0d5481dfe
commit
ec054bbaad
29 changed files with 1313 additions and 1412 deletions
|
|
@ -13,7 +13,7 @@ class NetworkScanner:
|
|||
вывода информации о клиентах.
|
||||
"""
|
||||
|
||||
def __init__(self, interface=None, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, interface=None, translations: Translations = Depends(get_translations())):
|
||||
"""Инициализация параметров сетевого сканера.
|
||||
|
||||
Args:
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login")
|
|||
class AuthService:
|
||||
"""Сервис для регистрации, авторизации и управления сессиями"""
|
||||
|
||||
def __init__(self, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, translations: Translations = Depends(get_translations())):
|
||||
self.storage = JsonStorage()
|
||||
self.session_storage = SessionStorage()
|
||||
self.translations = translations
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ class WifiConnectionService:
|
|||
Предоставляет методы для подключения, отключения и проверки статуса Wi-Fi соединений.
|
||||
"""
|
||||
|
||||
def __init__(self, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, translations: Translations = Depends(get_translations())):
|
||||
"""Инициализирует сервис Wi-Fi.
|
||||
|
||||
Автоматически определяет доступный Wi-Fi-интерфейс и сохраняет его имя.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from sdbus_async.networkmanager import (
|
|||
import sdbus
|
||||
from sdbus_async.networkmanager.settings import ConnectionProfile
|
||||
from services.arp_service import NetworkScanner
|
||||
from utils.i18n import get_translations, _
|
||||
from utils.i18n import get_translations
|
||||
from babel.support import Translations
|
||||
from fastapi import Depends
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ class IPService:
|
|||
ARP-сканирования и применения настроек через NetworkManager.
|
||||
"""
|
||||
|
||||
def __init__(self, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self):
|
||||
"""Инициализирует сервис IP.
|
||||
|
||||
Создаёт объект ARP-сканера и устанавливает системную шину D-Bus как
|
||||
|
|
@ -28,7 +28,6 @@ class IPService:
|
|||
self.arp_scanner = NetworkScanner()
|
||||
self.bus = sdbus.sd_bus_open_system()
|
||||
sdbus.set_default_bus(self.bus)
|
||||
self.translations = translations
|
||||
|
||||
def _reset_bus(self):
|
||||
"""Перезапускает соединение с системной шиной D-Bus.
|
||||
|
|
@ -42,7 +41,7 @@ class IPService:
|
|||
self.bus = None
|
||||
self.bus = new_bus
|
||||
|
||||
async def check_ip_config(self, args: Dict[str, Any]) -> Dict[str, Any]:
|
||||
async def check_ip_config(self, args: Dict[str, Any], translations: Translations = Depends(get_translations())) -> Dict[str, Any]:
|
||||
"""Проверяет доступность IP-адреса перед его применением.
|
||||
|
||||
Выполняет ARP-сканирование сети для проверки, занят ли указанный IP-адрес.
|
||||
|
|
@ -51,6 +50,7 @@ class IPService:
|
|||
Args:
|
||||
args (Dict[str, Any]): Словарь с данными, включая "ipv4_updates"
|
||||
с полем "ipv4.address-data" для нового IP-адреса.
|
||||
translations (Translations): Объект переводов.
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Словарь с ключами:
|
||||
|
|
@ -66,14 +66,14 @@ class IPService:
|
|||
if any(client["ip"] == new_ip for client in clients):
|
||||
return {
|
||||
"available": False,
|
||||
"message": self.translations.gettext("IP-адрес {ip} уже занят.").format(ip=new_ip)
|
||||
"message": translations.gettext("IP-адрес {ip} уже занят.").format(ip=new_ip)
|
||||
}
|
||||
return {
|
||||
"available": True,
|
||||
"message": self.translations.gettext("Настройки сетевого профиля доступны для использования.")
|
||||
"message": translations.gettext("Настройки сетевого профиля доступны для использования.")
|
||||
}
|
||||
|
||||
async def apply_ip_config(self, args: Dict[str, Any]) -> None:
|
||||
async def apply_ip_config(self, args: Dict[str, Any], translations: Translations = Depends(get_translations())) -> None:
|
||||
"""Применяет проверенные настройки IP к указанному соединению.
|
||||
|
||||
Перезапускает шину D-Bus, обновляет настройки соединения через NetworkManager,
|
||||
|
|
@ -83,6 +83,7 @@ class IPService:
|
|||
args (Dict[str, Any]): Словарь с данными, включая:
|
||||
- "connection_id" (str): Идентификатор соединения.
|
||||
- "ipv4_updates" (Dict): Обновления настроек IPv4.
|
||||
translations (Translations): Объект переводов.
|
||||
|
||||
Raises:
|
||||
ValueError: Если соединение с указанным ID не найдено.
|
||||
|
|
@ -98,7 +99,7 @@ class IPService:
|
|||
args["connection_id"])
|
||||
|
||||
if not connection_paths:
|
||||
raise ValueError(self.translations.gettext("Подключение {connection_id} не найдено").format(connection_id=args["connection_id"]))
|
||||
raise ValueError(translations.gettext("Подключение {connection_id} не найдено").format(connection_id=args["connection_id"]))
|
||||
|
||||
connection = NetworkConnectionSettings(connection_paths[0])
|
||||
profile = await connection.get_profile()
|
||||
|
|
@ -126,4 +127,4 @@ class IPService:
|
|||
print(f"Reconnected to {args['connection_id']}")
|
||||
return
|
||||
|
||||
raise RuntimeError(self.translations.gettext("Устройство для интерфейса {interface} не найдено").format(interface=interface_name))
|
||||
raise RuntimeError(translations.gettext("Устройство для интерфейса {interface} не найдено").format(interface=interface_name))
|
||||
|
|
@ -31,7 +31,7 @@ class NetworkService:
|
|||
их конфигурациях IP, Wi-Fi и состояниях.
|
||||
"""
|
||||
|
||||
def __init__(self, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, translations: Translations = Depends(get_translations())):
|
||||
"""Инициализирует сервис NetworkManager.
|
||||
|
||||
Устанавливает системный D-Bus и создаёт объекты для взаимодействия с
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ logger = logging.getLogger(__name__)
|
|||
class SettingsService:
|
||||
"""Сервис для управления настройками и очистки данных сети."""
|
||||
|
||||
def __init__(self, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, translations: Translations = Depends(get_translations())):
|
||||
self.subnet_file = "storage/devices/devices.json"
|
||||
self.wifi_file = "storage/wifi/wifi.json"
|
||||
self.translations = translations
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
class NetworkScanner:
|
||||
"""Класс для сканирования подсети с использованием ARP-запросов."""
|
||||
def __init__(self, interface: str, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, interface: str, translations: Translations = Depends(get_translations())):
|
||||
self.interface = interface
|
||||
conf.iface = interface
|
||||
self.translations = translations
|
||||
|
|
@ -47,7 +47,7 @@ class NetworkScanner:
|
|||
|
||||
class PortScanner:
|
||||
"""Класс для сканирования открытых портов на устройствах."""
|
||||
def __init__(self, interface: str, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, interface: str, translations: Translations = Depends(get_translations())):
|
||||
self.interface = interface
|
||||
self.translations = translations
|
||||
|
||||
|
|
@ -56,7 +56,7 @@ class PortScanner:
|
|||
|
||||
class DeviceInfoCollector:
|
||||
"""Класс для сбора информации об устройствах, включая вендоров и хостнеймы."""
|
||||
def __init__(self, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, translations: Translations = Depends(get_translations())):
|
||||
self.mac_lookup = MacLookup()
|
||||
self.nbtscan_cache = {}
|
||||
self.nbtscan_results = {}
|
||||
|
|
@ -119,7 +119,7 @@ class DeviceInfoCollector:
|
|||
|
||||
class DeviceStorage:
|
||||
"""Класс для хранения и управления данными об устройствах."""
|
||||
def __init__(self, storage_path: str = "storage/devices/devices.json", translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, storage_path: str = "storage/devices/devices.json", translations: Translations = Depends(get_translations())):
|
||||
self.storage_file = Path(storage_path)
|
||||
self.storage_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
self.offline_timeout = timedelta(days=7)
|
||||
|
|
@ -180,7 +180,7 @@ class DeviceStorage:
|
|||
|
||||
class SubnetService:
|
||||
"""Сервис для сканирования подсетей и управления устройствами."""
|
||||
def __init__(self, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, translations: Translations = Depends(get_translations())):
|
||||
self.interface = self._get_default_interface()
|
||||
self.network_scanner = NetworkScanner(self.interface)
|
||||
self.port_scanner = PortScanner(self.interface)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
class WifiStorage:
|
||||
"""Класс для хранения данных о Wi-Fi сетях и их заметках по SSID."""
|
||||
def __init__(self, storage_path: str = "storage/wifi/wifi.json", translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, storage_path: str = "storage/wifi/wifi.json", translations: Translations = Depends(get_translations())):
|
||||
self.storage_file = Path(storage_path)
|
||||
self.storage_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
self.translations = translations
|
||||
|
|
@ -62,7 +62,7 @@ class WifiStorage:
|
|||
|
||||
class WifiService:
|
||||
"""Сервис для сканирования текущих Wi-Fi точек доступа."""
|
||||
def __init__(self, translations: Translations = Depends(get_translations("services"))):
|
||||
def __init__(self, translations: Translations = Depends(get_translations())):
|
||||
self.mac_lookup = MacLookup()
|
||||
self.wifi = pywifi.PyWiFi()
|
||||
self.interface = self._get_wifi_interface()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue