The application has been refactored. Functions have been moved to separate libraries. Many different functions have been added. Performance is still poor
This commit is contained in:
78
src/filesystem/settings.py
Normal file
78
src/filesystem/settings.py
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user