labels.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from typing import TYPE_CHECKING
  2. if TYPE_CHECKING:
  3. from render import Render
  4. try:
  5. from .error import RenderError
  6. from .formatter import escape_dollar
  7. except ImportError:
  8. from error import RenderError
  9. from formatter import escape_dollar
  10. class Labels:
  11. def __init__(self, render_instance: "Render"):
  12. self._render_instance = render_instance
  13. self._labels: dict[str, str] = {}
  14. def add_label(self, key: str, value: str):
  15. if not key:
  16. raise RenderError("Labels must have a key")
  17. if key.startswith("com.docker.compose"):
  18. raise RenderError(f"Label [{key}] cannot start with [com.docker.compose] as it is reserved")
  19. if key in self._labels.keys():
  20. raise RenderError(f"Label [{key}] already added")
  21. self._labels[key] = escape_dollar(str(value))
  22. def has_labels(self) -> bool:
  23. return bool(self._labels)
  24. def render(self) -> dict[str, str]:
  25. if not self.has_labels():
  26. return {}
  27. return {label: value for label, value in sorted(self._labels.items())}