70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
"""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,
|
|
)
|