config.py 929 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import yaml
  2. class Object(dict):
  3. def __init__(self):
  4. super(Object, self).__init__()
  5. def __getattr__(self, key):
  6. return self.get(key)
  7. def __setattr__(self, key, value):
  8. if isinstance(value, dict):
  9. o = Object()
  10. o.set(value)
  11. self[key] = o
  12. else:
  13. self[key] = value
  14. def set(self, dictionary, clear=False):
  15. if clear:
  16. self.clear()
  17. for key, value in dictionary.items():
  18. self.__setattr__(key, value)
  19. class Config(Object):
  20. _instance = None
  21. def __new__(cls, *args, **kwargs):
  22. if Config._instance is None:
  23. Config._instance = super().__new__(cls)
  24. return Config._instance
  25. def load(self, filename):
  26. with open(filename, 'r', encoding='utf8') as stream:
  27. data = yaml.load(stream, Loader=yaml.FullLoader)
  28. self.set(data)