zaber-motion 7.13.0__py3-none-win32.whl → 7.14.0__py3-none-win32.whl

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 (492) hide show
  1. zaber_motion/__init__.py +103 -103
  2. zaber_motion/ascii/__init__.py +73 -73
  3. zaber_motion/ascii/all_axes.py +352 -352
  4. zaber_motion/ascii/axis.py +1673 -1673
  5. zaber_motion/ascii/axis_group.py +391 -391
  6. zaber_motion/ascii/axis_settings.py +752 -752
  7. zaber_motion/ascii/connection.py +1174 -1174
  8. zaber_motion/ascii/device.py +908 -908
  9. zaber_motion/ascii/device_io.py +1170 -1170
  10. zaber_motion/ascii/device_settings.py +735 -735
  11. zaber_motion/ascii/lockstep.py +1184 -1184
  12. zaber_motion/ascii/oscilloscope.py +635 -635
  13. zaber_motion/ascii/oscilloscope_data.py +240 -240
  14. zaber_motion/ascii/pvt.py +105 -105
  15. zaber_motion/ascii/pvt_buffer.py +146 -146
  16. zaber_motion/ascii/pvt_io.py +630 -630
  17. zaber_motion/ascii/pvt_sequence.py +1530 -1530
  18. zaber_motion/ascii/servo_tuner.py +637 -637
  19. zaber_motion/ascii/setting_constants.py +1755 -1755
  20. zaber_motion/ascii/storage.py +905 -905
  21. zaber_motion/ascii/stream.py +2182 -2182
  22. zaber_motion/ascii/stream_buffer.py +101 -101
  23. zaber_motion/ascii/stream_io.py +700 -700
  24. zaber_motion/ascii/streams.py +105 -105
  25. zaber_motion/ascii/transport.py +202 -202
  26. zaber_motion/ascii/trigger.py +886 -886
  27. zaber_motion/ascii/triggers.py +241 -241
  28. zaber_motion/ascii/warning_flags.py +178 -178
  29. zaber_motion/ascii/warnings.py +152 -152
  30. zaber_motion/async_utils.py +46 -46
  31. zaber_motion/binary/__init__.py +14 -14
  32. zaber_motion/binary/connection.py +648 -648
  33. zaber_motion/binary/device.py +924 -924
  34. zaber_motion/binary/device_settings.py +121 -121
  35. zaber_motion/bindings.py +50 -50
  36. zaber_motion/call.py +198 -198
  37. zaber_motion/convert_exception.py +138 -138
  38. zaber_motion/dto/__init__.py +11 -11
  39. zaber_motion/dto/ascii/__init__.py +46 -46
  40. zaber_motion/dto/ascii/alert_event.py +110 -110
  41. zaber_motion/dto/ascii/axis_identity.py +134 -134
  42. zaber_motion/dto/ascii/axis_type.py +14 -14
  43. zaber_motion/dto/ascii/can_set_state_axis_response.py +69 -69
  44. zaber_motion/dto/ascii/can_set_state_device_response.py +75 -75
  45. zaber_motion/dto/ascii/conversion_factor.py +81 -81
  46. zaber_motion/dto/ascii/device_identity.py +136 -136
  47. zaber_motion/dto/ascii/device_io_info.py +108 -108
  48. zaber_motion/dto/ascii/digital_output_action.py +13 -13
  49. zaber_motion/dto/ascii/get_axis_setting.py +64 -64
  50. zaber_motion/dto/ascii/get_axis_setting_result.py +81 -81
  51. zaber_motion/dto/ascii/get_setting.py +88 -88
  52. zaber_motion/dto/ascii/get_setting_result.py +87 -87
  53. zaber_motion/dto/ascii/io_port_label.py +84 -84
  54. zaber_motion/dto/ascii/io_port_type.py +14 -14
  55. zaber_motion/dto/ascii/lockstep_axes.py +108 -108
  56. zaber_motion/dto/ascii/measurement_sequence.py +73 -73
  57. zaber_motion/dto/ascii/message_type.py +14 -14
  58. zaber_motion/dto/ascii/optional_measurement_sequence.py +71 -71
  59. zaber_motion/dto/ascii/oscilloscope_capture_properties.py +116 -116
  60. zaber_motion/dto/ascii/oscilloscope_data_source.py +11 -11
  61. zaber_motion/dto/ascii/paramset_info.py +92 -92
  62. zaber_motion/dto/ascii/pid_tuning.py +125 -125
  63. zaber_motion/dto/ascii/pvt_axis_definition.py +70 -70
  64. zaber_motion/dto/ascii/pvt_axis_type.py +11 -11
  65. zaber_motion/dto/ascii/pvt_csv_data.py +75 -75
  66. zaber_motion/dto/ascii/pvt_mode.py +12 -12
  67. zaber_motion/dto/ascii/pvt_sequence_data.py +99 -99
  68. zaber_motion/dto/ascii/response.py +137 -137
  69. zaber_motion/dto/ascii/servo_tuning_param.py +66 -66
  70. zaber_motion/dto/ascii/servo_tuning_paramset.py +21 -21
  71. zaber_motion/dto/ascii/set_state_axis_response.py +75 -75
  72. zaber_motion/dto/ascii/set_state_device_response.py +80 -80
  73. zaber_motion/dto/ascii/simple_tuning.py +118 -118
  74. zaber_motion/dto/ascii/simple_tuning_param_definition.py +100 -100
  75. zaber_motion/dto/ascii/stream_axis_definition.py +70 -70
  76. zaber_motion/dto/ascii/stream_axis_type.py +11 -11
  77. zaber_motion/dto/ascii/stream_mode.py +13 -13
  78. zaber_motion/dto/ascii/trigger_action.py +12 -12
  79. zaber_motion/dto/ascii/trigger_condition.py +15 -15
  80. zaber_motion/dto/ascii/trigger_enabled_state.py +68 -68
  81. zaber_motion/dto/ascii/trigger_operation.py +12 -12
  82. zaber_motion/dto/ascii/trigger_state.py +114 -114
  83. zaber_motion/dto/ascii/unknown_response_event.py +137 -137
  84. zaber_motion/dto/axis_address.py +74 -74
  85. zaber_motion/dto/binary/__init__.py +11 -11
  86. zaber_motion/dto/binary/binary_settings.py +74 -74
  87. zaber_motion/dto/binary/command_code.py +106 -106
  88. zaber_motion/dto/binary/device_identity.py +156 -156
  89. zaber_motion/dto/binary/device_type.py +12 -12
  90. zaber_motion/dto/binary/error_code.py +101 -101
  91. zaber_motion/dto/binary/message.py +91 -91
  92. zaber_motion/dto/binary/reply_code.py +16 -16
  93. zaber_motion/dto/binary/reply_only_event.py +91 -91
  94. zaber_motion/dto/binary/unknown_response_event.py +91 -91
  95. zaber_motion/dto/channel_address.py +74 -74
  96. zaber_motion/dto/device_db_source.py +66 -66
  97. zaber_motion/dto/device_db_source_type.py +11 -11
  98. zaber_motion/dto/exceptions/__init__.py +24 -24
  99. zaber_motion/dto/exceptions/binary_command_failed_exception_data.py +57 -57
  100. zaber_motion/dto/exceptions/command_failed_exception_data.py +151 -151
  101. zaber_motion/dto/exceptions/command_too_long_exception_data.py +98 -98
  102. zaber_motion/dto/exceptions/device_address_conflict_exception_data.py +63 -63
  103. zaber_motion/dto/exceptions/device_db_failed_exception_data.py +74 -74
  104. zaber_motion/dto/exceptions/device_db_inner_error.py +85 -85
  105. zaber_motion/dto/exceptions/g_code_execution_exception_data.py +75 -75
  106. zaber_motion/dto/exceptions/g_code_syntax_exception_data.py +75 -75
  107. zaber_motion/dto/exceptions/invalid_packet_exception_data.py +63 -63
  108. zaber_motion/dto/exceptions/invalid_pvt_point.py +69 -69
  109. zaber_motion/dto/exceptions/invalid_response_exception_data.py +51 -51
  110. zaber_motion/dto/exceptions/movement_failed_exception_data.py +104 -104
  111. zaber_motion/dto/exceptions/movement_interrupted_exception_data.py +104 -104
  112. zaber_motion/dto/exceptions/operation_failed_exception_data.py +104 -104
  113. zaber_motion/dto/exceptions/pvt_execution_exception_data.py +86 -86
  114. zaber_motion/dto/exceptions/pvt_movement_failed_exception_data.py +69 -69
  115. zaber_motion/dto/exceptions/pvt_movement_interrupted_exception_data.py +69 -69
  116. zaber_motion/dto/exceptions/set_device_state_exception_data.py +176 -176
  117. zaber_motion/dto/exceptions/set_peripheral_state_exception_data.py +121 -121
  118. zaber_motion/dto/exceptions/stream_execution_exception_data.py +63 -63
  119. zaber_motion/dto/exceptions/stream_movement_failed_exception_data.py +69 -69
  120. zaber_motion/dto/exceptions/stream_movement_interrupted_exception_data.py +69 -69
  121. zaber_motion/dto/firmware_version.py +91 -91
  122. zaber_motion/dto/gcode/__init__.py +9 -9
  123. zaber_motion/dto/gcode/axis_definition.py +74 -74
  124. zaber_motion/dto/gcode/axis_mapping.py +69 -69
  125. zaber_motion/dto/gcode/axis_transformation.py +79 -79
  126. zaber_motion/dto/gcode/device_definition.py +99 -99
  127. zaber_motion/dto/gcode/translate_message.py +87 -87
  128. zaber_motion/dto/gcode/translate_result.py +79 -79
  129. zaber_motion/dto/gcode/translator_config.py +84 -84
  130. zaber_motion/dto/log_output_mode.py +13 -13
  131. zaber_motion/dto/measurement.py +67 -67
  132. zaber_motion/dto/microscopy/__init__.py +6 -6
  133. zaber_motion/dto/microscopy/autofocus_status.py +57 -57
  134. zaber_motion/dto/microscopy/microscope_config.py +159 -159
  135. zaber_motion/dto/microscopy/third_party_components.py +55 -55
  136. zaber_motion/dto/microscopy/wdi_autofocus_provider_status.py +57 -57
  137. zaber_motion/dto/named_parameter.py +64 -64
  138. zaber_motion/dto/product/__init__.py +5 -5
  139. zaber_motion/dto/product/process_controller_mode.py +13 -13
  140. zaber_motion/dto/product/process_controller_source.py +72 -72
  141. zaber_motion/dto/product/process_controller_source_sensor.py +11 -11
  142. zaber_motion/dto/requests/__init__.py +256 -254
  143. zaber_motion/dto/requests/alert_event_wrapper.py +82 -82
  144. zaber_motion/dto/requests/autofocus_focus_request.py +131 -131
  145. zaber_motion/dto/requests/autofocus_get_objective_params_request.py +121 -121
  146. zaber_motion/dto/requests/autofocus_get_objective_params_response.py +56 -56
  147. zaber_motion/dto/requests/autofocus_get_status_response.py +50 -50
  148. zaber_motion/dto/requests/autofocus_set_objective_params_request.py +141 -141
  149. zaber_motion/dto/requests/axes_empty_request.py +95 -95
  150. zaber_motion/dto/requests/axes_get_setting_request.py +121 -121
  151. zaber_motion/dto/requests/axes_move_request.py +114 -114
  152. zaber_motion/dto/requests/axis_empty_request.py +79 -79
  153. zaber_motion/dto/requests/axis_move_type.py +12 -12
  154. zaber_motion/dto/requests/axis_to_string_request.py +88 -88
  155. zaber_motion/dto/requests/binary_device_detect_request.py +56 -56
  156. zaber_motion/dto/requests/binary_device_detect_response.py +57 -57
  157. zaber_motion/dto/requests/binary_device_get_setting_request.py +89 -89
  158. zaber_motion/dto/requests/binary_device_home_request.py +88 -88
  159. zaber_motion/dto/requests/binary_device_move_request.py +111 -111
  160. zaber_motion/dto/requests/binary_device_set_setting_request.py +100 -100
  161. zaber_motion/dto/requests/binary_device_stop_request.py +88 -88
  162. zaber_motion/dto/requests/binary_generic_with_units_request.py +122 -122
  163. zaber_motion/dto/requests/binary_message_collection.py +56 -56
  164. zaber_motion/dto/requests/binary_reply_only_event_wrapper.py +82 -82
  165. zaber_motion/dto/requests/bool_response.py +43 -43
  166. zaber_motion/dto/requests/can_set_state_axis_response.py +60 -60
  167. zaber_motion/dto/requests/can_set_state_request.py +100 -100
  168. zaber_motion/dto/requests/channel_on.py +84 -84
  169. zaber_motion/dto/requests/channel_set_intensity.py +90 -90
  170. zaber_motion/dto/requests/check_version_request.py +54 -54
  171. zaber_motion/dto/requests/custom_interface_close_request.py +60 -60
  172. zaber_motion/dto/requests/custom_interface_open_response.py +51 -51
  173. zaber_motion/dto/requests/custom_interface_read_request.py +51 -51
  174. zaber_motion/dto/requests/custom_interface_write_request.py +60 -60
  175. zaber_motion/dto/requests/device_cancel_all_outputs_schedule_request.py +80 -80
  176. zaber_motion/dto/requests/device_cancel_output_schedule_request.py +84 -84
  177. zaber_motion/dto/requests/device_convert_setting_request.py +116 -116
  178. zaber_motion/dto/requests/device_detect_request.py +68 -68
  179. zaber_motion/dto/requests/device_detect_response.py +57 -57
  180. zaber_motion/dto/requests/device_empty_request.py +65 -65
  181. zaber_motion/dto/requests/device_get_all_analog_io_request.py +74 -74
  182. zaber_motion/dto/requests/device_get_all_analog_io_response.py +54 -54
  183. zaber_motion/dto/requests/device_get_all_digital_io_request.py +74 -74
  184. zaber_motion/dto/requests/device_get_all_digital_io_response.py +46 -46
  185. zaber_motion/dto/requests/device_get_analog_io_request.py +88 -88
  186. zaber_motion/dto/requests/device_get_digital_io_request.py +88 -88
  187. zaber_motion/dto/requests/device_get_setting_request.py +100 -100
  188. zaber_motion/dto/requests/device_get_storage_request.py +93 -93
  189. zaber_motion/dto/requests/device_get_warnings_request.py +84 -84
  190. zaber_motion/dto/requests/device_get_warnings_response.py +51 -51
  191. zaber_motion/dto/requests/device_home_request.py +84 -84
  192. zaber_motion/dto/requests/device_identify_request.py +77 -77
  193. zaber_motion/dto/requests/device_move_request.py +177 -177
  194. zaber_motion/dto/requests/device_move_sin_request.py +140 -140
  195. zaber_motion/dto/requests/device_multi_get_setting_request.py +118 -118
  196. zaber_motion/dto/requests/device_on_all_request.py +56 -56
  197. zaber_motion/dto/requests/device_on_all_response.py +57 -57
  198. zaber_motion/dto/requests/device_restore_request.py +84 -84
  199. zaber_motion/dto/requests/device_set_all_analog_outputs_request.py +82 -82
  200. zaber_motion/dto/requests/device_set_all_analog_outputs_schedule_request.py +121 -121
  201. zaber_motion/dto/requests/device_set_all_digital_outputs_request.py +83 -83
  202. zaber_motion/dto/requests/device_set_all_digital_outputs_schedule_request.py +122 -122
  203. zaber_motion/dto/requests/device_set_analog_output_request.py +90 -90
  204. zaber_motion/dto/requests/device_set_analog_output_schedule_request.py +124 -124
  205. zaber_motion/dto/requests/device_set_digital_output_request.py +91 -91
  206. zaber_motion/dto/requests/device_set_digital_output_schedule_request.py +125 -125
  207. zaber_motion/dto/requests/device_set_lowpass_filter_request.py +102 -102
  208. zaber_motion/dto/requests/device_set_setting_bool_request.py +93 -93
  209. zaber_motion/dto/requests/device_set_setting_int_request.py +102 -102
  210. zaber_motion/dto/requests/device_set_setting_request.py +111 -111
  211. zaber_motion/dto/requests/device_set_setting_str_request.py +97 -97
  212. zaber_motion/dto/requests/device_set_storage_bool_request.py +93 -93
  213. zaber_motion/dto/requests/device_set_storage_number_request.py +99 -99
  214. zaber_motion/dto/requests/device_set_storage_request.py +102 -102
  215. zaber_motion/dto/requests/device_set_unit_conversions_request.py +108 -108
  216. zaber_motion/dto/requests/device_stop_request.py +84 -84
  217. zaber_motion/dto/requests/device_storage_list_keys_request.py +88 -88
  218. zaber_motion/dto/requests/device_storage_request.py +88 -88
  219. zaber_motion/dto/requests/device_type.py +8 -8
  220. zaber_motion/dto/requests/device_wait_until_idle_request.py +84 -84
  221. zaber_motion/dto/requests/disconnected_event.py +101 -101
  222. zaber_motion/dto/requests/double_array_response.py +54 -54
  223. zaber_motion/dto/requests/double_response.py +48 -48
  224. zaber_motion/dto/requests/driver_enable_request.py +90 -90
  225. zaber_motion/dto/requests/empty_autofocus_request.py +107 -107
  226. zaber_motion/dto/requests/empty_request.py +38 -38
  227. zaber_motion/dto/requests/errors.py +68 -68
  228. zaber_motion/dto/requests/find_device_request.py +65 -65
  229. zaber_motion/dto/requests/find_device_response.py +51 -51
  230. zaber_motion/dto/requests/forget_devices_request.py +71 -71
  231. zaber_motion/dto/requests/gateway_event.py +45 -45
  232. zaber_motion/dto/requests/gateway_request.py +45 -45
  233. zaber_motion/dto/requests/gateway_response.py +69 -69
  234. zaber_motion/dto/requests/generic_binary_request.py +107 -107
  235. zaber_motion/dto/requests/generic_command_request.py +107 -107
  236. zaber_motion/dto/requests/generic_command_response_collection.py +56 -56
  237. zaber_motion/dto/requests/get_all_io_port_labels_response.py +56 -56
  238. zaber_motion/dto/requests/get_axis_setting_results.py +56 -56
  239. zaber_motion/dto/requests/get_io_port_label_request.py +91 -91
  240. zaber_motion/dto/requests/get_setting_results.py +56 -56
  241. zaber_motion/dto/requests/get_simple_tuning_param_definition_response.py +56 -56
  242. zaber_motion/dto/requests/int_64_response.py +51 -51
  243. zaber_motion/dto/requests/int_array_response.py +57 -57
  244. zaber_motion/dto/requests/int_request.py +51 -51
  245. zaber_motion/dto/requests/int_response.py +51 -51
  246. zaber_motion/dto/requests/interface_empty_request.py +51 -51
  247. zaber_motion/dto/requests/interface_type.py +11 -11
  248. zaber_motion/dto/requests/load_paramset.py +102 -102
  249. zaber_motion/dto/requests/lockstep_disable_request.py +84 -84
  250. zaber_motion/dto/requests/lockstep_empty_request.py +79 -79
  251. zaber_motion/dto/requests/lockstep_enable_request.py +99 -99
  252. zaber_motion/dto/requests/lockstep_get_axis_numbers_response.py +57 -57
  253. zaber_motion/dto/requests/lockstep_get_request.py +91 -91
  254. zaber_motion/dto/requests/lockstep_home_request.py +84 -84
  255. zaber_motion/dto/requests/lockstep_move_request.py +163 -163
  256. zaber_motion/dto/requests/lockstep_move_sin_request.py +140 -140
  257. zaber_motion/dto/requests/lockstep_set_request.py +116 -116
  258. zaber_motion/dto/requests/lockstep_stop_request.py +84 -84
  259. zaber_motion/dto/requests/lockstep_wait_until_idle_request.py +84 -84
  260. zaber_motion/dto/requests/microscope_config_response.py +50 -50
  261. zaber_motion/dto/requests/microscope_empty_request.py +65 -65
  262. zaber_motion/dto/requests/microscope_find_request.py +63 -63
  263. zaber_motion/dto/requests/microscope_init_request.py +70 -70
  264. zaber_motion/dto/requests/microscope_trigger_camera_request.py +107 -107
  265. zaber_motion/dto/requests/objective_changer_change_request.py +119 -119
  266. zaber_motion/dto/requests/objective_changer_create_response.py +79 -79
  267. zaber_motion/dto/requests/objective_changer_get_current_response.py +51 -51
  268. zaber_motion/dto/requests/objective_changer_request.py +93 -93
  269. zaber_motion/dto/requests/objective_changer_set_request.py +116 -116
  270. zaber_motion/dto/requests/open_binary_interface_request.py +100 -100
  271. zaber_motion/dto/requests/open_interface_request.py +159 -159
  272. zaber_motion/dto/requests/open_interface_response.py +51 -51
  273. zaber_motion/dto/requests/oscilloscope_add_io_channel_request.py +91 -91
  274. zaber_motion/dto/requests/oscilloscope_add_setting_channel_request.py +88 -88
  275. zaber_motion/dto/requests/oscilloscope_data_get_request.py +63 -63
  276. zaber_motion/dto/requests/oscilloscope_data_get_sample_time_request.py +77 -77
  277. zaber_motion/dto/requests/oscilloscope_data_get_samples_response.py +54 -54
  278. zaber_motion/dto/requests/oscilloscope_data_identifier.py +51 -51
  279. zaber_motion/dto/requests/oscilloscope_read_response.py +57 -57
  280. zaber_motion/dto/requests/oscilloscope_request.py +65 -65
  281. zaber_motion/dto/requests/oscilloscope_start_request.py +79 -79
  282. zaber_motion/dto/requests/prepare_command_request.py +108 -108
  283. zaber_motion/dto/requests/process_on.py +107 -107
  284. zaber_motion/dto/requests/pvt_buffer_get_sequence_data_request.py +79 -79
  285. zaber_motion/dto/requests/pvt_csv_request.py +59 -59
  286. zaber_motion/dto/requests/pvt_generate_positions_request.py +74 -74
  287. zaber_motion/dto/requests/pvt_generate_velocities_and_times_request.py +96 -96
  288. zaber_motion/dto/requests/pvt_generate_velocities_request.py +93 -93
  289. zaber_motion/dto/requests/pvt_load_csv_request.py +45 -45
  290. zaber_motion/dto/requests/pvt_point_request.py +145 -145
  291. zaber_motion/dto/requests/pvt_points_request.py +147 -147
  292. zaber_motion/dto/requests/pvt_save_csv_request.py +74 -74
  293. zaber_motion/dto/requests/pvt_submit_sequence_data_request.py +93 -93
  294. zaber_motion/dto/requests/renumber_request.py +79 -79
  295. zaber_motion/dto/requests/response_type.py +8 -8
  296. zaber_motion/dto/requests/servo_tuning_paramset_response.py +48 -48
  297. zaber_motion/dto/requests/servo_tuning_request.py +91 -91
  298. zaber_motion/dto/requests/set_device_db_layered_sources_request.py +56 -56
  299. zaber_motion/dto/requests/set_device_db_source_request.py +63 -63
  300. zaber_motion/dto/requests/set_interface_checksum_enabled_request.py +56 -56
  301. zaber_motion/dto/requests/set_interface_timeout_request.py +65 -65
  302. zaber_motion/dto/requests/set_internal_mode_request.py +43 -43
  303. zaber_motion/dto/requests/set_io_port_label_request.py +100 -100
  304. zaber_motion/dto/requests/set_log_output_request.py +57 -57
  305. zaber_motion/dto/requests/set_process_controller_source.py +93 -93
  306. zaber_motion/dto/requests/set_servo_tuning_pid_request.py +135 -135
  307. zaber_motion/dto/requests/set_servo_tuning_request.py +116 -116
  308. zaber_motion/dto/requests/set_simple_tuning.py +174 -174
  309. zaber_motion/dto/requests/set_state_request.py +93 -93
  310. zaber_motion/dto/requests/stream_arc_request.py +199 -199
  311. zaber_motion/dto/requests/stream_buffer_erase_request.py +84 -84
  312. zaber_motion/dto/requests/stream_buffer_get_content_request.py +84 -84
  313. zaber_motion/dto/requests/stream_buffer_get_content_response.py +51 -51
  314. zaber_motion/dto/requests/stream_buffer_list.py +70 -70
  315. zaber_motion/dto/requests/stream_call_request.py +112 -112
  316. zaber_motion/dto/requests/stream_cancel_all_outputs_schedule_request.py +99 -99
  317. zaber_motion/dto/requests/stream_cancel_output_schedule_request.py +103 -103
  318. zaber_motion/dto/requests/stream_circle_request.py +155 -155
  319. zaber_motion/dto/requests/stream_empty_request.py +84 -84
  320. zaber_motion/dto/requests/stream_generic_command_batch_request.py +99 -99
  321. zaber_motion/dto/requests/stream_generic_command_request.py +93 -93
  322. zaber_motion/dto/requests/stream_get_axes_response.py +75 -75
  323. zaber_motion/dto/requests/stream_get_max_centripetal_acceleration_request.py +96 -96
  324. zaber_motion/dto/requests/stream_get_max_speed_request.py +96 -96
  325. zaber_motion/dto/requests/stream_get_max_tangential_acceleration_request.py +96 -96
  326. zaber_motion/dto/requests/stream_line_request.py +135 -135
  327. zaber_motion/dto/requests/stream_mode_response.py +60 -60
  328. zaber_motion/dto/requests/stream_segment_type.py +8 -8
  329. zaber_motion/dto/requests/stream_set_all_analog_outputs_request.py +101 -101
  330. zaber_motion/dto/requests/stream_set_all_analog_outputs_schedule_request.py +140 -140
  331. zaber_motion/dto/requests/stream_set_all_digital_outputs_request.py +102 -102
  332. zaber_motion/dto/requests/stream_set_all_digital_outputs_schedule_request.py +141 -141
  333. zaber_motion/dto/requests/stream_set_analog_output_request.py +109 -109
  334. zaber_motion/dto/requests/stream_set_analog_output_schedule_request.py +143 -143
  335. zaber_motion/dto/requests/stream_set_digital_output_request.py +110 -110
  336. zaber_motion/dto/requests/stream_set_digital_output_schedule_request.py +144 -144
  337. zaber_motion/dto/requests/stream_set_hold_request.py +89 -89
  338. zaber_motion/dto/requests/stream_set_max_centripetal_acceleration_request.py +107 -107
  339. zaber_motion/dto/requests/stream_set_max_speed_request.py +107 -107
  340. zaber_motion/dto/requests/stream_set_max_tangential_acceleration_request.py +107 -107
  341. zaber_motion/dto/requests/stream_setup_live_composite_request.py +123 -123
  342. zaber_motion/dto/requests/stream_setup_live_request.py +104 -104
  343. zaber_motion/dto/requests/stream_setup_store_arbitrary_axes_request.py +126 -126
  344. zaber_motion/dto/requests/stream_setup_store_composite_request.py +151 -151
  345. zaber_motion/dto/requests/stream_setup_store_request.py +132 -132
  346. zaber_motion/dto/requests/stream_wait_analog_input_request.py +118 -118
  347. zaber_motion/dto/requests/stream_wait_digital_input_request.py +103 -103
  348. zaber_motion/dto/requests/stream_wait_request.py +107 -107
  349. zaber_motion/dto/requests/stream_wait_until_idle_request.py +89 -89
  350. zaber_motion/dto/requests/string_array_response.py +51 -51
  351. zaber_motion/dto/requests/string_response.py +45 -45
  352. zaber_motion/dto/requests/test_event.py +45 -45
  353. zaber_motion/dto/requests/test_request.py +55 -55
  354. zaber_motion/dto/requests/test_request_complex.py +57 -0
  355. zaber_motion/dto/requests/test_response.py +45 -45
  356. zaber_motion/dto/requests/test_response_long.py +51 -51
  357. zaber_motion/dto/requests/toggle_device_db_store_request.py +50 -50
  358. zaber_motion/dto/requests/tools_list_serial_ports_response.py +51 -51
  359. zaber_motion/dto/requests/translator_create_from_device_request.py +97 -97
  360. zaber_motion/dto/requests/translator_create_live_request.py +91 -91
  361. zaber_motion/dto/requests/translator_create_request.py +62 -62
  362. zaber_motion/dto/requests/translator_create_response.py +51 -51
  363. zaber_motion/dto/requests/translator_empty_request.py +51 -51
  364. zaber_motion/dto/requests/translator_flush_live_request.py +56 -56
  365. zaber_motion/dto/requests/translator_flush_response.py +51 -51
  366. zaber_motion/dto/requests/translator_get_axis_offset_request.py +81 -81
  367. zaber_motion/dto/requests/translator_get_axis_position_request.py +72 -72
  368. zaber_motion/dto/requests/translator_set_axis_position_request.py +83 -83
  369. zaber_motion/dto/requests/translator_set_feed_rate_override_request.py +62 -62
  370. zaber_motion/dto/requests/translator_set_traverse_rate_request.py +74 -74
  371. zaber_motion/dto/requests/translator_translate_request.py +60 -60
  372. zaber_motion/dto/requests/trigger_clear_action_request.py +91 -91
  373. zaber_motion/dto/requests/trigger_empty_request.py +79 -79
  374. zaber_motion/dto/requests/trigger_enable_request.py +93 -93
  375. zaber_motion/dto/requests/trigger_enabled_states.py +56 -56
  376. zaber_motion/dto/requests/trigger_fire_at_interval_request.py +102 -102
  377. zaber_motion/dto/requests/trigger_fire_when_distance_travelled_request.py +116 -116
  378. zaber_motion/dto/requests/trigger_fire_when_io_request.py +128 -128
  379. zaber_motion/dto/requests/trigger_fire_when_request.py +88 -88
  380. zaber_motion/dto/requests/trigger_fire_when_setting_request.py +137 -137
  381. zaber_motion/dto/requests/trigger_on_fire_request.py +114 -114
  382. zaber_motion/dto/requests/trigger_on_fire_set_request.py +149 -149
  383. zaber_motion/dto/requests/trigger_on_fire_set_to_setting_request.py +149 -149
  384. zaber_motion/dto/requests/trigger_set_label_request.py +88 -88
  385. zaber_motion/dto/requests/trigger_states.py +56 -56
  386. zaber_motion/dto/requests/unit_convert_unit_request.py +71 -71
  387. zaber_motion/dto/requests/unit_get_enum_request.py +45 -45
  388. zaber_motion/dto/requests/unit_get_enum_response.py +48 -48
  389. zaber_motion/dto/requests/unit_get_symbol_request.py +48 -48
  390. zaber_motion/dto/requests/unit_get_symbol_response.py +45 -45
  391. zaber_motion/dto/requests/unknown_binary_response_event_wrapper.py +82 -82
  392. zaber_motion/dto/requests/unknown_response_event_wrapper.py +82 -82
  393. zaber_motion/dto/requests/wait_to_clear_warnings_request.py +105 -105
  394. zaber_motion/dto/requests/wait_to_respond_request.py +76 -76
  395. zaber_motion/dto/requests/wdi_generic_float_request.py +119 -0
  396. zaber_motion/dto/requests/wdi_generic_request.py +136 -136
  397. zaber_motion/dto/requests/wdi_get_status_response.py +50 -50
  398. zaber_motion/dto/rotation_direction.py +13 -13
  399. zaber_motion/dto_object.py +18 -18
  400. zaber_motion/events.py +112 -112
  401. zaber_motion/exceptions/__init__.py +87 -87
  402. zaber_motion/exceptions/bad_command_exception.py +10 -10
  403. zaber_motion/exceptions/bad_data_exception.py +10 -10
  404. zaber_motion/exceptions/binary_command_failed_exception.py +27 -27
  405. zaber_motion/exceptions/command_failed_exception.py +27 -27
  406. zaber_motion/exceptions/command_preempted_exception.py +10 -10
  407. zaber_motion/exceptions/command_too_long_exception.py +27 -27
  408. zaber_motion/exceptions/connection_closed_exception.py +10 -10
  409. zaber_motion/exceptions/connection_failed_exception.py +10 -10
  410. zaber_motion/exceptions/conversion_failed_exception.py +10 -10
  411. zaber_motion/exceptions/device_address_conflict_exception.py +27 -27
  412. zaber_motion/exceptions/device_busy_exception.py +10 -10
  413. zaber_motion/exceptions/device_db_failed_exception.py +27 -27
  414. zaber_motion/exceptions/device_detection_failed_exception.py +10 -10
  415. zaber_motion/exceptions/device_failed_exception.py +11 -11
  416. zaber_motion/exceptions/device_not_identified_exception.py +10 -10
  417. zaber_motion/exceptions/driver_disabled_exception.py +10 -10
  418. zaber_motion/exceptions/g_code_execution_exception.py +27 -27
  419. zaber_motion/exceptions/g_code_syntax_exception.py +27 -27
  420. zaber_motion/exceptions/incompatible_shared_library_exception.py +11 -11
  421. zaber_motion/exceptions/internal_error_exception.py +10 -10
  422. zaber_motion/exceptions/invalid_argument_exception.py +10 -10
  423. zaber_motion/exceptions/invalid_csv_data_exception.py +10 -10
  424. zaber_motion/exceptions/invalid_data_exception.py +10 -10
  425. zaber_motion/exceptions/invalid_operation_exception.py +10 -10
  426. zaber_motion/exceptions/invalid_packet_exception.py +27 -27
  427. zaber_motion/exceptions/invalid_park_state_exception.py +10 -10
  428. zaber_motion/exceptions/invalid_request_data_exception.py +11 -11
  429. zaber_motion/exceptions/invalid_response_exception.py +27 -27
  430. zaber_motion/exceptions/io_channel_out_of_range_exception.py +10 -10
  431. zaber_motion/exceptions/io_failed_exception.py +10 -10
  432. zaber_motion/exceptions/lockstep_enabled_exception.py +10 -10
  433. zaber_motion/exceptions/lockstep_not_enabled_exception.py +10 -10
  434. zaber_motion/exceptions/motion_lib_exception.py +18 -18
  435. zaber_motion/exceptions/movement_failed_exception.py +27 -27
  436. zaber_motion/exceptions/movement_interrupted_exception.py +27 -27
  437. zaber_motion/exceptions/no_device_found_exception.py +10 -10
  438. zaber_motion/exceptions/no_value_for_key_exception.py +10 -10
  439. zaber_motion/exceptions/not_supported_exception.py +10 -10
  440. zaber_motion/exceptions/operation_failed_exception.py +27 -27
  441. zaber_motion/exceptions/os_failed_exception.py +10 -10
  442. zaber_motion/exceptions/out_of_request_ids_exception.py +10 -10
  443. zaber_motion/exceptions/pvt_discontinuity_exception.py +10 -10
  444. zaber_motion/exceptions/pvt_execution_exception.py +27 -27
  445. zaber_motion/exceptions/pvt_mode_exception.py +10 -10
  446. zaber_motion/exceptions/pvt_movement_failed_exception.py +27 -27
  447. zaber_motion/exceptions/pvt_movement_interrupted_exception.py +27 -27
  448. zaber_motion/exceptions/pvt_sequence_generation_failed_exception.py +10 -10
  449. zaber_motion/exceptions/pvt_setup_failed_exception.py +10 -10
  450. zaber_motion/exceptions/remote_mode_exception.py +11 -11
  451. zaber_motion/exceptions/request_timeout_exception.py +10 -10
  452. zaber_motion/exceptions/serial_port_busy_exception.py +10 -10
  453. zaber_motion/exceptions/set_device_state_failed_exception.py +27 -27
  454. zaber_motion/exceptions/set_peripheral_state_failed_exception.py +27 -27
  455. zaber_motion/exceptions/setting_not_found_exception.py +10 -10
  456. zaber_motion/exceptions/stream_discontinuity_exception.py +10 -10
  457. zaber_motion/exceptions/stream_execution_exception.py +27 -27
  458. zaber_motion/exceptions/stream_mode_exception.py +10 -10
  459. zaber_motion/exceptions/stream_movement_failed_exception.py +27 -27
  460. zaber_motion/exceptions/stream_movement_interrupted_exception.py +27 -27
  461. zaber_motion/exceptions/stream_setup_failed_exception.py +10 -10
  462. zaber_motion/exceptions/timeout_exception.py +10 -10
  463. zaber_motion/exceptions/transport_already_used_exception.py +10 -10
  464. zaber_motion/exceptions/unknown_request_exception.py +10 -10
  465. zaber_motion/gcode/__init__.py +11 -11
  466. zaber_motion/gcode/offline_translator.py +401 -401
  467. zaber_motion/gcode/translator.py +424 -424
  468. zaber_motion/library.py +179 -179
  469. zaber_motion/microscopy/__init__.py +14 -14
  470. zaber_motion/microscopy/autofocus.py +645 -645
  471. zaber_motion/microscopy/camera_trigger.py +108 -108
  472. zaber_motion/microscopy/filter_changer.py +167 -167
  473. zaber_motion/microscopy/illuminator.py +139 -139
  474. zaber_motion/microscopy/illuminator_channel.py +616 -616
  475. zaber_motion/microscopy/microscope.py +315 -315
  476. zaber_motion/microscopy/objective_changer.py +403 -403
  477. zaber_motion/microscopy/wdi_autofocus_provider.py +536 -396
  478. zaber_motion/product/__init__.py +7 -7
  479. zaber_motion/product/process.py +818 -818
  480. zaber_motion/product/process_controller.py +134 -134
  481. zaber_motion/serialization.py +32 -32
  482. zaber_motion/tools.py +78 -78
  483. zaber_motion/unit_table.py +86 -86
  484. zaber_motion/units.py +206 -206
  485. zaber_motion/version.py +1 -1
  486. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/LICENSE.txt +2119 -2119
  487. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/METADATA +1 -1
  488. zaber_motion-7.14.0.dist-info/RECORD +496 -0
  489. zaber_motion_bindings/zaber-motion-core-windows-386.dll +0 -0
  490. zaber_motion-7.13.0.dist-info/RECORD +0 -494
  491. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/WHEEL +0 -0
  492. {zaber_motion-7.13.0.dist-info → zaber_motion-7.14.0.dist-info}/top_level.txt +0 -0
