expose.py 941 B

12345678910111213141516171819202122232425262728293031
  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_port_or_raise, valid_port_protocol_or_raise
  7. except ImportError:
  8. from error import RenderError
  9. from validations import valid_port_or_raise, valid_port_protocol_or_raise
  10. class Expose:
  11. def __init__(self, render_instance: "Render"):
  12. self._render_instance = render_instance
  13. self._ports: set[str] = set()
  14. def add_port(self, port: int, protocol: str = "tcp"):
  15. port = valid_port_or_raise(port)
  16. protocol = valid_port_protocol_or_raise(protocol)
  17. key = f"{port}/{protocol}"
  18. if key in self._ports:
  19. raise RenderError(f"Exposed port [{port}/{protocol}] already added")
  20. self._ports.add(key)
  21. def has_ports(self):
  22. return len(self._ports) > 0
  23. def render(self):
  24. return sorted(self._ports)