49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
|
from custom_components.hacs.share import SHARE, get_hacs
|
||
|
|
||
|
|
||
|
class ValidationException(Exception):
|
||
|
pass
|
||
|
|
||
|
|
||
|
class ValidationBase:
|
||
|
def __init__(self, repository) -> None:
|
||
|
self.repository = repository
|
||
|
self.hacs = get_hacs()
|
||
|
self.failed = False
|
||
|
self.logger = repository.logger
|
||
|
|
||
|
def __init_subclass__(cls, category="common", **kwargs) -> None:
|
||
|
"""Initialize a subclass, register if possible."""
|
||
|
super().__init_subclass__(**kwargs)
|
||
|
if SHARE["rules"].get(category) is None:
|
||
|
SHARE["rules"][category] = []
|
||
|
if cls not in SHARE["rules"][category]:
|
||
|
SHARE["rules"][category].append(cls)
|
||
|
|
||
|
@property
|
||
|
def action_only(self):
|
||
|
return False
|
||
|
|
||
|
async def _async_run_check(self):
|
||
|
"""DO NOT OVERRIDE THIS IN SUBCLASSES!"""
|
||
|
if self.hacs.system.action:
|
||
|
self.logger.info(f"Running check '{self.__class__.__name__}'")
|
||
|
try:
|
||
|
await self.hacs.hass.async_add_executor_job(self.check)
|
||
|
await self.async_check()
|
||
|
except ValidationException as exception:
|
||
|
self.failed = True
|
||
|
self.logger.error(exception)
|
||
|
|
||
|
def check(self):
|
||
|
pass
|
||
|
|
||
|
async def async_check(self):
|
||
|
pass
|
||
|
|
||
|
|
||
|
class ActionValidationBase(ValidationBase):
|
||
|
@property
|
||
|
def action_only(self):
|
||
|
return True
|