from __future__ import annotations
from datetime import datetime, timezone
import logging
from typing import Any, TYPE_CHECKING
if TYPE_CHECKING:
from pyobs.robotic.task import TaskData
from pyobs.robotic.scripts import Script
log = logging.getLogger(__name__)
[docs]
class ConditionalRunner(Script):
"""Script for running an if condition."""
condition: str
true: dict[str, Any]
false: dict[str, Any] | None = None
def __get_script(self) -> Script | None:
# evaluate condition
ret = eval(self.condition, {"now": datetime.now(timezone.utc)})
# run scripts
if ret:
return self.pyobs_model_validate(Script, self.true)
elif self.false is not None:
return self.pyobs_model_validate(Script, self.false)
else:
return None
[docs]
async def can_run(self, data: TaskData | None) -> bool:
script = self.__get_script()
return True if script is None else await script.can_run(data)
[docs]
async def run(self, data: TaskData | None) -> None:
script = self.__get_script()
if script is not None:
await script.run(data)
__all__ = ["ConditionalRunner"]