|
@@ -0,0 +1,70 @@
|
|
|
|
+import os, json
|
|
|
|
+from settings import settings
|
|
|
|
+
|
|
|
|
+class settings_manager (object):
|
|
|
|
+ __settings = None
|
|
|
|
+ __filename = "settings.json"
|
|
|
|
+ __data = {}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ 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: Невозможно создать экземпляр класса настроек
|
|
|
|
+ """
|
|
|
|
+ if not self.__settings:
|
|
|
|
+ self.__settings = settings()
|
|
|
|
+ if not isinstance(self.__settings, settings):
|
|
|
|
+ raise Exception("Невозможно создать экземпляр класса настроек")
|
|
|
|
+ for key in self.__data.keys():
|
|
|
|
+ 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("Неверная длина аргумента")
|
|
|
|
+
|
|
|
|
+ self.__filename = filename.strip()
|
|
|
|
+ return self.__open()
|
|
|
|
+
|
|
|
|
+ def __open(self):
|
|
|
|
+ """
|
|
|
|
+ Открыть файл с настройками
|
|
|
|
+ Raises:
|
|
|
|
+ FileNotFoundError: Ошибка при открытии файла
|
|
|
|
+ """
|
|
|
|
+
|
|
|
|
+ file_path = os.path.split(__file__)
|
|
|
|
+ settings_file = "%s/%s" % (file_path[0], self.__filename)
|
|
|
|
+
|
|
|
|
+ if not os.path.exists(settings_file):
|
|
|
|
+ raise FileNotFoundError("Невозможно загрузить файл настроек")
|
|
|
|
+
|
|
|
|
+ with open(settings_file, "r") as read_file:
|
|
|
|
+ self.__data = json.load(read_file)
|
|
|
|
+
|
|
|
|
+ return True
|