ophyd-async 0.5.1__tar.gz → 0.6.0__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.5.1 → ophyd_async-0.6.0}/.copier-answers.yml +1 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.devcontainer/devcontainer.json +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.git-blame-ignore-revs +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/CONTRIBUTING.md +1 -1
- ophyd_async-0.6.0/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
- ophyd_async-0.6.0/.github/ISSUE_TEMPLATE/issue.md +13 -0
- ophyd_async-0.6.0/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +8 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/pages/index.html +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/pages/make_switcher.py +13 -12
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_docs.yml +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/ci.yml +2 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.gitignore +1 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.pre-commit-config.yaml +1 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/PKG-INFO +2 -1
- ophyd_async-0.6.0/docs/_api.rst +16 -0
- ophyd_async-0.6.0/docs/_templates/custom-module-template.rst +42 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/conf.py +22 -12
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/examples/foo_detector.py +2 -3
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0003-ophyd-async-migration.rst +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0005-respect-black-line-length.rst +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/design-goals.rst +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/event-loop-choice.rst +0 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/contribute.md +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/write-tests-for-devices.rst +2 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/reference.md +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/pyproject.toml +20 -13
- ophyd_async-0.6.0/src/ophyd_async/__init__.py +12 -0
- ophyd_async-0.6.0/src/ophyd_async/__main__.py +24 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/_version.py +2 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/__init__.py +15 -6
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_detector.py +72 -63
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_device.py +13 -15
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_device_save_loader.py +30 -19
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_flyer.py +6 -4
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_hdf_dataset.py +8 -9
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_log.py +3 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_mock_signal_backend.py +11 -9
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_mock_signal_utils.py +8 -5
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_protocol.py +7 -7
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_providers.py +17 -13
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_readable.py +30 -22
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_signal.py +53 -52
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_signal_backend.py +20 -7
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_soft_signal_backend.py +62 -32
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_status.py +18 -4
- ophyd_async-0.6.0/src/ophyd_async/core/_table.py +63 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_utils.py +24 -28
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adaravis/_aravis.py +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adaravis/_aravis_controller.py +17 -16
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adaravis/_aravis_io.py +2 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/__init__.py +2 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_core_io.py +2 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_core_logic.py +9 -7
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_hdf_writer.py +26 -21
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_single_trigger.py +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_utils.py +5 -6
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adkinetix/_kinetix.py +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adkinetix/_kinetix_controller.py +19 -14
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adpilatus/_pilatus.py +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adpilatus/_pilatus_controller.py +18 -16
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adsimdetector/_sim.py +7 -6
- ophyd_async-0.6.0/src/ophyd_async/epics/adsimdetector/_sim_controller.py +51 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/advimba/_vimba.py +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/advimba/_vimba_controller.py +21 -16
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/_mover.py +4 -5
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/sensor.db +0 -1
- ophyd_async-0.6.0/src/ophyd_async/epics/eiger/__init__.py +5 -0
- ophyd_async-0.6.0/src/ophyd_async/epics/eiger/_eiger.py +43 -0
- ophyd_async-0.6.0/src/ophyd_async/epics/eiger/_eiger_controller.py +66 -0
- ophyd_async-0.6.0/src/ophyd_async/epics/eiger/_eiger_io.py +42 -0
- ophyd_async-0.6.0/src/ophyd_async/epics/eiger/_odin_io.py +126 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/motor.py +9 -11
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/pvi/_pvi.py +30 -33
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_aioca.py +55 -25
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_common.py +3 -10
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_epics_transport.py +11 -8
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_p4p.py +79 -30
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_signal.py +6 -8
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/__init__.py +0 -6
- ophyd_async-0.6.0/src/ophyd_async/fastcs/panda/_control.py +37 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_hdf_panda.py +11 -4
- ophyd_async-0.6.0/src/ophyd_async/fastcs/panda/_table.py +143 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_trigger.py +1 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_utils.py +3 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_writer.py +28 -13
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/plan_stubs/_fly.py +16 -16
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/plan_stubs/_nd_attributes.py +12 -6
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py +3 -3
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py +24 -20
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_writer.py +9 -6
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py +21 -23
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_sim_motor.py +2 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/PKG-INFO +2 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/SOURCES.txt +17 -3
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/requires.txt +1 -0
- ophyd_async-0.6.0/system_tests/epics/eiger/README.md +6 -0
- ophyd_async-0.6.0/system_tests/epics/eiger/start_iocs_and_run_tests.sh +25 -0
- ophyd_async-0.6.0/system_tests/epics/eiger/test_eiger_system.py +92 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/conftest.py +80 -6
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_device_collector.py +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_device_save_loader.py +23 -6
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_flyer.py +8 -7
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_mock_signal_backend.py +20 -5
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_protocol.py +4 -6
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_providers.py +1 -1
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_readable.py +5 -5
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_signal.py +30 -3
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_soft_signal_backend.py +5 -4
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_status.py +18 -3
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_subset_enum.py +8 -8
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_watchable_async_status.py +2 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adaravis/test_aravis.py +21 -20
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adcore/test_scans.py +10 -10
- ophyd_async-0.6.0/tests/epics/adcore/test_single_trigger.py +56 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adcore/test_writers.py +16 -14
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adkinetix/test_kinetix.py +18 -20
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adpilatus/test_pilatus.py +11 -10
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adpilatus/test_pilatus_controller.py +4 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adsimdetector/test_adsim_controller.py +5 -3
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adsimdetector/test_sim.py +77 -70
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/advimba/test_vimba.py +22 -22
- ophyd_async-0.6.0/tests/epics/conftest.py +38 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/demo/test_demo.py +2 -3
- ophyd_async-0.6.0/tests/epics/eiger/test_eiger_controller.py +123 -0
- ophyd_async-0.6.0/tests/epics/eiger/test_eiger_detector.py +38 -0
- ophyd_async-0.6.0/tests/epics/eiger/test_odin_io.py +75 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/pvi/test_pvi.py +10 -12
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/signal/test_signals.py +44 -28
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/test_motor.py +14 -7
- ophyd_async-0.6.0/tests/fastcs/panda/test_hdf_panda.py +306 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/test_panda_connect.py +3 -3
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/test_panda_control.py +13 -3
- ophyd_async-0.6.0/tests/fastcs/panda/test_panda_utils.py +142 -0
- ophyd_async-0.6.0/tests/fastcs/panda/test_table.py +232 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/test_trigger.py +53 -8
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/test_writer.py +18 -5
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/plan_stubs/test_fly.py +8 -9
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/conftest.py +1 -5
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/test_sim_detector.py +8 -12
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/test_sim_writer.py +2 -2
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/test_streaming_plan.py +13 -3
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/test_data/test_yaml_save.yml +4 -0
- ophyd_async-0.5.1/docs/_templates/README +0 -1
- ophyd_async-0.5.1/docs/_templates/custom-class-template.rst +0 -40
- ophyd_async-0.5.1/docs/_templates/custom-module-template.rst +0 -72
- ophyd_async-0.5.1/docs/reference/api.rst +0 -29
- ophyd_async-0.5.1/src/ophyd_async/__init__.py +0 -3
- ophyd_async-0.5.1/src/ophyd_async/__main__.py +0 -16
- ophyd_async-0.5.1/src/ophyd_async/epics/adsimdetector/_sim_controller.py +0 -46
- ophyd_async-0.5.1/src/ophyd_async/fastcs/panda/_control.py +0 -38
- ophyd_async-0.5.1/src/ophyd_async/fastcs/panda/_table.py +0 -170
- ophyd_async-0.5.1/tests/epics/adcore/test_single_trigger.py +0 -50
- ophyd_async-0.5.1/tests/fastcs/panda/test_hdf_panda.py +0 -193
- ophyd_async-0.5.1/tests/fastcs/panda/test_panda_utils.py +0 -88
- ophyd_async-0.5.1/tests/fastcs/panda/test_table.py +0 -31
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.codecov.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/actions/install_requirements/action.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/dependabot.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_check.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_dist.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_pypi.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_release.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_test.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_tox.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/periodic.yml +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.mailmap +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/Dockerfile +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/LICENSE +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/README.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/examples/epics_demo.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0004-repository-structure.rst +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0006-procedural-device-definitions.rst +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0007-subpackage-structure.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/COPYME +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/flyscanning.rst +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/genindex.rst +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/choose-interfaces-for-devices.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/compound-devices.rst +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/make-a-simple-device.rst +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/make-a-standard-detector.rst +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/images/bluesky_ophyd_epics_devices_logo.svg +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/images/bluesky_ophyd_logo.svg +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/images/ophyd_favicon.svg +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/index.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/tutorials/installation.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/tutorials/using-existing-devices.rst +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/tutorials.md +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/setup.cfg +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adaravis/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adkinetix/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adkinetix/_kinetix_io.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adpilatus/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adpilatus/_pilatus_io.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adsimdetector/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/advimba/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/advimba/_vimba_io.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/_sensor.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/mover.db +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/pvi/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/odin/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_block.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/plan_stubs/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/plan_stubs/_ensure_connected.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/testing/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/tango/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/dependency_links.txt +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/entry_points.txt +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/top_level.txt +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_device.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_log.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_utils.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adcore/test_drivers.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/signal/test_common.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/signal/test_records.db +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/test_areadetector_subclass_naming.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/db/panda.db +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/plan_stubs/test_ensure_connected.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/demo/__init__.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/demo/test_sim_motor.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/test_pattern_generator.py +0 -0
- {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/test_cli.py +0 -0
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# Changes here will be overwritten by Copier
|
|
2
|
-
_commit: 2.
|
|
2
|
+
_commit: 2.3.0
|
|
3
3
|
_src_path: gh:DiamondLightSource/python-copier-template
|
|
4
4
|
author_email: tom.cobb@diamond.ac.uk
|
|
5
5
|
author_name: Tom Cobb
|
|
6
|
-
component_owner: ''
|
|
7
6
|
description: Asynchronous Bluesky hardware abstraction code, compatible with control
|
|
8
7
|
systems like EPICS and Tango
|
|
9
8
|
distribution_name: ophyd-async
|
|
@@ -52,4 +52,4 @@
|
|
|
52
52
|
"workspaceMount": "source=${localWorkspaceFolder}/..,target=/workspaces,type=bind",
|
|
53
53
|
// After the container is created, install the python project in editable form
|
|
54
54
|
"postCreateCommand": "pip install $([ -f dev-requirements.txt ] && echo '-c dev-requirements.txt') -e '.[dev]' && pre-commit install"
|
|
55
|
-
}
|
|
55
|
+
}
|
|
@@ -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.3.0/how-to.html).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: The template to use for reporting bugs and usability issues
|
|
4
|
+
title: " "
|
|
5
|
+
labels: 'bug'
|
|
6
|
+
assignees: ''
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Describe the bug, including a clear and concise description of the expected behavior, the actual behavior and the context in which you encountered it (ideally include details of your environment).
|
|
11
|
+
|
|
12
|
+
## Steps To Reproduce
|
|
13
|
+
Steps to reproduce the behavior:
|
|
14
|
+
1. Go to '...'
|
|
15
|
+
2. Click on '....'
|
|
16
|
+
3. Scroll down to '....'
|
|
17
|
+
4. See error
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## Acceptance Criteria
|
|
21
|
+
- Specific criteria that will be used to judge if the issue is fixed
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Issue
|
|
3
|
+
about: The standard template to use for feature requests, design discussions and tasks
|
|
4
|
+
title: " "
|
|
5
|
+
labels: ''
|
|
6
|
+
assignees: ''
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
A brief description of the issue, including specific stakeholders and the business case where appropriate
|
|
11
|
+
|
|
12
|
+
## Acceptance Criteria
|
|
13
|
+
- Specific criteria that will be used to judge if the issue is fixed
|
|
@@ -1,30 +1,32 @@
|
|
|
1
|
+
"""Make switcher.json to allow docs to switch between different versions."""
|
|
2
|
+
|
|
1
3
|
import json
|
|
2
4
|
import logging
|
|
3
5
|
from argparse import ArgumentParser
|
|
4
6
|
from pathlib import Path
|
|
5
7
|
from subprocess import CalledProcessError, check_output
|
|
6
|
-
from typing import List, Optional
|
|
7
8
|
|
|
8
9
|
|
|
9
|
-
def report_output(stdout: bytes, label: str) ->
|
|
10
|
+
def report_output(stdout: bytes, label: str) -> list[str]:
|
|
11
|
+
"""Print and return something received frm stdout."""
|
|
10
12
|
ret = stdout.decode().strip().split("\n")
|
|
11
13
|
print(f"{label}: {ret}")
|
|
12
14
|
return ret
|
|
13
15
|
|
|
14
16
|
|
|
15
|
-
def get_branch_contents(ref: str) ->
|
|
17
|
+
def get_branch_contents(ref: str) -> list[str]:
|
|
16
18
|
"""Get the list of directories in a branch."""
|
|
17
19
|
stdout = check_output(["git", "ls-tree", "-d", "--name-only", ref])
|
|
18
20
|
return report_output(stdout, "Branch contents")
|
|
19
21
|
|
|
20
22
|
|
|
21
|
-
def get_sorted_tags_list() ->
|
|
23
|
+
def get_sorted_tags_list() -> list[str]:
|
|
22
24
|
"""Get a list of sorted tags in descending order from the repository."""
|
|
23
25
|
stdout = check_output(["git", "tag", "-l", "--sort=-v:refname"])
|
|
24
26
|
return report_output(stdout, "Tags list")
|
|
25
27
|
|
|
26
28
|
|
|
27
|
-
def get_versions(ref: str, add:
|
|
29
|
+
def get_versions(ref: str, add: str | None) -> list[str]:
|
|
28
30
|
"""Generate the file containing the list of all GitHub Pages builds."""
|
|
29
31
|
# Get the directories (i.e. builds) from the GitHub Pages branch
|
|
30
32
|
try:
|
|
@@ -41,7 +43,7 @@ def get_versions(ref: str, add: Optional[str]) -> List[str]:
|
|
|
41
43
|
tags = get_sorted_tags_list()
|
|
42
44
|
|
|
43
45
|
# Make the sorted versions list from main branches and tags
|
|
44
|
-
versions:
|
|
46
|
+
versions: list[str] = []
|
|
45
47
|
for version in ["master", "main"] + tags:
|
|
46
48
|
if version in builds:
|
|
47
49
|
versions.append(version)
|
|
@@ -53,14 +55,12 @@ def get_versions(ref: str, add: Optional[str]) -> List[str]:
|
|
|
53
55
|
return versions
|
|
54
56
|
|
|
55
57
|
|
|
56
|
-
def write_json(path: Path, repository: str, versions: str):
|
|
58
|
+
def write_json(path: Path, repository: str, versions: list[str]):
|
|
59
|
+
"""Write the JSON switcher to path."""
|
|
57
60
|
org, repo_name = repository.split("/")
|
|
58
|
-
pages_url = f"https://{org}.github.io"
|
|
59
|
-
if repo_name != f"{org}.github.io":
|
|
60
|
-
# Only add the repo name if it isn't the source for the org pages site
|
|
61
|
-
pages_url += f"/{repo_name}"
|
|
62
61
|
struct = [
|
|
63
|
-
{"version": version, "url": f"{
|
|
62
|
+
{"version": version, "url": f"https://{org}.github.io/{repo_name}/{version}/"}
|
|
63
|
+
for version in versions
|
|
64
64
|
]
|
|
65
65
|
text = json.dumps(struct, indent=2)
|
|
66
66
|
print(f"JSON switcher:\n{text}")
|
|
@@ -68,6 +68,7 @@ def write_json(path: Path, repository: str, versions: str):
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
def main(args=None):
|
|
71
|
+
"""Parse args and write switcher."""
|
|
71
72
|
parser = ArgumentParser(
|
|
72
73
|
description="Make a versions.json file from gh-pages directories"
|
|
73
74
|
)
|
|
@@ -43,14 +43,14 @@ jobs:
|
|
|
43
43
|
needs: check
|
|
44
44
|
if: needs.check.outputs.branch-pr == ''
|
|
45
45
|
uses: ./.github/workflows/_dist.yml
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
pypi:
|
|
48
48
|
if: github.ref_type == 'tag'
|
|
49
49
|
needs: dist
|
|
50
50
|
uses: ./.github/workflows/_pypi.yml
|
|
51
51
|
permissions:
|
|
52
52
|
id-token: write
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
release:
|
|
55
55
|
if: github.ref_type == 'tag'
|
|
56
56
|
needs: [dist, docs]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
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
|
|
@@ -77,6 +77,7 @@ Requires-Dist: pipdeptree; extra == "dev"
|
|
|
77
77
|
Requires-Dist: pre-commit; extra == "dev"
|
|
78
78
|
Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
|
|
79
79
|
Requires-Dist: pyepics>=3.4.2; extra == "dev"
|
|
80
|
+
Requires-Dist: pyright; extra == "dev"
|
|
80
81
|
Requires-Dist: pyside6==6.7.0; extra == "dev"
|
|
81
82
|
Requires-Dist: pytest; extra == "dev"
|
|
82
83
|
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
:orphan:
|
|
2
|
+
|
|
3
|
+
..
|
|
4
|
+
This page is not included in the TOC tree, but must exist so that the
|
|
5
|
+
autosummary pages are generated for ophyd_async and all its
|
|
6
|
+
subpackages
|
|
7
|
+
|
|
8
|
+
API
|
|
9
|
+
===
|
|
10
|
+
|
|
11
|
+
.. autosummary::
|
|
12
|
+
:toctree: _api
|
|
13
|
+
:template: custom-module-template.rst
|
|
14
|
+
:recursive:
|
|
15
|
+
|
|
16
|
+
ophyd_async
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
.. note::
|
|
2
|
+
|
|
3
|
+
Ophyd async is considered experimental until the v1.0 release and
|
|
4
|
+
may change API on minor release numbers before then
|
|
5
|
+
|
|
6
|
+
{{ ('``' + fullname + '``') | underline }}
|
|
7
|
+
|
|
8
|
+
{%- set filtered_members = [] %}
|
|
9
|
+
{%- for item in members %}
|
|
10
|
+
{%- if item in functions + classes + exceptions + attributes %}
|
|
11
|
+
{% set _ = filtered_members.append(item) %}
|
|
12
|
+
{%- endif %}
|
|
13
|
+
{%- endfor %}
|
|
14
|
+
|
|
15
|
+
.. automodule:: {{ fullname }}
|
|
16
|
+
:members:
|
|
17
|
+
|
|
18
|
+
{% block modules %}
|
|
19
|
+
{% if modules %}
|
|
20
|
+
.. rubric:: Submodules
|
|
21
|
+
|
|
22
|
+
.. autosummary::
|
|
23
|
+
:toctree:
|
|
24
|
+
:template: custom-module-template.rst
|
|
25
|
+
:recursive:
|
|
26
|
+
{% for item in modules %}
|
|
27
|
+
{{ item }}
|
|
28
|
+
{%- endfor %}
|
|
29
|
+
{% endif %}
|
|
30
|
+
{% endblock %}
|
|
31
|
+
|
|
32
|
+
{% block members %}
|
|
33
|
+
{% if filtered_members %}
|
|
34
|
+
.. rubric:: Members
|
|
35
|
+
|
|
36
|
+
.. autosummary::
|
|
37
|
+
:nosignatures:
|
|
38
|
+
{% for item in filtered_members %}
|
|
39
|
+
{{ item }}
|
|
40
|
+
{%- endfor %}
|
|
41
|
+
{% endif %}
|
|
42
|
+
{% endblock %}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"""Configuration file for the Sphinx documentation builder.
|
|
2
|
+
|
|
3
|
+
This file only contains a selection of the most common options. For a full
|
|
4
|
+
list see the documentation:
|
|
5
|
+
https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
6
|
+
"""
|
|
6
7
|
|
|
7
8
|
import os
|
|
8
9
|
import sys
|
|
@@ -38,7 +39,10 @@ extensions = [
|
|
|
38
39
|
"sphinxcontrib.autodoc_pydantic",
|
|
39
40
|
# Use this for generating API docs
|
|
40
41
|
"sphinx.ext.autodoc",
|
|
42
|
+
# Not sure if this is still used?
|
|
41
43
|
"sphinx.ext.doctest",
|
|
44
|
+
# and making summary tables at the top of API docs
|
|
45
|
+
"sphinx.ext.autosummary",
|
|
42
46
|
# This can parse google style docstrings
|
|
43
47
|
"sphinx.ext.napoleon",
|
|
44
48
|
# For linking to external sphinx documentation
|
|
@@ -51,7 +55,6 @@ extensions = [
|
|
|
51
55
|
"sphinx_copybutton",
|
|
52
56
|
# For the card element
|
|
53
57
|
"sphinx_design",
|
|
54
|
-
"sphinx.ext.autosummary",
|
|
55
58
|
"sphinx.ext.mathjax",
|
|
56
59
|
"sphinx.ext.githubpages",
|
|
57
60
|
"IPython.sphinxext.ipython_directive",
|
|
@@ -88,16 +91,21 @@ nitpick_ignore = [
|
|
|
88
91
|
("py:class", "typing_extensions.Literal"),
|
|
89
92
|
]
|
|
90
93
|
|
|
91
|
-
# Both the class’ and the __init__ method’s docstring are concatenated and
|
|
92
|
-
# inserted into the main body of the autoclass directive
|
|
93
|
-
autoclass_content = "both"
|
|
94
|
-
|
|
95
94
|
# Order the members by the order they appear in the source code
|
|
96
95
|
autodoc_member_order = "bysource"
|
|
97
96
|
|
|
98
97
|
# Don't inherit docstrings from baseclasses
|
|
99
98
|
autodoc_inherit_docstrings = False
|
|
100
99
|
|
|
100
|
+
# Add some more modules to the top level autosummary
|
|
101
|
+
ophyd_async.__all__ += ["sim", "epics", "tango", "fastcs", "plan_stubs"]
|
|
102
|
+
|
|
103
|
+
# Document only what is in __all__
|
|
104
|
+
autosummary_ignore_module_all = False
|
|
105
|
+
|
|
106
|
+
# Add any paths that contain templates here, relative to this directory.
|
|
107
|
+
templates_path = ["_templates"]
|
|
108
|
+
|
|
101
109
|
# Output graphviz directive produced images in a scalable format
|
|
102
110
|
graphviz_output_format = "svg"
|
|
103
111
|
|
|
@@ -241,9 +249,11 @@ autodoc_docstring_signature = True
|
|
|
241
249
|
# numpydoc config
|
|
242
250
|
numpydoc_show_class_members = False
|
|
243
251
|
|
|
244
|
-
#
|
|
245
|
-
autodoc_pydantic_model_show_json = True
|
|
252
|
+
# Don't show config summary as it's not relevant
|
|
246
253
|
autodoc_pydantic_model_show_config_summary = False
|
|
247
254
|
|
|
255
|
+
# Show the fields in source order
|
|
256
|
+
autodoc_pydantic_model_summary_list_order = "bysource"
|
|
257
|
+
|
|
248
258
|
# Where to put Ipython savefigs
|
|
249
259
|
ipython_savefig_dir = "../build/savefig"
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
-
from typing import Optional
|
|
3
2
|
|
|
4
3
|
from bluesky.protocols import HasHints, Hints
|
|
5
4
|
|
|
@@ -32,7 +31,7 @@ class FooController(DetectorControl):
|
|
|
32
31
|
self,
|
|
33
32
|
num: int,
|
|
34
33
|
trigger: DetectorTrigger = DetectorTrigger.internal,
|
|
35
|
-
exposure:
|
|
34
|
+
exposure: float | None = None,
|
|
36
35
|
) -> AsyncStatus:
|
|
37
36
|
await asyncio.gather(
|
|
38
37
|
self._drv.num_images.set(num),
|
|
@@ -69,7 +68,7 @@ class FooDetector(StandardDetector, HasHints):
|
|
|
69
68
|
self.hdf,
|
|
70
69
|
path_provider,
|
|
71
70
|
lambda: self.name,
|
|
72
|
-
adcore.
|
|
71
|
+
adcore.ADBaseDatasetDescriber(self.drv),
|
|
73
72
|
),
|
|
74
73
|
config_sigs=(self.drv.acquire_time,),
|
|
75
74
|
name=name,
|
{ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0003-ophyd-async-migration.rst
RENAMED
|
@@ -47,4 +47,4 @@ Consequences
|
|
|
47
47
|
------------
|
|
48
48
|
|
|
49
49
|
This will require changing the repository structure of Ophyd Async; see
|
|
50
|
-
the decision on repository structure :doc:`0004-repository-structure` for details.
|
|
50
|
+
the decision on repository structure :doc:`0004-repository-structure` for details.
|
|
@@ -54,4 +54,4 @@ To view and contribute to discussions on outstanding decisions, please see the d
|
|
|
54
54
|
.. _malcolm: https://github.com/dls-controls/pymalcolm
|
|
55
55
|
.. _scanspec: https://github.com/dls-controls/scanspec
|
|
56
56
|
.. _design: https://github.com/bluesky/ophyd-async/issues?q=is%3Aissue+is%3Aopen+label%3Adesign
|
|
57
|
-
.. _pmac: https://github.com/dls-controls/pmac
|
|
57
|
+
.. _pmac: https://github.com/dls-controls/pmac
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
```{include} ../../.github/CONTRIBUTING.md
|
|
2
|
-
```
|
|
2
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.. note::
|
|
2
2
|
|
|
3
|
-
Ophyd async is included on a provisional basis until the v1.0 release and
|
|
3
|
+
Ophyd async is included on a provisional basis until the v1.0 release and
|
|
4
4
|
may change API on minor release numbers before then
|
|
5
5
|
|
|
6
6
|
Write Tests for Devices
|
|
@@ -35,7 +35,7 @@ Mock Utility Functions
|
|
|
35
35
|
|
|
36
36
|
Mock signals behave as simply as possible, holding a sensible default value when initialized and retaining any value (in memory) to which they are set. This model breaks down in the case of read-only signals, which cannot be set because there is an expectation of some external device setting them in the real world. There is a utility function, ``set_mock_value``, to mock-set values for mock signals, including read-only ones.
|
|
37
37
|
|
|
38
|
-
In addition this example also utilizes helper functions like ``assert_reading`` and ``assert_value`` to ensure the validity of device readings and values. For more information see: :doc:`API.core<../
|
|
38
|
+
In addition this example also utilizes helper functions like ``assert_reading`` and ``assert_value`` to ensure the validity of device readings and values. For more information see: :doc:`API.core<../_api/ophyd_async.core>`
|
|
39
39
|
|
|
40
40
|
.. literalinclude:: ../../tests/epics/demo/test_demo.py
|
|
41
41
|
:pyobject: test_sensor_reading_shows_value
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["setuptools>=64", "setuptools_scm[toml]>=
|
|
2
|
+
requires = ["setuptools>=64", "setuptools_scm[toml]>=8"]
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
@@ -53,6 +53,7 @@ dev = [
|
|
|
53
53
|
"pre-commit",
|
|
54
54
|
"pydata-sphinx-theme>=0.12",
|
|
55
55
|
"pyepics>=3.4.2",
|
|
56
|
+
"pyright",
|
|
56
57
|
"pyside6==6.7.0",
|
|
57
58
|
"pytest",
|
|
58
59
|
"pytest-asyncio",
|
|
@@ -83,9 +84,12 @@ GitHub = "https://github.com/bluesky/ophyd-async"
|
|
|
83
84
|
email = "tom.cobb@diamond.ac.uk"
|
|
84
85
|
name = "Tom Cobb"
|
|
85
86
|
|
|
86
|
-
|
|
87
87
|
[tool.setuptools_scm]
|
|
88
|
-
|
|
88
|
+
version_file = "src/ophyd_async/_version.py"
|
|
89
|
+
|
|
90
|
+
[tool.pyright]
|
|
91
|
+
typeCheckingMode = "standard"
|
|
92
|
+
reportMissingImports = false # Ignore missing stubs in imported modules
|
|
89
93
|
|
|
90
94
|
[tool.pytest.ini_options]
|
|
91
95
|
# Run pytest with all our checkers, and don't spam us with massive tracebacks on error
|
|
@@ -105,6 +109,7 @@ markers = [
|
|
|
105
109
|
"adsim: require the ADsim IOC to be running",
|
|
106
110
|
]
|
|
107
111
|
asyncio_mode = "auto"
|
|
112
|
+
asyncio_default_fixture_loop_scope = "function"
|
|
108
113
|
|
|
109
114
|
[tool.coverage.run]
|
|
110
115
|
data_file = "/tmp/ophyd_async.coverage"
|
|
@@ -127,27 +132,29 @@ passenv = *
|
|
|
127
132
|
allowlist_externals =
|
|
128
133
|
pytest
|
|
129
134
|
pre-commit
|
|
130
|
-
|
|
135
|
+
pyright
|
|
131
136
|
sphinx-build
|
|
132
137
|
sphinx-autobuild
|
|
133
138
|
commands =
|
|
134
|
-
tests: pytest --cov=ophyd_async --cov-report term --cov-report xml:cov.xml {posargs}
|
|
135
|
-
type-checking: ruff check src tests {posargs}
|
|
136
139
|
pre-commit: pre-commit run --all-files --show-diff-on-failure {posargs}
|
|
140
|
+
type-checking: pyright src {posargs}
|
|
141
|
+
tests: pytest --cov=ophyd_async --cov-report term --cov-report xml:cov.xml {posargs}
|
|
137
142
|
docs: sphinx-{posargs:build -EW --keep-going} -T docs build/html
|
|
138
143
|
"""
|
|
139
144
|
|
|
140
145
|
|
|
141
146
|
[tool.ruff]
|
|
142
|
-
src = ["src", "tests"]
|
|
147
|
+
src = ["src", "tests", "system_tests"]
|
|
143
148
|
line-length = 88
|
|
144
149
|
lint.select = [
|
|
145
|
-
"
|
|
146
|
-
"
|
|
147
|
-
"
|
|
148
|
-
"
|
|
149
|
-
"
|
|
150
|
-
"
|
|
150
|
+
"B", # flake8-bugbear - https://docs.astral.sh/ruff/rules/#flake8-bugbear-b
|
|
151
|
+
"C4", # flake8-comprehensions - https://docs.astral.sh/ruff/rules/#flake8-comprehensions-c4
|
|
152
|
+
"E", # pycodestyle errors - https://docs.astral.sh/ruff/rules/#error-e
|
|
153
|
+
"F", # pyflakes rules - https://docs.astral.sh/ruff/rules/#pyflakes-f
|
|
154
|
+
"W", # pycodestyle warnings - https://docs.astral.sh/ruff/rules/#warning-w
|
|
155
|
+
"I", # isort - https://docs.astral.sh/ruff/rules/#isort-i
|
|
156
|
+
"UP", # pyupgrade - https://docs.astral.sh/ruff/rules/#pyupgrade-up
|
|
157
|
+
"SLF", # self - https://docs.astral.sh/ruff/settings/#lintflake8-self
|
|
151
158
|
]
|
|
152
159
|
|
|
153
160
|
[tool.ruff.lint.per-file-ignores]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Interface for ``python -m ophyd_async``."""
|
|
2
|
+
|
|
3
|
+
from argparse import ArgumentParser
|
|
4
|
+
from collections.abc import Sequence
|
|
5
|
+
|
|
6
|
+
from . import __version__
|
|
7
|
+
|
|
8
|
+
__all__ = ["main"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def main(args: Sequence[str] | None = None) -> None:
|
|
12
|
+
"""Argument parser for the CLI."""
|
|
13
|
+
parser = ArgumentParser()
|
|
14
|
+
parser.add_argument(
|
|
15
|
+
"-v",
|
|
16
|
+
"--version",
|
|
17
|
+
action="version",
|
|
18
|
+
version=__version__,
|
|
19
|
+
)
|
|
20
|
+
parser.parse_args(args)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
if __name__ == "__main__":
|
|
24
|
+
main()
|
|
@@ -33,11 +33,11 @@ from ._protocol import AsyncConfigurable, AsyncReadable, AsyncStageable
|
|
|
33
33
|
from ._providers import (
|
|
34
34
|
AutoIncrementFilenameProvider,
|
|
35
35
|
AutoIncrementingPathProvider,
|
|
36
|
+
DatasetDescriber,
|
|
36
37
|
FilenameProvider,
|
|
37
38
|
NameProvider,
|
|
38
39
|
PathInfo,
|
|
39
40
|
PathProvider,
|
|
40
|
-
ShapeProvider,
|
|
41
41
|
StaticFilenameProvider,
|
|
42
42
|
StaticPathProvider,
|
|
43
43
|
UUIDFilenameProvider,
|
|
@@ -61,13 +61,18 @@ from ._signal import (
|
|
|
61
61
|
soft_signal_rw,
|
|
62
62
|
wait_for_value,
|
|
63
63
|
)
|
|
64
|
-
from ._signal_backend import
|
|
64
|
+
from ._signal_backend import (
|
|
65
|
+
RuntimeSubsetEnum,
|
|
66
|
+
SignalBackend,
|
|
67
|
+
SubsetEnum,
|
|
68
|
+
)
|
|
65
69
|
from ._soft_signal_backend import SignalMetadata, SoftSignalBackend
|
|
66
|
-
from ._status import AsyncStatus, WatchableAsyncStatus
|
|
70
|
+
from ._status import AsyncStatus, WatchableAsyncStatus, completed_status
|
|
71
|
+
from ._table import Table
|
|
67
72
|
from ._utils import (
|
|
73
|
+
CALCULATE_TIMEOUT,
|
|
68
74
|
DEFAULT_TIMEOUT,
|
|
69
75
|
CalculatableTimeout,
|
|
70
|
-
CalculateTimeout,
|
|
71
76
|
NotConnected,
|
|
72
77
|
ReadingValueCallback,
|
|
73
78
|
T,
|
|
@@ -75,6 +80,7 @@ from ._utils import (
|
|
|
75
80
|
get_dtype,
|
|
76
81
|
get_unique,
|
|
77
82
|
in_micros,
|
|
83
|
+
is_pydantic_model,
|
|
78
84
|
wait_for_connection,
|
|
79
85
|
)
|
|
80
86
|
|
|
@@ -117,7 +123,7 @@ __all__ = [
|
|
|
117
123
|
"NameProvider",
|
|
118
124
|
"PathInfo",
|
|
119
125
|
"PathProvider",
|
|
120
|
-
"
|
|
126
|
+
"DatasetDescriber",
|
|
121
127
|
"StaticFilenameProvider",
|
|
122
128
|
"StaticPathProvider",
|
|
123
129
|
"UUIDFilenameProvider",
|
|
@@ -149,13 +155,16 @@ __all__ = [
|
|
|
149
155
|
"WatchableAsyncStatus",
|
|
150
156
|
"DEFAULT_TIMEOUT",
|
|
151
157
|
"CalculatableTimeout",
|
|
152
|
-
"
|
|
158
|
+
"CALCULATE_TIMEOUT",
|
|
153
159
|
"NotConnected",
|
|
154
160
|
"ReadingValueCallback",
|
|
161
|
+
"Table",
|
|
155
162
|
"T",
|
|
156
163
|
"WatcherUpdate",
|
|
157
164
|
"get_dtype",
|
|
158
165
|
"get_unique",
|
|
159
166
|
"in_micros",
|
|
167
|
+
"is_pydantic_model",
|
|
160
168
|
"wait_for_connection",
|
|
169
|
+
"completed_status",
|
|
161
170
|
]
|