Files
ComConfigCopy/src/filesystem/settings.py

79 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import os
import logging
from typing import Dict, Any
class Settings:
"""Класс для работы с настройками приложения."""
def __init__(self):
self.settings_dir = "Settings"
self.settings_file = os.path.join(self.settings_dir, "settings.json")
self._settings = self._get_default_settings()
# Создаем директорию для настроек, если её нет
os.makedirs(self.settings_dir, exist_ok=True)
def _get_default_settings(self) -> Dict[str, Any]:
"""Возвращает настройки по умолчанию."""
return {
"port": None, # Порт для подключения
"baudrate": 9600, # Скорость передачи данных
"config_file": None, # Файл конфигурации
"login": None, # Логин для подключения
"password": None, # Пароль для подключения
"timeout": 10, # Таймаут подключения
"copy_mode": "line", # Режим копирования
"block_size": 15, # Размер блока команд
"prompt": ">", # Используется для определения приглашения
}
def load(self) -> None:
"""Загружает настройки из файла."""
if not os.path.exists(self.settings_file):
self.save()
return
try:
with open(self.settings_file, "r", encoding="utf-8") as f:
loaded_settings = json.load(f)
# Проверяем наличие всех необходимых параметров
default_settings = self._get_default_settings()
for key, value in default_settings.items():
if key not in loaded_settings:
loaded_settings[key] = value
self._settings = loaded_settings
self.save() # Сохраняем обновленные настройки
except Exception as e:
logging.error(f"Ошибка при загрузке настроек: {e}", exc_info=True)
self._settings = self._get_default_settings()
self.save()
def save(self) -> None:
"""Сохраняет настройки в файл."""
try:
with open(self.settings_file, "w", encoding="utf-8") as f:
json.dump(self._settings, f, indent=4, ensure_ascii=False)
logging.info("Настройки успешно сохранены")
except Exception as e:
logging.error(f"Ошибка при сохранении настроек: {e}", exc_info=True)
def get(self, key: str, default: Any = None) -> Any:
"""Возвращает значение настройки по ключу."""
return self._settings.get(key, default)
def set(self, key: str, value: Any) -> None:
"""Устанавливает значение настройки."""
self._settings[key] = value
def update(self, settings: Dict[str, Any]) -> None:
"""Обновляет несколько настроек одновременно."""
self._settings.update(settings)
self.save()