mx-bluesky 1.2.0__tar.gz → 1.4.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 (445) hide show
  1. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.copier-answers.yml +3 -1
  2. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.devcontainer/Dockerfile +1 -1
  3. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/CONTRIBUTING.md +1 -1
  4. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/pages/make_switcher.py +8 -6
  5. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/_pypi.yml +2 -0
  6. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/_release.yml +1 -1
  7. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/ci.yml +1 -1
  8. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.gitignore +1 -0
  9. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.pre-commit-config.yaml +8 -0
  10. mx_bluesky-1.4.0/.vscode/mxb-with-core-dependencies.code-workspace +23 -0
  11. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/Dockerfile +4 -1
  12. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/PKG-INFO +4 -2
  13. mx_bluesky-1.4.0/docs/_api.rst +16 -0
  14. mx_bluesky-1.4.0/docs/_templates/custom-module-template.rst +37 -0
  15. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/conf.py +14 -5
  16. mx_bluesky-1.4.0/docs/developer/general/how-to/deploy-a-release.rst +57 -0
  17. mx_bluesky-1.4.0/docs/developer/general/how-to/profile-tests.rst +84 -0
  18. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/index.rst +1 -0
  19. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/hyperion/deploying-hyperion.rst +10 -10
  20. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/user/index.rst +1 -1
  21. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/helmchart/templates/deployment.yaml +1 -1
  22. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/code.yml +6 -0
  23. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/test_data/setup.cfg +1 -1
  24. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/pyproject.toml +38 -9
  25. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/run_hyperion.sh +8 -10
  26. mx_bluesky-1.4.0/src/mx_bluesky/__init__.py +11 -0
  27. mx_bluesky-1.4.0/src/mx_bluesky/__main__.py +24 -0
  28. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/_version.py +2 -2
  29. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i04/callbacks/murko_callback.py +14 -4
  30. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i04/thawing_plan.py +48 -10
  31. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/__init__.py +3 -0
  32. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/extruder/i24ssx_Extruder_Collect_py3v2.py +68 -90
  33. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/DiamondChipI24-py3v1.edl +1 -1
  34. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Collect_py3v1.py +104 -126
  35. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Manager_py3v1.py +139 -162
  36. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_Mapping_py3v1.py +25 -36
  37. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_Chip_StartUp_py3v1.py +24 -34
  38. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/i24ssx_moveonclick.py +14 -11
  39. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/log.py +58 -49
  40. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/parameters/fixed_target/cs/cs_maker.json +3 -3
  41. mx_bluesky-1.4.0/src/mx_bluesky/beamlines/i24/serial/run_extruder.sh +44 -0
  42. mx_bluesky-1.4.0/src/mx_bluesky/beamlines/i24/serial/run_fixed_target.sh +46 -0
  43. mx_bluesky-1.4.0/src/mx_bluesky/beamlines/i24/serial/run_serial.py +52 -0
  44. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/setup_beamline/ca.py +0 -2
  45. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/setup_beamline/setup_beamline.py +1 -1
  46. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/setup_beamline/setup_detector.py +8 -18
  47. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/setup_beamline/setup_zebra_plans.py +2 -2
  48. mx_bluesky-1.4.0/src/mx_bluesky/common/device_setup_plans/read_hardware_for_setup.py +14 -0
  49. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion → mx_bluesky-1.4.0/src/mx_bluesky/common}/parameters/components.py +16 -49
  50. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion → mx_bluesky-1.4.0/src/mx_bluesky/common}/parameters/constants.py +43 -68
  51. mx_bluesky-1.4.0/src/mx_bluesky/common/plans/__init__.py +1 -0
  52. mx_bluesky-1.4.0/src/mx_bluesky/common/plans/do_fgs.py +121 -0
  53. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion → mx_bluesky-1.4.0/src/mx_bluesky/common/utils}/log.py +38 -21
  54. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion → mx_bluesky-1.4.0/src/mx_bluesky/common/utils}/tracing.py +2 -2
  55. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/__main__.py +11 -9
  56. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/dcm_pitch_roll_mirror_adjuster.py +31 -26
  57. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/read_hardware_for_setup.py +6 -12
  58. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/setup_oav.py +6 -12
  59. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/setup_panda.py +1 -2
  60. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/setup_zebra.py +48 -17
  61. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/smargon.py +6 -6
  62. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/utils.py +2 -2
  63. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/xbpm_feedback.py +4 -4
  64. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/flyscan_xray_centre_plan.py +25 -83
  65. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/grid_detect_then_xray_centre_plan.py +7 -5
  66. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/oav_grid_detection_plan.py +19 -18
  67. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/oav_snapshot_plan.py +8 -5
  68. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/pin_centre_then_xray_centre_plan.py +4 -4
  69. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/pin_tip_centring_plan.py +17 -17
  70. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/robot_load_and_change_energy.py +15 -11
  71. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/robot_load_then_centre_plan.py +6 -3
  72. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/rotation_scan_plan.py +6 -4
  73. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/set_energy_plan.py +3 -3
  74. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/__main__.py +1 -2
  75. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/common/ispyb_mapping.py +1 -1
  76. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/grid_detection_callback.py +18 -13
  77. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/ispyb_callback_base.py +29 -12
  78. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/log_uid_tag_callback.py +1 -1
  79. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/robot_load/ispyb_callback.py +1 -1
  80. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/rotation/ispyb_callback.py +4 -3
  81. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/ispyb_callback.py +23 -18
  82. mx_bluesky-1.4.0/src/mx_bluesky/hyperion/external_interaction/config_server.py +47 -0
  83. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/ispyb/ispyb_store.py +1 -1
  84. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/nexus/nexus_utils.py +2 -2
  85. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/nexus/write_nexus.py +1 -1
  86. mx_bluesky-1.4.0/src/mx_bluesky/hyperion/log.py +15 -0
  87. mx_bluesky-1.4.0/src/mx_bluesky/hyperion/parameters/components.py +12 -0
  88. mx_bluesky-1.4.0/src/mx_bluesky/hyperion/parameters/constants.py +62 -0
  89. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/parameters/gridscan.py +13 -9
  90. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/parameters/load_centre_collect.py +3 -3
  91. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/parameters/robot_load.py +3 -3
  92. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/parameters/rotation.py +9 -5
  93. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/utils/utils.py +17 -0
  94. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/utils/validation.py +5 -6
  95. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky.egg-info/PKG-INFO +4 -2
  96. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky.egg-info/SOURCES.txt +20 -9
  97. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky.egg-info/requires.txt +3 -1
  98. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/conftest.py +65 -52
  99. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/conftest.py +15 -26
  100. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/experiment_plans/test_fgs_plan.py +3 -4
  101. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/experiment_plans/test_plan_system.py +1 -1
  102. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/external_interaction/callbacks/test_external_callbacks.py +0 -1
  103. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/external_interaction/conftest.py +3 -1
  104. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/external_interaction/test_ispyb_dev_connection.py +1 -1
  105. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/external_interaction/test_load_centre_collect_full_plan.py +2 -2
  106. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/external_interaction/test_zocalo_system.py +9 -5
  107. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/example_load_centre_collect_params.json +1 -2
  108. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/good_test_grid_with_edge_detect_parameters.json +0 -2
  109. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/good_test_load_centre_collect_params.json +0 -1
  110. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/good_test_multi_rotation_scan_parameters.json +0 -1
  111. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/good_test_parameters.json +1 -1
  112. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/good_test_pin_centre_then_xray_centre_parameters.json +0 -2
  113. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/good_test_robot_load_and_centre_params.json +0 -1
  114. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/good_test_robot_load_params.json +0 -1
  115. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/good_test_rotation_scan_parameters.json +0 -1
  116. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/good_test_rotation_scan_parameters_nomove.json +0 -1
  117. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/ispyb_gridscan_system_test_parameters.json +0 -2
  118. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/test_gridscan_param_defaults.json +0 -1
  119. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_beamline_vfm_lat_converter.txt +1 -1
  120. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i04/callbacks/test_murko_callback.py +1 -1
  121. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i04/test_thawing.py +139 -30
  122. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/conftest.py +8 -10
  123. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/extruder/test_extruder_collect.py +40 -24
  124. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/fixed_target/test_chip_manager.py +111 -64
  125. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/fixed_target/test_chip_startup.py +17 -1
  126. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/fixed_target/test_ft_collect.py +52 -7
  127. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/fixed_target/test_moveonclick.py +34 -11
  128. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/setup_beamline/test_setup_detector.py +1 -2
  129. mx_bluesky-1.4.0/tests/unit_tests/beamlines/i24/serial/test_log.py +104 -0
  130. mx_bluesky-1.4.0/tests/unit_tests/beamlines/i24/serial/test_run_serial.py +47 -0
  131. mx_bluesky-1.4.0/tests/unit_tests/common/device_setup_plans/test_read_hardware_for_setup.py +36 -0
  132. mx_bluesky-1.4.0/tests/unit_tests/common/plan_stubs/test_do_fgs.py +169 -0
  133. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/test_log → mx_bluesky-1.4.0/tests/unit_tests/common/utils}/test_log.py +77 -21
  134. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/conftest.py +0 -13
  135. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/conftest.py +24 -20
  136. mx_bluesky-1.4.0/tests/unit_tests/hyperion/device_setup_plans/test_dcm_pitch_roll_mirror_adjuster.py +155 -0
  137. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/device_setup_plans/test_setup_oav.py +1 -1
  138. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/device_setup_plans/test_setup_panda.py +16 -13
  139. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/device_setup_plans/test_utils.py +9 -6
  140. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/device_setup_plans/test_zebra_setup.py +36 -9
  141. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/conftest.py +64 -10
  142. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_experiment_registry.py +2 -2
  143. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_flyscan_xray_centre_plan.py +34 -40
  144. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_grid_detect_then_xray_centre_plan.py +48 -101
  145. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_grid_detection_plan.py +104 -130
  146. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_load_centre_collect_full_plan.py +37 -4
  147. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_oav_snapshot_plan.py +12 -13
  148. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_pin_centre_then_xray_centre_plan.py +16 -15
  149. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_pin_tip_centring.py +53 -16
  150. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_robot_load_and_change_energy.py +5 -4
  151. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_rotation_scan_plan.py +17 -8
  152. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_set_energy_plan.py +2 -2
  153. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/conftest.py +23 -8
  154. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/robot_load/test_robot_load_ispyb_callback.py +2 -2
  155. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/rotation/test_ispyb_callback.py +5 -1
  156. mx_bluesky-1.4.0/tests/unit_tests/hyperion/external_interaction/callbacks/test_rotation_callbacks.py +299 -0
  157. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/xray_centre/test_ispyb_callback.py +21 -26
  158. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/conftest.py +2 -11
  159. mx_bluesky-1.4.0/tests/unit_tests/hyperion/parameters/__init__.py +0 -0
  160. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/parameters/test_parameter_model.py +33 -1
  161. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/test_utils.py +19 -0
  162. mx_bluesky-1.4.0/tests/unit_tests/hyperion/utils/__init__.py +0 -0
  163. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/deploy/create_venv.py +10 -6
  164. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/deploy/deploy_hyperion_to_k8s.sh +10 -10
  165. mx_bluesky-1.2.0/utility_scripts/deploy/deploy_hyperion.py → mx_bluesky-1.4.0/utility_scripts/deploy/deploy_mx_bluesky.py +151 -84
  166. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/docker/entrypoint.sh +4 -4
  167. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/docker/i03-compose.yml +2 -2
  168. mx_bluesky-1.4.0/utility_scripts/procserv_ioc_start.sh +19 -0
  169. mx_bluesky-1.2.0/docs/developer/general/how-to/deploy-a-release.rst +0 -84
  170. mx_bluesky-1.2.0/docs/user/reference/api.rst +0 -14
  171. mx_bluesky-1.2.0/src/mx_bluesky/__init__.py +0 -6
  172. mx_bluesky-1.2.0/src/mx_bluesky/__main__.py +0 -19
  173. mx_bluesky-1.2.0/src/mx_bluesky/beamlines/i24/serial/run_extruder.sh +0 -19
  174. mx_bluesky-1.2.0/src/mx_bluesky/beamlines/i24/serial/run_fixed_target.sh +0 -22
  175. mx_bluesky-1.2.0/src/mx_bluesky/beamlines/i24/serial/run_serial.py +0 -36
  176. mx_bluesky-1.2.0/src/mx_bluesky/example.py +0 -19
  177. mx_bluesky-1.2.0/src/mx_bluesky/hyperion/external_interaction/config_server.py +0 -35
  178. mx_bluesky-1.2.0/tests/unit_tests/beamlines/i24/serial/test_log.py +0 -68
  179. mx_bluesky-1.2.0/tests/unit_tests/hyperion/device_setup_plans/test_dcm_pitch_roll_mirror_adjuster.py +0 -244
  180. mx_bluesky-1.2.0/tests/unit_tests/hyperion/external_interaction/callbacks/test_rotation_callbacks.py +0 -420
  181. mx_bluesky-1.2.0/tests/unit_tests/hyperion/test_log/conftest.py +0 -13
  182. mx_bluesky-1.2.0/tests/unit_tests/test_example.py +0 -16
  183. mx_bluesky-1.2.0/utility_scripts/deploy/deploy_mxbluesky.py +0 -189
  184. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.coveragerc +0 -0
  185. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.devcontainer/devcontainer.json +0 -0
  186. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.dockerignore +0 -0
  187. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  188. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/ISSUE_TEMPLATE/issue.md +0 -0
  189. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
  190. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/actions/install_requirements/action.yml +0 -0
  191. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/actions/verify-nexus/Dockerfile +0 -0
  192. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/actions/verify-nexus/action.yml +0 -0
  193. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/actions/verify-nexus/entrypoint.sh +0 -0
  194. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/dependabot.yml +0 -0
  195. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/pages/index.html +0 -0
  196. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/_check.yml +0 -0
  197. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/_container.yml +0 -0
  198. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/_dist.yml +0 -0
  199. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/_docs.yml +0 -0
  200. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/_test.yml +0 -0
  201. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/_tox.yml +0 -0
  202. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/periodic.yml +0 -0
  203. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.github/workflows/publish_docker_image.yml +0 -0
  204. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.vscode/extensions.json +0 -0
  205. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.vscode/launch.json +0 -0
  206. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.vscode/mx-bluesky.code-workspace +0 -0
  207. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.vscode/settings.json +0 -0
  208. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/.vscode/tasks.json +0 -0
  209. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/Dockerfile.release +0 -0
  210. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/LICENSE +0 -0
  211. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/README.rst +0 -0
  212. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/catalog-info.yaml +0 -0
  213. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/codecov.yml +0 -0
  214. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/conftest.py +0 -0
  215. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/explanations/decisions/0001-record-architecture-decisions.rst +0 -0
  216. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/explanations/decisions/0002-repository-structure.rst +0 -0
  217. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/explanations/decisions/0003-python-version-support.rst +0 -0
  218. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/explanations/decisions.rst +0 -0
  219. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/how-to/build-docs.rst +0 -0
  220. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/how-to/contribute.rst +0 -0
  221. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/how-to/create-a-release.rst +0 -0
  222. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/how-to/get-started.rst +0 -0
  223. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/how-to/lint.rst +0 -0
  224. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/how-to/run-tests.rst +0 -0
  225. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/how-to/static-analysis.rst +0 -0
  226. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/how-to/update-tools.rst +0 -0
  227. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/reference/standards.rst +0 -0
  228. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/general/tutorials/dev-install.rst +0 -0
  229. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/hyperion/index.rst +0 -0
  230. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/hyperion/reference/param-hierarchy.rst +0 -0
  231. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/hyperion/reference/param_hierarchy.puml +0 -0
  232. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/hyperion/reference/readme.md +0 -0
  233. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/index.rst +0 -0
  234. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/murko-integration/explanations/architecture.rst +0 -0
  235. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/murko-integration/images/murko_setup.drawio.png +0 -0
  236. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/murko-integration/index.rst +0 -0
  237. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/serial-crystallography-on-i24/explanations/decisions/0001-record-architecture-decisions.rst +0 -0
  238. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/serial-crystallography-on-i24/explanations/decisions.rst +0 -0
  239. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/serial-crystallography-on-i24/how-to/environment-setup.rst +0 -0
  240. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/serial-crystallography-on-i24/how-to/run-a-collection.rst +0 -0
  241. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/serial-crystallography-on-i24/how-to/stage-pmac-moves.rst +0 -0
  242. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/serial-crystallography-on-i24/index.rst +0 -0
  243. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/developer/serial-crystallography-on-i24/project-planning/roadmap.rst +0 -0
  244. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/genindex.rst +0 -0
  245. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/images/dls-favicon.ico +0 -0
  246. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/images/dls-logo.svg +0 -0
  247. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/index.rst +0 -0
  248. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/user/explanations/docs-structure.rst +0 -0
  249. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/user/how-to/run-container.rst +0 -0
  250. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/docs/user/tutorials/installation.rst +0 -0
  251. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/helmchart/Chart.yaml +0 -0
  252. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/helmchart/templates/ingress.yaml +0 -0
  253. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/helmchart/templates/service.yaml +0 -0
  254. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/helmchart/values.yaml +0 -0
  255. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/add_assignee_when_pr_opened.yml +0 -0
  256. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/assigned_issues_to_in_progress.yml +0 -0
  257. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/container_tests.sh +0 -0
  258. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/get_issue_from_pr.yml +0 -0
  259. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/get_project_data_and_move_column.yml +0 -0
  260. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/linkcheck.yml +0 -0
  261. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/open_prs_to_review.yml +0 -0
  262. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/opened_issues_to_backlog.yml +0 -0
  263. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/pin_versions.py +0 -0
  264. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/pre_release_workflow.yml +0 -0
  265. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/rework_prs_to_in_progress.yml +0 -0
  266. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/test_data/pip_freeze.txt +0 -0
  267. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/test_data/setup.cfg.pinned +0 -0
  268. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/test_data/setup.cfg.unpinned +0 -0
  269. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/hyperion_other/workflows/test_pin_versions.py +0 -0
  270. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/run_hyperion_in_podman.sh +0 -0
  271. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/setup.cfg +0 -0
  272. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/__init__.py +0 -0
  273. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i04/__init__.py +0 -0
  274. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/__init__.py +0 -0
  275. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/blueapi_config.yaml +0 -0
  276. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/dcid.py +0 -0
  277. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/extruder/EX-gui-edm/DetStage.edl +0 -0
  278. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/extruder/EX-gui-edm/DiamondExtruder-I24-py3v1.edl +0 -0
  279. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/extruder/EX-gui-edm/microdrop_alignment.edl +0 -0
  280. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/extruder/__init__.py +0 -0
  281. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/CustomChip_py3v1.edl +0 -0
  282. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/DetStage.edl +0 -0
  283. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/ME14E-GeneralPurpose.edl +0 -0
  284. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/MappingLite-oxford_py3v1.edl +0 -0
  285. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/PMAC_Command.edl +0 -0
  286. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/Shutter_Control.edl +0 -0
  287. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/microdrop_alignment.edl +0 -0
  288. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/nudgechip.edl +0 -0
  289. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/pumpprobe-py3v1.edl +0 -0
  290. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/short1-laser.png +0 -0
  291. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/FT-gui-edm/short2-laser.png +0 -0
  292. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/__init__.py +0 -0
  293. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/fixed_target/ft_utils.py +0 -0
  294. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/parameters/__init__.py +0 -0
  295. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/parameters/constants.py +0 -0
  296. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/parameters/experiment_parameters.py +0 -0
  297. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/parameters/fixed_target/cs/motor_direction.txt +0 -0
  298. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/parameters/fixed_target/pvar_files/minichip-oxford.pvar +0 -0
  299. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/parameters/fixed_target/pvar_files/oxford.pvar +0 -0
  300. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/parameters/utils.py +0 -0
  301. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/run_ssx.sh +0 -0
  302. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/set_visit_directory.sh +0 -0
  303. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/setup_beamline/__init__.py +0 -0
  304. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/setup_beamline/pv.py +0 -0
  305. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/setup_beamline/pv_abstract.py +0 -0
  306. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/start_blueapi.sh +0 -0
  307. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/beamlines/i24/serial/write_nexus.py +0 -0
  308. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion/device_setup_plans → mx_bluesky-1.4.0/src/mx_bluesky/common}/__init__.py +0 -0
  309. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/__init__.py +0 -0
  310. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion/external_interaction/callbacks/common → mx_bluesky-1.4.0/src/mx_bluesky/hyperion/device_setup_plans}/__init__.py +0 -0
  311. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/manipulate_sample.py +0 -0
  312. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/device_setup_plans/position_detector.py +0 -0
  313. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/exceptions.py +0 -0
  314. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/__init__.py +0 -0
  315. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/experiment_registry.py +0 -0
  316. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/load_centre_collect_full_plan.py +0 -0
  317. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/experiment_plans/optimise_attenuation_plan.py +0 -0
  318. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/__init__.py +0 -0
  319. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/__init__.py +0 -0
  320. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/aperture_change_callback.py +0 -0
  321. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion/external_interaction/callbacks/rotation → mx_bluesky-1.4.0/src/mx_bluesky/hyperion/external_interaction/callbacks/common}/__init__.py +0 -0
  322. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/common/callback_util.py +0 -0
  323. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/logging_callback.py +0 -0
  324. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/plan_reactive_callback.py +0 -0
  325. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion/external_interaction/callbacks/xray_centre → mx_bluesky-1.4.0/src/mx_bluesky/hyperion/external_interaction/callbacks/rotation}/__init__.py +0 -0
  326. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/rotation/ispyb_mapping.py +0 -0
  327. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/rotation/nexus_callback.py +0 -0
  328. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion/external_interaction/ispyb → mx_bluesky-1.4.0/src/mx_bluesky/hyperion/external_interaction/callbacks/xray_centre}/__init__.py +0 -0
  329. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/ispyb_mapping.py +0 -0
  330. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/xray_centre/nexus_callback.py +0 -0
  331. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/callbacks/zocalo_callback.py +0 -0
  332. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/exceptions.py +0 -0
  333. {mx_bluesky-1.2.0/src/mx_bluesky/hyperion/external_interaction/nexus → mx_bluesky-1.4.0/src/mx_bluesky/hyperion/external_interaction/ispyb}/__init__.py +0 -0
  334. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/ispyb/data_model.py +0 -0
  335. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/ispyb/exp_eye_store.py +0 -0
  336. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/external_interaction/ispyb/ispyb_utils.py +0 -0
  337. {mx_bluesky-1.2.0/tests → mx_bluesky-1.4.0/src/mx_bluesky/hyperion/external_interaction/nexus}/__init__.py +0 -0
  338. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/parameters/__init__.py +0 -0
  339. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/parameters/cli.py +0 -0
  340. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/resources/panda/panda-gridscan.yaml +0 -0
  341. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/hyperion/utils/context.py +0 -0
  342. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky/jupyter_example.ipynb +0 -0
  343. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky.egg-info/dependency_links.txt +0 -0
  344. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky.egg-info/entry_points.txt +0 -0
  345. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/src/mx_bluesky.egg-info/top_level.txt +0 -0
  346. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/start_jupyter.sh +0 -0
  347. {mx_bluesky-1.2.0/tests/system_tests → mx_bluesky-1.4.0/tests}/__init__.py +0 -0
  348. {mx_bluesky-1.2.0/tests/system_tests/hyperion → mx_bluesky-1.4.0/tests/system_tests}/__init__.py +0 -0
  349. {mx_bluesky-1.2.0/tests/system_tests/hyperion/experiment_plans → mx_bluesky-1.4.0/tests/system_tests/hyperion}/__init__.py +0 -0
  350. {mx_bluesky-1.2.0/tests/system_tests/hyperion/external_interaction → mx_bluesky-1.4.0/tests/system_tests/hyperion/experiment_plans}/__init__.py +0 -0
  351. {mx_bluesky-1.2.0/tests/system_tests/hyperion/external_interaction/callbacks → mx_bluesky-1.4.0/tests/system_tests/hyperion/external_interaction}/__init__.py +0 -0
  352. {mx_bluesky-1.2.0/tests/unit_tests → mx_bluesky-1.4.0/tests/system_tests/hyperion/external_interaction/callbacks}/__init__.py +0 -0
  353. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/external_interaction/test_config_service.py +0 -0
  354. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/external_interaction/test_exp_eye_dev.py +0 -0
  355. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/external_interaction/test_nexgen.py +0 -0
  356. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/test_aperturescatterguard_system.py +0 -0
  357. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/system_tests/hyperion/test_device_setups_and_cleanups.py +0 -0
  358. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/nexus_files/README.md +0 -0
  359. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/nexus_files/fake_data.h5 +0 -0
  360. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/nexus_files/rotation/ins_8_5.nxs +0 -0
  361. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/nexus_files/rotation/ins_8_5_expected_output.txt +0 -0
  362. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/nexus_files/rotation/ins_8_5_meta.h5.gz +0 -0
  363. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/nexus_files/rotation_unicode_metafile/ins_8_5.nxs +0 -0
  364. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/nexus_files/rotation_unicode_metafile/ins_8_5_expected_output.txt +0 -0
  365. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/nexus_files/rotation_unicode_metafile/ins_8_5_meta.h5.gz +0 -0
  366. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/parameter_json_files/test_oav_snapshot_params.json +0 -0
  367. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/scratch/README +0 -0
  368. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_OAVCentring.json +0 -0
  369. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_beamline_dcm_pitch_converter.txt +0 -0
  370. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  371. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  372. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_config.cfg +0 -0
  373. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_daq_configuration/domain/beamlineParameters +0 -0
  374. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  375. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  376. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_det_dist_converter.txt +0 -0
  377. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_display.configuration +0 -0
  378. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_jCameraManZoomLevels.xml +0 -0
  379. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_lookup_table.txt +0 -0
  380. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/test_data/test_mirror_focus.json +0 -0
  381. {mx_bluesky-1.2.0/tests/unit_tests/beamlines → mx_bluesky-1.4.0/tests/unit_tests}/__init__.py +0 -0
  382. {mx_bluesky-1.2.0/tests/unit_tests/beamlines/i24/serial → mx_bluesky-1.4.0/tests/unit_tests/beamlines}/__init__.py +0 -0
  383. {mx_bluesky-1.2.0/tests/unit_tests/beamlines/i24/serial/extruder → mx_bluesky-1.4.0/tests/unit_tests/beamlines/i24/serial}/__init__.py +0 -0
  384. {mx_bluesky-1.2.0/tests/unit_tests/beamlines/i24/serial/fixed_target → mx_bluesky-1.4.0/tests/unit_tests/beamlines/i24/serial/extruder}/__init__.py +0 -0
  385. {mx_bluesky-1.2.0/tests/unit_tests/beamlines/i24/serial/setup_beamline → mx_bluesky-1.4.0/tests/unit_tests/beamlines/i24/serial/fixed_target}/__init__.py +0 -0
  386. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/fixed_target/conftest.py +0 -0
  387. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/parameters/test_utils.py +0 -0
  388. {mx_bluesky-1.2.0/tests/unit_tests/hyperion → mx_bluesky-1.4.0/tests/unit_tests/beamlines/i24/serial/setup_beamline}/__init__.py +0 -0
  389. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/setup_beamline/test_pv_abstract.py +0 -0
  390. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/setup_beamline/test_setup_beamline.py +0 -0
  391. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/setup_beamline/test_zebra_plans.py +0 -0
  392. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/beamlines/i24/serial/test_dcid.py +0 -0
  393. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/device_setup_plans → mx_bluesky-1.4.0/tests/unit_tests/common}/__init__.py +0 -0
  394. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/experiment_plans → mx_bluesky-1.4.0/tests/unit_tests/common/utils}/__init__.py +0 -0
  395. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/external_interaction → mx_bluesky-1.4.0/tests/unit_tests/hyperion}/__init__.py +0 -0
  396. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/external_interaction/callbacks → mx_bluesky-1.4.0/tests/unit_tests/hyperion/device_setup_plans}/__init__.py +0 -0
  397. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/device_setup_plans/test_manipulate_sample.py +0 -0
  398. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/device_setup_plans/test_xbpm_feedback.py +0 -0
  399. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/external_interaction/callbacks/rotation → mx_bluesky-1.4.0/tests/unit_tests/hyperion/experiment_plans}/__init__.py +0 -0
  400. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_multi_rotation_scan_plan.py +0 -0
  401. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_optimise_attenuation_plan.py +0 -0
  402. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/experiment_plans/test_robot_load_then_centre.py +0 -0
  403. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/external_interaction/ispyb → mx_bluesky-1.4.0/tests/unit_tests/hyperion/external_interaction}/__init__.py +0 -0
  404. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/external_interaction/nexus → mx_bluesky-1.4.0/tests/unit_tests/hyperion/external_interaction/callbacks}/__init__.py +0 -0
  405. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/parameters → mx_bluesky-1.4.0/tests/unit_tests/hyperion/external_interaction/callbacks/rotation}/__init__.py +0 -0
  406. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/test_external_callbacks.py +0 -0
  407. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/test_plan_reactive_callback.py +0 -0
  408. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/test_zocalo_handler.py +0 -0
  409. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/xray_centre/__init__.py +0 -0
  410. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/xray_centre/conftest.py +0 -0
  411. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/xray_centre/test_ispyb_handler.py +0 -0
  412. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/xray_centre/test_ispyb_mapping.py +0 -0
  413. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/callbacks/xray_centre/test_nexus_handler.py +0 -0
  414. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/test_log → mx_bluesky-1.4.0/tests/unit_tests/hyperion/external_interaction/ispyb}/__init__.py +0 -0
  415. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/ispyb/conftest.py +0 -0
  416. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/ispyb/test_expeye_interaction.py +0 -0
  417. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/ispyb/test_gridscan_ispyb_store_3d.py +0 -0
  418. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/ispyb/test_rotation_ispyb_store.py +0 -0
  419. {mx_bluesky-1.2.0/tests/unit_tests/hyperion/utils → mx_bluesky-1.4.0/tests/unit_tests/hyperion/external_interaction/nexus}/__init__.py +0 -0
  420. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/nexus/test_compare_nexus_to_gda_exhaustively.py +0 -0
  421. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/nexus/test_nexus_utils.py +0 -0
  422. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/nexus/test_write_nexus.py +0 -0
  423. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/test_data/dummy_1_000001.h5 +0 -0
  424. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/test_data/dummy_1_000002.h5 +0 -0
  425. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/test_data/dummy_1_000003.h5 +0 -0
  426. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/test_ispyb_utils.py +0 -0
  427. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/external_interaction/test_write_rotation_nexus.py +0 -0
  428. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/test_exceptions.py +0 -0
  429. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/test_main_system.py +0 -0
  430. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/utils/test_callback_sim.py +0 -0
  431. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/hyperion/utils/test_context.py +0 -0
  432. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/tests/unit_tests/test_cli.py +0 -0
  433. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/beam_off_trickery.sh +0 -0
  434. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/build_docker_image.sh +0 -0
  435. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/build_imginfo.sh +0 -0
  436. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/deploy/deploy_edm_for_ssx.sh +0 -0
  437. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/deploy/test_deploy.py +0 -0
  438. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/dev_jaeger_container.sh +0 -0
  439. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/dls_dev_env.sh +0 -0
  440. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/docker/healthcheck.sh +0 -0
  441. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/graylog/Dockerfile +0 -0
  442. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/graylog/tcp_input.json +0 -0
  443. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/run_imginfo.sh +0 -0
  444. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/setup_graylog.sh +0 -0
  445. {mx_bluesky-1.2.0 → mx_bluesky-1.4.0}/utility_scripts/strip_metafile.py +0 -0