@@ -1,905 +1,905 @@
1
- # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
- # ============== DO NOT EDIT DIRECTLY ============== #
3
-
4
- from typing import TYPE_CHECKING, List, Optional
5
- from ..call import call, call_async
6
-
7
- from ..dto import requests as dto
8
-
9
- if TYPE_CHECKING:
10
- from .axis import Axis
11
- from .device import Device
12
-
13
-
14
- class AxisStorage:
15
- """
16
- Class providing access to axis storage.
17
- Requires at least Firmware 7.30.
18
- """
19
-
20
- def __init__(self, axis: 'Axis'):
21
- self._axis: 'Axis' = axis
22
-
23
- def set_string(
24
- self,
25
- key: str,
26
- value: str,
27
- encode: bool = False
28
- ) -> None:
29
- """
30
- Sets the axis value stored at the provided key.
31
-
32
- Args:
33
- key: Key to set the value at.
34
- value: Value to set.
35
- encode: Whether the stored value should be base64 encoded before being stored.
36
- This makes the string unreadable to humans using the ASCII protocol,
37
- however, values stored this way can be of any length and use non-ASCII and protocol reserved characters.
38
- """
39
- request = dto.DeviceSetStorageRequest(
40
- interface_id=self._axis.device.connection.interface_id,
41
- device=self._axis.device.device_address,
42
- axis=self._axis.axis_number,
43
- key=key,
44
- value=value,
45
- encode=encode,
46
- )
47
- call("device/set_storage", request)
48
-
49
- async def set_string_async(
50
- self,
51
- key: str,
52
- value: str,
53
- encode: bool = False
54
- ) -> None:
55
- """
56
- Sets the axis value stored at the provided key.
57
-
58
- Args:
59
- key: Key to set the value at.
60
- value: Value to set.
61
- encode: Whether the stored value should be base64 encoded before being stored.
62
- This makes the string unreadable to humans using the ASCII protocol,
63
- however, values stored this way can be of any length and use non-ASCII and protocol reserved characters.
64
- """
65
- request = dto.DeviceSetStorageRequest(
66
- interface_id=self._axis.device.connection.interface_id,
67
- device=self._axis.device.device_address,
68
- axis=self._axis.axis_number,
69
- key=key,
70
- value=value,
71
- encode=encode,
72
- )
73
- await call_async("device/set_storage", request)
74
-
75
- def get_string(
76
- self,
77
- key: str,
78
- decode: bool = False
79
- ) -> str:
80
- """
81
- Gets the axis value stored with the provided key.
82
-
83
- Args:
84
- key: Key to read the value of.
85
- decode: Whether the stored value should be decoded.
86
- Only use this when reading values set by storage.set with "encode" true.
87
-
88
- Returns:
89
- Stored value.
90
- """
91
- request = dto.DeviceGetStorageRequest(
92
- interface_id=self._axis.device.connection.interface_id,
93
- device=self._axis.device.device_address,
94
- axis=self._axis.axis_number,
95
- key=key,
96
- decode=decode,
97
- )
98
- response = call(
99
- "device/get_storage",
100
- request,
101
- dto.StringResponse.from_binary)
102
- return response.value
103
-
104
- async def get_string_async(
105
- self,
106
- key: str,
107
- decode: bool = False
108
- ) -> str:
109
- """
110
- Gets the axis value stored with the provided key.
111
-
112
- Args:
113
- key: Key to read the value of.
114
- decode: Whether the stored value should be decoded.
115
- Only use this when reading values set by storage.set with "encode" true.
116
-
117
- Returns:
118
- Stored value.
119
- """
120
- request = dto.DeviceGetStorageRequest(
121
- interface_id=self._axis.device.connection.interface_id,
122
- device=self._axis.device.device_address,
123
- axis=self._axis.axis_number,
124
- key=key,
125
- decode=decode,
126
- )
127
- response = await call_async(
128
- "device/get_storage",
129
- request,
130
- dto.StringResponse.from_binary)
131
- return response.value
132
-
133
- def set_number(
134
- self,
135
- key: str,
136
- value: float
137
- ) -> None:
138
- """
139
- Sets the value at the provided key to the provided number.
140
-
141
- Args:
142
- key: Key to set the value at.
143
- value: Value to set.
144
- """
145
- request = dto.DeviceSetStorageNumberRequest(
146
- interface_id=self._axis.device.connection.interface_id,
147
- device=self._axis.device.device_address,
148
- axis=self._axis.axis_number,
149
- key=key,
150
- value=value,
151
- )
152
- call("device/set_storage_number", request)
153
-
154
- async def set_number_async(
155
- self,
156
- key: str,
157
- value: float
158
- ) -> None:
159
- """
160
- Sets the value at the provided key to the provided number.
161
-
162
- Args:
163
- key: Key to set the value at.
164
- value: Value to set.
165
- """
166
- request = dto.DeviceSetStorageNumberRequest(
167
- interface_id=self._axis.device.connection.interface_id,
168
- device=self._axis.device.device_address,
169
- axis=self._axis.axis_number,
170
- key=key,
171
- value=value,
172
- )
173
- await call_async("device/set_storage_number", request)
174
-
175
- def get_number(
176
- self,
177
- key: str
178
- ) -> float:
179
- """
180
- Gets the value at the provided key interpreted as a number.
181
-
182
- Args:
183
- key: Key to get the value at.
184
-
185
- Returns:
186
- Stored value.
187
- """
188
- request = dto.DeviceStorageRequest(
189
- interface_id=self._axis.device.connection.interface_id,
190
- device=self._axis.device.device_address,
191
- axis=self._axis.axis_number,
192
- key=key,
193
- )
194
- response = call(
195
- "device/get_storage_number",
196
- request,
197
- dto.DoubleResponse.from_binary)
198
- return response.value
199
-
200
- async def get_number_async(
201
- self,
202
- key: str
203
- ) -> float:
204
- """
205
- Gets the value at the provided key interpreted as a number.
206
-
207
- Args:
208
- key: Key to get the value at.
209
-
210
- Returns:
211
- Stored value.
212
- """
213
- request = dto.DeviceStorageRequest(
214
- interface_id=self._axis.device.connection.interface_id,
215
- device=self._axis.device.device_address,
216
- axis=self._axis.axis_number,
217
- key=key,
218
- )
219
- response = await call_async(
220
- "device/get_storage_number",
221
- request,
222
- dto.DoubleResponse.from_binary)
223
- return response.value
224
-
225
- def set_bool(
226
- self,
227
- key: str,
228
- value: bool
229
- ) -> None:
230
- """
231
- Sets the value at the provided key to the provided boolean.
232
-
233
- Args:
234
- key: Key to set the value at.
235
- value: Value to set.
236
- """
237
- request = dto.DeviceSetStorageBoolRequest(
238
- interface_id=self._axis.device.connection.interface_id,
239
- device=self._axis.device.device_address,
240
- axis=self._axis.axis_number,
241
- key=key,
242
- value=value,
243
- )
244
- call("device/set_storage_bool", request)
245
-
246
- async def set_bool_async(
247
- self,
248
- key: str,
249
- value: bool
250
- ) -> None:
251
- """
252
- Sets the value at the provided key to the provided boolean.
253
-
254
- Args:
255
- key: Key to set the value at.
256
- value: Value to set.
257
- """
258
- request = dto.DeviceSetStorageBoolRequest(
259
- interface_id=self._axis.device.connection.interface_id,
260
- device=self._axis.device.device_address,
261
- axis=self._axis.axis_number,
262
- key=key,
263
- value=value,
264
- )
265
- await call_async("device/set_storage_bool", request)
266
-
267
- def get_bool(
268
- self,
269
- key: str
270
- ) -> bool:
271
- """
272
- Gets the value at the provided key interpreted as a boolean.
273
-
274
- Args:
275
- key: Key to get the value at.
276
-
277
- Returns:
278
- Stored value.
279
- """
280
- request = dto.DeviceStorageRequest(
281
- interface_id=self._axis.device.connection.interface_id,
282
- device=self._axis.device.device_address,
283
- axis=self._axis.axis_number,
284
- key=key,
285
- )
286
- response = call(
287
- "device/get_storage_bool",
288
- request,
289
- dto.BoolResponse.from_binary)
290
- return response.value
291
-
292
- async def get_bool_async(
293
- self,
294
- key: str
295
- ) -> bool:
296
- """
297
- Gets the value at the provided key interpreted as a boolean.
298
-
299
- Args:
300
- key: Key to get the value at.
301
-
302
- Returns:
303
- Stored value.
304
- """
305
- request = dto.DeviceStorageRequest(
306
- interface_id=self._axis.device.connection.interface_id,
307
- device=self._axis.device.device_address,
308
- axis=self._axis.axis_number,
309
- key=key,
310
- )
311
- response = await call_async(
312
- "device/get_storage_bool",
313
- request,
314
- dto.BoolResponse.from_binary)
315
- return response.value
316
-
317
- def erase_key(
318
- self,
319
- key: str
320
- ) -> bool:
321
- """
322
- Erases the axis value stored at the provided key.
323
-
324
- Args:
325
- key: Key to erase.
326
-
327
- Returns:
328
- A boolean indicating if the key existed.
329
- """
330
- request = dto.DeviceStorageRequest(
331
- interface_id=self._axis.device.connection.interface_id,
332
- device=self._axis.device.device_address,
333
- axis=self._axis.axis_number,
334
- key=key,
335
- )
336
- response = call(
337
- "device/erase_storage",
338
- request,
339
- dto.BoolResponse.from_binary)
340
- return response.value
341
-
342
- async def erase_key_async(
343
- self,
344
- key: str
345
- ) -> bool:
346
- """
347
- Erases the axis value stored at the provided key.
348
-
349
- Args:
350
- key: Key to erase.
351
-
352
- Returns:
353
- A boolean indicating if the key existed.
354
- """
355
- request = dto.DeviceStorageRequest(
356
- interface_id=self._axis.device.connection.interface_id,
357
- device=self._axis.device.device_address,
358
- axis=self._axis.axis_number,
359
- key=key,
360
- )
361
- response = await call_async(
362
- "device/erase_storage",
363
- request,
364
- dto.BoolResponse.from_binary)
365
- return response.value
366
-
367
- def list_keys(
368
- self,
369
- prefix: Optional[str] = None
370
- ) -> List[str]:
371
- """
372
- Lists the axis storage keys matching a given prefix.
373
- Omit the prefix to list all the keys.
374
-
375
- Args:
376
- prefix: Optional key prefix.
377
-
378
- Returns:
379
- Storage keys matching the given prefix.
380
- """
381
- request = dto.DeviceStorageListKeysRequest(
382
- interface_id=self._axis.device.connection.interface_id,
383
- device=self._axis.device.device_address,
384
- axis=self._axis.axis_number,
385
- prefix=prefix,
386
- )
387
- response = call(
388
- "device/storage_list_keys",
389
- request,
390
- dto.StringArrayResponse.from_binary)
391
- return response.values
392
-
393
- async def list_keys_async(
394
- self,
395
- prefix: Optional[str] = None
396
- ) -> List[str]:
397
- """
398
- Lists the axis storage keys matching a given prefix.
399
- Omit the prefix to list all the keys.
400
-
401
- Args:
402
- prefix: Optional key prefix.
403
-
404
- Returns:
405
- Storage keys matching the given prefix.
406
- """
407
- request = dto.DeviceStorageListKeysRequest(
408
- interface_id=self._axis.device.connection.interface_id,
409
- device=self._axis.device.device_address,
410
- axis=self._axis.axis_number,
411
- prefix=prefix,
412
- )
413
- response = await call_async(
414
- "device/storage_list_keys",
415
- request,
416
- dto.StringArrayResponse.from_binary)
417
- return response.values
418
-
419
- def key_exists(
420
- self,
421
- key: str
422
- ) -> bool:
423
- """
424
- Determines whether a given key exists in axis storage.
425
-
426
- Args:
427
- key: Key which existence to determine.
428
-
429
- Returns:
430
- True indicating that the key exists, false otherwise.
431
- """
432
- request = dto.DeviceStorageRequest(
433
- interface_id=self._axis.device.connection.interface_id,
434
- device=self._axis.device.device_address,
435
- axis=self._axis.axis_number,
436
- key=key,
437
- )
438
- response = call(
439
- "device/storage_key_exists",
440
- request,
441
- dto.BoolResponse.from_binary)
442
- return response.value
443
-
444
- async def key_exists_async(
445
- self,
446
- key: str
447
- ) -> bool:
448
- """
449
- Determines whether a given key exists in axis storage.
450
-
451
- Args:
452
- key: Key which existence to determine.
453
-
454
- Returns:
455
- True indicating that the key exists, false otherwise.
456
- """
457
- request = dto.DeviceStorageRequest(
458
- interface_id=self._axis.device.connection.interface_id,
459
- device=self._axis.device.device_address,
460
- axis=self._axis.axis_number,
461
- key=key,
462
- )
463
- response = await call_async(
464
- "device/storage_key_exists",
465
- request,
466
- dto.BoolResponse.from_binary)
467
- return response.value
468
-
469
-
470
- class DeviceStorage:
471
- """
472
- Class providing access to device storage.
473
- Requires at least Firmware 7.30.
474
- """
475
-
476
- def __init__(self, device: 'Device'):
477
- self._device: 'Device' = device
478
-
479
- def set_string(
480
- self,
481
- key: str,
482
- value: str,
483
- encode: bool = False
484
- ) -> None:
485
- """
486
- Sets the device value stored at the provided key.
487
-
488
- Args:
489
- key: Key to set the value at.
490
- value: Value to set.
491
- encode: Whether the stored value should be base64 encoded before being stored.
492
- This makes the string unreadable to humans using the ASCII protocol,
493
- however, values stored this way can be of any length and use non-ASCII and protocol reserved characters.
494
- """
495
- request = dto.DeviceSetStorageRequest(
496
- interface_id=self._device.connection.interface_id,
497
- device=self._device.device_address,
498
- key=key,
499
- value=value,
500
- encode=encode,
501
- )
502
- call("device/set_storage", request)
503
-
504
- async def set_string_async(
505
- self,
506
- key: str,
507
- value: str,
508
- encode: bool = False
509
- ) -> None:
510
- """
511
- Sets the device value stored at the provided key.
512
-
513
- Args:
514
- key: Key to set the value at.
515
- value: Value to set.
516
- encode: Whether the stored value should be base64 encoded before being stored.
517
- This makes the string unreadable to humans using the ASCII protocol,
518
- however, values stored this way can be of any length and use non-ASCII and protocol reserved characters.
519
- """
520
- request = dto.DeviceSetStorageRequest(
521
- interface_id=self._device.connection.interface_id,
522
- device=self._device.device_address,
523
- key=key,
524
- value=value,
525
- encode=encode,
526
- )
527
- await call_async("device/set_storage", request)
528
-
529
- def get_string(
530
- self,
531
- key: str,
532
- decode: bool = False
533
- ) -> str:
534
- """
535
- Gets the device value stored with the provided key.
536
-
537
- Args:
538
- key: Key to read the value of.
539
- decode: Whether the stored value should be decoded.
540
- Only use this when reading values set by storage.set with "encode" true.
541
-
542
- Returns:
543
- Stored value.
544
- """
545
- request = dto.DeviceGetStorageRequest(
546
- interface_id=self._device.connection.interface_id,
547
- device=self._device.device_address,
548
- key=key,
549
- decode=decode,
550
- )
551
- response = call(
552
- "device/get_storage",
553
- request,
554
- dto.StringResponse.from_binary)
555
- return response.value
556
-
557
- async def get_string_async(
558
- self,
559
- key: str,
560
- decode: bool = False
561
- ) -> str:
562
- """
563
- Gets the device value stored with the provided key.
564
-
565
- Args:
566
- key: Key to read the value of.
567
- decode: Whether the stored value should be decoded.
568
- Only use this when reading values set by storage.set with "encode" true.
569
-
570
- Returns:
571
- Stored value.
572
- """
573
- request = dto.DeviceGetStorageRequest(
574
- interface_id=self._device.connection.interface_id,
575
- device=self._device.device_address,
576
- key=key,
577
- decode=decode,
578
- )
579
- response = await call_async(
580
- "device/get_storage",
581
- request,
582
- dto.StringResponse.from_binary)
583
- return response.value
584
-
585
- def set_number(
586
- self,
587
- key: str,
588
- value: float
589
- ) -> None:
590
- """
591
- Sets the value at the provided key to the provided number.
592
-
593
- Args:
594
- key: Key to set the value at.
595
- value: Value to set.
596
- """
597
- request = dto.DeviceSetStorageNumberRequest(
598
- interface_id=self._device.connection.interface_id,
599
- device=self._device.device_address,
600
- key=key,
601
- value=value,
602
- )
603
- call("device/set_storage_number", request)
604
-
605
- async def set_number_async(
606
- self,
607
- key: str,
608
- value: float
609
- ) -> None:
610
- """
611
- Sets the value at the provided key to the provided number.
612
-
613
- Args:
614
- key: Key to set the value at.
615
- value: Value to set.
616
- """
617
- request = dto.DeviceSetStorageNumberRequest(
618
- interface_id=self._device.connection.interface_id,
619
- device=self._device.device_address,
620
- key=key,
621
- value=value,
622
- )
623
- await call_async("device/set_storage_number", request)
624
-
625
- def get_number(
626
- self,
627
- key: str
628
- ) -> float:
629
- """
630
- Gets the value at the provided key interpreted as a number.
631
-
632
- Args:
633
- key: Key to get the value at.
634
-
635
- Returns:
636
- Stored value.
637
- """
638
- request = dto.DeviceStorageRequest(
639
- interface_id=self._device.connection.interface_id,
640
- device=self._device.device_address,
641
- key=key,
642
- )
643
- response = call(
644
- "device/get_storage_number",
645
- request,
646
- dto.DoubleResponse.from_binary)
647
- return response.value
648
-
649
- async def get_number_async(
650
- self,
651
- key: str
652
- ) -> float:
653
- """
654
- Gets the value at the provided key interpreted as a number.
655
-
656
- Args:
657
- key: Key to get the value at.
658
-
659
- Returns:
660
- Stored value.
661
- """
662
- request = dto.DeviceStorageRequest(
663
- interface_id=self._device.connection.interface_id,
664
- device=self._device.device_address,
665
- key=key,
666
- )
667
- response = await call_async(
668
- "device/get_storage_number",
669
- request,
670
- dto.DoubleResponse.from_binary)
671
- return response.value
672
-
673
- def set_bool(
674
- self,
675
- key: str,
676
- value: bool
677
- ) -> None:
678
- """
679
- Sets the value at the provided key to the provided boolean.
680
-
681
- Args:
682
- key: Key to set the value at.
683
- value: Value to set.
684
- """
685
- request = dto.DeviceSetStorageBoolRequest(
686
- interface_id=self._device.connection.interface_id,
687
- device=self._device.device_address,
688
- key=key,
689
- value=value,
690
- )
691
- call("device/set_storage_bool", request)
692
-
693
- async def set_bool_async(
694
- self,
695
- key: str,
696
- value: bool
697
- ) -> None:
698
- """
699
- Sets the value at the provided key to the provided boolean.
700
-
701
- Args:
702
- key: Key to set the value at.
703
- value: Value to set.
704
- """
705
- request = dto.DeviceSetStorageBoolRequest(
706
- interface_id=self._device.connection.interface_id,
707
- device=self._device.device_address,
708
- key=key,
709
- value=value,
710
- )
711
- await call_async("device/set_storage_bool", request)
712
-
713
- def get_bool(
714
- self,
715
- key: str
716
- ) -> bool:
717
- """
718
- Gets the value at the provided key interpreted as a boolean.
719
-
720
- Args:
721
- key: Key to get the value at.
722
-
723
- Returns:
724
- Stored value.
725
- """
726
- request = dto.DeviceStorageRequest(
727
- interface_id=self._device.connection.interface_id,
728
- device=self._device.device_address,
729
- key=key,
730
- )
731
- response = call(
732
- "device/get_storage_bool",
733
- request,
734
- dto.BoolResponse.from_binary)
735
- return response.value
736
-
737
- async def get_bool_async(
738
- self,
739
- key: str
740
- ) -> bool:
741
- """
742
- Gets the value at the provided key interpreted as a boolean.
743
-
744
- Args:
745
- key: Key to get the value at.
746
-
747
- Returns:
748
- Stored value.
749
- """
750
- request = dto.DeviceStorageRequest(
751
- interface_id=self._device.connection.interface_id,
752
- device=self._device.device_address,
753
- key=key,
754
- )
755
- response = await call_async(
756
- "device/get_storage_bool",
757
- request,
758
- dto.BoolResponse.from_binary)
759
- return response.value
760
-
761
- def erase_key(
762
- self,
763
- key: str
764
- ) -> bool:
765
- """
766
- Erases the device value stored at the provided key.
767
-
768
- Args:
769
- key: Key to erase.
770
-
771
- Returns:
772
- A boolean indicating if the key existed.
773
- """
774
- request = dto.DeviceStorageRequest(
775
- interface_id=self._device.connection.interface_id,
776
- device=self._device.device_address,
777
- key=key,
778
- )
779
- response = call(
780
- "device/erase_storage",
781
- request,
782
- dto.BoolResponse.from_binary)
783
- return response.value
784
-
785
- async def erase_key_async(
786
- self,
787
- key: str
788
- ) -> bool:
789
- """
790
- Erases the device value stored at the provided key.
791
-
792
- Args:
793
- key: Key to erase.
794
-
795
- Returns:
796
- A boolean indicating if the key existed.
797
- """
798
- request = dto.DeviceStorageRequest(
799
- interface_id=self._device.connection.interface_id,
800
- device=self._device.device_address,
801
- key=key,
802
- )
803
- response = await call_async(
804
- "device/erase_storage",
805
- request,
806
- dto.BoolResponse.from_binary)
807
- return response.value
808
-
809
- def list_keys(
810
- self,
811
- prefix: Optional[str] = None
812
- ) -> List[str]:
813
- """
814
- Lists the device storage keys matching a given prefix.
815
- Omit the prefix to list all the keys.
816
-
817
- Args:
818
- prefix: Optional key prefix.
819
-
820
- Returns:
821
- Storage keys matching the given prefix.
822
- """
823
- request = dto.DeviceStorageListKeysRequest(
824
- interface_id=self._device.connection.interface_id,
825
- device=self._device.device_address,
826
- prefix=prefix,
827
- )
828
- response = call(
829
- "device/storage_list_keys",
830
- request,
831
- dto.StringArrayResponse.from_binary)
832
- return response.values
833
-
834
- async def list_keys_async(
835
- self,
836
- prefix: Optional[str] = None
837
- ) -> List[str]:
838
- """
839
- Lists the device storage keys matching a given prefix.
840
- Omit the prefix to list all the keys.
841
-
842
- Args:
843
- prefix: Optional key prefix.
844
-
845
- Returns:
846
- Storage keys matching the given prefix.
847
- """
848
- request = dto.DeviceStorageListKeysRequest(
849
- interface_id=self._device.connection.interface_id,
850
- device=self._device.device_address,
851
- prefix=prefix,
852
- )
853
- response = await call_async(
854
- "device/storage_list_keys",
855
- request,
856
- dto.StringArrayResponse.from_binary)
857
- return response.values
858
-
859
- def key_exists(
860
- self,
861
- key: str
862
- ) -> bool:
863
- """
864
- Determines whether a given key exists in device storage.
865
-
866
- Args:
867
- key: Key which existence to determine.
868
-
869
- Returns:
870
- True indicating that the key exists, false otherwise.
871
- """
872
- request = dto.DeviceStorageRequest(
873
- interface_id=self._device.connection.interface_id,
874
- device=self._device.device_address,
875
- key=key,
876
- )
877
- response = call(
878
- "device/storage_key_exists",
879
- request,
880
- dto.BoolResponse.from_binary)
881
- return response.value
882
-
883
- async def key_exists_async(
884
- self,
885
- key: str
886
- ) -> bool:
887
- """
888
- Determines whether a given key exists in device storage.
889
-
890
- Args:
891
- key: Key which existence to determine.
892
-
893
- Returns:
894
- True indicating that the key exists, false otherwise.
895
- """
896
- request = dto.DeviceStorageRequest(
897
- interface_id=self._device.connection.interface_id,
898
- device=self._device.device_address,
899
- key=key,
900
- )
901
- response = await call_async(
902
- "device/storage_key_exists",
903
- request,
904
- dto.BoolResponse.from_binary)
905
- return response.value
1
+ # ===== THIS FILE IS GENERATED FROM A TEMPLATE ===== #
2
+ # ============== DO NOT EDIT DIRECTLY ============== #
3
+
4
+ from typing import TYPE_CHECKING, List, Optional
5
+ from ..call import call, call_async
6
+
7
+ from ..dto import requests as dto
8
+
9
+ if TYPE_CHECKING:
10
+ from .axis import Axis
11
+ from .device import Device
12
+
13
+
14
+ class AxisStorage:
15
+ """
16
+ Class providing access to axis storage.
17
+ Requires at least Firmware 7.30.
18
+ """
19
+
20
+ def __init__(self, axis: 'Axis'):
21
+ self._axis: 'Axis' = axis
22
+
23
+ def set_string(
24
+ self,
25
+ key: str,
26
+ value: str,
27
+ encode: bool = False
28
+ ) -> None:
29
+ """
30
+ Sets the axis value stored at the provided key.
31
+
32
+ Args:
33
+ key: Key to set the value at.
34
+ value: Value to set.
35
+ encode: Whether the stored value should be base64 encoded before being stored.
36
+ This makes the string unreadable to humans using the ASCII protocol,
37
+ however, values stored this way can be of any length and use non-ASCII and protocol reserved characters.
38
+ """
39
+ request = dto.DeviceSetStorageRequest(
40
+ interface_id=self._axis.device.connection.interface_id,
41
+ device=self._axis.device.device_address,
42
+ axis=self._axis.axis_number,
43
+ key=key,
44
+ value=value,
45
+ encode=encode,
46
+ )
47
+ call("device/set_storage", request)
48
+
49
+ async def set_string_async(
50
+ self,
51
+ key: str,
52
+ value: str,
53
+ encode: bool = False
54
+ ) -> None:
55
+ """
56
+ Sets the axis value stored at the provided key.
57
+
58
+ Args:
59
+ key: Key to set the value at.
60
+ value: Value to set.
61
+ encode: Whether the stored value should be base64 encoded before being stored.
62
+ This makes the string unreadable to humans using the ASCII protocol,
63
+ however, values stored this way can be of any length and use non-ASCII and protocol reserved characters.
64
+ """
65
+ request = dto.DeviceSetStorageRequest(
66
+ interface_id=self._axis.device.connection.interface_id,
67
+ device=self._axis.device.device_address,
68
+ axis=self._axis.axis_number,
69
+ key=key,
70
+ value=value,
71
+ encode=encode,
72
+ )
73
+ await call_async("device/set_storage", request)
74
+
75
+ def get_string(
76
+ self,
77
+ key: str,
78
+ decode: bool = False
79
+ ) -> str:
80
+ """
81
+ Gets the axis value stored with the provided key.
82
+
83
+ Args:
84
+ key: Key to read the value of.
85
+ decode: Whether the stored value should be decoded.
86
+ Only use this when reading values set by storage.set with "encode" true.
87
+
88
+ Returns:
89
+ Stored value.
90
+ """
91
+ request = dto.DeviceGetStorageRequest(
92
+ interface_id=self._axis.device.connection.interface_id,
93
+ device=self._axis.device.device_address,
94
+ axis=self._axis.axis_number,
95
+ key=key,
96
+ decode=decode,
97
+ )
98
+ response = call(
99
+ "device/get_storage",
100
+ request,
101
+ dto.StringResponse.from_binary)
102
+ return response.value
103
+
104
+ async def get_string_async(
105
+ self,
106
+ key: str,
107
+ decode: bool = False
108
+ ) -> str:
109
+ """
110
+ Gets the axis value stored with the provided key.
111
+
112
+ Args:
113
+ key: Key to read the value of.
114
+ decode: Whether the stored value should be decoded.
115
+ Only use this when reading values set by storage.set with "encode" true.
116
+
117
+ Returns:
118
+ Stored value.
119
+ """
120
+ request = dto.DeviceGetStorageRequest(
121
+ interface_id=self._axis.device.connection.interface_id,
122
+ device=self._axis.device.device_address,
123
+ axis=self._axis.axis_number,
124
+ key=key,
125
+ decode=decode,
126
+ )
127
+ response = await call_async(
128
+ "device/get_storage",
129
+ request,
130
+ dto.StringResponse.from_binary)
131
+ return response.value
132
+
133
+ def set_number(
134
+ self,
135
+ key: str,
136
+ value: float
137
+ ) -> None:
138
+ """
139
+ Sets the value at the provided key to the provided number.
140
+
141
+ Args:
142
+ key: Key to set the value at.
143
+ value: Value to set.
144
+ """
145
+ request = dto.DeviceSetStorageNumberRequest(
146
+ interface_id=self._axis.device.connection.interface_id,
147
+ device=self._axis.device.device_address,
148
+ axis=self._axis.axis_number,
149
+ key=key,
150
+ value=value,
151
+ )
152
+ call("device/set_storage_number", request)
153
+
154
+ async def set_number_async(
155
+ self,
156
+ key: str,
157
+ value: float
158
+ ) -> None:
159
+ """
160
+ Sets the value at the provided key to the provided number.
161
+
162
+ Args:
163
+ key: Key to set the value at.
164
+ value: Value to set.
165
+ """
166
+ request = dto.DeviceSetStorageNumberRequest(
167
+ interface_id=self._axis.device.connection.interface_id,
168
+ device=self._axis.device.device_address,
169
+ axis=self._axis.axis_number,
170
+ key=key,
171
+ value=value,
172
+ )
173
+ await call_async("device/set_storage_number", request)
174
+
175
+ def get_number(
176
+ self,
177
+ key: str
178
+ ) -> float:
179
+ """
180
+ Gets the value at the provided key interpreted as a number.
181
+
182
+ Args:
183
+ key: Key to get the value at.
184
+
185
+ Returns:
186
+ Stored value.
187
+ """
188
+ request = dto.DeviceStorageRequest(
189
+ interface_id=self._axis.device.connection.interface_id,
190
+ device=self._axis.device.device_address,
191
+ axis=self._axis.axis_number,
192
+ key=key,
193
+ )
194
+ response = call(
195
+ "device/get_storage_number",
196
+ request,
197
+ dto.DoubleResponse.from_binary)
198
+ return response.value
199
+
200
+ async def get_number_async(
201
+ self,
202
+ key: str
203
+ ) -> float:
204
+ """
205
+ Gets the value at the provided key interpreted as a number.
206
+
207
+ Args:
208
+ key: Key to get the value at.
209
+
210
+ Returns:
211
+ Stored value.
212
+ """
213
+ request = dto.DeviceStorageRequest(
214
+ interface_id=self._axis.device.connection.interface_id,
215
+ device=self._axis.device.device_address,
216
+ axis=self._axis.axis_number,
217
+ key=key,
218
+ )
219
+ response = await call_async(
220
+ "device/get_storage_number",
221
+ request,
222
+ dto.DoubleResponse.from_binary)
223
+ return response.value
224
+
225
+ def set_bool(
226
+ self,
227
+ key: str,
228
+ value: bool
229
+ ) -> None:
230
+ """
231
+ Sets the value at the provided key to the provided boolean.
232
+
233
+ Args:
234
+ key: Key to set the value at.
235
+ value: Value to set.
236
+ """
237
+ request = dto.DeviceSetStorageBoolRequest(
238
+ interface_id=self._axis.device.connection.interface_id,
239
+ device=self._axis.device.device_address,
240
+ axis=self._axis.axis_number,
241
+ key=key,
242
+ value=value,
243
+ )
244
+ call("device/set_storage_bool", request)
245
+
246
+ async def set_bool_async(
247
+ self,
248
+ key: str,
249
+ value: bool
250
+ ) -> None:
251
+ """
252
+ Sets the value at the provided key to the provided boolean.
253
+
254
+ Args:
255
+ key: Key to set the value at.
256
+ value: Value to set.
257
+ """
258
+ request = dto.DeviceSetStorageBoolRequest(
259
+ interface_id=self._axis.device.connection.interface_id,
260
+ device=self._axis.device.device_address,
261
+ axis=self._axis.axis_number,
262
+ key=key,
263
+ value=value,
264
+ )
265
+ await call_async("device/set_storage_bool", request)
266
+
267
+ def get_bool(
268
+ self,
269
+ key: str
270
+ ) -> bool:
271
+ """
272
+ Gets the value at the provided key interpreted as a boolean.
273
+
274
+ Args:
275
+ key: Key to get the value at.
276
+
277
+ Returns:
278
+ Stored value.
279
+ """
280
+ request = dto.DeviceStorageRequest(
281
+ interface_id=self._axis.device.connection.interface_id,
282
+ device=self._axis.device.device_address,
283
+ axis=self._axis.axis_number,
284
+ key=key,
285
+ )
286
+ response = call(
287
+ "device/get_storage_bool",
288
+ request,
289
+ dto.BoolResponse.from_binary)
290
+ return response.value
291
+
292
+ async def get_bool_async(
293
+ self,
294
+ key: str
295
+ ) -> bool:
296
+ """
297
+ Gets the value at the provided key interpreted as a boolean.
298
+
299
+ Args:
300
+ key: Key to get the value at.
301
+
302
+ Returns:
303
+ Stored value.
304
+ """
305
+ request = dto.DeviceStorageRequest(
306
+ interface_id=self._axis.device.connection.interface_id,
307
+ device=self._axis.device.device_address,
308
+ axis=self._axis.axis_number,
309
+ key=key,
310
+ )
311
+ response = await call_async(
312
+ "device/get_storage_bool",
313
+ request,
314
+ dto.BoolResponse.from_binary)
315
+ return response.value
316
+
317
+ def erase_key(
318
+ self,
319
+ key: str
320
+ ) -> bool:
321
+ """
322
+ Erases the axis value stored at the provided key.
323
+
324
+ Args:
325
+ key: Key to erase.
326
+
327
+ Returns:
328
+ A boolean indicating if the key existed.
329
+ """
330
+ request = dto.DeviceStorageRequest(
331
+ interface_id=self._axis.device.connection.interface_id,
332
+ device=self._axis.device.device_address,
333
+ axis=self._axis.axis_number,
334
+ key=key,
335
+ )
336
+ response = call(
337
+ "device/erase_storage",
338
+ request,
339
+ dto.BoolResponse.from_binary)
340
+ return response.value
341
+
342
+ async def erase_key_async(
343
+ self,
344
+ key: str
345
+ ) -> bool:
346
+ """
347
+ Erases the axis value stored at the provided key.
348
+
349
+ Args:
350
+ key: Key to erase.
351
+
352
+ Returns:
353
+ A boolean indicating if the key existed.
354
+ """
355
+ request = dto.DeviceStorageRequest(
356
+ interface_id=self._axis.device.connection.interface_id,
357
+ device=self._axis.device.device_address,
358
+ axis=self._axis.axis_number,
359
+ key=key,
360
+ )
361
+ response = await call_async(
362
+ "device/erase_storage",
363
+ request,
364
+ dto.BoolResponse.from_binary)
365
+ return response.value
366
+
367
+ def list_keys(
368
+ self,
369
+ prefix: Optional[str] = None
370
+ ) -> List[str]:
371
+ """
372
+ Lists the axis storage keys matching a given prefix.
373
+ Omit the prefix to list all the keys.
374
+
375
+ Args:
376
+ prefix: Optional key prefix.
377
+
378
+ Returns:
379
+ Storage keys matching the given prefix.
380
+ """
381
+ request = dto.DeviceStorageListKeysRequest(
382
+ interface_id=self._axis.device.connection.interface_id,
383
+ device=self._axis.device.device_address,
384
+ axis=self._axis.axis_number,
385
+ prefix=prefix,
386
+ )
387
+ response = call(
388
+ "device/storage_list_keys",
389
+ request,
390
+ dto.StringArrayResponse.from_binary)
391
+ return response.values
392
+
393
+ async def list_keys_async(
394
+ self,
395
+ prefix: Optional[str] = None
396
+ ) -> List[str]:
397
+ """
398
+ Lists the axis storage keys matching a given prefix.
399
+ Omit the prefix to list all the keys.
400
+
401
+ Args:
402
+ prefix: Optional key prefix.
403
+
404
+ Returns:
405
+ Storage keys matching the given prefix.
406
+ """
407
+ request = dto.DeviceStorageListKeysRequest(
408
+ interface_id=self._axis.device.connection.interface_id,
409
+ device=self._axis.device.device_address,
410
+ axis=self._axis.axis_number,
411
+ prefix=prefix,
412
+ )
413
+ response = await call_async(
414
+ "device/storage_list_keys",
415
+ request,
416
+ dto.StringArrayResponse.from_binary)
417
+ return response.values
418
+
419
+ def key_exists(
420
+ self,
421
+ key: str
422
+ ) -> bool:
423
+ """
424
+ Determines whether a given key exists in axis storage.
425
+
426
+ Args:
427
+ key: Key which existence to determine.
428
+
429
+ Returns:
430
+ True indicating that the key exists, false otherwise.
431
+ """
432
+ request = dto.DeviceStorageRequest(
433
+ interface_id=self._axis.device.connection.interface_id,
434
+ device=self._axis.device.device_address,
435
+ axis=self._axis.axis_number,
436
+ key=key,
437
+ )
438
+ response = call(
439
+ "device/storage_key_exists",
440
+ request,
441
+ dto.BoolResponse.from_binary)
442
+ return response.value
443
+
444
+ async def key_exists_async(
445
+ self,
446
+ key: str
447
+ ) -> bool:
448
+ """
449
+ Determines whether a given key exists in axis storage.
450
+
451
+ Args:
452
+ key: Key which existence to determine.
453
+
454
+ Returns:
455
+ True indicating that the key exists, false otherwise.
456
+ """
457
+ request = dto.DeviceStorageRequest(
458
+ interface_id=self._axis.device.connection.interface_id,
459
+ device=self._axis.device.device_address,
460
+ axis=self._axis.axis_number,
461
+ key=key,
462
+ )
463
+ response = await call_async(
464
+ "device/storage_key_exists",
465
+ request,
466
+ dto.BoolResponse.from_binary)
467
+ return response.value
468
+
469
+
470
+ class DeviceStorage:
471
+ """
472
+ Class providing access to device storage.
473
+ Requires at least Firmware 7.30.
474
+ """
475
+
476
+ def __init__(self, device: 'Device'):
477
+ self._device: 'Device' = device
478
+
479
+ def set_string(
480
+ self,
481
+ key: str,
482
+ value: str,
483
+ encode: bool = False
484
+ ) -> None:
485
+ """
486
+ Sets the device value stored at the provided key.
487
+
488
+ Args:
489
+ key: Key to set the value at.
490
+ value: Value to set.
491
+ encode: Whether the stored value should be base64 encoded before being stored.
492
+ This makes the string unreadable to humans using the ASCII protocol,
493
+ however, values stored this way can be of any length and use non-ASCII and protocol reserved characters.
494
+ """
495
+ request = dto.DeviceSetStorageRequest(
496
+ interface_id=self._device.connection.interface_id,
497
+ device=self._device.device_address,
498
+ key=key,
499
+ value=value,
500
+ encode=encode,
501
+ )
502
+ call("device/set_storage", request)
503
+
504
+ async def set_string_async(
505
+ self,
506
+ key: str,
507
+ value: str,
508
+ encode: bool = False
509
+ ) -> None:
510
+ """
511
+ Sets the device value stored at the provided key.
512
+
513
+ Args:
514
+ key: Key to set the value at.
515
+ value: Value to set.
516
+ encode: Whether the stored value should be base64 encoded before being stored.
517
+ This makes the string unreadable to humans using the ASCII protocol,
518
+ however, values stored this way can be of any length and use non-ASCII and protocol reserved characters.
519
+ """
520
+ request = dto.DeviceSetStorageRequest(
521
+ interface_id=self._device.connection.interface_id,
522
+ device=self._device.device_address,
523
+ key=key,
524
+ value=value,
525
+ encode=encode,
526
+ )
527
+ await call_async("device/set_storage", request)
528
+
529
+ def get_string(
530
+ self,
531
+ key: str,
532
+ decode: bool = False
533
+ ) -> str:
534
+ """
535
+ Gets the device value stored with the provided key.
536
+
537
+ Args:
538
+ key: Key to read the value of.
539
+ decode: Whether the stored value should be decoded.
540
+ Only use this when reading values set by storage.set with "encode" true.
541
+
542
+ Returns:
543
+ Stored value.
544
+ """
545
+ request = dto.DeviceGetStorageRequest(
546
+ interface_id=self._device.connection.interface_id,
547
+ device=self._device.device_address,
548
+ key=key,
549
+ decode=decode,
550
+ )
551
+ response = call(
552
+ "device/get_storage",
553
+ request,
554
+ dto.StringResponse.from_binary)
555
+ return response.value
556
+
557
+ async def get_string_async(
558
+ self,
559
+ key: str,
560
+ decode: bool = False
561
+ ) -> str:
562
+ """
563
+ Gets the device value stored with the provided key.
564
+
565
+ Args:
566
+ key: Key to read the value of.
567
+ decode: Whether the stored value should be decoded.
568
+ Only use this when reading values set by storage.set with "encode" true.
569
+
570
+ Returns:
571
+ Stored value.
572
+ """
573
+ request = dto.DeviceGetStorageRequest(
574
+ interface_id=self._device.connection.interface_id,
575
+ device=self._device.device_address,
576
+ key=key,
577
+ decode=decode,
578
+ )
579
+ response = await call_async(
580
+ "device/get_storage",
581
+ request,
582
+ dto.StringResponse.from_binary)
583
+ return response.value
584
+
585
+ def set_number(
586
+ self,
587
+ key: str,
588
+ value: float
589
+ ) -> None:
590
+ """
591
+ Sets the value at the provided key to the provided number.
592
+
593
+ Args:
594
+ key: Key to set the value at.
595
+ value: Value to set.
596
+ """
597
+ request = dto.DeviceSetStorageNumberRequest(
598
+ interface_id=self._device.connection.interface_id,
599
+ device=self._device.device_address,
600
+ key=key,
601
+ value=value,
602
+ )
603
+ call("device/set_storage_number", request)
604
+
605
+ async def set_number_async(
606
+ self,
607
+ key: str,
608
+ value: float
609
+ ) -> None:
610
+ """
611
+ Sets the value at the provided key to the provided number.
612
+
613
+ Args:
614
+ key: Key to set the value at.
615
+ value: Value to set.
616
+ """
617
+ request = dto.DeviceSetStorageNumberRequest(
618
+ interface_id=self._device.connection.interface_id,
619
+ device=self._device.device_address,
620
+ key=key,
621
+ value=value,
622
+ )
623
+ await call_async("device/set_storage_number", request)
624
+
625
+ def get_number(
626
+ self,
627
+ key: str
628
+ ) -> float:
629
+ """
630
+ Gets the value at the provided key interpreted as a number.
631
+
632
+ Args:
633
+ key: Key to get the value at.
634
+
635
+ Returns:
636
+ Stored value.
637
+ """
638
+ request = dto.DeviceStorageRequest(
639
+ interface_id=self._device.connection.interface_id,
640
+ device=self._device.device_address,
641
+ key=key,
642
+ )
643
+ response = call(
644
+ "device/get_storage_number",
645
+ request,
646
+ dto.DoubleResponse.from_binary)
647
+ return response.value
648
+
649
+ async def get_number_async(
650
+ self,
651
+ key: str
652
+ ) -> float:
653
+ """
654
+ Gets the value at the provided key interpreted as a number.
655
+
656
+ Args:
657
+ key: Key to get the value at.
658
+
659
+ Returns:
660
+ Stored value.
661
+ """
662
+ request = dto.DeviceStorageRequest(
663
+ interface_id=self._device.connection.interface_id,
664
+ device=self._device.device_address,
665
+ key=key,
666
+ )
667
+ response = await call_async(
668
+ "device/get_storage_number",
669
+ request,
670
+ dto.DoubleResponse.from_binary)
671
+ return response.value
672
+
673
+ def set_bool(
674
+ self,
675
+ key: str,
676
+ value: bool
677
+ ) -> None:
678
+ """
679
+ Sets the value at the provided key to the provided boolean.
680
+
681
+ Args:
682
+ key: Key to set the value at.
683
+ value: Value to set.
684
+ """
685
+ request = dto.DeviceSetStorageBoolRequest(
686
+ interface_id=self._device.connection.interface_id,
687
+ device=self._device.device_address,
688
+ key=key,
689
+ value=value,
690
+ )
691
+ call("device/set_storage_bool", request)
692
+
693
+ async def set_bool_async(
694
+ self,
695
+ key: str,
696
+ value: bool
697
+ ) -> None:
698
+ """
699
+ Sets the value at the provided key to the provided boolean.
700
+
701
+ Args:
702
+ key: Key to set the value at.
703
+ value: Value to set.
704
+ """
705
+ request = dto.DeviceSetStorageBoolRequest(
706
+ interface_id=self._device.connection.interface_id,
707
+ device=self._device.device_address,
708
+ key=key,
709
+ value=value,
710
+ )
711
+ await call_async("device/set_storage_bool", request)
712
+
713
+ def get_bool(
714
+ self,
715
+ key: str
716
+ ) -> bool:
717
+ """
718
+ Gets the value at the provided key interpreted as a boolean.
719
+
720
+ Args:
721
+ key: Key to get the value at.
722
+
723
+ Returns:
724
+ Stored value.
725
+ """
726
+ request = dto.DeviceStorageRequest(
727
+ interface_id=self._device.connection.interface_id,
728
+ device=self._device.device_address,
729
+ key=key,
730
+ )
731
+ response = call(
732
+ "device/get_storage_bool",
733
+ request,
734
+ dto.BoolResponse.from_binary)
735
+ return response.value
736
+
737
+ async def get_bool_async(
738
+ self,
739
+ key: str
740
+ ) -> bool:
741
+ """
742
+ Gets the value at the provided key interpreted as a boolean.
743
+
744
+ Args:
745
+ key: Key to get the value at.
746
+
747
+ Returns:
748
+ Stored value.
749
+ """
750
+ request = dto.DeviceStorageRequest(
751
+ interface_id=self._device.connection.interface_id,
752
+ device=self._device.device_address,
753
+ key=key,
754
+ )
755
+ response = await call_async(
756
+ "device/get_storage_bool",
757
+ request,
758
+ dto.BoolResponse.from_binary)
759
+ return response.value
760
+
761
+ def erase_key(
762
+ self,
763
+ key: str
764
+ ) -> bool:
765
+ """
766
+ Erases the device value stored at the provided key.
767
+
768
+ Args:
769
+ key: Key to erase.
770
+
771
+ Returns:
772
+ A boolean indicating if the key existed.
773
+ """
774
+ request = dto.DeviceStorageRequest(
775
+ interface_id=self._device.connection.interface_id,
776
+ device=self._device.device_address,
777
+ key=key,
778
+ )
779
+ response = call(
780
+ "device/erase_storage",
781
+ request,
782
+ dto.BoolResponse.from_binary)
783
+ return response.value
784
+
785
+ async def erase_key_async(
786
+ self,
787
+ key: str
788
+ ) -> bool:
789
+ """
790
+ Erases the device value stored at the provided key.
791
+
792
+ Args:
793
+ key: Key to erase.
794
+
795
+ Returns:
796
+ A boolean indicating if the key existed.
797
+ """
798
+ request = dto.DeviceStorageRequest(
799
+ interface_id=self._device.connection.interface_id,
800
+ device=self._device.device_address,
801
+ key=key,
802
+ )
803
+ response = await call_async(
804
+ "device/erase_storage",
805
+ request,
806
+ dto.BoolResponse.from_binary)
807
+ return response.value
808
+
809
+ def list_keys(
810
+ self,
811
+ prefix: Optional[str] = None
812
+ ) -> List[str]:
813
+ """
814
+ Lists the device storage keys matching a given prefix.
815
+ Omit the prefix to list all the keys.
816
+
817
+ Args:
818
+ prefix: Optional key prefix.
819
+
820
+ Returns:
821
+ Storage keys matching the given prefix.
822
+ """
823
+ request = dto.DeviceStorageListKeysRequest(
824
+ interface_id=self._device.connection.interface_id,
825
+ device=self._device.device_address,
826
+ prefix=prefix,
827
+ )
828
+ response = call(
829
+ "device/storage_list_keys",
830
+ request,
831
+ dto.StringArrayResponse.from_binary)
832
+ return response.values
833
+
834
+ async def list_keys_async(
835
+ self,
836
+ prefix: Optional[str] = None
837
+ ) -> List[str]:
838
+ """
839
+ Lists the device storage keys matching a given prefix.
840
+ Omit the prefix to list all the keys.
841
+
842
+ Args:
843
+ prefix: Optional key prefix.
844
+
845
+ Returns:
846
+ Storage keys matching the given prefix.
847
+ """
848
+ request = dto.DeviceStorageListKeysRequest(
849
+ interface_id=self._device.connection.interface_id,
850
+ device=self._device.device_address,
851
+ prefix=prefix,
852
+ )
853
+ response = await call_async(
854
+ "device/storage_list_keys",
855
+ request,
856
+ dto.StringArrayResponse.from_binary)
857
+ return response.values
858
+
859
+ def key_exists(
860
+ self,
861
+ key: str
862
+ ) -> bool:
863
+ """
864
+ Determines whether a given key exists in device storage.
865
+
866
+ Args:
867
+ key: Key which existence to determine.
868
+
869
+ Returns:
870
+ True indicating that the key exists, false otherwise.
871
+ """
872
+ request = dto.DeviceStorageRequest(
873
+ interface_id=self._device.connection.interface_id,
874
+ device=self._device.device_address,
875
+ key=key,
876
+ )
877
+ response = call(
878
+ "device/storage_key_exists",
879
+ request,
880
+ dto.BoolResponse.from_binary)
881
+ return response.value
882
+
883
+ async def key_exists_async(
884
+ self,
885
+ key: str
886
+ ) -> bool:
887
+ """
888
+ Determines whether a given key exists in device storage.
889
+
890
+ Args:
891
+ key: Key which existence to determine.
892
+
893
+ Returns:
894
+ True indicating that the key exists, false otherwise.
895
+ """
896
+ request = dto.DeviceStorageRequest(
897
+ interface_id=self._device.connection.interface_id,
898
+ device=self._device.device_address,
899
+ key=key,
900
+ )
901
+ response = await call_async(
902
+ "device/storage_key_exists",
903
+ request,
904
+ dto.BoolResponse.from_binary)
905
+ return response.value