diff --git a/pyproject.toml b/pyproject.toml index 8e807c6c..adcb398f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,7 @@ dependencies = [ "dls-dodal>=2.2.0", "ophyd-async[sim]", "scanspec", + "blueapi", ] dynamic = ["version"] license.file = "LICENSE" @@ -52,7 +53,6 @@ dev = [ "matplotlib", "numpy", "pyepics", - "blueapi", ] [project.scripts] @@ -92,6 +92,10 @@ data_file = "/tmp/sm_bluesky.coverage" # Tests are run from installed location, map back to the src directory source = ["src", "**/site-packages/"] +[tool.coverage.report] +# Exclude blueapi client startup scripts from code coverage report +omit = ["*/sm_bluesky/scripts/clients/*"] + [tool.tox] skipsdist = true # envs to runs automatically with tox -p diff --git a/src/sm_bluesky/scripts/__init__.py b/src/sm_bluesky/scripts/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/sm_bluesky/scripts/clients/__init__.py b/src/sm_bluesky/scripts/clients/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/sm_bluesky/scripts/clients/blueapi_client.py b/src/sm_bluesky/scripts/clients/blueapi_client.py new file mode 100644 index 00000000..2c66c068 --- /dev/null +++ b/src/sm_bluesky/scripts/clients/blueapi_client.py @@ -0,0 +1,49 @@ +""" +Start this script by running: +$ python -i src/sm_bluesky/scripts/clients/blueapi_client.py +""" + +from os import environ + +from blueapi.client import BlueapiClient +from blueapi.config import ApplicationConfig, HttpUrl, RestConfig, StompConfig, TcpUrl +from blueapi.core.bluesky_types import DataEvent + +if __name__ == "__main__": + BEAMLINE = environ.get("BEAMLINE") + if BEAMLINE is None: + raise RuntimeError("BEAMLINE environment variable not set.") + + print(f"Starting BlueAPI client for {BEAMLINE}.") + bc = BlueapiClient.from_config( + ApplicationConfig( + api=RestConfig(url=HttpUrl(f"https://{BEAMLINE}-blueapi.diamond.ac.uk")), + stomp=StompConfig( + enabled=True, + url=TcpUrl(f"tcp://{BEAMLINE}-rabbitmq-daq.diamond.ac.uk:61613"), + ), + ) + ) + print('Created BlueapiClient "bc" object.') + print("Logging in...") + bc.login() + + def _feedback(evt): + match evt: + case DataEvent(name="start"): + print("Run started") + case DataEvent(name="stop", doc={"exit_status": status}): + print("Run complete: ", status) + case DataEvent(name="event", doc={"seq_num": point, "data": data}): + print(f" Point {point}: {data}") + + feedback_id = bc.add_callback(_feedback) + print("Installed feedback.") + + print("\nGetting devices and plans...") + devs = bc.devices + plans = bc.plans + print(devs) + print(plans) + + print("Please remember to configure the correct instrument session for bc.") diff --git a/uv.lock b/uv.lock index 2fbacf60..c8aa5183 100644 --- a/uv.lock +++ b/uv.lock @@ -5482,6 +5482,7 @@ wheels = [ name = "sm-bluesky" source = { editable = "." } dependencies = [ + { name = "blueapi" }, { name = "bluesky" }, { name = "dls-dodal" }, { name = "ophyd-async", extra = ["sim"] }, @@ -5490,7 +5491,6 @@ dependencies = [ [package.dev-dependencies] dev = [ - { name = "blueapi" }, { name = "chardet" }, { name = "copier" }, { name = "ipython", version = "9.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, @@ -5516,6 +5516,7 @@ dev = [ [package.metadata] requires-dist = [ + { name = "blueapi" }, { name = "bluesky" }, { name = "dls-dodal", specifier = ">=2.2.0" }, { name = "ophyd-async", extras = ["sim"] }, @@ -5524,7 +5525,6 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ - { name = "blueapi" }, { name = "chardet", specifier = "==7.4.3" }, { name = "copier" }, { name = "ipython" },