exlab_wizard.api.routers.operations#

/operations router. Backend Spec §4.6.1, Frontend §9.5.

Lists all in-flight controller operations. The Frontend’s Operations panel (Frontend §9.5) renders one entry per session: id, state, started_at, equipment_id, project_short_id, run_label, optional plugin_name (when in INPUT_REQUIRED), and optional suspended_reason (the reason string from the PluginInputRequired payload).

The endpoint reads the in-memory SessionStore directly via the controller; non-terminal sessions are returned in chronological order so the panel is stable across refreshes.

Functions

build_operations_router()

Construct the /operations router.

Classes

OperationEntry(**data)

One row in the Operations panel.

OperationsResponse(**data)

GET /operations response.

class exlab_wizard.api.routers.operations.OperationEntry(**data)[source]#

Bases: BaseModel

One row in the Operations panel. Backend Spec §4.6.1, Frontend §9.5.

Parameters:

data (Any)

equipment_id: str | None#
id: str#
model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

plugin_name: str | None#
project_short_id: str | None#
run_label: str | None#
started_at: str#
state: str#
suspended_reason: str | None#
class exlab_wizard.api.routers.operations.OperationsResponse(**data)[source]#

Bases: BaseModel

GET /operations response.

Parameters:

data (Any)

model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

operations: list[OperationEntry]#
exlab_wizard.api.routers.operations.build_operations_router()[source]#

Construct the /operations router.

Return type:

APIRouter