ophyd-async 0.8.0a6__tar.gz → 0.9.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.copier-answers.yml +1 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.devcontainer/devcontainer.json +4 -4
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/CONTRIBUTING.md +1 -1
- ophyd_async-0.9.0a1/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +10 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/workflows/_test.yml +1 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/workflows/ci.yml +1 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.pre-commit-config.yaml +8 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/PKG-INFO +3 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/pyproject.toml +52 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/_version.py +2 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/__init__.py +2 -26
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_detector.py +9 -9
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_device.py +27 -8
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_protocol.py +0 -28
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_signal.py +38 -136
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_utils.py +11 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adaravis/_aravis_controller.py +8 -8
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adaravis/_aravis_io.py +4 -4
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adcore/_core_io.py +21 -21
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adcore/_core_logic.py +3 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adcore/_hdf_writer.py +6 -3
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adcore/_single_trigger.py +1 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adcore/_utils.py +35 -35
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adkinetix/_kinetix_controller.py +7 -7
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adkinetix/_kinetix_io.py +7 -7
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adpilatus/_pilatus.py +3 -3
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adpilatus/_pilatus_controller.py +4 -4
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adpilatus/_pilatus_io.py +5 -5
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adsimdetector/_sim_controller.py +2 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/advimba/_vimba_controller.py +14 -14
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/advimba/_vimba_io.py +23 -23
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/core/_p4p.py +19 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/core/_pvi_connector.py +4 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/core/_signal.py +9 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/core/_util.py +9 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/demo/_mover.py +2 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/demo/_sensor.py +2 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/eiger/_eiger_controller.py +4 -4
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/eiger/_eiger_io.py +3 -3
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/motor.py +8 -5
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/testing/_example_ioc.py +5 -3
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/testing/test_records.db +6 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/core.py +2 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/panda/_block.py +9 -9
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/panda/_control.py +2 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/panda/_hdf_panda.py +4 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/panda/_trigger.py +7 -7
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/plan_stubs/_fly.py +1 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/sim/demo/_sim_motor.py +34 -32
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/core/_tango_transport.py +1 -1
- ophyd_async-0.9.0a1/src/ophyd_async/testing/__init__.py +33 -0
- ophyd_async-0.9.0a1/src/ophyd_async/testing/_assert.py +128 -0
- {ophyd_async-0.8.0a6/src/ophyd_async/core → ophyd_async-0.9.0a1/src/ophyd_async/testing}/_mock_signal_utils.py +12 -8
- ophyd_async-0.9.0a1/src/ophyd_async/testing/_wait_for_pending.py +22 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async.egg-info/PKG-INFO +3 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async.egg-info/SOURCES.txt +4 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async.egg-info/requires.txt +1 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/system_tests/epics/eiger/test_eiger_system.py +1 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/conftest.py +26 -10
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_device.py +16 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_device_collector.py +1 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_device_save_loader.py +7 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_flyer.py +23 -28
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_mock_signal_backend.py +8 -5
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_observe.py +26 -7
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_readable.py +8 -8
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_signal.py +8 -6
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_soft_signal_backend.py +7 -7
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_subset_enum.py +6 -6
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_table.py +5 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/adaravis/test_aravis.py +3 -3
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/adcore/test_drivers.py +12 -11
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/adcore/test_scans.py +2 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/adcore/test_single_trigger.py +2 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/adcore/test_writers.py +1 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/adkinetix/test_kinetix.py +6 -6
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/adpilatus/test_pilatus.py +13 -13
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/adsimdetector/test_sim.py +8 -8
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/advimba/test_vimba.py +8 -8
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/conftest.py +1 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/demo/test_demo.py +11 -14
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/eiger/test_eiger_controller.py +1 -3
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/eiger/test_eiger_detector.py +3 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/eiger/test_odin_io.py +2 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/signal/test_signals.py +99 -38
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/test_motor.py +19 -21
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/fastcs/panda/test_hdf_panda.py +4 -11
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/fastcs/panda/test_panda_connect.py +4 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/fastcs/panda/test_panda_control.py +3 -3
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/fastcs/panda/test_trigger.py +3 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/fastcs/panda/test_writer.py +1 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/plan_stubs/test_fly.py +1 -1
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/sim/demo/test_sim_motor.py +41 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/sim/test_sim_detector.py +3 -5
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/sim/test_streaming_plan.py +3 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/tango/test_tango_signals.py +214 -355
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/tango/test_tango_transport.py +0 -2
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/test_data/test_yaml_save.yml +2 -0
- ophyd_async-0.8.0a6/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -8
- ophyd_async-0.8.0a6/.mailmap +0 -18
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.codecov.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.git-blame-ignore-revs +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/ISSUE_TEMPLATE/issue.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/actions/install_requirements/action.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/dependabot.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/pages/index.html +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/pages/make_switcher.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/workflows/_check.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/workflows/_dist.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/workflows/_docs.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/workflows/_pypi.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/workflows/_release.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/workflows/_tox.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.github/workflows/periodic.yml +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/.gitignore +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/Dockerfile +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/LICENSE +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/README.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/_api.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/_templates/custom-module-template.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/conf.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/examples/epics_demo.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/examples/foo_detector.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/examples/tango_demo.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/0003-ophyd-async-migration.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/0004-repository-structure.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/0005-respect-black-line-length.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/0006-procedural-device-definitions.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/0007-subpackage-structure.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/0008-signal-types.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/0009-procedural-vs-declarative-devices.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions/COPYME +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/decisions.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/design-goals.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/event-loop-choice.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations/flyscanning.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/explanations.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/genindex.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/how-to/choose-interfaces-for-devices.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/how-to/compound-devices.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/how-to/contribute.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/how-to/make-a-simple-device.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/how-to/make-a-standard-detector.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/how-to/use_set_and_wait_for_other_value.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/how-to/write-tests-for-devices.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/how-to.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/images/ophyd-async-logo.svg +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/images/ophyd-favicon.svg +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/images/set_and_wait_for_other_value.svg +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/index.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/reference.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/tutorials/installation.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/tutorials/using-existing-devices.rst +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/docs/tutorials.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/setup.cfg +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/__main__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_device_filler.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_device_save_loader.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_flyer.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_hdf_dataset.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_log.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_mock_signal_backend.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_providers.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_readable.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_signal_backend.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_soft_signal_backend.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_status.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/core/_table.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adaravis/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adaravis/_aravis.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adcore/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adkinetix/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adkinetix/_kinetix.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adpilatus/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adsimdetector/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/adsimdetector/_sim.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/advimba/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/advimba/_vimba.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/core/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/core/_aioca.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/core/_epics_connector.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/core/_epics_device.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/demo/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/demo/mover.db +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/demo/sensor.db +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/eiger/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/eiger/_eiger.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/eiger/_odin_io.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/signal.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/testing/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/testing/_utils.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/epics/testing/test_records_pva.db +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/odin/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/panda/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/panda/_table.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/panda/_utils.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/fastcs/panda/_writer.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/plan_stubs/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/plan_stubs/_ensure_connected.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/plan_stubs/_nd_attributes.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/py.typed +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/sim/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/sim/demo/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/sim/demo/_pattern_detector/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_writer.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/sim/testing/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/core/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/core/_base_device.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/core/_signal.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/core/_tango_readable.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/demo/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/demo/_counter.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/demo/_detector.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/demo/_mover.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/demo/_tango/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async/tango/demo/_tango/_servers.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async.egg-info/dependency_links.txt +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async.egg-info/entry_points.txt +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/src/ophyd_async.egg-info/top_level.txt +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/system_tests/epics/eiger/README.md +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/system_tests/epics/eiger/start_iocs_and_run_tests.sh +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_log.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_protocol.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_providers.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_status.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_utils.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/core/test_watchable_async_status.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/pvi/test_pvi.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/signal/test_common.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/epics/test_areadetector_subclass_naming.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/fastcs/panda/db/panda.db +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/fastcs/panda/test_panda_utils.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/fastcs/panda/test_seq_table.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/plan_stubs/test_ensure_connected.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/sim/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/sim/conftest.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/sim/demo/__init__.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/sim/test_pattern_generator.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/sim/test_sim_writer.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/tango/test_base_device.py +0 -0
- {ophyd_async-0.8.0a6 → ophyd_async-0.9.0a1}/tests/test_cli.py +0 -0
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"features": {
|
|
40
|
-
//
|
|
41
|
-
"ghcr.io/
|
|
42
|
-
"upgradePackages": false
|
|
43
|
-
}
|
|
40
|
+
// add in eternal history and other bash features
|
|
41
|
+
"ghcr.io/diamondlightsource/devcontainer-features/bash-config:1.0.0": {}
|
|
44
42
|
},
|
|
43
|
+
// Create the config folder for the bash-config feature
|
|
44
|
+
"initializeCommand": "mkdir -p ${localEnv:HOME}/.config/bash-config",
|
|
45
45
|
"runArgs": [
|
|
46
46
|
// Allow the container to access the host X11 display and EPICS CA
|
|
47
47
|
"--net=host",
|
|
@@ -24,4 +24,4 @@ It is recommended that developers use a [vscode devcontainer](https://code.visua
|
|
|
24
24
|
|
|
25
25
|
This project was created using the [Diamond Light Source Copier Template](https://github.com/DiamondLightSource/python-copier-template) for Python projects.
|
|
26
26
|
|
|
27
|
-
For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/2.
|
|
27
|
+
For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/2.6.0/how-to.html).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Fixes #ISSUE
|
|
2
|
+
|
|
3
|
+
### Instructions to reviewer on how to test:
|
|
4
|
+
1. Do thing x
|
|
5
|
+
2. Confirm thing y happens
|
|
6
|
+
|
|
7
|
+
### Checks for reviewer
|
|
8
|
+
- [ ] Would the PR title make sense to a user on a set of release notes
|
|
9
|
+
- [ ] If the change requires a bump in an IOC version, is that specified in a `##Changes` section in the body of the PR
|
|
10
|
+
- [ ] If the change requires a bump in the PandABlocks-ioc version, is the `ophyd_async.fastcs.panda._hdf_panda.MINIMUM_PANDA_IOC` variable updated to match
|
|
@@ -21,7 +21,7 @@ jobs:
|
|
|
21
21
|
strategy:
|
|
22
22
|
matrix:
|
|
23
23
|
runs-on: ["ubuntu-latest", "windows-latest"] # can add macos-latest
|
|
24
|
-
python-version: ["3.10","3.11"
|
|
24
|
+
python-version: ["3.10","3.11","3.12"]
|
|
25
25
|
include:
|
|
26
26
|
# Include one that runs in the dev environment
|
|
27
27
|
- runs-on: "ubuntu-latest"
|
|
@@ -22,3 +22,11 @@ repos:
|
|
|
22
22
|
entry: ruff format --force-exclude
|
|
23
23
|
types: [python]
|
|
24
24
|
require_serial: true
|
|
25
|
+
|
|
26
|
+
- id: import-contracts
|
|
27
|
+
name: Ensure import directionality
|
|
28
|
+
pass_filenames: false
|
|
29
|
+
language: system
|
|
30
|
+
entry: lint-imports
|
|
31
|
+
types: [python]
|
|
32
|
+
require_serial: false
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0a1
|
|
4
4
|
Summary: Asynchronous Bluesky hardware abstraction code, compatible with control systems like EPICS and Tango
|
|
5
5
|
Author-email: Tom Cobb <tom.cobb@diamond.ac.uk>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -37,6 +37,7 @@ Classifier: Development Status :: 3 - Alpha
|
|
|
37
37
|
Classifier: License :: OSI Approved :: BSD License
|
|
38
38
|
Classifier: Programming Language :: Python :: 3.10
|
|
39
39
|
Classifier: Programming Language :: Python :: 3.11
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
40
41
|
Requires-Python: >=3.10
|
|
41
42
|
Description-Content-Type: text/markdown
|
|
42
43
|
License-File: LICENSE
|
|
@@ -67,6 +68,7 @@ Requires-Dist: ophyd_async[tango]; extra == "dev"
|
|
|
67
68
|
Requires-Dist: inflection; extra == "dev"
|
|
68
69
|
Requires-Dist: ipython; extra == "dev"
|
|
69
70
|
Requires-Dist: ipywidgets; extra == "dev"
|
|
71
|
+
Requires-Dist: import-linter; extra == "dev"
|
|
70
72
|
Requires-Dist: matplotlib; extra == "dev"
|
|
71
73
|
Requires-Dist: myst-parser; extra == "dev"
|
|
72
74
|
Requires-Dist: numpydoc; extra == "dev"
|
|
@@ -9,6 +9,7 @@ classifiers = [
|
|
|
9
9
|
"License :: OSI Approved :: BSD License",
|
|
10
10
|
"Programming Language :: Python :: 3.10",
|
|
11
11
|
"Programming Language :: Python :: 3.11",
|
|
12
|
+
"Programming Language :: Python :: 3.12",
|
|
12
13
|
]
|
|
13
14
|
description = "Asynchronous Bluesky hardware abstraction code, compatible with control systems like EPICS and Tango"
|
|
14
15
|
dependencies = [
|
|
@@ -42,6 +43,7 @@ dev = [
|
|
|
42
43
|
"inflection",
|
|
43
44
|
"ipython",
|
|
44
45
|
"ipywidgets",
|
|
46
|
+
"import-linter",
|
|
45
47
|
"matplotlib",
|
|
46
48
|
"myst-parser",
|
|
47
49
|
"numpydoc",
|
|
@@ -164,3 +166,53 @@ lint.preview = true # so that preview mode PLC2701 is enabled
|
|
|
164
166
|
# See https://github.com/DiamondLightSource/python-copier-template/issues/154
|
|
165
167
|
# Remove this line to forbid private member access in tests
|
|
166
168
|
"tests/**/*" = ["SLF001"]
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
[tool.importlinter]
|
|
172
|
+
root_package = "ophyd_async"
|
|
173
|
+
|
|
174
|
+
[[tool.importlinter.contracts]]
|
|
175
|
+
name = "Core is independent"
|
|
176
|
+
type = "independence"
|
|
177
|
+
modules = "ophyd_async.core"
|
|
178
|
+
|
|
179
|
+
[[tool.importlinter.contracts]]
|
|
180
|
+
name = "Epics depends only on core"
|
|
181
|
+
type = "forbidden"
|
|
182
|
+
source_modules = "ophyd_async.epics"
|
|
183
|
+
forbidden_modules = [
|
|
184
|
+
"ophyd_async.fastcs",
|
|
185
|
+
"ophyd_async.plan_stubs",
|
|
186
|
+
"ophyd_async.sim",
|
|
187
|
+
"ophyd_async.tango",
|
|
188
|
+
]
|
|
189
|
+
|
|
190
|
+
[[tool.importlinter.contracts]]
|
|
191
|
+
name = "tango depends only on core"
|
|
192
|
+
type = "forbidden"
|
|
193
|
+
source_modules = "ophyd_async.tango"
|
|
194
|
+
forbidden_modules = [
|
|
195
|
+
"ophyd_async.epics",
|
|
196
|
+
"ophyd_async.fastcs",
|
|
197
|
+
"ophyd_async.plan_stubs",
|
|
198
|
+
"ophyd_async.sim",
|
|
199
|
+
]
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
[[tool.importlinter.contracts]]
|
|
203
|
+
name = "sim depends only on core"
|
|
204
|
+
type = "forbidden"
|
|
205
|
+
source_modules = "ophyd_async.sim"
|
|
206
|
+
forbidden_modules = [
|
|
207
|
+
"ophyd_async.epics",
|
|
208
|
+
"ophyd_async.fastcs",
|
|
209
|
+
"ophyd_async.plan_stubs",
|
|
210
|
+
"ophyd_async.tango",
|
|
211
|
+
]
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
[[tool.importlinter.contracts]]
|
|
215
|
+
name = "Fastcs depends only on core, epics, tango"
|
|
216
|
+
type = "forbidden"
|
|
217
|
+
source_modules = "ophyd_async.fastcs"
|
|
218
|
+
forbidden_modules = ["ophyd_async.plan_stubs", "ophyd_async.sim"]
|
|
@@ -21,16 +21,6 @@ from ._flyer import FlyerController, StandardFlyer
|
|
|
21
21
|
from ._hdf_dataset import HDFDataset, HDFFile
|
|
22
22
|
from ._log import config_ophyd_async_logging
|
|
23
23
|
from ._mock_signal_backend import MockSignalBackend
|
|
24
|
-
from ._mock_signal_utils import (
|
|
25
|
-
callback_on_mock_put,
|
|
26
|
-
get_mock,
|
|
27
|
-
get_mock_put,
|
|
28
|
-
mock_puts_blocked,
|
|
29
|
-
reset_mock_put_calls,
|
|
30
|
-
set_mock_put_proceeds,
|
|
31
|
-
set_mock_value,
|
|
32
|
-
set_mock_values,
|
|
33
|
-
)
|
|
34
24
|
from ._protocol import AsyncConfigurable, AsyncReadable, AsyncStageable
|
|
35
25
|
from ._providers import (
|
|
36
26
|
AutoIncrementFilenameProvider,
|
|
@@ -53,14 +43,11 @@ from ._readable import (
|
|
|
53
43
|
)
|
|
54
44
|
from ._signal import (
|
|
55
45
|
Signal,
|
|
46
|
+
SignalConnector,
|
|
56
47
|
SignalR,
|
|
57
48
|
SignalRW,
|
|
58
49
|
SignalW,
|
|
59
50
|
SignalX,
|
|
60
|
-
assert_configuration,
|
|
61
|
-
assert_emitted,
|
|
62
|
-
assert_reading,
|
|
63
|
-
assert_value,
|
|
64
51
|
observe_signals_value,
|
|
65
52
|
observe_value,
|
|
66
53
|
set_and_wait_for_other_value,
|
|
@@ -123,14 +110,6 @@ __all__ = [
|
|
|
123
110
|
"HDFFile",
|
|
124
111
|
"config_ophyd_async_logging",
|
|
125
112
|
"MockSignalBackend",
|
|
126
|
-
"callback_on_mock_put",
|
|
127
|
-
"get_mock",
|
|
128
|
-
"get_mock_put",
|
|
129
|
-
"mock_puts_blocked",
|
|
130
|
-
"reset_mock_put_calls",
|
|
131
|
-
"set_mock_put_proceeds",
|
|
132
|
-
"set_mock_value",
|
|
133
|
-
"set_mock_values",
|
|
134
113
|
"AsyncConfigurable",
|
|
135
114
|
"AsyncReadable",
|
|
136
115
|
"AsyncStageable",
|
|
@@ -150,14 +129,11 @@ __all__ = [
|
|
|
150
129
|
"StandardReadable",
|
|
151
130
|
"StandardReadableFormat",
|
|
152
131
|
"Signal",
|
|
132
|
+
"SignalConnector",
|
|
153
133
|
"SignalR",
|
|
154
134
|
"SignalRW",
|
|
155
135
|
"SignalW",
|
|
156
136
|
"SignalX",
|
|
157
|
-
"assert_configuration",
|
|
158
|
-
"assert_emitted",
|
|
159
|
-
"assert_reading",
|
|
160
|
-
"assert_value",
|
|
161
137
|
"observe_value",
|
|
162
138
|
"observe_signals_value",
|
|
163
139
|
"set_and_wait_for_value",
|
|
@@ -30,13 +30,13 @@ class DetectorTrigger(StrictEnum):
|
|
|
30
30
|
"""Type of mechanism for triggering a detector to take frames"""
|
|
31
31
|
|
|
32
32
|
#: Detector generates internal trigger for given rate
|
|
33
|
-
|
|
33
|
+
INTERNAL = "internal"
|
|
34
34
|
#: Expect a series of arbitrary length trigger signals
|
|
35
|
-
|
|
35
|
+
EDGE_TRIGGER = "edge_trigger"
|
|
36
36
|
#: Expect a series of constant width external gate signals
|
|
37
|
-
|
|
37
|
+
CONSTANT_GATE = "constant_gate"
|
|
38
38
|
#: Expect a series of variable width external gate signals
|
|
39
|
-
|
|
39
|
+
VARIABLE_GATE = "variable_gate"
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
class TriggerInfo(BaseModel):
|
|
@@ -53,7 +53,7 @@ class TriggerInfo(BaseModel):
|
|
|
53
53
|
#: - 3 times for final flat field images
|
|
54
54
|
number_of_triggers: NonNegativeInt | list[NonNegativeInt]
|
|
55
55
|
#: Sort of triggers that will be sent
|
|
56
|
-
trigger: DetectorTrigger = Field(default=DetectorTrigger.
|
|
56
|
+
trigger: DetectorTrigger = Field(default=DetectorTrigger.INTERNAL)
|
|
57
57
|
#: What is the minimum deadtime between triggers
|
|
58
58
|
deadtime: float | None = Field(default=None, ge=0)
|
|
59
59
|
#: What is the maximum high time of the triggers
|
|
@@ -265,14 +265,14 @@ class StandardDetector(
|
|
|
265
265
|
await self.prepare(
|
|
266
266
|
TriggerInfo(
|
|
267
267
|
number_of_triggers=1,
|
|
268
|
-
trigger=DetectorTrigger.
|
|
268
|
+
trigger=DetectorTrigger.INTERNAL,
|
|
269
269
|
deadtime=None,
|
|
270
270
|
livetime=None,
|
|
271
271
|
frame_timeout=None,
|
|
272
272
|
)
|
|
273
273
|
)
|
|
274
274
|
assert self._trigger_info
|
|
275
|
-
assert self._trigger_info.trigger is DetectorTrigger.
|
|
275
|
+
assert self._trigger_info.trigger is DetectorTrigger.INTERNAL
|
|
276
276
|
# Arm the detector and wait for it to finish.
|
|
277
277
|
indices_written = await self.writer.get_indices_written()
|
|
278
278
|
await self.controller.arm()
|
|
@@ -303,7 +303,7 @@ class StandardDetector(
|
|
|
303
303
|
Args:
|
|
304
304
|
value: TriggerInfo describing how to trigger the detector
|
|
305
305
|
"""
|
|
306
|
-
if value.trigger != DetectorTrigger.
|
|
306
|
+
if value.trigger != DetectorTrigger.INTERNAL:
|
|
307
307
|
assert (
|
|
308
308
|
value.deadtime
|
|
309
309
|
), "Deadtime must be supplied when in externally triggered mode"
|
|
@@ -323,7 +323,7 @@ class StandardDetector(
|
|
|
323
323
|
self._describe, _ = await asyncio.gather(
|
|
324
324
|
self.writer.open(value.multiplier), self.controller.prepare(value)
|
|
325
325
|
)
|
|
326
|
-
if value.trigger != DetectorTrigger.
|
|
326
|
+
if value.trigger != DetectorTrigger.INTERNAL:
|
|
327
327
|
await self.controller.arm()
|
|
328
328
|
self._fly_start = time.monotonic()
|
|
329
329
|
|
|
@@ -10,7 +10,6 @@ from typing import Any, TypeVar
|
|
|
10
10
|
from bluesky.protocols import HasName
|
|
11
11
|
from bluesky.run_engine import call_in_bluesky_event_loop, in_bluesky_event_loop
|
|
12
12
|
|
|
13
|
-
from ._protocol import Connectable
|
|
14
13
|
from ._utils import DEFAULT_TIMEOUT, LazyMock, NotConnected, wait_for_connection
|
|
15
14
|
|
|
16
15
|
|
|
@@ -61,7 +60,7 @@ class DeviceConnector:
|
|
|
61
60
|
await wait_for_connection(**coros)
|
|
62
61
|
|
|
63
62
|
|
|
64
|
-
class Device(HasName
|
|
63
|
+
class Device(HasName):
|
|
65
64
|
"""Common base class for all Ophyd Async Devices."""
|
|
66
65
|
|
|
67
66
|
_name: str = ""
|
|
@@ -71,13 +70,16 @@ class Device(HasName, Connectable):
|
|
|
71
70
|
_connect_task: asyncio.Task | None = None
|
|
72
71
|
# The mock if we have connected in mock mode
|
|
73
72
|
_mock: LazyMock | None = None
|
|
73
|
+
# The separator to use when making child names
|
|
74
|
+
_child_name_separator: str = "-"
|
|
74
75
|
|
|
75
76
|
def __init__(
|
|
76
77
|
self, name: str = "", connector: DeviceConnector | None = None
|
|
77
78
|
) -> None:
|
|
78
79
|
self._connector = connector or DeviceConnector()
|
|
79
80
|
self._connector.create_children_from_annotations(self)
|
|
80
|
-
|
|
81
|
+
if name:
|
|
82
|
+
self.set_name(name)
|
|
81
83
|
|
|
82
84
|
@property
|
|
83
85
|
def name(self) -> str:
|
|
@@ -97,21 +99,30 @@ class Device(HasName, Connectable):
|
|
|
97
99
|
getLogger("ophyd_async.devices"), {"ophyd_async_device_name": self.name}
|
|
98
100
|
)
|
|
99
101
|
|
|
100
|
-
def set_name(self, name: str):
|
|
102
|
+
def set_name(self, name: str, *, child_name_separator: str | None = None) -> None:
|
|
101
103
|
"""Set ``self.name=name`` and each ``self.child.name=name+"-child"``.
|
|
102
104
|
|
|
103
105
|
Parameters
|
|
104
106
|
----------
|
|
105
107
|
name:
|
|
106
108
|
New name to set
|
|
109
|
+
child_name_separator:
|
|
110
|
+
Use this as a separator instead of "-". Use "_" instead to make the same
|
|
111
|
+
names as the equivalent ophyd sync device.
|
|
107
112
|
"""
|
|
108
113
|
self._name = name
|
|
114
|
+
if child_name_separator:
|
|
115
|
+
self._child_name_separator = child_name_separator
|
|
109
116
|
# Ensure logger is recreated after a name change
|
|
110
117
|
if "log" in self.__dict__:
|
|
111
118
|
del self.log
|
|
112
|
-
for
|
|
113
|
-
child_name =
|
|
114
|
-
|
|
119
|
+
for attr_name, child in self.children():
|
|
120
|
+
child_name = (
|
|
121
|
+
f"{self.name}{self._child_name_separator}{attr_name}"
|
|
122
|
+
if self.name
|
|
123
|
+
else ""
|
|
124
|
+
)
|
|
125
|
+
child.set_name(child_name, child_name_separator=self._child_name_separator)
|
|
115
126
|
|
|
116
127
|
def __setattr__(self, name: str, value: Any) -> None:
|
|
117
128
|
# Bear in mind that this function is called *a lot*, so
|
|
@@ -147,6 +158,10 @@ class Device(HasName, Connectable):
|
|
|
147
158
|
timeout:
|
|
148
159
|
Time to wait before failing with a TimeoutError.
|
|
149
160
|
"""
|
|
161
|
+
assert hasattr(self, "_connector"), (
|
|
162
|
+
f"{self}: doesn't have attribute `_connector`,"
|
|
163
|
+
" did you call `super().__init__` in your `__init__` method?"
|
|
164
|
+
)
|
|
150
165
|
if mock:
|
|
151
166
|
# Always connect in mock mode serially
|
|
152
167
|
if isinstance(mock, LazyMock):
|
|
@@ -247,6 +262,8 @@ class DeviceCollector:
|
|
|
247
262
|
set_name:
|
|
248
263
|
If True, call ``device.set_name(variable_name)`` on all collected
|
|
249
264
|
Devices
|
|
265
|
+
child_name_separator:
|
|
266
|
+
Use this as a separator if we call ``set_name``.
|
|
250
267
|
connect:
|
|
251
268
|
If True, call ``device.connect(mock)`` in parallel on all
|
|
252
269
|
collected Devices
|
|
@@ -271,11 +288,13 @@ class DeviceCollector:
|
|
|
271
288
|
def __init__(
|
|
272
289
|
self,
|
|
273
290
|
set_name=True,
|
|
291
|
+
child_name_separator: str = "-",
|
|
274
292
|
connect=True,
|
|
275
293
|
mock=False,
|
|
276
294
|
timeout: float = 10.0,
|
|
277
295
|
):
|
|
278
296
|
self._set_name = set_name
|
|
297
|
+
self._child_name_separator = child_name_separator
|
|
279
298
|
self._connect = connect
|
|
280
299
|
self._mock = mock
|
|
281
300
|
self._timeout = timeout
|
|
@@ -311,7 +330,7 @@ class DeviceCollector:
|
|
|
311
330
|
for name, obj in self._objects_on_exit.items():
|
|
312
331
|
if name not in self._names_on_enter and isinstance(obj, Device):
|
|
313
332
|
if self._set_name and not obj.name:
|
|
314
|
-
obj.set_name(name)
|
|
333
|
+
obj.set_name(name, child_name_separator=self._child_name_separator)
|
|
315
334
|
if self._connect:
|
|
316
335
|
connect_coroutines[name] = obj.connect(
|
|
317
336
|
self._mock, timeout=self._timeout
|
|
@@ -13,38 +13,10 @@ from typing import (
|
|
|
13
13
|
from bluesky.protocols import HasName, Reading
|
|
14
14
|
from event_model import DataKey
|
|
15
15
|
|
|
16
|
-
from ._utils import DEFAULT_TIMEOUT
|
|
17
|
-
|
|
18
16
|
if TYPE_CHECKING:
|
|
19
|
-
from unittest.mock import Mock
|
|
20
|
-
|
|
21
17
|
from ._status import AsyncStatus
|
|
22
18
|
|
|
23
19
|
|
|
24
|
-
@runtime_checkable
|
|
25
|
-
class Connectable(Protocol):
|
|
26
|
-
@abstractmethod
|
|
27
|
-
async def connect(
|
|
28
|
-
self,
|
|
29
|
-
mock: bool | Mock = False,
|
|
30
|
-
timeout: float = DEFAULT_TIMEOUT,
|
|
31
|
-
force_reconnect: bool = False,
|
|
32
|
-
):
|
|
33
|
-
"""Connect self and all child Devices.
|
|
34
|
-
|
|
35
|
-
Contains a timeout that gets propagated to child.connect methods.
|
|
36
|
-
|
|
37
|
-
Parameters
|
|
38
|
-
----------
|
|
39
|
-
mock:
|
|
40
|
-
If True then use ``MockSignalBackend`` for all Signals
|
|
41
|
-
timeout:
|
|
42
|
-
Time to wait before failing with a TimeoutError.
|
|
43
|
-
force_reconnect:
|
|
44
|
-
Reconnect even if previous connect was successful.
|
|
45
|
-
"""
|
|
46
|
-
|
|
47
|
-
|
|
48
20
|
@runtime_checkable
|
|
49
21
|
class AsyncReadable(HasName, Protocol):
|
|
50
22
|
@abstractmethod
|