2025-06-23 15:19:56 +05:00
|
|
|
import json
|
|
|
|
|
import logging
|
2025-07-08 15:57:42 +05:00
|
|
|
from utils.i18n import get_translations, _
|
|
|
|
|
from babel.support import Translations
|
|
|
|
|
from fastapi import Depends
|
2025-06-23 15:19:56 +05:00
|
|
|
|
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
class SettingsService:
|
|
|
|
|
"""Сервис для управления настройками и очистки данных сети."""
|
|
|
|
|
|
2025-07-08 15:57:42 +05:00
|
|
|
def __init__(self, translations: Translations = Depends(get_translations("services"))):
|
2025-06-23 15:19:56 +05:00
|
|
|
self.subnet_file = "storage/devices/devices.json"
|
|
|
|
|
self.wifi_file = "storage/wifi/wifi.json"
|
2025-07-08 15:57:42 +05:00
|
|
|
self.translations = translations
|
2025-06-23 15:19:56 +05:00
|
|
|
|
|
|
|
|
def clear_subnet(self) -> bool:
|
|
|
|
|
"""Очищает данные узлов подсети в файле devices.json.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
bool: True, если очистка успешна.
|
|
|
|
|
|
|
|
|
|
Raises:
|
|
|
|
|
Exception: Если произошла ошибка при записи в файл.
|
|
|
|
|
"""
|
|
|
|
|
try:
|
|
|
|
|
with open(self.subnet_file, "w") as f:
|
|
|
|
|
json.dump([], f)
|
2025-07-08 15:57:42 +05:00
|
|
|
logger.info("Subnet nodes data successfully cleared")
|
2025-06-23 15:19:56 +05:00
|
|
|
return True
|
2025-07-04 13:48:38 +05:00
|
|
|
except FileNotFoundError:
|
2025-07-08 15:57:42 +05:00
|
|
|
logger.info("Devices file not found, clearing considered successful")
|
2025-07-04 13:48:38 +05:00
|
|
|
return True
|
2025-06-23 15:19:56 +05:00
|
|
|
except Exception as e:
|
2025-07-08 15:57:42 +05:00
|
|
|
logger.error(f"Error clearing subnet nodes: {str(e)}")
|
|
|
|
|
raise Exception(self.translations.gettext("Ошибка очистки узлов подсети: {error}").format(error=str(e)))
|
2025-06-23 15:19:56 +05:00
|
|
|
|
|
|
|
|
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)
|
2025-07-08 15:57:42 +05:00
|
|
|
logger.info("Wi-Fi access points data successfully cleared")
|
2025-06-23 15:19:56 +05:00
|
|
|
return True
|
2025-07-04 13:48:38 +05:00
|
|
|
except FileNotFoundError:
|
2025-07-08 15:57:42 +05:00
|
|
|
logger.info("Wi-Fi file not found, clearing considered successful")
|
2025-07-04 13:48:38 +05:00
|
|
|
return True
|
2025-06-23 15:19:56 +05:00
|
|
|
except Exception as e:
|
2025-07-08 15:57:42 +05:00
|
|
|
logger.error(f"Error clearing Wi-Fi access points: {str(e)}")
|
|
|
|
|
raise Exception(self.translations.gettext("Ошибка очистки точек доступа Wi-Fi: {error}").format(error=str(e)))
|
2025-06-23 15:19:56 +05:00
|
|
|
|
|
|
|
|
def clear_all_data(self) -> bool:
|
|
|
|
|
"""Очищает данные узлов подсети и точек доступа Wi-Fi в обоих файлах.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
bool: True, если очистка успешна.
|
|
|
|
|
|
|
|
|
|
Raises:
|
|
|
|
|
Exception: Если произошла ошибка при записи в один из файлов.
|
|
|
|
|
"""
|
|
|
|
|
try:
|
2025-07-04 13:48:38 +05:00
|
|
|
try:
|
|
|
|
|
with open(self.subnet_file, "w") as f:
|
|
|
|
|
json.dump([], f)
|
|
|
|
|
except FileNotFoundError:
|
2025-07-08 15:57:42 +05:00
|
|
|
logger.info("Devices file not found, clearing considered successful")
|
2025-07-04 13:48:38 +05:00
|
|
|
try:
|
|
|
|
|
with open(self.wifi_file, "w") as f:
|
|
|
|
|
json.dump([], f)
|
|
|
|
|
except FileNotFoundError:
|
2025-07-08 15:57:42 +05:00
|
|
|
logger.info("Wi-Fi file not found, clearing considered successful")
|
|
|
|
|
logger.info("All network data successfully cleared")
|
2025-06-23 15:19:56 +05:00
|
|
|
return True
|
|
|
|
|
except Exception as e:
|
2025-07-08 15:57:42 +05:00
|
|
|
logger.error(f"Error clearing all network data: {str(e)}")
|
|
|
|
|
raise Exception(self.translations.gettext("Ошибка очистки всех сетевых данных: {error}").format(error=str(e)))
|