@@ -1,9 +1,11 @@
1
1
  # Changes here will be overwritten by Copier
2
- _commit: 2.2.0
2
+ _commit: 2.5.0
3
3
  _src_path: gh:DiamondLightSource/python-copier-template
4
4
  author_email: dominic.oram@diamond.ac.uk
5
5
  author_name: Dominic Oram
6
+ component_lifecycle: production
6
7
  component_owner: group:data-acquisition
8
+ component_type: library
7
9
  description: Bluesky tools for MX Beamlines at DLS
8
10
  distribution_name: mx-bluesky
9
11
  docker: true
@@ -3,7 +3,7 @@
3
3
  # The devcontainer should use the build target and run as root with podman
4
4
  # or docker with user namespaces.
5
5
  #
6
- FROM python:3.11 AS build
6
+ FROM python:3.12 AS build
7
7
 
8
8
  ARG PIP_OPTIONS
9
9
 
@@ -54,4 +54,4 @@ It is recommended that developers use a [vscode devcontainer](https://code.visua
54
54
 
55
55
  This project was created using the [Diamond Light Source Copier Template](https://github.com/DiamondLightSource/python-copier-template) for Python projects.
56
56
 
57
- 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.2.0/how-to.html).
57
+ 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.5.0/how-to.html).
@@ -1,3 +1,5 @@
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
@@ -6,6 +8,7 @@ from subprocess import CalledProcessError, check_output
6
8
 
7
9
 
8
10
  def report_output(stdout: bytes, label: str) -> list[str]:
11
+ """Print and return something received frm stdout."""
9
12
  ret = stdout.decode().strip().split("\n")
10
13
  print(f"{label}: {ret}")
11
14
  return ret
@@ -52,14 +55,12 @@ def get_versions(ref: str, add: str | None) -> list[str]:
52
55
  return versions
53
56
 
54
57
 
55
- 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."""
56
60
  org, repo_name = repository.split("/")
57
- pages_url = f"https://{org}.github.io"
58
- if repo_name != f"{org}.github.io":
59
- # Only add the repo name if it isn't the source for the org pages site
60
- pages_url += f"/{repo_name}"
61
61
  struct = [
62
- {"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
63
64
  ]
64
65
  text = json.dumps(struct, indent=2)
65
66
  print(f"JSON switcher:\n{text}")
@@ -67,6 +68,7 @@ def write_json(path: Path, repository: str, versions: str):
67
68
 
68
69
 
69
70
  def main(args=None):
71
+ """Parse args and write switcher."""
70
72
  parser = ArgumentParser(
71
73
  description="Make a versions.json file from gh-pages directories"
72
74
  )
@@ -15,3 +15,5 @@ jobs:
15
15
 
16
16
  - name: Publish to PyPI using trusted publishing
17
17
  uses: pypa/gh-action-pypi-publish@release/v1
18
+ with:
19
+ attestations: false
@@ -23,7 +23,7 @@ jobs:
23
23
  - name: Create GitHub Release
24
24
  # We pin to the SHA, not the tag, for security reasons.
25
25
  # https://docs.github.com/en/actions/learn-github-actions/security-hardening-for-github-actions#using-third-party-actions
26
- uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191 # v2.0.8
26
+ uses: softprops/action-gh-release@e7a8f85e1c67a31e6ed99a94b41bd0b71bbee6b8 # v2.0.9
27
27
  with:
28
28
  prerelease: ${{ contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc') }}
29
29
  files: "*"
@@ -21,7 +21,7 @@ jobs:
21
21
  strategy:
22
22
  matrix:
23
23
  runs-on: ["ubuntu-latest"] # can add windows-latest, macos-latest
24
- python-version: ["3.11"] # , "3.12"] # add 3.12 when p4p #145 is fixed
24
+ python-version: ["3.11", "3.12"]
25
25
  fail-fast: false
26
26
  uses: ./.github/workflows/_test.yml
27
27
  with:
@@ -80,6 +80,7 @@ instance/
80
80
 
81
81
  # Sphinx documentation
82
82
  docs/_build/
83
+ docs/_api
83
84
 
84
85
  # PyBuilder
85
86
  target/
@@ -26,6 +26,14 @@ repos:
26
26
  types: [python]
27
27
  require_serial: true
28
28
 
29
+ - id: import-contracts
30
+ name: Ensure import directionality
31
+ pass_filenames: false
32
+ language: system
33
+ entry: lint-imports
34
+ types: [python]
35
+ require_serial: false
36
+
29
37
  # Type checking
30
38
  - repo: https://github.com/pre-commit/mirrors-mypy
31
39
  rev: v1.4.1
@@ -0,0 +1,23 @@
1
+ // To use this you should obviously have these all in the parent directory
2
+ {
3
+ "folders": [
4
+ {
5
+ "path": ".."
6
+ },
7
+ {
8
+ "path": "../../dodal"
9
+ },
10
+ {
11
+ "path": "../../bluesky"
12
+ },
13
+ {
14
+ "path": "../../ophyd"
15
+ },
16
+ {
17
+ "path": "../../ophyd-async"
18
+ }
19
+ ],
20
+ "settings": {
21
+ "terminal.integrated.gpuAcceleration": "off"
22
+ }
23
+ }
@@ -1,11 +1,14 @@
1
1
  # The devcontainer should use the developer target and run as root with podman
2
2
  # or docker with user namespaces.
3
- ARG PYTHON_VERSION=3.11
3
+ ARG PYTHON_VERSION=3.12
4
4
  FROM python:${PYTHON_VERSION} AS developer
5
5
 
6
6
  # Add any system dependencies for the developer/build environment here
7
7
  RUN apt-get update && apt-get install -y --no-install-recommends \
8
8
  graphviz \
9
+ ffmpeg \
10
+ libsm6 \
11
+ libxext6 \
9
12
  && rm -rf /var/lib/apt/lists/*
10
13
 
11
14
  # Set up a virtual environment and put it in PATH
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mx-bluesky
3
- Version: 1.2.0
3
+ Version: 1.4.0
4
4
  Summary: Bluesky tools for MX Beamlines at DLS
5
5
  Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>
6
6
  License: Apache License
@@ -226,6 +226,7 @@ Requires-Dist: opencv-python
226
226
  Requires-Dist: opentelemetry-distro
227
227
  Requires-Dist: opentelemetry-exporter-otlp
228
228
  Requires-Dist: pydantic
229
+ Requires-Dist: pydantic-extra-types
229
230
  Requires-Dist: pyepics
230
231
  Requires-Dist: pyzmq
231
232
  Requires-Dist: requests
@@ -238,12 +239,13 @@ Requires-Dist: daq-config-server>=0.1.1
238
239
  Requires-Dist: ophyd==1.9.0
239
240
  Requires-Dist: ophyd-async>=0.3a5
240
241
  Requires-Dist: bluesky>=1.13.0a4
241
- Requires-Dist: dls-dodal==1.33.0
242
+ Requires-Dist: dls-dodal==1.35.0
242
243
  Provides-Extra: dev
243
244
  Requires-Dist: black; extra == "dev"
244
245
  Requires-Dist: build; extra == "dev"
245
246
  Requires-Dist: diff-cover; extra == "dev"
246
247
  Requires-Dist: GitPython; extra == "dev"
248
+ Requires-Dist: import-linter; extra == "dev"
247
249
  Requires-Dist: ipython; extra == "dev"
248
250
  Requires-Dist: mypy; extra == "dev"
249
251
  Requires-Dist: myst-parser; 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 mx_bluesky 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
+ mx_bluesky
@@ -0,0 +1,37 @@
1
+ {{ ('``' + fullname + '``') | underline }}
2
+
3
+ {%- set filtered_members = [] %}
4
+ {%- for item in members %}
5
+ {%- if item in functions + classes + exceptions + attributes %}
6
+ {% set _ = filtered_members.append(item) %}
7
+ {%- endif %}
8
+ {%- endfor %}
9
+
10
+ .. automodule:: {{ fullname }}
11
+ :members:
12
+
13
+ {% block modules %}
14
+ {% if modules %}
15
+ .. rubric:: Submodules
16
+
17
+ .. autosummary::
18
+ :toctree:
19
+ :template: custom-module-template.rst
20
+ :recursive:
21
+ {% for item in modules %}
22
+ {{ item }}
23
+ {%- endfor %}
24
+ {% endif %}
25
+ {% endblock %}
26
+
27
+ {% block members %}
28
+ {% if filtered_members %}
29
+ .. rubric:: Members
30
+
31
+ .. autosummary::
32
+ :nosignatures:
33
+ {% for item in filtered_members %}
34
+ {{ item }}
35
+ {%- endfor %}
36
+ {% endif %}
37
+ {% 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 sys
8
9
  from pathlib import Path
@@ -32,6 +33,8 @@ else:
32
33
  extensions = [
33
34
  # Use this for generating API docs
34
35
  "sphinx.ext.autodoc",
36
+ # and making summary tables at the top of API docs
37
+ "sphinx.ext.autosummary",
35
38
  # This can parse google style docstrings
36
39
  "sphinx.ext.napoleon",
37
40
  # For linking to external sphinx documentation
@@ -93,6 +96,12 @@ autodoc_member_order = "bysource"
93
96
  # Don't inherit docstrings from baseclasses
94
97
  autodoc_inherit_docstrings = False
95
98
 
99
+ # Document only what is in __all__
100
+ autosummary_ignore_module_all = False
101
+
102
+ # Add any paths that contain templates here, relative to this directory.
103
+ templates_path = ["_templates"]
104
+
96
105
  # Output graphviz directive produced images in a scalable format
97
106
  graphviz_output_format = "svg"
98
107
 
@@ -0,0 +1,57 @@
1
+ Deploy a New Release
2
+ ====================
3
+
4
+ **Remember to discuss any new deployments with the appropriate beamline scientist.**
5
+
6
+ The ``utility_scripts/deploy/deploy_mx_bluesky.py`` script will deploy the latest mx-bluesky version to a specified beamline. Deployments live in ``/dls_sw/ixx/software/bluesky/mx-bluesky_vX.X.X``. To do a new deployment you should run the deploy script from your mx-bluesky dev environment with e.g.
7
+ If you have just created a new release, you may need to run git fetch --tags to get the newest release.
8
+
9
+ .. code:: console
10
+
11
+ python ./utility_scripts/deploy/deploy_mx_bluesky.py i24
12
+
13
+
14
+ If you want to test the script for a specific beamline you can run:
15
+
16
+ .. code:: console
17
+
18
+ python ./deploy/deploy_mx_bluesky.py i03 --dev
19
+
20
+
21
+ which will create the beamline deployment of the new release in ``/scratch/30day_tmp/mx-bluesky_release_test``.
22
+
23
+
24
+ .. note::
25
+
26
+ When deploying on I24, the edm screens for serial crystallography will be deployed automatically along with the mx-bluesky release.
27
+
28
+
29
+ The script has a few additional optional arguments, which can be viewed with:
30
+
31
+ .. code:: console
32
+
33
+ python ./deploy/deploy_mx_bluesky.py -h
34
+
35
+
36
+ For building and deploying a Docker image please see :doc:`../../hyperion/deploying-hyperion`.
37
+
38
+
39
+ .. note::
40
+
41
+ On i03 the installation will succeed with error messages due to RedHat7 versions of a dependency being unavailable.
42
+ This results in the installation being incomplete, thus requiring the following post-installation steps:
43
+
44
+ First, on a RedHat8 workstation, run
45
+
46
+ .. code:: console
47
+
48
+ . ./.venv/bin/activate
49
+ pip install confluent-kafka
50
+
51
+ Then, on the control machine, run
52
+
53
+ .. code:: console
54
+
55
+ . ./.venv/bin/activate
56
+ pip install -e .
57
+ pip install -e ../dodal
@@ -0,0 +1,84 @@
1
+ Unit test performance
2
+ =====================
3
+
4
+ Ideally we want to keep the run-time of the unit tests down so that they are quick for developers to run locally.
5
+ Preferably they should run in under a minute.
6
+
7
+ General Guidelines
8
+ ------------------
9
+
10
+ Where a unit test waits for some event to happen, ``wait`` on the group to complete rather than adding a fixed
11
+ ``sleep``.
12
+
13
+ If testing a timeout, ensure that the timeout constant is either configurable or appropriately ``patch`` ed to a short
14
+ value e.g.
15
+ 0.1s
16
+
17
+ How to profile the unit tests
18
+ =============================
19
+
20
+ Sometimes tests can exhibit slowdowns for unknown reasons, in order to diagnose the cause it can be useful to profile
21
+ the test code.
22
+
23
+ The simplest way to find slow tests is to run ``pytest`` with the ``--durations`` option in order to find the slowest
24
+ tests.
25
+
26
+ e.g.
27
+
28
+ .. code-block:: bash
29
+
30
+ pytest -m "not (s03 or dlstbx)" --durations=10
31
+
32
+ in order to find the top 10 slowest tests
33
+
34
+ You can then often step through in the debugger to find lines which execute slowly.
35
+
36
+
37
+ More detailed profiling
38
+ =======================
39
+
40
+ Occasionally this is not sufficient. In which case more detailed profiling is necessary
41
+
42
+ Generating profiler output
43
+ --------------------------
44
+
45
+ You can install ``pytest-profiling`` to run the tests and generate profiling output
46
+
47
+ e.g.
48
+
49
+ .. code-block:: bash
50
+
51
+ pip install pytest-profiling
52
+ pytest --profile tests/unit_tests/hyperion/external_interaction/test_write_rotation_nexus.py::test_given_detector_bit_depth_changes_then_vds_datatype_as_expected
53
+
54
+
55
+ The output of this is quite brief but it will generate more detailed ``.prof`` files in the ``prof`` directory
56
+
57
+ To browse these files you need something useful. Snakeviz is a tool that can be used to browse the output:
58
+
59
+ .. code-block:: bash
60
+
61
+ cd prof
62
+ pip install snakeviz
63
+ snakeviz combined.prof
64
+
65
+ An alternative tool is py-spy.
66
+
67
+ e.g.
68
+
69
+ .. code-block:: bash
70
+
71
+ pip install py-spy
72
+ py-spy record -o profile.svg -- pytest -s tests/unit_tests/hyperion/experiment_plans/test_robot_load_then_centre.py::test_given_no_energy_supplied_when_robot_load_then_centre_current_energy_set_on_eiger
73
+
74
+ This will generator an interactive SVG flamechart that can be opened in a browser to see hot methods.
75
+
76
+ Alternatively something like
77
+
78
+ .. code-block:: bash
79
+
80
+ py-spy top -- pytest -s tests/unit_tests/hyperion/experiment_plans/test_robot_load_then_centre.py::test_given_no_energy_supplied_when_robot_load_then_centre_current_energy_set_on_eiger
81
+
82
+ to view a ``top`` -like updating view of where time is being spent. You will probably need to temporarily annotate the
83
+ test with
84
+ ``@pytest.mark.parametrize`` in order to make the tests loop sufficient times in order to observe.
@@ -33,6 +33,7 @@ Documentation is split into four categories, and each is also accessible from li
33
33
  how-to/update-tools
34
34
  how-to/create-a-release
35
35
  how-to/deploy-a-release
36
+ how-to/profile-tests
36
37
 
37
38
  +++
38
39
 
@@ -1,11 +1,11 @@
1
1
  Building a deployable Docker image
2
2
  ==================================
3
3
 
4
- Release builds of container images should be built by the github CI on release, ad-hoc builds can be performed via
4
+ Release builds of container images should be built by the github CI on release, ad-hoc builds can be performed via
5
5
  manual invocation of the Publish Docker Image workflow.
6
6
 
7
7
  Development builds of container images can be made by running the ``utility_scripts/build_docker_image.sh`` script.
8
- By default it will both build and push the image unless you specify ``--no-build`` or ``--no-push``. To push an image
8
+ By default it will both build and push the image unless you specify ``--no-build`` or ``--no-push``. To push an image
9
9
  you will first need to create a GH personal access token and then log in with podman as described below.
10
10
 
11
11
  Pushing the docker image
@@ -79,16 +79,16 @@ Then create and deploy the helm release
79
79
 
80
80
  ./utility_scripts/deploy/deploy_hyperion_to_k8s.sh --beamline=<beamline> --checkout-to-prod hyperion
81
81
 
82
- This will run the ``deploy_hyperion.py`` script to deploy the latest hyperion to ``/dls_sw``.
82
+ This will run the ``deploy_mx_bluesky.py`` script to deploy the latest hyperion to ``/dls_sw``.
83
83
  You will be prompted to log into the beamline cluster, then it will create a helm release "hyperion".
84
- The source folders will be mounted as bind mounts to allow the pod to pick up changes in production.
84
+ The source folders will be mounted as bind mounts to allow the pod to pick up changes in production.
85
85
  For production these are expected to be in the normal place defined in ``values.yaml``.
86
86
 
87
87
  Development deployment
88
88
  ~~~~~~~~~~~~~~~~~~~~~~
89
89
 
90
- From a development ``hyperion`` workspace, either with a release image or using a development image built with the
91
- script
90
+ From a development ``hyperion`` workspace, either with a release image or using a development image built with the
91
+ script
92
92
  above, you install a dev deployment to the cluster you are currently logged into with ``kubectl``:
93
93
 
94
94
  ::
@@ -96,12 +96,12 @@ above, you install a dev deployment to the cluster you are currently logged into
96
96
  ./utility_scripts/deploy/deploy_hyperion_to_k8s.sh --dev --beamline=<beamline> --repository=<your image repo> hyperion-test
97
97
 
98
98
 
99
- The dev deployment bind-mounts the current ``hyperion`` workspace and ``../dodal`` into the container so that you can
100
- run against your own development code. **Clusters do not allow bind mounts from arbitrary directories so
99
+ The dev deployment bind-mounts the current ``hyperion`` workspace and ``../dodal`` into the container so that you can
100
+ run against your own development code. **Clusters do not allow bind mounts from arbitrary directories so
101
101
  your workspace will have to be in a permitted directory such as your home directory.**
102
102
 
103
- By default the script will log into the ``argus`` cluster, if you want to deploy to an alternate cluster,
104
- log in with ``kubectl set-context --current --namespace=<NAMESPACE>`` and then specify ``--no-login`` when running the
103
+ By default the script will log into the ``argus`` cluster, if you want to deploy to an alternate cluster,
104
+ log in with ``kubectl set-context --current --namespace=<NAMESPACE>`` and then specify ``--no-login`` when running the
105
105
  script
106
106
 
107
107
  Please note, the deployment script is intended to be run from a checked-out matching version of the git repository.
@@ -49,7 +49,7 @@ side-bar.
49
49
  :caption: Reference
50
50
  :maxdepth: 1
51
51
 
52
- reference/api
52
+ ../_api/mx_bluesky
53
53
  ../genindex
54
54
 
55
55
  +++
@@ -106,7 +106,7 @@ spec:
106
106
  containerPort: {{ .Values.hyperion.containerPort }}
107
107
  protocol: TCP
108
108
  env:
109
- - name: HYPERION_LOG_DIR
109
+ - name: LOG_DIR
110
110
  value: /var/log/bluesky
111
111
  - name: BEAMLINE
112
112
  value: "{{ .Values.hyperion.beamline }}"
@@ -28,6 +28,12 @@ jobs:
28
28
  - name: Run ruff
29
29
  run: ruff check .
30
30
 
31
+ - name: Install import linter
32
+ run: pip install import-linter
33
+
34
+ - name: Run import linter
35
+ run: lint-imports
36
+
31
37
  tests:
32
38
  if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository
33
39
  runs-on: ubuntu-latest
@@ -29,7 +29,7 @@ install_requires =
29
29
  opentelemetry-exporter-jaeger
30
30
  ophyd
31
31
  semver
32
- dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git@0aabdb389f65a30e629cec60a36c3b5298b7647f
32
+ dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git@0176e590554f2c6d8883bd922d02d3c2d7c27ad1
33
33
  pydantic<2.0 # See https://github.com/DiamondLightSource/hyperion/issues/774
34
34
  scipy
35
35
  pyzmq
@@ -14,7 +14,7 @@ description = "Bluesky tools for MX Beamlines at DLS"
14
14
  dependencies = [
15
15
  #
16
16
  # If a constraint is not set here or if the dependency is pinned to a hash
17
- # it will be auto-pinned to the latest release version by the pre-release workflow
17
+ # it will be auto-pinned to the latest release version by the pre-release workflow
18
18
  #
19
19
  "annotated_types",
20
20
  "caproto",
@@ -25,10 +25,11 @@ dependencies = [
25
25
  "matplotlib",
26
26
  "nexgen",
27
27
  "numpy",
28
- "opencv-python", # Needed for I24 ssx moveonclick. To be changed to headless once this is moved to separate ui.
28
+ "opencv-python", # Needed for I24 ssx moveonclick. To be changed to headless once this is moved to separate ui.
29
29
  "opentelemetry-distro",
30
30
  "opentelemetry-exporter-otlp",
31
31
  "pydantic",
32
+ "pydantic-extra-types",
32
33
  "pyepics",
33
34
  "pyzmq",
34
35
  "requests",
@@ -39,13 +40,13 @@ dependencies = [
39
40
  #
40
41
  # These dependencies may be issued as pre-release versions and should have a pin constraint
41
42
  # as by default pip-install will not upgrade to a pre-release.
42
- #
43
+ #
43
44
  "blueapi >= 0.5.0",
44
45
  "daq-config-server >= 0.1.1",
45
46
  "ophyd == 1.9.0",
46
47
  "ophyd-async >= 0.3a5",
47
48
  "bluesky >= 1.13.0a4",
48
- "dls-dodal == 1.33.0",
49
+ "dls-dodal == 1.35.0",
49
50
  ]
50
51
 
51
52
 
@@ -62,6 +63,7 @@ dev = [
62
63
  # "copier",
63
64
  "diff-cover",
64
65
  "GitPython",
66
+ "import-linter",
65
67
  "ipython",
66
68
  "mypy",
67
69
  "myst-parser",
@@ -105,11 +107,13 @@ name = "Dominic Oram"
105
107
  version_file = "src/mx_bluesky/_version.py"
106
108
 
107
109
  [tool.pyright]
108
- reportMissingImports = false # Ignore missing stubs in imported modules
110
+ typeCheckingMode = "standard"
111
+ reportMissingImports = false # Ignore missing stubs in imported modules
109
112
 
110
113
  [tool.pytest.ini_options]
111
114
  # Run pytest with all our checkers, and don't spam us with massive tracebacks on error
112
115
  asyncio_mode = "auto"
116
+ asyncio_default_fixture_loop_scope = "function"
113
117
  markers = [
114
118
  "s03: marks tests as requiring the s03 simulator running (deselect with '-m \"not s03\"')",
115
119
  "dlstbx: marks tests as requiring dlstbx (deselect with '-m \"not dlstbx\"')",
@@ -122,8 +126,6 @@ addopts = """
122
126
  # https://iscinumpy.gitlab.io/post/bound-version-constraints/#watch-for-warnings
