Source code for edri.dataclass.worker

from dataclasses import dataclass
from enum import Enum, auto
from math import isfinite


[docs] class WorkerState(Enum): PENDING = auto() STARTING = auto() RUNNING = auto() STOPPING = auto() TERMINATING = auto()
[docs] class WorkerOutcome(Enum): SUCCEEDED = auto() FAILED = auto() CANCELLED = auto() TIMED_OUT = auto()
[docs] class WorkerExit(Enum): RETURNED = auto() RAISED = auto() CANCELLED = auto() TERMINATED = auto() KILLED = auto() LOST = auto()
[docs] class WorkerStopReason(Enum): REQUESTED = auto() TIMEOUT = auto() MANAGER_SHUTDOWN = auto() CLIENT_DISCONNECT = auto() APPLICATION = auto()
[docs] class WorkerTimeout(Enum): QUEUE = auto() START = auto() RUN = auto() TOTAL = auto()
[docs] @dataclass(frozen=True, slots=True) class WorkerPolicy: queue_timeout: float | None = None start_timeout: float | None = None run_timeout: float | None = None total_timeout: float | None = None cancel_grace: float = 5.0 terminate_grace: float = 2.0 def __post_init__(self) -> None: for name in ( "queue_timeout", "start_timeout", "run_timeout", "total_timeout", "cancel_grace", "terminate_grace", ): value = getattr(self, name) if value is not None and (not isfinite(value) or value < 0): raise ValueError(f"{name} must be finite and greater than or equal to zero")
__all__ = [ "WorkerExit", "WorkerOutcome", "WorkerPolicy", "WorkerState", "WorkerStopReason", "WorkerTimeout", ]