TIMER and DEADLINE

Import: from stbass import TIMER, DEADLINE Also: from stbass.timer import TimerExpired

TIMER

Fires after a duration:

t = TIMER(seconds=5.0)
t = TIMER(seconds=0.5, name="agent_timeout")

| Parameter | Type | Description | |-----------|------|-------------| | seconds | float | Duration in seconds | | name | str \| None | Optional name (auto-generated if omitted) |

DEADLINE

Fires at a specific point in time:

from datetime import datetime, timedelta
 
target = datetime.now() + timedelta(minutes=5)
d = DEADLINE(target, name="hard_deadline")
print(d.remaining)  # timedelta until deadline

| Parameter | Type | Description | |-----------|------|-------------| | target | datetime | When to fire | | name | str \| None | Optional name |

| Property | Type | Description | |----------|------|-------------| | remaining | timedelta | Time remaining until deadline | | seconds | float | Remaining seconds (for ALT integration) |

Using Timers in ALT

result = await PRI_ALT(
    Guard(data_channel, handler=lambda v: v),
    Guard(TIMER(seconds=10.0), handler=lambda v: "timed_out"),
)

When a timer fires, the handler receives a TimerExpired value.

TimerExpired

Import: from stbass.timer import TimerExpired

Frozen dataclass produced when a timer or deadline fires.

| Field | Type | Description | |-------|------|-------------| | started_at | datetime | When the ALT began waiting | | deadline | datetime | When the timer/deadline was set to fire | | elapsed | timedelta | Actual elapsed time | | timer_name | str | Name of the timer | | last_checkpoint | Any \| None | Last checkpoint if applicable |