#!/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()