repair translations
This commit is contained in:
parent
98581132dd
commit
84adc5d941
18 changed files with 304 additions and 122 deletions
|
|
@ -20,7 +20,7 @@ import os
|
|||
import logging
|
||||
import netifaces
|
||||
from netaddr import IPNetwork
|
||||
from utils.i18n import get_translations, _
|
||||
from utils.i18n import _, _load_translations
|
||||
from babel.support import Translations
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
@ -54,7 +54,7 @@ class NetworkScanner:
|
|||
|
||||
Инициализирует интерфейс, информацию об IP-адресах и локальный MAC-адрес.
|
||||
"""
|
||||
self.translations = translations or get_translations()()
|
||||
self.translations = translations or _load_translations("ru")
|
||||
self.interface = None
|
||||
self.ip_info = []
|
||||
self.networks = []
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Optional
|
|||
import configparser
|
||||
import os
|
||||
import logging
|
||||
from utils.i18n import get_translations, _
|
||||
from utils.i18n import _, _load_translations
|
||||
from babel.support import Translations
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
|
@ -38,7 +38,7 @@ class AuthService:
|
|||
def __init__(self, translations: Optional[Translations] = None):
|
||||
self.storage = JsonStorage()
|
||||
self.session_storage = SessionStorage()
|
||||
self.translations = translations or get_translations()()
|
||||
self.translations = translations or _load_translations("ru")
|
||||
|
||||
def create_access_token(self, data: dict) -> str:
|
||||
"""Создаёт токен"""
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
import subprocess
|
||||
import logging
|
||||
from typing import Tuple, Optional
|
||||
from utils.i18n import get_translations, _
|
||||
from utils.i18n import _load_translations, _
|
||||
from babel.support import Translations
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||
|
|
@ -36,7 +36,7 @@ class WifiConnectionService:
|
|||
Автоматически определяет доступный Wi-Fi-интерфейс и сохраняет его имя.
|
||||
"""
|
||||
self.interface = self._get_wifi_interface()
|
||||
self.translations = translations or get_translations()()
|
||||
self.translations = translations or _load_translations("ru")
|
||||
|
||||
def _get_wifi_interface(self) -> str:
|
||||
"""Автоматически определяет Wi-Fi-интерфейс.
|
||||
|
|
|
|||
|
|
@ -21,7 +21,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 _load_translations
|
||||
from babel.support import Translations
|
||||
from fastapi import Depends
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ class IPService:
|
|||
self.bus = None
|
||||
self.bus = new_bus
|
||||
|
||||
async def check_ip_config(self, args: Dict[str, Any], translations: Translations = Depends(get_translations())) -> Dict[str, Any]:
|
||||
async def check_ip_config(self, args: Dict[str, Any], translations: Translations = None) -> Dict[str, Any]:
|
||||
"""Проверяет доступность IP-адреса перед его применением.
|
||||
|
||||
Выполняет ARP-сканирование сети для проверки, занят ли указанный IP-адрес.
|
||||
|
|
@ -73,6 +73,7 @@ class IPService:
|
|||
Raises:
|
||||
Exception: Если произошла ошибка при сканировании ARP.
|
||||
"""
|
||||
translations = translations or _load_translations("ru")
|
||||
self._reset_bus()
|
||||
clients = self.arp_scanner.scan_network()
|
||||
new_ip = args["ipv4_updates"]["ipv4.address-data"][0]["address"]
|
||||
|
|
@ -86,7 +87,7 @@ class IPService:
|
|||
"message": translations.gettext("Настройки сетевого профиля доступны для использования.")
|
||||
}
|
||||
|
||||
async def apply_ip_config(self, args: Dict[str, Any], translations: Translations = Depends(get_translations())) -> None:
|
||||
async def apply_ip_config(self, args: Dict[str, Any], translations: Translations = None) -> None:
|
||||
"""Применяет проверенные настройки IP к указанному соединению.
|
||||
|
||||
Перезапускает шину D-Bus, обновляет настройки соединения через NetworkManager,
|
||||
|
|
@ -105,6 +106,7 @@ class IPService:
|
|||
Note:
|
||||
Требуются права для изменения настроек через NetworkManager.
|
||||
"""
|
||||
translations = translations or _load_translations("ru")
|
||||
self._reset_bus()
|
||||
nm = NetworkManager()
|
||||
settings = NetworkManagerSettings()
|
||||
|
|
@ -140,4 +142,4 @@ class IPService:
|
|||
print(f"Reconnected to {args['connection_id']}")
|
||||
return
|
||||
|
||||
raise RuntimeError(translations.gettext("Устройство для интерфейса {interface} не найдено").format(interface=interface_name))
|
||||
raise RuntimeError(translations.gettext("Устройство для интерфейса {interface} не найдено").format(interface=interface_name))
|
||||
|
|
|
|||
|
|
@ -32,9 +32,20 @@ from models.network import (
|
|||
WiFiDevice,
|
||||
)
|
||||
import subprocess
|
||||
from utils.i18n import get_translations, _
|
||||
from utils.i18n import _, _load_translations
|
||||
from babel.support import Translations
|
||||
|
||||
def _extract_value(value):
|
||||
"""Приводит значения D-Bus к примитивам Python."""
|
||||
if isinstance(value, tuple) and len(value) == 2:
|
||||
value = value[1]
|
||||
if isinstance(value, bytes):
|
||||
try:
|
||||
return value.decode("utf-8")
|
||||
except Exception:
|
||||
return value.decode("utf-8", errors="ignore")
|
||||
return value
|
||||
|
||||
class NetworkService:
|
||||
"""Сервис для взаимодействия с NetworkManager через D-Bus.
|
||||
|
||||
|
|
@ -51,7 +62,7 @@ class NetworkService:
|
|||
self.system_bus = sd_bus_open_system()
|
||||
self.nm = NetworkManager(self.system_bus)
|
||||
self.nm_settings = NetworkManagerSettings(self.system_bus)
|
||||
self.translations = translations or get_translations()()
|
||||
self.translations = translations or _load_translations("ru")
|
||||
|
||||
async def get_ip_method(self, device: NetworkDeviceGeneric, ip_type: str) -> str:
|
||||
"""Получает метод IP (например, "auto", "manual") для указанного устройства.
|
||||
|
|
@ -152,7 +163,7 @@ class NetworkService:
|
|||
wifi_info = {
|
||||
"ssid": None,
|
||||
"bssid": None,
|
||||
"bitrate": await wifi_device.bitrate,
|
||||
"bitrate": _extract_value(await wifi_device.bitrate),
|
||||
"strength": None,
|
||||
"frequency": None,
|
||||
"mode": None,
|
||||
|
|
@ -160,11 +171,11 @@ class NetworkService:
|
|||
if active_ap != "/":
|
||||
ap = AccessPoint(active_ap, self.system_bus)
|
||||
wifi_info.update({
|
||||
"ssid": await ap.ssid,
|
||||
"bssid": await ap.hw_address,
|
||||
"strength": await ap.strength,
|
||||
"frequency": await ap.frequency,
|
||||
"mode": await ap.mode,
|
||||
"ssid": _extract_value(await ap.ssid),
|
||||
"bssid": _extract_value(await ap.hw_address),
|
||||
"strength": _extract_value(await ap.strength),
|
||||
"frequency": _extract_value(await ap.frequency),
|
||||
"mode": _extract_value(await ap.mode),
|
||||
})
|
||||
return wifi_info
|
||||
|
||||
|
|
@ -209,8 +220,8 @@ class NetworkService:
|
|||
"device_mtu": str(await generic_device.mtu),
|
||||
"ipv4": IPConfig(configurations=await self.get_ip_config(generic_device, "4")),
|
||||
"ipv6": IPConfig(configurations=await self.get_ip_config(generic_device, "6")),
|
||||
"x": initial_positions.get(interface_name, (100, 100))[0],
|
||||
"y": initial_positions.get(interface_name, (100, 100))[1],
|
||||
"container_x": initial_positions.get(interface_name, (100, 100))[0],
|
||||
"container_y": initial_positions.get(interface_name, (100, 100))[1],
|
||||
}
|
||||
|
||||
if device_type == "WIFI":
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import json
|
|||
import logging
|
||||
from typing import Optional
|
||||
|
||||
from utils.i18n import get_translations
|
||||
from utils.i18n import _load_translations
|
||||
from babel.support import Translations
|
||||
from pathlib import Path
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ class SettingsService:
|
|||
def __init__(self, translations: Translations = None):
|
||||
self.subnet_base_path = "storage/subnets"
|
||||
self.wifi_file = "storage/wifi/wifi.json"
|
||||
self.translations = translations or get_translations()()
|
||||
self.translations = translations or _load_translations("ru")
|
||||
|
||||
def clear_subnet(self, subnet: Optional[str] = None) -> bool:
|
||||
"""Очищает данные узлов подсети в указанном файле или во всех файлах.
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ logging.basicConfig(
|
|||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def get_subnet_service(translations: Translations = Depends(get_translations())):
|
||||
def get_subnet_service(translations: Translations = Depends(get_translations)):
|
||||
"""Фабричная функция для создания экземпляра SubnetService.
|
||||
|
||||
Использует зависимости FastAPI для получения объекта переводов и возвращает
|
||||
|
|
@ -724,4 +724,4 @@ class SubnetService:
|
|||
return True, ("success", {"mac": mac})
|
||||
except Exception as e:
|
||||
logger.error(f"Error deleting note for MAC {mac}: {str(e)}")
|
||||
return False, ("internal_error", {"error": str(e)})
|
||||
return False, ("internal_error", {"error": str(e)})
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import pywifi
|
|||
from models.wifi import WifiAccessPoint, WifiScanResult
|
||||
from pathlib import Path
|
||||
import json
|
||||
from utils.i18n import get_translations
|
||||
from utils.i18n import _load_translations
|
||||
from babel.support import Translations
|
||||
|
||||
# Настройка логирования
|
||||
|
|
@ -36,7 +36,7 @@ class WifiStorage:
|
|||
def __init__(self, storage_path: str = "storage/wifi/wifi.json", translations: Translations = None):
|
||||
self.storage_file = Path(storage_path)
|
||||
self.storage_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
self.translations = translations or get_translations()()
|
||||
self.translations = translations or _load_translations("ru")
|
||||
logger.info(f"Wi-Fi storage initialized at: {self.storage_file.absolute()}")
|
||||
|
||||
def load_notes(self) -> Dict[str, Optional[str]]:
|
||||
|
|
@ -88,10 +88,10 @@ class WifiService:
|
|||
self.mac_lookup = MacLookup()
|
||||
self.wifi = pywifi.PyWiFi()
|
||||
self.interface = self._get_wifi_interface()
|
||||
validated_translations = translations or get_translations()()
|
||||
validated_translations = translations or _load_translations("ru")
|
||||
if not hasattr(validated_translations, "gettext"):
|
||||
logger.warning("Translations object does not support gettext, using fallback")
|
||||
validated_translations = get_translations()()
|
||||
validated_translations = _load_translations("ru")
|
||||
self.translations = validated_translations
|
||||
self.storage = WifiStorage()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue