"""
The procedures module defines a representation of the
procedures listed in the activities of the SKA scheduling block.
"""
from abc import ABC
from typing import Literal, Union
from pydantic import Field
from typing_extensions import Annotated
from ska_oso_pdm._shared import PdmObject, PythonArguments, TerseStrEnum
__all__ = ["ProcedureUnion", "InlineScript", "FilesystemScript", "GitScript"]
class ScriptKind(TerseStrEnum):
INLINE = "inline"
FILESYSTEM = "filesystem"
GIT = "git"
class PythonProcedure(PdmObject, ABC):
"""
Represents a PythonProcedure to be run as an activity in an SKA scheduling block.
"""
function_args: dict[str, PythonArguments] = Field(default_factory=dict)
[docs]
class InlineScript(PythonProcedure):
"""
Represents an InlineScript to be ran as an activity in an SKA scheduling block.
"""
kind: Literal[ScriptKind.INLINE] = ScriptKind.INLINE
content: str
[docs]
class FilesystemScript(PythonProcedure):
"""
Represents an FilesystemScript to be run as an activity in an SKA scheduling block.
"""
kind: Literal[ScriptKind.FILESYSTEM] = ScriptKind.FILESYSTEM
path: str
[docs]
class GitScript(PythonProcedure):
"""
Represents an GitScript to be run as an activity in an SKA scheduling block.
"""
kind: Literal[ScriptKind.GIT] = ScriptKind.GIT
repo: str
path: str
branch: str | None = None
commit: str | None = None
ProcedureUnion = Annotated[
Union[InlineScript, FilesystemScript, GitScript], Field(discriminator="kind")
]