Skip to content

Commit 9e67e24

Browse files
committed
WIP returning results from plans
1 parent 8838efb commit 9e67e24

4 files changed

Lines changed: 12 additions & 4 deletions

File tree

‎src/blueapi/core/context.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class BlueskyContext:
120120
configuration: InitVar[ApplicationConfig | None] = None
121121

122122
run_engine: RunEngine = field(
123-
default_factory=lambda: RunEngine(context_managers=[])
123+
default_factory=lambda: RunEngine(context_managers=[], call_returns_result=True)
124124
)
125125
tiled_conf: TiledConfig | None = field(default=None, init=False, repr=False)
126126
numtracker: NumtrackerClient | None = field(default=None, init=False, repr=False)

‎src/blueapi/worker/event.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from collections.abc import Mapping
22
from enum import Enum
3+
from typing import Any
34

45
from bluesky.run_engine import RunEngineStateMachine
56
from pydantic import Field
@@ -109,6 +110,7 @@ class TaskStatus(BlueapiBaseModel):
109110
task_id: str
110111
task_complete: bool
111112
task_failed: bool
113+
result: Any = None
112114

113115

114116
class WorkerEvent(BlueapiBaseModel):

‎src/blueapi/worker/task.py‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ def do_task(self, ctx: BlueskyContext) -> None:
3838
func = ctx.plan_functions[self.name]
3939
prepared_params = self.prepare_params(ctx)
4040
ctx.run_engine.md.update(self.metadata)
41-
ctx.run_engine(func(**prepared_params))
41+
result = ctx.run_engine(func(**prepared_params))
42+
if isinstance(result, tuple):
43+
return None
44+
return result.plan_result
4245

4346

4447
def _lookup_params(ctx: BlueskyContext, task: Task) -> BaseModel:

‎src/blueapi/worker/task_worker.py‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class TrackableTask(BlueapiBaseModel):
6969
is_complete: bool = False
7070
is_pending: bool = True
7171
errors: list[str] = Field(default_factory=list)
72+
result: Any | None = None
7273

7374

7475
class TaskWorker:
@@ -423,11 +424,12 @@ def _cycle(self) -> None:
423424
next_task: TrackableTask | KillSignal = self._task_channel.get()
424425
if isinstance(next_task, TrackableTask):
425426

426-
def process_task():
427+
def process_task() -> Any:
427428
LOGGER.info(f"Got new task: {next_task}")
428429
self._current = next_task
429430
self._current.is_pending = False
430-
self._current.task.do_task(self._ctx)
431+
result = self._current.task.do_task(self._ctx)
432+
self._current.result = result
431433

432434
with plan_tag_filter_context(next_task.task.name, LOGGER):
433435
if self._current_task_otel_context is not None:
@@ -528,6 +530,7 @@ def _report_status(
528530
task_id=self._current.task_id,
529531
task_complete=self._current.is_complete,
530532
task_failed=bool(self._current.errors),
533+
result=self._current.result,
531534
)
532535
correlation_id = self._current.task_id
533536
add_span_attributes(

0 commit comments

Comments
 (0)