Source code for pynenc.workflow.workflow_identity
from dataclasses import dataclass
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from pynenc.identifiers.invocation_id import InvocationId
from pynenc.identifiers.task_id import TaskId
[docs]
@dataclass(frozen=True)
class WorkflowIdentity:
"""
Immutable identity of a workflow execution.
Workflows provide a structured execution context for tasks, enabling complex orchestration
and dependency management. Each workflow has a unique identity captured by this class.
:param workflow_id: The unique identifier for the workflow (derived from the defining invocation)
:param workflow_type: The type of the workflow (derived from the defining task)
:param parent_workflow_id: The unique identifier for the parent workflow, if any
"""
workflow_id: "InvocationId"
workflow_type: "TaskId"
parent_workflow_id: "InvocationId | None" = None
@property
def is_subworkflow(self) -> bool:
"""Check if this workflow is a subworkflow."""
return self.parent_workflow_id is not None
[docs]
@classmethod
def new_workflow(
cls, invocation_id: "InvocationId", task_id: "TaskId"
) -> "WorkflowIdentity":
return cls(
workflow_id=invocation_id,
workflow_type=task_id,
)
[docs]
@classmethod
def new_subworkflow(
cls,
invocation_id: "InvocationId",
task_id: "TaskId",
parent_workflow_id: "InvocationId",
) -> "WorkflowIdentity":
return cls(
workflow_id=invocation_id,
workflow_type=task_id,
parent_workflow_id=parent_workflow_id,
)