settings_manager.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import os, json
  2. from settings import settings
  3. class settings_manager (object):
  4. __settings = None
  5. __filename = "settings.json"
  6. __data = {}
  7. def __new__(cls):
  8. if not hasattr(cls, "instance"):
  9. cls.instance = super(settings_manager, cls).__new__(cls)
  10. return cls.instance
  11. @property
  12. def data(self):
  13. return self.__data
  14. @property
  15. def settings(self):
  16. return self.__settings
  17. def convert(self):
  18. """
  19. Заполнить объект настроек
  20. Raises:
  21. Exception: Невозможно создать экземпляр класса настроек
  22. """
  23. if not self.__settings:
  24. self.__settings = settings()
  25. if not isinstance(self.__settings, settings):
  26. raise Exception("Невозможно создать экземпляр класса настроек")
  27. for key in self.__data.keys():
  28. setattr(self.__settings, key, self.__data[key])
  29. def open(self, filename):
  30. """
  31. Открыть файл с настройками
  32. Args:
  33. filename: Имя файла
  34. Raises:
  35. TypeError: Неверный тип аргумента
  36. ValueError: Неверная длина аргумента
  37. """
  38. if not isinstance(filename, str):
  39. raise TypeError("Неверный тип аргумента")
  40. if len(filename) == 0:
  41. raise ValueError("Неверная длина аргумента")
  42. self.__filename = filename.strip()
  43. return self.__open()
  44. def __open(self):
  45. """
  46. Открыть файл с настройками
  47. Raises:
  48. FileNotFoundError: Ошибка при открытии файла
  49. """
  50. file_path = os.path.split(__file__)
  51. settings_file = "%s/%s" % (file_path[0], self.__filename)
  52. if not os.path.exists(settings_file):
  53. raise FileNotFoundError("Невозможно загрузить файл настроек")
  54. with open(settings_file, "r") as read_file:
  55. self.__data = json.load(read_file)
  56. return True