manager.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from copy import deepcopy
  2. from .config import Configuration
  3. from .setting import Setting
  4. from .source.base import Source
  5. __all__ = ("ConfigurationManager",)
  6. class ConfigurationManager(object):
  7. def __init__(self, name):
  8. self.name = name
  9. self.settings = []
  10. def add(self, setting):
  11. if isinstance(setting, Setting):
  12. self.settings.append(setting)
  13. else:
  14. raise TypeError("Can only add objects of type Setting")
  15. def retrieve(self, *sources):
  16. to_process = []
  17. for source in reversed(sources):
  18. if isinstance(source, Source):
  19. to_process.append(source)
  20. elif isinstance(source, type) and issubclass(source, Source):
  21. to_process.append(source())
  22. else:
  23. raise TypeError("All sources must be a Source")
  24. config = Configuration(settings=self.settings)
  25. for source in to_process:
  26. config = source.get_config(
  27. deepcopy(self.settings), manager=self, parent=config
  28. )
  29. config.validate()
  30. return config