depends.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. from typing import TYPE_CHECKING
  2. if TYPE_CHECKING:
  3. from render import Render
  4. try:
  5. from .error import RenderError
  6. from .validations import valid_depend_condition_or_raise
  7. except ImportError:
  8. from error import RenderError
  9. from validations import valid_depend_condition_or_raise
  10. class Depends:
  11. def __init__(self, render_instance: "Render"):
  12. self._render_instance = render_instance
  13. self._dependencies: dict[str, str] = {}
  14. def add_dependency(self, name: str, condition: str):
  15. condition = valid_depend_condition_or_raise(condition)
  16. if name in self._dependencies.keys():
  17. raise RenderError(f"Dependency [{name}] already added")
  18. if name not in self._render_instance.container_names():
  19. raise RenderError(
  20. f"Dependency [{name}] not found in defined containers. "
  21. f"Available containers: [{', '.join(self._render_instance.container_names())}]"
  22. )
  23. self._dependencies[name] = condition
  24. def has_dependencies(self):
  25. return len(self._dependencies) > 0
  26. def render(self):
  27. return {d: {"condition": c} for d, c in self._dependencies.items()}