jsonfile.py 847 B

12345678910111213141516171819202122232425262728293031
  1. import codecs
  2. import json
  3. from .filebased import FileBasedSource
  4. __all__ = ("JsonFileSource",)
  5. class JsonFileSource(FileBasedSource):
  6. def __init__(self, *args, **kwargs):
  7. self.encoding = kwargs.pop("encoding", "utf-8")
  8. super(JsonFileSource, self).__init__(*args, **kwargs)
  9. def get_settings_from_file(self, file_path, settings, manager=None):
  10. content = codecs.open(file_path, "r", self.encoding).read().strip()
  11. if not content:
  12. return None
  13. content = json.loads(content)
  14. if not content:
  15. return None
  16. if not isinstance(content, dict):
  17. raise TypeError("JSON files must contain only objects")
  18. for setting in settings:
  19. if setting.name in content:
  20. setting.value = content[setting.name]
  21. return settings