gonets/SRV/services/settings_service.py

104 lines
4.5 KiB
Python
Raw Normal View History

import json
import logging
from typing import Optional
2025-11-19 15:03:02 +05:00
from utils.i18n import _load_translations
from babel.support import Translations
from pathlib import Path
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class SettingsService:
"""Сервис для управления настройками и очистки данных сети."""
2025-11-17 12:05:43 +05:00
def __init__(self, translations: Translations = None):
self.subnet_base_path = "storage/subnets"
self.wifi_file = "storage/wifi/wifi.json"
2025-11-19 15:03:02 +05:00
self.translations = translations or _load_translations("ru")
def clear_subnet(self, subnet: Optional[str] = None) -> bool:
"""Очищает данные узлов подсети в указанном файле или во всех файлах.
Args:
subnet (Optional[str]): Подсеть в формате CIDR (например, "10.1.1.0/24").
Если None, очищает все подсети.
Returns:
bool: True, если очистка успешна.
Raises:
Exception: Если произошла ошибка при записи в файл.
"""
try:
if subnet:
file_path = Path(self.subnet_base_path) / f"{subnet.replace('/', '_')}.json"
if file_path.exists():
with open(file_path, "w") as f:
json.dump([], f)
logger.info(f"Subnet nodes data cleared for {subnet}")
else:
logger.info(f"Subnet file not found for {subnet}, clearing considered successful")
return True
else:
for file_path in Path(self.subnet_base_path).glob("*.json"):
with open(file_path, "w") as f:
json.dump([], f)
logger.info(f"Cleared subnet data in {file_path}")
return True
except FileNotFoundError:
logger.info("No subnet files found, clearing considered successful")
return True
except Exception as e:
logger.error(f"Error clearing subnet nodes: {str(e)}")
raise Exception(self.translations.gettext("Ошибка очистки узлов подсети: {error}").format(error=str(e)))
def clear_wifi(self) -> bool:
"""Очищает данные точек доступа Wi-Fi в файле wifi.json.
Returns:
bool: True, если очистка успешна.
Raises:
Exception: Если произошла ошибка при записи в файл.
"""
try:
with open(self.wifi_file, "w") as f:
json.dump([], f)
logger.info("Wi-Fi access points data successfully cleared")
return True
except FileNotFoundError:
logger.info("Wi-Fi file not found, clearing considered successful")
return True
except Exception as e:
logger.error(f"Error clearing Wi-Fi access points: {str(e)}")
raise Exception(self.translations.gettext("Ошибка очистки точек доступа Wi-Fi: {error}").format(error=str(e)))
def clear_all_data(self) -> bool:
"""Очищает данные узлов всех подсетей и точек доступа Wi-Fi.
Returns:
bool: True, если очистка успешна.
Raises:
Exception: Если произошла ошибка при записи в один из файлов.
"""
try:
try:
for file_path in Path(self.subnet_base_path).glob("*.json"):
with open(file_path, "w") as f:
json.dump([], f)
logger.info(f"Cleared subnet data in {file_path}")
except FileNotFoundError:
logger.info("No subnet files found, clearing considered successful")
try:
with open(self.wifi_file, "w") as f:
json.dump([], f)
except FileNotFoundError:
logger.info("Wi-Fi file not found, clearing considered successful")
logger.info("All network data successfully cleared")
return True
except Exception as e:
logger.error(f"Error clearing all network data: {str(e)}")
2025-11-17 12:05:43 +05:00
raise Exception(self.translations.gettext("Ошибка очистки всех сетевых данных: {error}").format(error=str(e)))