__init__.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. """Docker Compose module."""
  2. import logging
  3. from typing import Annotated
  4. from typer import Argument, Option
  5. from ...core.module import Module
  6. from ...core.module.base_commands import ValidationConfig, validate_templates
  7. from ...core.registry import registry
  8. from .validate import ComposeDockerValidator
  9. logger = logging.getLogger(__name__)
  10. class ComposeModule(Module):
  11. """Docker Compose module with extended validation."""
  12. name = "compose"
  13. description = "Manage Docker Compose configurations"
  14. kind_validator_class = ComposeDockerValidator
  15. def validate( # noqa: PLR0913
  16. self,
  17. template_id: Annotated[
  18. str | None,
  19. Argument(help="Template ID to validate"),
  20. ] = None,
  21. *,
  22. path: Annotated[
  23. str | None,
  24. Option("--path", help="Path to template directory for validation"),
  25. ] = None,
  26. all_templates: Annotated[
  27. bool,
  28. Option("--all", help="Validate all Compose templates"),
  29. ] = False,
  30. verbose: Annotated[bool, Option("--verbose", "-v", help="Show detailed validation information")] = False,
  31. semantic: Annotated[
  32. bool,
  33. Option(
  34. "--semantic",
  35. help="Enable dependency-matrix semantic validation",
  36. ),
  37. ] = False,
  38. kind: Annotated[
  39. bool,
  40. Option(
  41. "--kind",
  42. help="Enable dependency-matrix Docker Compose validation",
  43. ),
  44. ] = False,
  45. ) -> None:
  46. """Validate Compose templates."""
  47. kind_validator = self.kind_validator_class(verbose).validate_rendered_files if kind else None
  48. validate_templates(
  49. self,
  50. template_id,
  51. path,
  52. ValidationConfig(
  53. verbose=verbose,
  54. semantic=semantic,
  55. kind=kind,
  56. all_templates=all_templates,
  57. kind_validator=kind_validator,
  58. ),
  59. )
  60. registry.register(ComposeModule)