Skip to content

Commit

Permalink
Rename Runner to WorkerDispatcher
Browse files Browse the repository at this point in the history
  • Loading branch information
joeshannon committed Jul 23, 2024
1 parent 25c26eb commit 3794a34
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 25 deletions.
38 changes: 19 additions & 19 deletions src/blueapi/service/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@
TasksListResponse,
WorkerTask,
)
from .runner import Runner
from .runner import WorkerDispatcher

REST_API_VERSION = "0.0.5"

RUNNER: Runner | None = None
RUNNER: WorkerDispatcher | None = None


def _runner() -> Runner:
def _runner() -> WorkerDispatcher:
"""Intended to be used only with FastAPI Depends"""
if RUNNER is None:
raise ValueError()
Expand All @@ -46,7 +46,7 @@ def _runner() -> Runner:

def setup_runner(config: ApplicationConfig | None = None, use_subprocess: bool = False):
global RUNNER
runner = Runner(config, use_subprocess)
runner = WorkerDispatcher(config, use_subprocess)
runner.start()

RUNNER = runner
Expand Down Expand Up @@ -87,7 +87,7 @@ async def on_key_error_404(_: Request, __: KeyError):

@app.get("/environment", response_model=EnvironmentResponse)
def get_environment(
runner: Runner = Depends(_runner),
runner: WorkerDispatcher = Depends(_runner),
) -> EnvironmentResponse:
"""Get the current state of the environment, i.e. initialization state."""
return runner.state

Check warning on line 93 in src/blueapi/service/main.py

View check run for this annotation

Codecov / codecov/patch

src/blueapi/service/main.py#L93

Added line #L93 was not covered by tests
Expand All @@ -96,11 +96,11 @@ def get_environment(
@app.delete("/environment", response_model=EnvironmentResponse)
async def delete_environment(
background_tasks: BackgroundTasks,
runner: Runner = Depends(_runner),
runner: WorkerDispatcher = Depends(_runner),
) -> EnvironmentResponse:
"""Delete the current environment, causing internal components to be reloaded."""

def restart_runner(runner: Runner):
def restart_runner(runner: WorkerDispatcher):
runner.stop()
runner.start()

Check warning on line 105 in src/blueapi/service/main.py

View check run for this annotation

Codecov / codecov/patch

src/blueapi/service/main.py#L103-L105

Added lines #L103 - L105 were not covered by tests

Expand All @@ -110,7 +110,7 @@ def restart_runner(runner: Runner):


@app.get("/plans", response_model=PlanResponse)
def get_plans(runner: Runner = Depends(_runner)):
def get_plans(runner: WorkerDispatcher = Depends(_runner)):
"""Retrieve information about all available plans."""
return PlanResponse(plans=runner.run(interface.get_plans))

Expand All @@ -119,13 +119,13 @@ def get_plans(runner: Runner = Depends(_runner)):
"/plans/{name}",
response_model=PlanModel,
)
def get_plan_by_name(name: str, runner: Runner = Depends(_runner)):
def get_plan_by_name(name: str, runner: WorkerDispatcher = Depends(_runner)):
"""Retrieve information about a plan by its (unique) name."""
return runner.run(interface.get_plan, [name])


@app.get("/devices", response_model=DeviceResponse)
def get_devices(runner: Runner = Depends(_runner)):
def get_devices(runner: WorkerDispatcher = Depends(_runner)):
"""Retrieve information about all available devices."""
return DeviceResponse(devices=runner.run(interface.get_devices))

Expand All @@ -134,7 +134,7 @@ def get_devices(runner: Runner = Depends(_runner)):
"/devices/{name}",
response_model=DeviceModel,
)
def get_device_by_name(name: str, runner: Runner = Depends(_runner)):
def get_device_by_name(name: str, runner: WorkerDispatcher = Depends(_runner)):
"""Retrieve information about a devices by its (unique) name."""
return runner.run(interface.get_device, [name])

