Add mode info attributes to script and automation (#37815)
Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
parent
ac0dbb17af
commit
7d77fa92c2
8 changed files with 53 additions and 80 deletions
|
@ -69,6 +69,10 @@ DEFAULT_SCRIPT_MODE = SCRIPT_MODE_SINGLE
|
|||
CONF_MAX = "max"
|
||||
DEFAULT_MAX = 10
|
||||
|
||||
ATTR_CUR = "current"
|
||||
ATTR_MAX = "max"
|
||||
ATTR_MODE = "mode"
|
||||
|
||||
_LOG_EXCEPTION = logging.ERROR + 1
|
||||
_TIMEOUT_MSG = "Timeout reached, abort script."
|
||||
|
||||
|
@ -561,7 +565,7 @@ class Script:
|
|||
template.attach(hass, self.sequence)
|
||||
self.name = name
|
||||
self.change_listener = change_listener
|
||||
self._script_mode = script_mode
|
||||
self.script_mode = script_mode
|
||||
if logger:
|
||||
self._logger = logger
|
||||
else:
|
||||
|
@ -573,10 +577,9 @@ class Script:
|
|||
|
||||
self.last_action = None
|
||||
self.last_triggered: Optional[datetime] = None
|
||||
self.can_cancel = True
|
||||
|
||||
self._runs: List[_ScriptRun] = []
|
||||
self._max_runs = max_runs
|
||||
self.max_runs = max_runs
|
||||
if script_mode == SCRIPT_MODE_QUEUED:
|
||||
self._queue_lck = asyncio.Lock()
|
||||
self._config_cache: Dict[Set[Tuple], Callable[..., bool]] = {}
|
||||
|
@ -601,6 +604,16 @@ class Script:
|
|||
"""Return true if script is on."""
|
||||
return len(self._runs) > 0
|
||||
|
||||
@property
|
||||
def runs(self) -> int:
|
||||
"""Return the number of current runs."""
|
||||
return len(self._runs)
|
||||
|
||||
@property
|
||||
def supports_max(self) -> bool:
|
||||
"""Return true if the current mode support max."""
|
||||
return self.script_mode in (SCRIPT_MODE_PARALLEL, SCRIPT_MODE_QUEUED)
|
||||
|
||||
@property
|
||||
def referenced_devices(self):
|
||||
"""Return a set of referenced devices."""
|
||||
|
@ -668,17 +681,17 @@ class Script:
|
|||
) -> None:
|
||||
"""Run script."""
|
||||
if self.is_running:
|
||||
if self._script_mode == SCRIPT_MODE_SINGLE:
|
||||
if self.script_mode == SCRIPT_MODE_SINGLE:
|
||||
self._log("Already running", level=logging.WARNING)
|
||||
return
|
||||
if self._script_mode == SCRIPT_MODE_RESTART:
|
||||
if self.script_mode == SCRIPT_MODE_RESTART:
|
||||
self._log("Restarting")
|
||||
await self.async_stop(update_state=False)
|
||||
elif len(self._runs) == self._max_runs:
|
||||
elif len(self._runs) == self.max_runs:
|
||||
self._log("Maximum number of runs exceeded", level=logging.WARNING)
|
||||
return
|
||||
|
||||
if self._script_mode != SCRIPT_MODE_QUEUED:
|
||||
if self.script_mode != SCRIPT_MODE_QUEUED:
|
||||
cls = _ScriptRun
|
||||
else:
|
||||
cls = _QueuedScriptRun
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue