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.
Files changed (234) hide show
  1. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.copier-answers.yml +1 -2
  2. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.devcontainer/devcontainer.json +1 -1
  3. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.git-blame-ignore-revs +1 -1
  4. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/CONTRIBUTING.md +1 -1
  5. ophyd_async-0.6.0/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
  6. ophyd_async-0.6.0/.github/ISSUE_TEMPLATE/issue.md +13 -0
  7. ophyd_async-0.6.0/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +8 -0
  8. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/pages/index.html +1 -1
  9. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/pages/make_switcher.py +13 -12
  10. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_docs.yml +1 -1
  11. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/ci.yml +2 -2
  12. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.gitignore +1 -0
  13. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.pre-commit-config.yaml +1 -0
  14. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/PKG-INFO +2 -1
  15. ophyd_async-0.6.0/docs/_api.rst +16 -0
  16. ophyd_async-0.6.0/docs/_templates/custom-module-template.rst +42 -0
  17. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/conf.py +22 -12
  18. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/examples/foo_detector.py +2 -3
  19. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0003-ophyd-async-migration.rst +1 -1
  20. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0005-respect-black-line-length.rst +1 -1
  21. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/design-goals.rst +1 -1
  22. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/event-loop-choice.rst +0 -2
  23. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/contribute.md +1 -1
  24. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/write-tests-for-devices.rst +2 -2
  25. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/reference.md +1 -1
  26. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/pyproject.toml +20 -13
  27. ophyd_async-0.6.0/src/ophyd_async/__init__.py +12 -0
  28. ophyd_async-0.6.0/src/ophyd_async/__main__.py +24 -0
  29. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/_version.py +2 -2
  30. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/__init__.py +15 -6
  31. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_detector.py +72 -63
  32. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_device.py +13 -15
  33. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_device_save_loader.py +30 -19
  34. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_flyer.py +6 -4
  35. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_hdf_dataset.py +8 -9
  36. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_log.py +3 -1
  37. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_mock_signal_backend.py +11 -9
  38. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_mock_signal_utils.py +8 -5
  39. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_protocol.py +7 -7
  40. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_providers.py +17 -13
  41. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_readable.py +30 -22
  42. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_signal.py +53 -52
  43. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_signal_backend.py +20 -7
  44. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_soft_signal_backend.py +62 -32
  45. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_status.py +18 -4
  46. ophyd_async-0.6.0/src/ophyd_async/core/_table.py +63 -0
  47. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/core/_utils.py +24 -28
  48. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adaravis/_aravis.py +1 -1
  49. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adaravis/_aravis_controller.py +17 -16
  50. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adaravis/_aravis_io.py +2 -1
  51. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/__init__.py +2 -2
  52. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_core_io.py +2 -0
  53. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_core_logic.py +9 -7
  54. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_hdf_writer.py +26 -21
  55. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_single_trigger.py +1 -1
  56. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adcore/_utils.py +5 -6
  57. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adkinetix/_kinetix.py +1 -1
  58. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adkinetix/_kinetix_controller.py +19 -14
  59. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adpilatus/_pilatus.py +1 -1
  60. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adpilatus/_pilatus_controller.py +18 -16
  61. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adsimdetector/_sim.py +7 -6
  62. ophyd_async-0.6.0/src/ophyd_async/epics/adsimdetector/_sim_controller.py +51 -0
  63. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/advimba/_vimba.py +1 -1
  64. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/advimba/_vimba_controller.py +21 -16
  65. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/_mover.py +4 -5
  66. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/sensor.db +0 -1
  67. ophyd_async-0.6.0/src/ophyd_async/epics/eiger/__init__.py +5 -0
  68. ophyd_async-0.6.0/src/ophyd_async/epics/eiger/_eiger.py +43 -0
  69. ophyd_async-0.6.0/src/ophyd_async/epics/eiger/_eiger_controller.py +66 -0
  70. ophyd_async-0.6.0/src/ophyd_async/epics/eiger/_eiger_io.py +42 -0
  71. ophyd_async-0.6.0/src/ophyd_async/epics/eiger/_odin_io.py +126 -0
  72. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/motor.py +9 -11
  73. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/pvi/_pvi.py +30 -33
  74. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_aioca.py +55 -25
  75. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_common.py +3 -10
  76. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_epics_transport.py +11 -8
  77. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_p4p.py +79 -30
  78. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/_signal.py +6 -8
  79. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/__init__.py +0 -6
  80. ophyd_async-0.6.0/src/ophyd_async/fastcs/panda/_control.py +37 -0
  81. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_hdf_panda.py +11 -4
  82. ophyd_async-0.6.0/src/ophyd_async/fastcs/panda/_table.py +143 -0
  83. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_trigger.py +1 -2
  84. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_utils.py +3 -2
  85. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_writer.py +28 -13
  86. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/plan_stubs/_fly.py +16 -16
  87. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/plan_stubs/_nd_attributes.py +12 -6
  88. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py +3 -3
  89. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py +24 -20
  90. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_writer.py +9 -6
  91. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py +21 -23
  92. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_sim_motor.py +2 -1
  93. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/PKG-INFO +2 -1
  94. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/SOURCES.txt +17 -3
  95. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/requires.txt +1 -0
  96. ophyd_async-0.6.0/system_tests/epics/eiger/README.md +6 -0
  97. ophyd_async-0.6.0/system_tests/epics/eiger/start_iocs_and_run_tests.sh +25 -0
  98. ophyd_async-0.6.0/system_tests/epics/eiger/test_eiger_system.py +92 -0
  99. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/conftest.py +80 -6
  100. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_device_collector.py +1 -1
  101. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_device_save_loader.py +23 -6
  102. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_flyer.py +8 -7
  103. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_mock_signal_backend.py +20 -5
  104. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_protocol.py +4 -6
  105. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_providers.py +1 -1
  106. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_readable.py +5 -5
  107. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_signal.py +30 -3
  108. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_soft_signal_backend.py +5 -4
  109. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_status.py +18 -3
  110. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_subset_enum.py +8 -8
  111. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_watchable_async_status.py +2 -2
  112. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adaravis/test_aravis.py +21 -20
  113. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adcore/test_scans.py +10 -10
  114. ophyd_async-0.6.0/tests/epics/adcore/test_single_trigger.py +56 -0
  115. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adcore/test_writers.py +16 -14
  116. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adkinetix/test_kinetix.py +18 -20
  117. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adpilatus/test_pilatus.py +11 -10
  118. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adpilatus/test_pilatus_controller.py +4 -2
  119. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adsimdetector/test_adsim_controller.py +5 -3
  120. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adsimdetector/test_sim.py +77 -70
  121. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/advimba/test_vimba.py +22 -22
  122. ophyd_async-0.6.0/tests/epics/conftest.py +38 -0
  123. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/demo/test_demo.py +2 -3
  124. ophyd_async-0.6.0/tests/epics/eiger/test_eiger_controller.py +123 -0
  125. ophyd_async-0.6.0/tests/epics/eiger/test_eiger_detector.py +38 -0
  126. ophyd_async-0.6.0/tests/epics/eiger/test_odin_io.py +75 -0
  127. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/pvi/test_pvi.py +10 -12
  128. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/signal/test_signals.py +44 -28
  129. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/test_motor.py +14 -7
  130. ophyd_async-0.6.0/tests/fastcs/panda/test_hdf_panda.py +306 -0
  131. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/test_panda_connect.py +3 -3
  132. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/test_panda_control.py +13 -3
  133. ophyd_async-0.6.0/tests/fastcs/panda/test_panda_utils.py +142 -0
  134. ophyd_async-0.6.0/tests/fastcs/panda/test_table.py +232 -0
  135. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/test_trigger.py +53 -8
  136. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/test_writer.py +18 -5
  137. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/plan_stubs/test_fly.py +8 -9
  138. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/conftest.py +1 -5
  139. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/test_sim_detector.py +8 -12
  140. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/test_sim_writer.py +2 -2
  141. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/test_streaming_plan.py +13 -3
  142. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/test_data/test_yaml_save.yml +4 -0
  143. ophyd_async-0.5.1/docs/_templates/README +0 -1
  144. ophyd_async-0.5.1/docs/_templates/custom-class-template.rst +0 -40
  145. ophyd_async-0.5.1/docs/_templates/custom-module-template.rst +0 -72
  146. ophyd_async-0.5.1/docs/reference/api.rst +0 -29
  147. ophyd_async-0.5.1/src/ophyd_async/__init__.py +0 -3
  148. ophyd_async-0.5.1/src/ophyd_async/__main__.py +0 -16
  149. ophyd_async-0.5.1/src/ophyd_async/epics/adsimdetector/_sim_controller.py +0 -46
  150. ophyd_async-0.5.1/src/ophyd_async/fastcs/panda/_control.py +0 -38
  151. ophyd_async-0.5.1/src/ophyd_async/fastcs/panda/_table.py +0 -170
  152. ophyd_async-0.5.1/tests/epics/adcore/test_single_trigger.py +0 -50
  153. ophyd_async-0.5.1/tests/fastcs/panda/test_hdf_panda.py +0 -193
  154. ophyd_async-0.5.1/tests/fastcs/panda/test_panda_utils.py +0 -88
  155. ophyd_async-0.5.1/tests/fastcs/panda/test_table.py +0 -31
  156. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.codecov.yml +0 -0
  157. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/actions/install_requirements/action.yml +0 -0
  158. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/dependabot.yml +0 -0
  159. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_check.yml +0 -0
  160. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_dist.yml +0 -0
  161. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_pypi.yml +0 -0
  162. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_release.yml +0 -0
  163. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_test.yml +0 -0
  164. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/_tox.yml +0 -0
  165. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.github/workflows/periodic.yml +0 -0
  166. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/.mailmap +0 -0
  167. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/Dockerfile +0 -0
  168. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/LICENSE +0 -0
  169. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/README.md +0 -0
  170. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/examples/epics_demo.py +0 -0
  171. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  172. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  173. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0004-repository-structure.rst +0 -0
  174. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0006-procedural-device-definitions.rst +0 -0
  175. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/0007-subpackage-structure.md +0 -0
  176. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions/COPYME +0 -0
  177. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/decisions.md +0 -0
  178. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations/flyscanning.rst +0 -0
  179. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/explanations.md +0 -0
  180. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/genindex.rst +0 -0
  181. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/choose-interfaces-for-devices.md +0 -0
  182. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/compound-devices.rst +0 -0
  183. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/make-a-simple-device.rst +0 -0
  184. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to/make-a-standard-detector.rst +0 -0
  185. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/how-to.md +0 -0
  186. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/images/bluesky_ophyd_epics_devices_logo.svg +0 -0
  187. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/images/bluesky_ophyd_logo.svg +0 -0
  188. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/images/ophyd_favicon.svg +0 -0
  189. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/index.md +0 -0
  190. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/tutorials/installation.md +0 -0
  191. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/tutorials/using-existing-devices.rst +0 -0
  192. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/docs/tutorials.md +0 -0
  193. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/setup.cfg +0 -0
  194. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/__init__.py +0 -0
  195. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adaravis/__init__.py +0 -0
  196. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adkinetix/__init__.py +0 -0
  197. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adkinetix/_kinetix_io.py +0 -0
  198. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adpilatus/__init__.py +0 -0
  199. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adpilatus/_pilatus_io.py +0 -0
  200. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/adsimdetector/__init__.py +0 -0
  201. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/advimba/__init__.py +0 -0
  202. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/advimba/_vimba_io.py +0 -0
  203. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/__init__.py +0 -0
  204. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/_sensor.py +0 -0
  205. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/demo/mover.db +0 -0
  206. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/pvi/__init__.py +0 -0
  207. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/epics/signal/__init__.py +0 -0
  208. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/__init__.py +0 -0
  209. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/odin/__init__.py +0 -0
  210. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/fastcs/panda/_block.py +0 -0
  211. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/plan_stubs/__init__.py +0 -0
  212. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/plan_stubs/_ensure_connected.py +0 -0
  213. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/__init__.py +0 -0
  214. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/__init__.py +0 -0
  215. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/demo/_pattern_detector/__init__.py +0 -0
  216. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/sim/testing/__init__.py +0 -0
  217. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async/tango/__init__.py +0 -0
  218. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/dependency_links.txt +0 -0
  219. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/entry_points.txt +0 -0
  220. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/src/ophyd_async.egg-info/top_level.txt +0 -0
  221. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_device.py +0 -0
  222. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_log.py +0 -0
  223. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/core/test_utils.py +0 -0
  224. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/adcore/test_drivers.py +0 -0
  225. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/signal/test_common.py +0 -0
  226. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/signal/test_records.db +0 -0
  227. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/epics/test_areadetector_subclass_naming.py +0 -0
  228. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/fastcs/panda/db/panda.db +0 -0
  229. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/plan_stubs/test_ensure_connected.py +0 -0
  230. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/__init__.py +0 -0
  231. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/demo/__init__.py +0 -0
  232. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/demo/test_sim_motor.py +0 -0
  233. {ophyd_async-0.5.1 → ophyd_async-0.6.0}/tests/sim/test_pattern_generator.py +0 -0
  234. {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.1.0
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
+ }
@@ -7,4 +7,4 @@
7
7
  # Use isort to sort imports
8
8
  881a35b43584103ca572b6f4e472dd8b6fd6ea87
9
9
  # Replace flake8 and mypy with ruff and pyrite
10
- e2f8317e7584e4de788c2b39e5b5edaa98c1bc9e
10
+ e2f8317e7584e4de788c2b39e5b5edaa98c1bc9e
@@ -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.1.0/how-to.html).
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
@@ -0,0 +1,8 @@
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
@@ -8,4 +8,4 @@
8
8
  <link rel="canonical" href="main/index.html">
9
9
  </head>
10
10
 
11
- </html>
11
+ </html>
@@ -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) -> List[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) -> List[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() -> List[str]:
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: Optional[str]) -> List[str]:
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: List[str] = []
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"{pages_url}/{version}/"} for version in versions
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
  )
@@ -51,4 +51,4 @@ jobs:
51
51
  with:
52
52
  github_token: ${{ secrets.GITHUB_TOKEN }}
53
53
  publish_dir: .github/pages
54
- keep_files: true
54
+ keep_files: true
@@ -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]
@@ -55,6 +55,7 @@ cov.xml
55
55
 
56
56
  # Sphinx documentation
57
57
  docs/_build/
58
+ docs/_api
58
59
 
59
60
  # PyBuilder
60
61
  target/
@@ -5,6 +5,7 @@ repos:
5
5
  - id: check-added-large-files
6
6
  - id: check-yaml
7
7
  - id: check-merge-conflict
8
+ - id: end-of-file-fixer
8
9
 
9
10
  - repo: local
10
11
  hooks:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ophyd-async
3
- Version: 0.5.1
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
- # 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
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
- # pydantic models
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: Optional[float] = None,
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.ADBaseShapeProvider(self.drv),
71
+ adcore.ADBaseDatasetDescriber(self.drv),
73
72
  ),
74
73
  config_sigs=(self.drv.acquire_time,),
75
74
  name=name,
@@ -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.
@@ -26,4 +26,4 @@ Consequences
26
26
  ------------
27
27
 
28
28
  Linting tools for this repository are configured to accept black's line length of 88 characters.
29
- Any additional linting tools should respect this.
29
+ Any additional linting tools should respect this.
@@ -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
@@ -48,5 +48,3 @@ they can either:
48
48
 
49
49
  * Run the :python:`DeviceCollector` first and pass the event-loop into the run-engine.
50
50
  * Initialize the run-engine first and run the :python:`DeviceCollector` using the bluesky event-loop.
51
-
52
-
@@ -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<../generated/ophyd_async.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
@@ -6,7 +6,7 @@ Technical reference material including APIs and release notes.
6
6
  :maxdepth: 1
7
7
  :glob:
8
8
 
9
- reference/*
9
+ API <_api/ophyd_async>
10
10
  genindex
11
11
  Release Notes <https://github.com/bluesky/ophyd-async/releases>
12
12
  ```
@@ -1,5 +1,5 @@
1
1
  [build-system]
2
- requires = ["setuptools>=64", "setuptools_scm[toml]>=6.2", "wheel"]
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
- write_to = "src/ophyd_async/_version.py"
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
- mypy
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
- "C4", # flake8-comprehensions - https://beta.ruff.rs/docs/rules/#flake8-comprehensions-c4
146
- "E", # pycodestyle errors - https://beta.ruff.rs/docs/rules/#error-e
147
- "F", # pyflakes rules - https://beta.ruff.rs/docs/rules/#pyflakes-f
148
- "W", # pycodestyle warnings - https://beta.ruff.rs/docs/rules/#warning-w
149
- "I001", # isort
150
- "SLF", # self - https://docs.astral.sh/ruff/settings/#lintflake8-self
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,12 @@
1
+ """Top level API.
2
+
3
+ .. data:: __version__
4
+ :type: str
5
+
6
+ Version number as calculated by https://github.com/pypa/setuptools_scm
7
+ """
8
+
9
+ from . import core
10
+ from ._version import __version__
11
+
12
+ __all__ = ["__version__", "core"]
@@ -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()
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.5.1'
16
- __version_tuple__ = version_tuple = (0, 5, 1)
15
+ __version__ = version = '0.6.0'
16
+ __version_tuple__ = version_tuple = (0, 6, 0)
@@ -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 RuntimeSubsetEnum, SignalBackend, SubsetEnum
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
- "ShapeProvider",
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
- "CalculateTimeout",
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
  ]