Expand All @@ -151,7 +151,7 @@ def submit_task(
request: Request,
response: Response,
task: Task = Body(..., example=example_task),
runner: Runner = Depends(_runner),
runner: WorkerDispatcher = Depends(_runner),
):
"""Submit a task to the worker."""
try:
Expand All @@ -178,7 +178,7 @@ def submit_task(
@app.delete("/tasks/{task_id}", status_code=status.HTTP_200_OK)
def delete_submitted_task(
task_id: str,
runner: Runner = Depends(_runner),
runner: WorkerDispatcher = Depends(_runner),
) -> TaskResponse:
return TaskResponse(task_id=runner.run(interface.clear_task, [task_id]))

Expand All @@ -193,7 +193,7 @@ def validate_task_status(v: str) -> TaskStatusEnum:
@app.get("/tasks", response_model=TasksListResponse, status_code=status.HTTP_200_OK)
def get_tasks(
task_status: str | None = None,
runner: Runner = Depends(_runner),
runner: WorkerDispatcher = Depends(_runner),
) -> TasksListResponse:
"""
Retrieve tasks based on their status.
Expand Down Expand Up @@ -222,7 +222,7 @@ def get_tasks(
)
def set_active_task(
task: WorkerTask,
runner: Runner = Depends(_runner),
runner: WorkerDispatcher = Depends(_runner),
) -> WorkerTask:
"""Set a task to active status, the worker should begin it as soon as possible.
This will return an error response if the worker is not idle."""
Expand All @@ -241,7 +241,7 @@ def set_active_task(
)
def get_task(
task_id: str,
runner: Runner = Depends(_runner),
runner: WorkerDispatcher = Depends(_runner),
) -> TrackableTask:
"""Retrieve a task"""
task = runner.run(interface.get_task_by_id, [task_id])
Expand All @@ -251,7 +251,7 @@ def get_task(


@app.get("/worker/task")
def get_active_task(runner: Runner = Depends(_runner)) -> WorkerTask:
def get_active_task(runner: WorkerDispatcher = Depends(_runner)) -> WorkerTask:
active = runner.run(interface.get_active_task)
if active is not None:
return WorkerTask(task_id=active.task_id)
Expand All @@ -260,7 +260,7 @@ def get_active_task(runner: Runner = Depends(_runner)) -> WorkerTask:


@app.get("/worker/state")
def get_state(runner: Runner = Depends(_runner)) -> WorkerState:
def get_state(runner: WorkerDispatcher = Depends(_runner)) -> WorkerState:
"""Get the State of the Worker"""
return runner.run(interface.get_worker_state)

Expand Down Expand Up @@ -291,7 +291,7 @@ def get_state(runner: Runner = Depends(_runner)) -> WorkerState:
def set_state(
state_change_request: StateChangeRequest,
response: Response,
runner: Runner = Depends(_runner),
runner: WorkerDispatcher = Depends(_runner),
) -> WorkerState:
"""
Request that the worker is put into a particular state.
Expand Down
2 changes: 1 addition & 1 deletion src/blueapi/service/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def _init_worker():
signal.signal(signal.SIGINT, signal.SIG_IGN)


class Runner:
class WorkerDispatcher:
"""
Responsible for dispatching calls required by the REST app.
This is generally performed in a subprocess but can be run in-process for tests
Expand Down
10 changes: 5 additions & 5 deletions tests/service/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

from blueapi.service import interface
from blueapi.service.model import EnvironmentResponse
from blueapi.service.runner import Runner, RunnerNotStartedError
from blueapi.service.runner import RunnerNotStartedError, WorkerDispatcher


def test_initialize():
runner = Runner()
runner = WorkerDispatcher()
assert not runner.state.initialized
runner.start()
assert runner.state.initialized
Expand All @@ -19,7 +19,7 @@ def test_initialize():


def test_reload():
runner = Runner()
runner = WorkerDispatcher()
runner.start()
assert runner.state.initialized
runner.reload_context()
Expand All @@ -28,13 +28,13 @@ def test_reload():


def test_raises_if_used_before_started():
runner = Runner()
runner = WorkerDispatcher()
with pytest.raises(RunnerNotStartedError):
assert runner.run(interface.get_plans) is None


def test_error_on_runner_setup():
runner = Runner(use_subprocess=False)
runner = WorkerDispatcher(use_subprocess=False)
expected_state = EnvironmentResponse(
initialized=False,
error_message="Error configuring blueapi: Intentional start_worker exception",
Expand Down

0 comments on commit 3794a34

Please sign in to comment.