modobj.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import types
  2. from ..config import Configuration
  3. from .base import Source
  4. __all__ = ("ModuleSource", "ObjectSource")
  5. class ModuleSource(Source):
  6. def __init__(self, target):
  7. super(ModuleSource, self).__init__()
  8. if isinstance(target, types.ModuleType):
  9. self.target = target
  10. elif isinstance(target, basestring):
  11. self.target = __import__(target, globals(), locals(), [], -1)
  12. else:
  13. raise TypeError("target must be a Module or a String naming a Module")
  14. def get_config(self, settings, manager=None, parent=None):
  15. for setting in settings:
  16. if hasattr(self.target, setting.name):
  17. setting.value = getattr(self.target, setting.name)
  18. return Configuration(settings=settings, parent=parent)
  19. class ObjectSource(Source):
  20. def __init__(self, target):
  21. super(ObjectSource, self).__init__()
  22. if isinstance(target, (type, object)):
  23. self.target = target
  24. elif isinstance(target, basestring):
  25. parts = target.rsplit(".", 2)
  26. if len(parts) == 2:
  27. mod = parts[0]
  28. fromlist = [parts[1]]
  29. else:
  30. mod = parts[0]
  31. fromlist = []
  32. self.target = __import__(mod, globals(), locals(), fromlist, -1)
  33. else:
  34. raise TypeError("target must be an Object or a String naming an Object")
  35. def get_config(self, settings, manager=None, parent=None):
  36. for setting in settings:
  37. if hasattr(self.target, setting.name):
  38. setting.value = getattr(self.target, setting.name)
  39. return Configuration(settings=settings, parent=parent)