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 CasesRunner(Script):
"""Script for distinguishing cases."""
expression: str
cases: dict[str | int | float, Any]
def __get_script(self) -> Script:
# evaluate condition
value = eval(self.expression, {"now": datetime.now(timezone.utc)})
# check in cases
if value in self.cases:
return self.pyobs_model_validate(Script, self.cases[value])
elif "else" in self.cases:
return self.pyobs_model_validate(Script, self.cases["else"])
else:
raise ValueError("Invalid choice")
[docs]
async def can_run(self, data: TaskData | None) -> bool:
script = self.__get_script()
return await script.can_run(data)
[docs]
async def run(self, data: TaskData | None) -> None:
script = self.__get_script()
await script.run(data)
__all__ = ["CasesRunner"]