1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import os, json
- from src.settings import settings
- class settings_manager (object):
- # Объект настроек
- __settings = None
- # Путь до файла настроек
- __filename = "settings.json"
- # Словарь со считанными данными
- __data = {}
- # Возвращаем существующий инстанс при вызове new() (singleton)
- def __new__(cls):
- if not hasattr(cls, "instance"):
- cls.instance = super(settings_manager, cls).__new__(cls)
- return cls.instance
- @property
- def data(self):
- return self.__data
-
- @property
- def settings(self):
- return self.__settings
-
- def __convert(self):
- """
- Заполнить объект настроек
- Raises:
- Exception: Невозможно создать экземпляр класса настроек
- """
- # Создаем инстанс settings, если он еще не создан
- if not self.__settings:
- self.__settings = settings()
- # Выбрасываем ошибку, если тип __settings не соответствует нужному
- if not isinstance(self.__settings, settings):
- raise Exception("Невозможно создать экземпляр класса настроек")
- # Переносим считанные значения в инстанс настроек
- for key in self.__data.keys():
- # Пропускаем, если у settings нет соответствующего свойства
- if not hasattr(self.__settings, key): continue
- setattr(self.__settings, key, self.__data[key])
- def open(self, filename):
- """
- Открыть файл с настройками
- Args:
- filename: Имя файла
- Raises:
- TypeError: Неверный тип аргумента
- ValueError: Неверная длина аргумента
- """
- # Проверяем, чтобы путь был строкой
- if not isinstance(filename, str):
- raise TypeError("Неверный тип аргумента")
-
- # Проверяем, чтобы путь не был пуст
- if len(filename) == 0:
- raise ValueError("Неверная длина аргумента")
-
- # Убираем leading/trailing пробелы
- self.__filename = filename.strip()
- return self.__open()
- def __open(self):
- """
- Открыть файл с настройками
- Raises:
- FileNotFoundError: Ошибка при открытии файла
- """
- settings_file = self.__filename
- # Проверяем, существует ли файл по данному пути
- if not os.path.exists(settings_file):
- raise FileNotFoundError("Невозможно загрузить файл настроек")
-
- # Открываем файл и парсим JSON
- with open(settings_file, "r", encoding="UTF-8") as read_file:
- self.__data = json.load(read_file)
-
- # Заполняем объект settings прочитанными значениями
- self.__convert()
- return True
|