1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import os
- import json
- from src.settings.settings import settings
- from src.errors.instance_exception import instance_exception
- from src.validation.validator import validator
- from src.errors.file_exception import file_exception
- class settings_manager(object):
- # Объект настроек
- __settings = settings()
- # Путь до файла настроек
- __filename = "settings.json"
- # Словарь со считанными данными
- __data = {}
- # Валидатор
- __vtor = validator()
- # Возвращаем существующий инстанс при вызове 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 instance_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: Неверная длина аргумента
- """
- # Проверяем, чтобы путь был строкой
- self.__vtor.check_type(filename, str)
- # Проверяем, чтобы путь не был пуст
- self.__vtor.check_length_greater(filename, 0)
- # Убираем 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 file_exception("Файл не найден")
- # Открываем файл и парсим JSON
- with open(settings_file, "r", encoding="UTF-8") as read_file:
- self.__data = json.load(read_file)
- # Заполняем объект settings прочитанными значениями
- self.__convert()
- return True
|