79 lines
3.5 KiB
Python
79 lines
3.5 KiB
Python
#!/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()
|