environment.py 1001 B

123456789101112131415161718192021222324252627282930313233343536
  1. import os
  2. from ..config import Configuration
  3. from ..setting import ListSetting
  4. from ..util import csv_to_list
  5. from .base import Source
  6. __all__ = ("EnvironmentVariableSource",)
  7. class EnvironmentVariableSource(Source):
  8. def __init__(self, prefix=None):
  9. super(EnvironmentVariableSource, self).__init__()
  10. self.prefix = prefix
  11. def get_config(self, settings, manager=None, parent=None):
  12. if manager and not self.prefix:
  13. self.prefix = manager.name
  14. for setting in settings:
  15. self.get_setting(setting)
  16. return Configuration(settings=settings, parent=parent)
  17. def get_setting(self, setting):
  18. name = setting.name
  19. if self.prefix:
  20. name = "%s_%s" % (self.prefix, name)
  21. name = name.upper()
  22. if name in os.environ:
  23. if isinstance(setting, ListSetting):
  24. setting.value = csv_to_list(os.environ[name])
  25. else:
  26. setting.value = os.environ[name]