hacsjson.py 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. from __future__ import annotations
  2. from voluptuous.error import Invalid
  3. from ..enums import RepositoryFile
  4. from ..repositories.base import HacsRepository
  5. from ..utils.validate import HACS_MANIFEST_JSON_SCHEMA
  6. from .base import ActionValidationBase, ValidationException
  7. async def async_setup_validator(repository: HacsRepository) -> Validator:
  8. """Set up this validator."""
  9. return Validator(repository=repository)
  10. class Validator(ActionValidationBase):
  11. """Validate the repository."""
  12. more_info = "https://hacs.xyz/docs/publish/include#check-hacs-manifest"
  13. async def async_validate(self):
  14. """Validate the repository."""
  15. if RepositoryFile.HACS_JSON not in [x.filename for x in self.repository.tree]:
  16. raise ValidationException(f"The repository has no '{RepositoryFile.HACS_JSON}' file")
  17. content = await self.repository.async_get_hacs_json(self.repository.ref)
  18. try:
  19. HACS_MANIFEST_JSON_SCHEMA(content)
  20. except Invalid as exception:
  21. raise ValidationException(exception) from exception