123
127
  filterwarnings = [
124
128
  "error",
125
- # Ignore incorrect errors from bluesky (remove when https://github.com/bluesky/bluesky/issues/1797 is released)
126
- "ignore:((.|\n)*)was never iterated.*:RuntimeWarning",
127
129
  # Ignore deprecation warning from sqlalchemy
128
130
  "ignore::sqlalchemy.exc.MovedIn20Warning",
129
131
  # Ignore deprecation warning from setuptools_dso (remove when https://github.com/epics-base/setuptools_dso/issues/36 is released)
@@ -134,10 +136,17 @@ filterwarnings = [
134
136
  "ignore:(.*)unclosed file(.*)name='(.*)dodal.log'(.*):ResourceWarning",
135
137
  "ignore:(.*)unclosed <socket(.*):ResourceWarning",
136
138
  "ignore:(.*)unclosed event loop(.*):ResourceWarning",
137
- # Ignore pydantic 2 issues from blueapi, see https://github.com/DiamondLightSource/blueapi/issues/622
138
- "ignore::DeprecationWarning:blueapi",
139
139
  # Ignore deprecation warning from python-workflows https://github.com/DiamondLightSource/python-workflows/issues/180
140
140
  "ignore:.*pkg_resources.*:DeprecationWarning",
141
+ # Ignore deprecation warning that gets promoted to SystemError from somewhere
142
+ # in protobuf https://github.com/protocolbuffers/protobuf/issues/12186
143
+ # SystemError: <class 'DeprecationWarning'> returned a result with an exception set"
144
+ # The fix for this is in https://github.com/protocolbuffers/protobuf/pull/15999
145
+ # But this fix exists only in 3.27.0<=protobuf<4 and protobuf>=v5, not in 4.x that we depend on
146
+ # https://github.com/open-telemetry/opentelemetry-python/pull/4206/commits addresses this but is not yet in a release
147
+ "ignore:.*custom tp_new.*:DeprecationWarning",
148
+ # Ignore warning about deprecated throw() call https://github.com/bluesky/bluesky/issues/1817
149
+ "ignore:.*signature of throw\\(\\) is deprecated.*:DeprecationWarning",
141
150
  ]
142
151
  # Doctest python code in docs, python code in src docstrings, test functions in tests
143
152
  testpaths = "docs src tests/unit_tests"
@@ -198,3 +207,23 @@ lint.extend-ignore = [
198
207
 
199
208
  [tool.mypy]
200
209
  plugins = ["pydantic.mypy"]
210
+
211
+ [tool.importlinter]
212
+ root_package = "mx_bluesky"
213
+
214
+ [[tool.importlinter.contracts]]
215
+ name = "Common does not import from apps"
216
+ type = "forbidden"
217
+ source_modules = "mx_bluesky.common"
218
+ forbidden_modules = ["mx_bluesky.beamlines", "mx_bluesky.hyperion"]
219
+
220
+ [[tool.importlinter.contracts]]
221
+ name = "Beamlines do not import from each other"
222
+ type = "independence"
223
+ modules = "mx_bluesky.beamlines.*"
224
+
225
+ [[tool.importlinter.contracts]]
226
+ name = "Beamlines do not import from hyperion"
227
+ type = "forbidden"
228
+ source_modules = "mx_bluesky.beamlines.*"
229
+ forbidden_modules = "mx_bluesky.hyperion"