| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- """Validation utilities."""
- from __future__ import annotations
- from dataclasses import dataclass, field
- from awesomeversion import AwesomeVersion
- from homeassistant.helpers.config_validation import url as url_validator
- import voluptuous as vol
- from ..const import LOCALE
- @dataclass
- class Validate:
- """Validate."""
- errors: list[str] = field(default_factory=list)
- @property
- def success(self) -> bool:
- """Return bool if the validation was a success."""
- return len(self.errors) == 0
- def _country_validator(values) -> list[str]:
- """Custom country validator."""
- countries = []
- if isinstance(values, str):
- countries.append(values.upper())
- elif isinstance(values, list):
- for value in values:
- countries.append(value.upper())
- else:
- raise vol.Invalid(f"Value '{values}' is not a string or list.", path=["country"])
- for country in countries:
- if country not in LOCALE:
- raise vol.Invalid(f"Value '{country}' is not in {LOCALE}.", path=["country"])
- return countries
- HACS_MANIFEST_JSON_SCHEMA = vol.Schema(
- {
- vol.Optional("content_in_root"): bool,
- vol.Optional("country"): _country_validator,
- vol.Optional("filename"): str,
- vol.Optional("hacs"): vol.Coerce(AwesomeVersion),
- vol.Optional("hide_default_branch"): bool,
- vol.Optional("homeassistant"): vol.Coerce(AwesomeVersion),
- vol.Optional("persistent_directory"): str,
- vol.Optional("render_readme"): bool,
- vol.Optional("zip_release"): bool,
- vol.Required("name"): str,
- },
- extra=vol.PREVENT_EXTRA,
- )
- INTEGRATION_MANIFEST_JSON_SCHEMA = vol.Schema(
- {
- vol.Required("codeowners"): list,
- vol.Required("documentation"): url_validator,
- vol.Required("domain"): str,
- vol.Required("issue_tracker"): url_validator,
- vol.Required("name"): str,
- vol.Required("version"): vol.Coerce(AwesomeVersion),
- },
- extra=vol.ALLOW_EXTRA,
- )
|