configfile.py 978 B

123456789101112131415161718192021222324252627282930313233
  1. from configparser import ConfigParser
  2. from ..setting import ListSetting
  3. from ..util import csv_to_list
  4. from .filebased import FileBasedSource
  5. __all__ = ("ConfigFileSource",)
  6. class ConfigFileSource(FileBasedSource):
  7. def __init__(self, *args, **kwargs):
  8. self.section = kwargs.pop("section", None)
  9. super(ConfigFileSource, self).__init__(*args, **kwargs)
  10. def get_settings_from_file(self, file_path, settings, manager=None):
  11. section = self.section or manager.name.lower()
  12. parser = ConfigParser()
  13. parser.read(file_path)
  14. if not parser.has_section(section):
  15. return None
  16. for setting in settings:
  17. if parser.has_option(section, setting.name):
  18. opt = parser.get(section, setting.name)
  19. if isinstance(setting, ListSetting):
  20. setting.value = csv_to_list(opt)
  21. else:
  22. setting.value = opt
  23. return settings