From d5f88b31649d8be46881a58e431f3f4715a1d5d8 Mon Sep 17 00:00:00 2001 From: Peter Holloway Date: Mon, 26 Jan 2026 12:06:28 +0000 Subject: [PATCH] Move numtracker from client package into utils The numtracker is not used by the client. --- src/blueapi/core/context.py | 2 +- src/blueapi/utils/__init__.py | 2 ++ src/blueapi/{client => utils}/numtracker.py | 0 tests/unit_tests/client/test_numtracker.py | 2 +- tests/unit_tests/service/test_interface.py | 6 +++--- 5 files changed, 7 insertions(+), 5 deletions(-) rename src/blueapi/{client => utils}/numtracker.py (100%) diff --git a/src/blueapi/core/context.py b/src/blueapi/core/context.py index c22a96d862..0d662d13a7 100644 --- a/src/blueapi/core/context.py +++ b/src/blueapi/core/context.py @@ -23,7 +23,6 @@ from pydantic_core import CoreSchema, core_schema from blueapi import utils -from blueapi.client.numtracker import NumtrackerClient from blueapi.config import ( ApplicationConfig, DeviceManagerSource, @@ -36,6 +35,7 @@ from blueapi.core.protocols import DeviceManager from blueapi.utils import ( BlueapiPlanModelConfig, + NumtrackerClient, is_function_sourced_from_module, load_module_all, ) diff --git a/src/blueapi/utils/__init__.py b/src/blueapi/utils/__init__.py index 38288853f6..4d17e58570 100644 --- a/src/blueapi/utils/__init__.py +++ b/src/blueapi/utils/__init__.py @@ -3,6 +3,7 @@ from .file_permissions import get_owner_gid, is_sgid_set from .invalid_config_error import InvalidConfigError from .modules import is_function_sourced_from_module, load_module_all +from .numtracker import NumtrackerClient from .serialization import serialize from .thread_exception import handle_all_exceptions @@ -14,6 +15,7 @@ "BlueapiModelConfig", "BlueapiPlanModelConfig", "InvalidConfigError", + "NumtrackerClient", "connect_devices", "is_sgid_set", "get_owner_gid", diff --git a/src/blueapi/client/numtracker.py b/src/blueapi/utils/numtracker.py similarity index 100% rename from src/blueapi/client/numtracker.py rename to src/blueapi/utils/numtracker.py diff --git a/tests/unit_tests/client/test_numtracker.py b/tests/unit_tests/client/test_numtracker.py index 067653a1fd..74d35fda0e 100644 --- a/tests/unit_tests/client/test_numtracker.py +++ b/tests/unit_tests/client/test_numtracker.py @@ -6,7 +6,7 @@ from requests import HTTPError from tests.conftest import NOT_CONFIGURED_INSTRUMENT -from blueapi.client.numtracker import ( +from blueapi.utils.numtracker import ( DirectoryPath, NumtrackerClient, NumtrackerScanMutationResponse, diff --git a/tests/unit_tests/service/test_interface.py b/tests/unit_tests/service/test_interface.py index e3cda0b5ae..da6f1a4d96 100644 --- a/tests/unit_tests/service/test_interface.py +++ b/tests/unit_tests/service/test_interface.py @@ -17,7 +17,6 @@ from pydantic import HttpUrl from stomp.connect import StompConnection11 as Connection -from blueapi.client.numtracker import NumtrackerClient from blueapi.config import ( ApplicationConfig, EnvironmentConfig, @@ -42,6 +41,7 @@ WorkerTask, ) from blueapi.utils.invalid_config_error import InvalidConfigError +from blueapi.utils.numtracker import NumtrackerClient from blueapi.utils.path_provider import StartDocumentPathProvider from blueapi.worker.event import TaskStatus, TaskStatusEnum, WorkerEvent, WorkerState from blueapi.worker.task import Task @@ -483,7 +483,7 @@ def test_configure_numtracker(): assert nt._url.unicode_string() == "https://numtracker-example.com/graphql" -@patch("blueapi.client.numtracker.requests.post") +@patch("blueapi.utils.numtracker.requests.post") def test_headers_are_cleared(mock_post): mock_response = Mock() mock_post.return_value = mock_response @@ -601,7 +601,7 @@ def test_setup_with_numtracker_raises_if_provider_is_defined_in_device_module(): clear_path_provider() -@patch("blueapi.client.numtracker.NumtrackerClient.create_scan") +@patch("blueapi.utils.numtracker.NumtrackerClient.create_scan") def test_numtracker_create_scan_called_with_arguments_from_metadata(mock_create_scan): conf = ApplicationConfig( numtracker=NumtrackerConfig(