wandelbots-api-client 25.8.0.dev77__py3-none-any.whl → 25.11.0.dev12__py3-none-any.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 (637) hide show
  1. wandelbots_api_client/__init__.py +2 -3
  2. wandelbots_api_client/api/__init__.py +2 -0
  3. wandelbots_api_client/api/application_api.py +1 -2
  4. wandelbots_api_client/api/cell_api.py +1 -2
  5. wandelbots_api_client/api/controller_api.py +10 -5
  6. wandelbots_api_client/api/controller_ios_api.py +3 -6
  7. wandelbots_api_client/api/coordinate_systems_api.py +1 -2
  8. wandelbots_api_client/api/device_configuration_api.py +1 -2
  9. wandelbots_api_client/api/library_program_api.py +1 -2
  10. wandelbots_api_client/api/library_program_metadata_api.py +1 -2
  11. wandelbots_api_client/api/library_recipe_api.py +1 -2
  12. wandelbots_api_client/api/library_recipe_metadata_api.py +1 -2
  13. wandelbots_api_client/api/license_api.py +1 -2
  14. wandelbots_api_client/api/motion_api.py +17 -6
  15. wandelbots_api_client/api/motion_group_api.py +1 -2
  16. wandelbots_api_client/api/motion_group_infos_api.py +3 -2
  17. wandelbots_api_client/api/motion_group_jogging_api.py +11 -6
  18. wandelbots_api_client/api/motion_group_kinematic_api.py +1 -2
  19. wandelbots_api_client/api/program_api.py +1 -2
  20. wandelbots_api_client/api/program_operator_api.py +1 -2
  21. wandelbots_api_client/api/program_values_api.py +1 -2
  22. wandelbots_api_client/api/store_collision_components_api.py +10 -8
  23. wandelbots_api_client/api/store_collision_scenes_api.py +1 -2
  24. wandelbots_api_client/api/store_object_api.py +1 -2
  25. wandelbots_api_client/api/system_api.py +1 -2
  26. wandelbots_api_client/api/version_api.py +284 -0
  27. wandelbots_api_client/api/virtual_robot_api.py +1 -2
  28. wandelbots_api_client/api/virtual_robot_behavior_api.py +6 -4
  29. wandelbots_api_client/api/virtual_robot_mode_api.py +1 -2
  30. wandelbots_api_client/api/virtual_robot_setup_api.py +1 -2
  31. wandelbots_api_client/api_client.py +14 -7
  32. wandelbots_api_client/configuration.py +18 -7
  33. wandelbots_api_client/exceptions.py +1 -1
  34. wandelbots_api_client/models/__init__.py +3 -4
  35. wandelbots_api_client/models/abb_controller.py +5 -5
  36. wandelbots_api_client/models/abb_controller_egm_server.py +3 -3
  37. wandelbots_api_client/models/activate_license_request.py +2 -2
  38. wandelbots_api_client/models/add_request.py +3 -3
  39. wandelbots_api_client/models/all_joint_positions_request.py +3 -3
  40. wandelbots_api_client/models/all_joint_positions_response.py +2 -2
  41. wandelbots_api_client/models/api_version.py +91 -0
  42. wandelbots_api_client/models/app.py +8 -8
  43. wandelbots_api_client/models/array_input.py +2 -2
  44. wandelbots_api_client/models/array_output.py +2 -2
  45. wandelbots_api_client/models/behavior.py +1 -1
  46. wandelbots_api_client/models/blending_auto.py +3 -3
  47. wandelbots_api_client/models/blending_position.py +3 -3
  48. wandelbots_api_client/models/box.py +5 -5
  49. wandelbots_api_client/models/box2.py +6 -6
  50. wandelbots_api_client/models/box3.py +6 -6
  51. wandelbots_api_client/models/capsule.py +3 -3
  52. wandelbots_api_client/models/capsule2.py +4 -4
  53. wandelbots_api_client/models/capsule3.py +4 -4
  54. wandelbots_api_client/models/capture.py +2 -2
  55. wandelbots_api_client/models/cell.py +4 -4
  56. wandelbots_api_client/models/circle.py +3 -3
  57. wandelbots_api_client/models/code_with_arguments.py +7 -6
  58. wandelbots_api_client/models/collection_value.py +1 -1
  59. wandelbots_api_client/models/collider.py +4 -4
  60. wandelbots_api_client/models/collider_input.py +4 -4
  61. wandelbots_api_client/models/collider_output.py +4 -4
  62. wandelbots_api_client/models/collider_output_shape.py +1 -1
  63. wandelbots_api_client/models/collider_shape.py +1 -41
  64. wandelbots_api_client/models/collision.py +7 -7
  65. wandelbots_api_client/models/collision_contact.py +3 -3
  66. wandelbots_api_client/models/collision_motion_group.py +7 -6
  67. wandelbots_api_client/models/collision_motion_group_assembly.py +9 -8
  68. wandelbots_api_client/models/collision_robot_configuration_input.py +12 -10
  69. wandelbots_api_client/models/collision_robot_configuration_output.py +12 -10
  70. wandelbots_api_client/models/collision_scene.py +11 -9
  71. wandelbots_api_client/models/collision_scene_assembly.py +14 -12
  72. wandelbots_api_client/models/command.py +7 -7
  73. wandelbots_api_client/models/command_settings.py +4 -4
  74. wandelbots_api_client/models/comparator.py +1 -1
  75. wandelbots_api_client/models/compound.py +2 -2
  76. wandelbots_api_client/models/container_environment_inner.py +3 -3
  77. wandelbots_api_client/models/container_image.py +4 -4
  78. wandelbots_api_client/models/container_image_secrets_inner.py +2 -2
  79. wandelbots_api_client/models/container_resources.py +2 -2
  80. wandelbots_api_client/models/container_storage.py +3 -3
  81. wandelbots_api_client/models/controller_capabilities.py +3 -3
  82. wandelbots_api_client/models/controller_instance.py +9 -9
  83. wandelbots_api_client/models/controller_instance_list.py +2 -2
  84. wandelbots_api_client/models/convex_hull.py +2 -2
  85. wandelbots_api_client/models/convex_hull2.py +3 -3
  86. wandelbots_api_client/models/convex_hull3.py +3 -3
  87. wandelbots_api_client/models/coordinate_system.py +6 -6
  88. wandelbots_api_client/models/coordinate_systems.py +2 -2
  89. wandelbots_api_client/models/create_device_request_inner.py +1 -1
  90. wandelbots_api_client/models/create_program_run200_response.py +2 -2
  91. wandelbots_api_client/models/create_program_run_request.py +2 -2
  92. wandelbots_api_client/models/create_trigger200_response.py +2 -2
  93. wandelbots_api_client/models/create_trigger_request.py +7 -7
  94. wandelbots_api_client/models/cubic_spline.py +2 -2
  95. wandelbots_api_client/models/cubic_spline_cubic_spline_parameter.py +3 -3
  96. wandelbots_api_client/models/cubic_spline_parameter.py +3 -3
  97. wandelbots_api_client/models/cycle_time.py +2 -2
  98. wandelbots_api_client/models/cylinder.py +3 -3
  99. wandelbots_api_client/models/cylinder2.py +4 -4
  100. wandelbots_api_client/models/cylinder3.py +4 -4
  101. wandelbots_api_client/models/dh_parameter.py +6 -6
  102. wandelbots_api_client/models/direction.py +1 -1
  103. wandelbots_api_client/models/direction_jogging_request.py +10 -10
  104. wandelbots_api_client/models/error.py +3 -3
  105. wandelbots_api_client/models/execute_trajectory_request.py +1 -1
  106. wandelbots_api_client/models/execute_trajectory_response.py +1 -1
  107. wandelbots_api_client/models/execution_result.py +4 -4
  108. wandelbots_api_client/models/external_joint_stream_datapoint.py +3 -3
  109. wandelbots_api_client/models/external_joint_stream_datapoint_value.py +5 -5
  110. wandelbots_api_client/models/fanuc_controller.py +3 -3
  111. wandelbots_api_client/models/feedback_collision.py +5 -5
  112. wandelbots_api_client/models/feedback_joint_limit_exceeded.py +4 -4
  113. wandelbots_api_client/models/feedback_out_of_workspace.py +3 -3
  114. wandelbots_api_client/models/feedback_singularity.py +4 -4
  115. wandelbots_api_client/models/flag.py +2 -2
  116. wandelbots_api_client/models/force_vector.py +4 -4
  117. wandelbots_api_client/models/geometry.py +12 -12
  118. wandelbots_api_client/models/get_all_program_runs200_response.py +2 -2
  119. wandelbots_api_client/models/get_all_triggers200_response.py +2 -2
  120. wandelbots_api_client/models/get_mode_response.py +2 -2
  121. wandelbots_api_client/models/get_trajectory_response.py +2 -2
  122. wandelbots_api_client/models/get_trajectory_sample_response.py +2 -2
  123. wandelbots_api_client/models/google_protobuf_any.py +2 -2
  124. wandelbots_api_client/models/http_exception_response.py +2 -2
  125. wandelbots_api_client/models/http_validation_error.py +2 -2
  126. wandelbots_api_client/models/http_validation_error2.py +2 -2
  127. wandelbots_api_client/models/image_credentials.py +4 -4
  128. wandelbots_api_client/models/info_service_capabilities.py +8 -8
  129. wandelbots_api_client/models/initialize_movement_request.py +6 -6
  130. wandelbots_api_client/models/initialize_movement_response.py +2 -2
  131. wandelbots_api_client/models/initialize_movement_response_init_response.py +3 -3
  132. wandelbots_api_client/models/io.py +6 -6
  133. wandelbots_api_client/models/io_description.py +10 -10
  134. wandelbots_api_client/models/io_value.py +5 -5
  135. wandelbots_api_client/models/ios.py +2 -2
  136. wandelbots_api_client/models/jogging_response.py +4 -4
  137. wandelbots_api_client/models/jogging_service_capabilities.py +3 -3
  138. wandelbots_api_client/models/joint_jogging_request.py +6 -6
  139. wandelbots_api_client/models/joint_limit.py +5 -5
  140. wandelbots_api_client/models/joint_limit_exceeded.py +3 -3
  141. wandelbots_api_client/models/joint_position_request.py +4 -4
  142. wandelbots_api_client/models/joint_trajectory.py +4 -4
  143. wandelbots_api_client/models/joints.py +2 -2
  144. wandelbots_api_client/models/kinematic_service_capabilities.py +4 -4
  145. wandelbots_api_client/models/kuka_controller.py +10 -8
  146. wandelbots_api_client/models/kuka_controller_rsi_server.py +3 -3
  147. wandelbots_api_client/models/license.py +11 -11
  148. wandelbots_api_client/models/license_status.py +3 -3
  149. wandelbots_api_client/models/license_status_enum.py +1 -1
  150. wandelbots_api_client/models/limit_settings.py +13 -13
  151. wandelbots_api_client/models/limits_override.py +7 -7
  152. wandelbots_api_client/models/list_devices200_response_inner.py +1 -1
  153. wandelbots_api_client/models/list_io_descriptions_response.py +2 -2
  154. wandelbots_api_client/models/list_io_values_response.py +2 -2
  155. wandelbots_api_client/models/list_payloads_response.py +2 -2
  156. wandelbots_api_client/models/list_program_metadata_response.py +2 -2
  157. wandelbots_api_client/models/list_recipe_metadata_response.py +2 -2
  158. wandelbots_api_client/models/list_response.py +2 -2
  159. wandelbots_api_client/models/list_tcps_response.py +2 -2
  160. wandelbots_api_client/models/manufacturer.py +1 -1
  161. wandelbots_api_client/models/mode_change_response.py +5 -5
  162. wandelbots_api_client/models/motion_command.py +4 -4
  163. wandelbots_api_client/models/motion_command_blending.py +1 -1
  164. wandelbots_api_client/models/motion_command_path.py +1 -1
  165. wandelbots_api_client/models/motion_group_behavior_getter.py +2 -2
  166. wandelbots_api_client/models/motion_group_info.py +4 -4
  167. wandelbots_api_client/models/motion_group_infos.py +2 -2
  168. wandelbots_api_client/models/motion_group_instance.py +6 -6
  169. wandelbots_api_client/models/motion_group_instance_list.py +2 -2
  170. wandelbots_api_client/models/motion_group_joints.py +5 -5
  171. wandelbots_api_client/models/motion_group_physical.py +6 -6
  172. wandelbots_api_client/models/motion_group_specification.py +3 -3
  173. wandelbots_api_client/models/motion_group_state.py +13 -13
  174. wandelbots_api_client/models/motion_group_state_joint_limit_reached.py +2 -2
  175. wandelbots_api_client/models/motion_group_state_response.py +3 -3
  176. wandelbots_api_client/models/motion_id.py +2 -2
  177. wandelbots_api_client/models/motion_ids_list_response.py +2 -2
  178. wandelbots_api_client/models/motion_vector.py +4 -4
  179. wandelbots_api_client/models/mounting.py +3 -3
  180. wandelbots_api_client/models/move_request.py +9 -9
  181. wandelbots_api_client/models/move_response.py +3 -3
  182. wandelbots_api_client/models/move_to_trajectory_via_joint_ptp_request.py +5 -5
  183. wandelbots_api_client/models/movement.py +2 -2
  184. wandelbots_api_client/models/movement_error.py +2 -2
  185. wandelbots_api_client/models/movement_error_error.py +2 -2
  186. wandelbots_api_client/models/movement_movement.py +4 -4
  187. wandelbots_api_client/models/op_mode.py +2 -2
  188. wandelbots_api_client/models/opcua_node_value_trigger_config.py +4 -4
  189. wandelbots_api_client/models/opcua_node_value_trigger_config_node_value.py +1 -1
  190. wandelbots_api_client/models/optimizer_setup.py +8 -8
  191. wandelbots_api_client/models/out_of_workspace.py +2 -2
  192. wandelbots_api_client/models/path.py +2 -2
  193. wandelbots_api_client/models/path_cartesian_ptp.py +3 -3
  194. wandelbots_api_client/models/path_circle.py +4 -4
  195. wandelbots_api_client/models/path_cubic_spline.py +3 -3
  196. wandelbots_api_client/models/path_joint_ptp.py +3 -3
  197. wandelbots_api_client/models/path_line.py +3 -3
  198. wandelbots_api_client/models/pause_movement_request.py +3 -3
  199. wandelbots_api_client/models/pause_movement_response.py +2 -2
  200. wandelbots_api_client/models/pause_movement_response_pause_response.py +3 -3
  201. wandelbots_api_client/models/pause_on_io.py +3 -3
  202. wandelbots_api_client/models/payload.py +5 -5
  203. wandelbots_api_client/models/plan_collision_free_ptp_request.py +10 -9
  204. wandelbots_api_client/models/plan_collision_free_ptp_request_target.py +1 -1
  205. wandelbots_api_client/models/plan_failed_on_trajectory_response.py +10 -10
  206. wandelbots_api_client/models/plan_failed_response.py +8 -8
  207. wandelbots_api_client/models/plan_request.py +6 -6
  208. wandelbots_api_client/models/plan_response.py +4 -4
  209. wandelbots_api_client/models/plan_successful_response.py +3 -3
  210. wandelbots_api_client/models/plan_trajectory_failed_response.py +4 -4
  211. wandelbots_api_client/models/plan_trajectory_failed_response_error_feedback.py +1 -1
  212. wandelbots_api_client/models/plan_trajectory_request.py +10 -9
  213. wandelbots_api_client/models/plan_trajectory_response.py +2 -2
  214. wandelbots_api_client/models/plan_trajectory_response_response.py +1 -1
  215. wandelbots_api_client/models/plane2.py +2 -2
  216. wandelbots_api_client/models/plane3.py +2 -2
  217. wandelbots_api_client/models/planned_motion.py +6 -6
  218. wandelbots_api_client/models/planner_pose.py +3 -3
  219. wandelbots_api_client/models/planning_limits.py +13 -13
  220. wandelbots_api_client/models/planning_limits_limit_range.py +3 -3
  221. wandelbots_api_client/models/playback_speed_request.py +3 -3
  222. wandelbots_api_client/models/playback_speed_response.py +2 -2
  223. wandelbots_api_client/models/playback_speed_response_playback_speed_response.py +2 -2
  224. wandelbots_api_client/models/point_cloud.py +2 -2
  225. wandelbots_api_client/models/pose.py +4 -4
  226. wandelbots_api_client/models/pose2.py +3 -3
  227. wandelbots_api_client/models/program_metadata.py +7 -7
  228. wandelbots_api_client/models/program_run.py +15 -14
  229. wandelbots_api_client/models/program_run_object.py +7 -7
  230. wandelbots_api_client/models/program_run_state.py +1 -1
  231. wandelbots_api_client/models/program_runner_reference.py +3 -3
  232. wandelbots_api_client/models/pyjectory_datatypes_core_pose.py +3 -3
  233. wandelbots_api_client/models/pyjectory_datatypes_serializer_orientation.py +2 -2
  234. wandelbots_api_client/models/pyjectory_datatypes_serializer_pose.py +2 -2
  235. wandelbots_api_client/models/pyjectory_datatypes_serializer_position.py +2 -2
  236. wandelbots_api_client/models/pyriphery_etcd_etcd_configuration.py +5 -5
  237. wandelbots_api_client/models/pyriphery_hardware_isaac_isaac_configuration.py +5 -5
  238. wandelbots_api_client/models/pyriphery_opcua_opcua_configuration.py +4 -4
  239. wandelbots_api_client/models/pyriphery_pyrae_controller_controller_configuration.py +7 -7
  240. wandelbots_api_client/models/pyriphery_pyrae_robot_robot_configuration.py +8 -8
  241. wandelbots_api_client/models/pyriphery_robotics_configurable_collision_scene_configurable_collision_scene_configuration_input.py +13 -11
  242. wandelbots_api_client/models/pyriphery_robotics_configurable_collision_scene_configurable_collision_scene_configuration_output.py +13 -11
  243. wandelbots_api_client/models/pyriphery_robotics_robotcell_timer_configuration.py +3 -3
  244. wandelbots_api_client/models/pyriphery_robotics_simulation_robot_with_view_open3d_configuration.py +4 -4
  245. wandelbots_api_client/models/pyriphery_robotics_simulation_simulated_io_configuration.py +3 -3
  246. wandelbots_api_client/models/pyriphery_robotics_simulation_simulated_opcua_configuration.py +3 -3
  247. wandelbots_api_client/models/quaternion.py +5 -5
  248. wandelbots_api_client/models/recipe_metadata.py +8 -8
  249. wandelbots_api_client/models/rectangle.py +3 -3
  250. wandelbots_api_client/models/rectangle2.py +4 -4
  251. wandelbots_api_client/models/rectangle3.py +4 -4
  252. wandelbots_api_client/models/rectangular_capsule.py +4 -4
  253. wandelbots_api_client/models/rectangular_capsule2.py +5 -5
  254. wandelbots_api_client/models/rectangular_capsule3.py +5 -5
  255. wandelbots_api_client/models/release_channel.py +1 -1
  256. wandelbots_api_client/models/request.py +1 -1
  257. wandelbots_api_client/models/request1.py +1 -1
  258. wandelbots_api_client/models/response_get_value_programs_values_key_get.py +1 -1
  259. wandelbots_api_client/models/response_get_values_programs_values_get_value.py +1 -1
  260. wandelbots_api_client/models/robot_controller.py +3 -3
  261. wandelbots_api_client/models/robot_controller_configuration.py +1 -1
  262. wandelbots_api_client/models/robot_controller_state.py +8 -8
  263. wandelbots_api_client/models/robot_link_geometry.py +3 -3
  264. wandelbots_api_client/models/robot_state.py +3 -3
  265. wandelbots_api_client/models/robot_system_mode.py +1 -1
  266. wandelbots_api_client/models/robot_tcp.py +5 -5
  267. wandelbots_api_client/models/robot_tcps.py +2 -2
  268. wandelbots_api_client/models/rotation_angle_types.py +1 -1
  269. wandelbots_api_client/models/rotation_angles.py +3 -3
  270. wandelbots_api_client/models/safety_configuration.py +6 -6
  271. wandelbots_api_client/models/safety_setup.py +5 -5
  272. wandelbots_api_client/models/safety_setup_safety_settings.py +3 -3
  273. wandelbots_api_client/models/safety_setup_safety_zone.py +5 -5
  274. wandelbots_api_client/models/safety_zone.py +4 -4
  275. wandelbots_api_client/models/safety_zone_limits.py +3 -3
  276. wandelbots_api_client/models/safety_zone_violation.py +2 -2
  277. wandelbots_api_client/models/service_status.py +3 -3
  278. wandelbots_api_client/models/service_status_phase.py +1 -1
  279. wandelbots_api_client/models/service_status_severity.py +1 -1
  280. wandelbots_api_client/models/service_status_status.py +4 -4
  281. wandelbots_api_client/models/set_io.py +3 -3
  282. wandelbots_api_client/models/set_playback_speed.py +3 -3
  283. wandelbots_api_client/models/single_joint_limit.py +3 -3
  284. wandelbots_api_client/models/singularity.py +3 -3
  285. wandelbots_api_client/models/singularity_type_enum.py +1 -1
  286. wandelbots_api_client/models/sphere.py +2 -2
  287. wandelbots_api_client/models/sphere2.py +3 -3
  288. wandelbots_api_client/models/sphere3.py +3 -3
  289. wandelbots_api_client/models/standstill.py +2 -2
  290. wandelbots_api_client/models/standstill_reason.py +1 -1
  291. wandelbots_api_client/models/standstill_standstill.py +4 -4
  292. wandelbots_api_client/models/start_movement_request.py +6 -6
  293. wandelbots_api_client/models/start_on_io.py +3 -3
  294. wandelbots_api_client/models/status.py +4 -4
  295. wandelbots_api_client/models/stop_response.py +4 -4
  296. wandelbots_api_client/models/store_value.py +1 -1
  297. wandelbots_api_client/models/stream_move_backward.py +2 -2
  298. wandelbots_api_client/models/stream_move_forward.py +2 -2
  299. wandelbots_api_client/models/stream_move_playback_speed.py +2 -2
  300. wandelbots_api_client/models/stream_move_request.py +1 -1
  301. wandelbots_api_client/models/stream_move_response.py +4 -4
  302. wandelbots_api_client/models/stream_move_to_trajectory.py +2 -2
  303. wandelbots_api_client/models/stream_stop.py +2 -2
  304. wandelbots_api_client/models/tcp_pose.py +5 -5
  305. wandelbots_api_client/models/tcp_pose_request.py +5 -5
  306. wandelbots_api_client/models/tool_geometry.py +3 -3
  307. wandelbots_api_client/models/trajectory_sample.py +12 -12
  308. wandelbots_api_client/models/trigger_object.py +11 -11
  309. wandelbots_api_client/models/trigger_type.py +1 -1
  310. wandelbots_api_client/models/universalrobots_controller.py +3 -3
  311. wandelbots_api_client/models/update_nova_version_request.py +2 -2
  312. wandelbots_api_client/models/update_program_metadata_request.py +4 -4
  313. wandelbots_api_client/models/update_recipe_metadata_request.py +4 -4
  314. wandelbots_api_client/models/update_trigger_request.py +6 -6
  315. wandelbots_api_client/models/validation_error.py +4 -4
  316. wandelbots_api_client/models/validation_error2.py +4 -4
  317. wandelbots_api_client/models/validation_error2_loc_inner.py +1 -1
  318. wandelbots_api_client/models/validation_error_loc_inner.py +1 -1
  319. wandelbots_api_client/models/value.py +1 -1
  320. wandelbots_api_client/models/vector3d.py +4 -4
  321. wandelbots_api_client/models/version_number.py +9 -9
  322. wandelbots_api_client/models/virtual_controller.py +6 -6
  323. wandelbots_api_client/models/virtual_controller_types.py +11 -1
  324. wandelbots_api_client/models/virtual_robot_configuration.py +3 -3
  325. wandelbots_api_client/models/yaskawa_controller.py +3 -3
  326. wandelbots_api_client/rest.py +3 -2
  327. wandelbots_api_client/v2/__init__.py +3 -4
  328. wandelbots_api_client/v2/api/__init__.py +2 -0
  329. wandelbots_api_client/v2/api/application_api.py +11 -12
  330. wandelbots_api_client/v2/api/bus_inputs_outputs_api.py +930 -82
  331. wandelbots_api_client/v2/api/cell_api.py +8 -9
  332. wandelbots_api_client/v2/api/controller_api.py +35 -32
  333. wandelbots_api_client/v2/api/controller_inputs_outputs_api.py +14 -13
  334. wandelbots_api_client/v2/api/jogging_api.py +8 -6
  335. wandelbots_api_client/v2/api/kinematics_api.py +14 -16
  336. wandelbots_api_client/v2/api/license_api.py +8 -9
  337. wandelbots_api_client/v2/api/motion_group_api.py +10 -9
  338. wandelbots_api_client/v2/api/motion_group_models_api.py +13 -50
  339. wandelbots_api_client/v2/api/program_api.py +2 -3
  340. wandelbots_api_client/v2/api/store_collision_components_api.py +823 -50
  341. wandelbots_api_client/v2/api/store_collision_setups_api.py +264 -7
  342. wandelbots_api_client/v2/api/store_object_api.py +11 -12
  343. wandelbots_api_client/v2/api/system_api.py +6 -6
  344. wandelbots_api_client/v2/api/trajectory_caching_api.py +14 -15
  345. wandelbots_api_client/v2/api/trajectory_execution_api.py +8 -6
  346. wandelbots_api_client/v2/api/trajectory_planning_api.py +17 -19
  347. wandelbots_api_client/v2/api/version_api.py +284 -0
  348. wandelbots_api_client/v2/api/virtual_controller_api.py +53 -39
  349. wandelbots_api_client/v2/api/virtual_controller_behavior_api.py +20 -12
  350. wandelbots_api_client/v2/api/virtual_controller_inputs_outputs_api.py +5 -6
  351. wandelbots_api_client/v2/api_client.py +15 -8
  352. wandelbots_api_client/v2/configuration.py +19 -8
  353. wandelbots_api_client/v2/exceptions.py +2 -2
  354. wandelbots_api_client/v2/models/__init__.py +50 -29
  355. wandelbots_api_client/v2/models/abb_controller.py +8 -11
  356. wandelbots_api_client/v2/models/abb_controller_egm_server.py +4 -4
  357. wandelbots_api_client/v2/models/activate_license_request.py +3 -3
  358. wandelbots_api_client/v2/models/add_trajectory_error.py +5 -5
  359. wandelbots_api_client/v2/models/add_trajectory_error_data.py +58 -58
  360. wandelbots_api_client/v2/models/add_trajectory_request.py +5 -5
  361. wandelbots_api_client/v2/models/add_trajectory_response.py +4 -4
  362. wandelbots_api_client/v2/models/api_version.py +91 -0
  363. wandelbots_api_client/v2/models/app.py +11 -11
  364. wandelbots_api_client/v2/models/behavior.py +3 -3
  365. wandelbots_api_client/v2/models/blending_auto.py +6 -5
  366. wandelbots_api_client/v2/models/blending_position.py +4 -4
  367. wandelbots_api_client/v2/models/boolean_value.py +6 -9
  368. wandelbots_api_client/v2/models/box.py +7 -7
  369. wandelbots_api_client/v2/models/{io_description2.py → bus_io_description.py} +16 -16
  370. wandelbots_api_client/v2/models/bus_io_modbus_client.py +104 -0
  371. wandelbots_api_client/v2/models/bus_io_modbus_server.py +115 -0
  372. wandelbots_api_client/v2/models/bus_io_modbus_tcp_client.py +106 -0
  373. wandelbots_api_client/v2/models/bus_io_modbus_tcp_server.py +104 -0
  374. wandelbots_api_client/v2/models/bus_io_modbus_virtual.py +98 -0
  375. wandelbots_api_client/v2/models/bus_io_profinet.py +8 -11
  376. wandelbots_api_client/v2/models/bus_io_profinet_default_route.py +4 -4
  377. wandelbots_api_client/v2/models/bus_io_profinet_ip_config.py +5 -5
  378. wandelbots_api_client/v2/models/bus_io_profinet_network.py +5 -5
  379. wandelbots_api_client/v2/models/bus_io_profinet_virtual.py +5 -8
  380. wandelbots_api_client/v2/models/bus_io_type.py +65 -18
  381. wandelbots_api_client/v2/models/bus_ios_state.py +4 -4
  382. wandelbots_api_client/v2/models/bus_ios_state_enum.py +2 -2
  383. wandelbots_api_client/v2/models/capsule.py +5 -5
  384. wandelbots_api_client/v2/models/cartesian_limits.py +6 -6
  385. wandelbots_api_client/v2/models/cell.py +7 -7
  386. wandelbots_api_client/v2/models/collider.py +5 -5
  387. wandelbots_api_client/v2/models/collider_shape.py +2 -42
  388. wandelbots_api_client/v2/models/collision.py +8 -8
  389. wandelbots_api_client/v2/models/collision_contact.py +4 -4
  390. wandelbots_api_client/v2/models/collision_error.py +3 -3
  391. wandelbots_api_client/v2/models/collision_free_algorithm.py +3 -3
  392. wandelbots_api_client/v2/models/collision_setup.py +14 -12
  393. wandelbots_api_client/v2/models/comparator.py +2 -2
  394. wandelbots_api_client/v2/models/configuration_archive_status.py +2 -17
  395. wandelbots_api_client/v2/models/configuration_archive_status_creating.py +4 -4
  396. wandelbots_api_client/v2/models/configuration_archive_status_error.py +4 -4
  397. wandelbots_api_client/v2/models/configuration_archive_status_success.py +3 -3
  398. wandelbots_api_client/v2/models/configuration_resource.py +5 -5
  399. wandelbots_api_client/v2/models/container_environment_inner.py +4 -4
  400. wandelbots_api_client/v2/models/container_image.py +5 -5
  401. wandelbots_api_client/v2/models/container_image_secrets_inner.py +3 -3
  402. wandelbots_api_client/v2/models/container_resources.py +4 -4
  403. wandelbots_api_client/v2/models/container_storage.py +4 -4
  404. wandelbots_api_client/v2/models/controller_description.py +6 -6
  405. wandelbots_api_client/v2/models/convex_hull.py +4 -4
  406. wandelbots_api_client/v2/models/coordinate_system.py +8 -8
  407. wandelbots_api_client/v2/models/coordinate_system_data.py +7 -7
  408. wandelbots_api_client/v2/models/cubic_spline_parameter.py +4 -4
  409. wandelbots_api_client/v2/models/cycle_time.py +5 -4
  410. wandelbots_api_client/v2/models/cylinder.py +5 -5
  411. wandelbots_api_client/v2/models/dh_parameter.py +7 -7
  412. wandelbots_api_client/v2/models/direction.py +2 -2
  413. wandelbots_api_client/v2/models/error.py +4 -4
  414. wandelbots_api_client/v2/models/error_invalid_joint_count.py +5 -5
  415. wandelbots_api_client/v2/models/error_joint_limit_exceeded.py +6 -5
  416. wandelbots_api_client/v2/models/error_joint_position_collision.py +6 -6
  417. wandelbots_api_client/v2/models/error_max_iterations_exceeded.py +4 -4
  418. wandelbots_api_client/v2/models/execute.py +4 -4
  419. wandelbots_api_client/v2/models/execute_details.py +2 -12
  420. wandelbots_api_client/v2/models/execute_jogging_request.py +30 -2
  421. wandelbots_api_client/v2/models/execute_jogging_response.py +7 -7
  422. wandelbots_api_client/v2/models/execute_trajectory_request.py +30 -2
  423. wandelbots_api_client/v2/models/execute_trajectory_response.py +7 -7
  424. wandelbots_api_client/v2/models/external_joint_stream_datapoint.py +4 -4
  425. wandelbots_api_client/v2/models/external_joint_stream_request.py +3 -3
  426. wandelbots_api_client/v2/models/fanuc_controller.py +6 -9
  427. wandelbots_api_client/v2/models/feedback_collision.py +6 -6
  428. wandelbots_api_client/v2/models/feedback_joint_limit_exceeded.py +7 -6
  429. wandelbots_api_client/v2/models/feedback_out_of_workspace.py +4 -4
  430. wandelbots_api_client/v2/models/feedback_singularity.py +5 -5
  431. wandelbots_api_client/v2/models/flag.py +3 -3
  432. wandelbots_api_client/v2/models/float_value.py +6 -9
  433. wandelbots_api_client/v2/models/forward_kinematics422_response.py +3 -3
  434. wandelbots_api_client/v2/models/forward_kinematics_request.py +6 -6
  435. wandelbots_api_client/v2/models/forward_kinematics_response.py +3 -3
  436. wandelbots_api_client/v2/models/forward_kinematics_validation_error.py +7 -7
  437. wandelbots_api_client/v2/models/get_trajectory_response.py +5 -5
  438. wandelbots_api_client/v2/models/http_validation_error.py +3 -3
  439. wandelbots_api_client/v2/models/image_credentials.py +5 -5
  440. wandelbots_api_client/v2/models/{inconsitent_trajectory_size.py → inconsistent_trajectory_size_error.py} +9 -9
  441. wandelbots_api_client/v2/models/{inconsitent_trajectory_size_inconsistent_trajectory_size.py → inconsistent_trajectory_size_error_inconsistent_trajectory_size.py} +9 -9
  442. wandelbots_api_client/v2/models/initialize_jogging_request.py +7 -10
  443. wandelbots_api_client/v2/models/initialize_jogging_response.py +4 -4
  444. wandelbots_api_client/v2/models/initialize_movement_request.py +7 -10
  445. wandelbots_api_client/v2/models/initialize_movement_request_trajectory.py +2 -2
  446. wandelbots_api_client/v2/models/initialize_movement_response.py +5 -5
  447. wandelbots_api_client/v2/models/integer_value.py +6 -9
  448. wandelbots_api_client/v2/models/{invalid_dof.py → invalid_dof_error.py} +9 -9
  449. wandelbots_api_client/v2/models/{invalid_dof_invalid_dof.py → invalid_dof_error_invalid_dof.py} +8 -8
  450. wandelbots_api_client/v2/models/inverse_kinematics422_response.py +3 -3
  451. wandelbots_api_client/v2/models/inverse_kinematics_request.py +12 -11
  452. wandelbots_api_client/v2/models/inverse_kinematics_response.py +3 -3
  453. wandelbots_api_client/v2/models/inverse_kinematics_validation_error.py +7 -7
  454. wandelbots_api_client/v2/models/inverse_kinematics_validation_error_all_of_data.py +2 -2
  455. wandelbots_api_client/v2/models/io_boolean_value.py +7 -10
  456. wandelbots_api_client/v2/models/{io_description_min.py → io_boundary.py} +10 -25
  457. wandelbots_api_client/v2/models/io_description.py +13 -13
  458. wandelbots_api_client/v2/models/io_direction.py +2 -2
  459. wandelbots_api_client/v2/models/io_float_value.py +7 -10
  460. wandelbots_api_client/v2/models/io_integer_value.py +7 -10
  461. wandelbots_api_client/v2/models/io_origin.py +37 -0
  462. wandelbots_api_client/v2/models/io_value.py +2 -17
  463. wandelbots_api_client/v2/models/io_value_type.py +2 -2
  464. wandelbots_api_client/v2/models/jogging_details.py +4 -4
  465. wandelbots_api_client/v2/models/jogging_details_state.py +2 -27
  466. wandelbots_api_client/v2/models/jogging_paused_by_user.py +3 -3
  467. wandelbots_api_client/v2/models/jogging_paused_near_collision.py +4 -4
  468. wandelbots_api_client/v2/models/jogging_paused_near_joint_limit.py +6 -5
  469. wandelbots_api_client/v2/models/jogging_paused_on_io.py +3 -3
  470. wandelbots_api_client/v2/models/jogging_running.py +3 -3
  471. wandelbots_api_client/v2/models/{joint_limit_exceeded.py → joint_limit_exceeded_error.py} +7 -7
  472. wandelbots_api_client/v2/models/joint_limits.py +6 -6
  473. wandelbots_api_client/v2/models/joint_trajectory.py +5 -5
  474. wandelbots_api_client/v2/models/joint_velocity_request.py +6 -9
  475. wandelbots_api_client/v2/models/joint_velocity_response.py +4 -4
  476. wandelbots_api_client/v2/models/kuka_controller.py +12 -13
  477. wandelbots_api_client/v2/models/kuka_controller_rsi_server.py +4 -4
  478. wandelbots_api_client/v2/models/license.py +12 -12
  479. wandelbots_api_client/v2/models/license_status.py +4 -4
  480. wandelbots_api_client/v2/models/license_status_enum.py +2 -2
  481. wandelbots_api_client/v2/models/limit_range.py +4 -4
  482. wandelbots_api_client/v2/models/limit_set.py +7 -7
  483. wandelbots_api_client/v2/models/limits_override.py +8 -8
  484. wandelbots_api_client/v2/models/list_trajectories_response.py +3 -3
  485. wandelbots_api_client/v2/models/manufacturer.py +2 -2
  486. wandelbots_api_client/v2/models/midpoint_insertion_algorithm.py +4 -4
  487. wandelbots_api_client/v2/models/modbus_io.py +105 -0
  488. wandelbots_api_client/v2/models/modbus_io_area.py +40 -0
  489. wandelbots_api_client/v2/models/modbus_io_byte_order.py +40 -0
  490. wandelbots_api_client/v2/models/{http_validation_error2.py → modbus_io_data.py} +23 -28
  491. wandelbots_api_client/v2/models/modbus_io_type_enum.py +39 -0
  492. wandelbots_api_client/v2/models/motion_command.py +5 -5
  493. wandelbots_api_client/v2/models/motion_command_blending.py +2 -2
  494. wandelbots_api_client/v2/models/motion_command_path.py +2 -2
  495. wandelbots_api_client/v2/models/motion_group_description.py +30 -25
  496. wandelbots_api_client/v2/models/motion_group_info.py +7 -6
  497. wandelbots_api_client/v2/models/motion_group_joints.py +6 -6
  498. wandelbots_api_client/v2/models/motion_group_setup.py +15 -13
  499. wandelbots_api_client/v2/models/motion_group_state.py +18 -17
  500. wandelbots_api_client/v2/models/motion_group_state_joint_limit_reached.py +3 -3
  501. wandelbots_api_client/v2/models/movement_error_response.py +4 -4
  502. wandelbots_api_client/v2/models/{nan_value.py → nan_value_error.py} +9 -9
  503. wandelbots_api_client/v2/models/{nan_value_nan_value.py → nan_value_error_nan_value.py} +6 -6
  504. wandelbots_api_client/v2/models/op_mode.py +3 -3
  505. wandelbots_api_client/v2/models/operating_state.py +2 -2
  506. wandelbots_api_client/v2/models/operation_limits.py +6 -6
  507. wandelbots_api_client/v2/models/operation_mode.py +2 -2
  508. wandelbots_api_client/v2/models/orientation_type.py +2 -2
  509. wandelbots_api_client/v2/models/path_cartesian_ptp.py +4 -4
  510. wandelbots_api_client/v2/models/path_circle.py +5 -5
  511. wandelbots_api_client/v2/models/path_cubic_spline.py +4 -4
  512. wandelbots_api_client/v2/models/path_joint_ptp.py +4 -4
  513. wandelbots_api_client/v2/models/path_line.py +4 -4
  514. wandelbots_api_client/v2/models/pause_jogging_request.py +5 -8
  515. wandelbots_api_client/v2/models/pause_jogging_response.py +4 -4
  516. wandelbots_api_client/v2/models/pause_movement_request.py +5 -8
  517. wandelbots_api_client/v2/models/pause_movement_response.py +4 -4
  518. wandelbots_api_client/v2/models/pause_on_io.py +9 -6
  519. wandelbots_api_client/v2/models/payload.py +6 -6
  520. wandelbots_api_client/v2/models/plan422_response.py +3 -3
  521. wandelbots_api_client/v2/models/plan_collision_free_failed_response.py +3 -3
  522. wandelbots_api_client/v2/models/plan_collision_free_request.py +6 -6
  523. wandelbots_api_client/v2/models/plan_collision_free_response.py +3 -3
  524. wandelbots_api_client/v2/models/plan_collision_free_response_response.py +2 -2
  525. wandelbots_api_client/v2/models/plan_trajectory_failed_response.py +5 -5
  526. wandelbots_api_client/v2/models/plan_trajectory_failed_response_error_feedback.py +2 -2
  527. wandelbots_api_client/v2/models/plan_trajectory_request.py +5 -5
  528. wandelbots_api_client/v2/models/plan_trajectory_response.py +3 -3
  529. wandelbots_api_client/v2/models/plan_trajectory_response_response.py +2 -2
  530. wandelbots_api_client/v2/models/plan_validation_error.py +7 -7
  531. wandelbots_api_client/v2/models/plan_validation_error_all_of_data.py +2 -2
  532. wandelbots_api_client/v2/models/plane.py +3 -3
  533. wandelbots_api_client/v2/models/playback_speed_request.py +8 -10
  534. wandelbots_api_client/v2/models/playback_speed_response.py +4 -4
  535. wandelbots_api_client/v2/models/pose.py +4 -4
  536. wandelbots_api_client/v2/models/profinet_description.py +7 -7
  537. wandelbots_api_client/v2/models/profinet_input_output_config.py +5 -5
  538. wandelbots_api_client/v2/models/profinet_io.py +10 -10
  539. wandelbots_api_client/v2/models/profinet_io_data.py +9 -9
  540. wandelbots_api_client/v2/models/profinet_io_direction.py +3 -3
  541. wandelbots_api_client/v2/models/profinet_io_type_enum.py +2 -2
  542. wandelbots_api_client/v2/models/profinet_slot_description.py +6 -6
  543. wandelbots_api_client/v2/models/profinet_sub_slot_description.py +5 -5
  544. wandelbots_api_client/v2/models/program.py +8 -8
  545. wandelbots_api_client/v2/models/program_run.py +16 -14
  546. wandelbots_api_client/v2/models/program_run_state.py +2 -2
  547. wandelbots_api_client/v2/models/program_start_request.py +3 -3
  548. wandelbots_api_client/v2/models/rectangle.py +5 -5
  549. wandelbots_api_client/v2/models/rectangular_capsule.py +6 -6
  550. wandelbots_api_client/v2/models/release_channel.py +2 -2
  551. wandelbots_api_client/v2/models/robot_controller.py +4 -4
  552. wandelbots_api_client/v2/models/robot_controller_configuration.py +2 -2
  553. wandelbots_api_client/v2/models/robot_controller_state.py +13 -12
  554. wandelbots_api_client/v2/models/robot_system_mode.py +2 -2
  555. wandelbots_api_client/v2/models/robot_tcp.py +7 -7
  556. wandelbots_api_client/v2/models/robot_tcp_data.py +6 -6
  557. wandelbots_api_client/v2/models/rrt_connect_algorithm.py +8 -8
  558. wandelbots_api_client/v2/models/safety_state_type.py +2 -2
  559. wandelbots_api_client/v2/models/service_group.py +2 -2
  560. wandelbots_api_client/v2/models/service_status.py +5 -5
  561. wandelbots_api_client/v2/models/service_status_phase.py +2 -2
  562. wandelbots_api_client/v2/models/service_status_response.py +4 -4
  563. wandelbots_api_client/v2/models/service_status_severity.py +2 -2
  564. wandelbots_api_client/v2/models/service_status_status.py +5 -5
  565. wandelbots_api_client/v2/models/set_io.py +9 -6
  566. wandelbots_api_client/v2/models/settable_robot_system_mode.py +2 -2
  567. wandelbots_api_client/v2/models/singularity_type_enum.py +2 -2
  568. wandelbots_api_client/v2/models/sphere.py +4 -4
  569. wandelbots_api_client/v2/models/start_movement_request.py +13 -14
  570. wandelbots_api_client/v2/models/start_movement_response.py +4 -4
  571. wandelbots_api_client/v2/models/start_on_io.py +9 -6
  572. wandelbots_api_client/v2/models/stream_io_values_response.py +7 -6
  573. wandelbots_api_client/v2/models/tcp_offset.py +4 -4
  574. wandelbots_api_client/v2/models/{tcp_required.py → tcp_required_error.py} +6 -6
  575. wandelbots_api_client/v2/models/tcp_velocity_request.py +7 -10
  576. wandelbots_api_client/v2/models/tcp_velocity_response.py +4 -4
  577. wandelbots_api_client/v2/models/{torque_exceeded.py → torque_exceeded_error.py} +9 -9
  578. wandelbots_api_client/v2/models/{torque_exceeded_torque_exceeded.py → torque_exceeded_error_torque_exceeded.py} +8 -8
  579. wandelbots_api_client/v2/models/trajectory_data.py +7 -7
  580. wandelbots_api_client/v2/models/trajectory_details.py +6 -6
  581. wandelbots_api_client/v2/models/trajectory_details_state.py +2 -27
  582. wandelbots_api_client/v2/models/trajectory_ended.py +3 -3
  583. wandelbots_api_client/v2/models/trajectory_id.py +5 -5
  584. wandelbots_api_client/v2/models/trajectory_paused_by_user.py +3 -3
  585. wandelbots_api_client/v2/models/trajectory_paused_on_io.py +3 -3
  586. wandelbots_api_client/v2/models/trajectory_running.py +6 -5
  587. wandelbots_api_client/v2/models/trajectory_wait_for_io.py +3 -3
  588. wandelbots_api_client/v2/models/unit_type.py +2 -2
  589. wandelbots_api_client/v2/models/universalrobots_controller.py +6 -9
  590. wandelbots_api_client/v2/models/update_nova_version_request.py +3 -3
  591. wandelbots_api_client/v2/models/validation_error.py +6 -6
  592. wandelbots_api_client/v2/models/validation_error2.py +5 -5
  593. wandelbots_api_client/v2/models/validation_error_loc_inner.py +2 -2
  594. wandelbots_api_client/v2/models/virtual_controller.py +8 -11
  595. wandelbots_api_client/v2/models/virtual_controller_types.py +12 -2
  596. wandelbots_api_client/v2/models/virtual_robot_configuration.py +4 -4
  597. wandelbots_api_client/v2/models/wait_for_io_event_request.py +4 -4
  598. wandelbots_api_client/v2/models/yaskawa_controller.py +6 -9
  599. wandelbots_api_client/v2/rest.py +4 -3
  600. wandelbots_api_client/v2_pydantic/__init__.py +50 -0
  601. wandelbots_api_client/v2_pydantic/api/__init__.py +51 -0
  602. wandelbots_api_client/v2_pydantic/api/application_api.py +1803 -0
  603. wandelbots_api_client/v2_pydantic/api/bus_inputs_outputs_api.py +4603 -0
  604. wandelbots_api_client/v2_pydantic/api/cell_api.py +2003 -0
  605. wandelbots_api_client/v2_pydantic/api/controller_api.py +3721 -0
  606. wandelbots_api_client/v2_pydantic/api/controller_inputs_outputs_api.py +1395 -0
  607. wandelbots_api_client/v2_pydantic/api/jogging_api.py +125 -0
  608. wandelbots_api_client/v2_pydantic/api/kinematics_api.py +642 -0
  609. wandelbots_api_client/v2_pydantic/api/license_api.py +1061 -0
  610. wandelbots_api_client/v2_pydantic/api/motion_group_api.py +733 -0
  611. wandelbots_api_client/v2_pydantic/api/motion_group_models_api.py +563 -0
  612. wandelbots_api_client/v2_pydantic/api/program_api.py +1187 -0
  613. wandelbots_api_client/v2_pydantic/api/store_collision_components_api.py +4170 -0
  614. wandelbots_api_client/v2_pydantic/api/store_collision_setups_api.py +1419 -0
  615. wandelbots_api_client/v2_pydantic/api/store_object_api.py +1719 -0
  616. wandelbots_api_client/v2_pydantic/api/system_api.py +2427 -0
  617. wandelbots_api_client/v2_pydantic/api/trajectory_caching_api.py +1508 -0
  618. wandelbots_api_client/v2_pydantic/api/trajectory_execution_api.py +125 -0
  619. wandelbots_api_client/v2_pydantic/api/trajectory_planning_api.py +642 -0
  620. wandelbots_api_client/v2_pydantic/api/version_api.py +287 -0
  621. wandelbots_api_client/v2_pydantic/api/virtual_controller_api.py +4610 -0
  622. wandelbots_api_client/v2_pydantic/api/virtual_controller_behavior_api.py +991 -0
  623. wandelbots_api_client/v2_pydantic/api/virtual_controller_inputs_outputs_api.py +1012 -0
  624. wandelbots_api_client/v2_pydantic/api_client.py +809 -0
  625. wandelbots_api_client/v2_pydantic/api_response.py +21 -0
  626. wandelbots_api_client/v2_pydantic/configuration.py +606 -0
  627. wandelbots_api_client/v2_pydantic/exceptions.py +216 -0
  628. wandelbots_api_client/v2_pydantic/models.py +4561 -0
  629. wandelbots_api_client/v2_pydantic/py.typed +0 -0
  630. wandelbots_api_client/v2_pydantic/rest.py +213 -0
  631. {wandelbots_api_client-25.8.0.dev77.dist-info → wandelbots_api_client-25.11.0.dev12.dist-info}/METADATA +17 -16
  632. wandelbots_api_client-25.11.0.dev12.dist-info/RECORD +640 -0
  633. wandelbots_api_client/models/create_trigger_request_config.py +0 -123
  634. wandelbots_api_client-25.8.0.dev77.dist-info/RECORD +0 -596
  635. {wandelbots_api_client-25.8.0.dev77.dist-info → wandelbots_api_client-25.11.0.dev12.dist-info}/WHEEL +0 -0
  636. {wandelbots_api_client-25.8.0.dev77.dist-info → wandelbots_api_client-25.11.0.dev12.dist-info}/licenses/LICENSE +0 -0
  637. {wandelbots_api_client-25.8.0.dev77.dist-info → wandelbots_api_client-25.11.0.dev12.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,4561 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: public.openapi.yaml
3
+ # timestamp: 2025-12-03T19:57:03+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from datetime import date
8
+ from enum import Enum
9
+ from pathlib import Path
10
+ from typing import Annotated, Any, Dict, List, Literal, Optional, Union
11
+
12
+ from pydantic import AwareDatetime, BaseModel, EmailStr, Field, RootModel
13
+
14
+
15
+ class NameList(RootModel):
16
+ """
17
+ A list of names
18
+ """
19
+
20
+ root: List[str]
21
+ """
22
+ A list of names
23
+ """
24
+
25
+ def __getitem__(self, index: int) -> str:
26
+ """
27
+ Make list RootModel directly indexable.
28
+ """
29
+ return self.root[index]
30
+
31
+ def __setitem__(self, index: int, value: str) -> None:
32
+ """
33
+ Make list RootModel directly indexable.
34
+ """
35
+ self.root[index] = value
36
+
37
+ def __len__(self) -> int:
38
+ """
39
+ Make list RootModel directly usable with len().
40
+ """
41
+ return len(self.root)
42
+
43
+ def __iter__(self):
44
+ """
45
+ Make list RootModel directly iterable.
46
+ """
47
+ return iter(self.root)
48
+
49
+
50
+ class CellName(RootModel):
51
+ root: Annotated[str, Field(pattern='^[a-z][a-z0-9-]{0,30}[a-z0-9]$')]
52
+ """
53
+ A unique name for the cell used as an identifier for addressing the cell in all API calls.
54
+ It must be a valid k8s label name as defined by [RFC 1123](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names).
55
+
56
+ """
57
+
58
+
59
+ class CellDescription(RootModel):
60
+ root: Annotated[str, Field(max_length=200)]
61
+ """
62
+ A description of the cell.
63
+
64
+ """
65
+
66
+
67
+ class EgmServer(BaseModel):
68
+ """
69
+ The EGM server runs inside of the cell, thus its IP must be in the same network as the 'controller_ip'
70
+ """
71
+
72
+ ip: str
73
+ port: int
74
+
75
+
76
+ class AbbController(BaseModel):
77
+ """
78
+ The configuration of a physical ABB robot controller has to contain IP address.
79
+ Additionally an EGM server configuration has to be specified in order to control the robot.
80
+ Deploying the server is a functionality of this API.
81
+
82
+ """
83
+
84
+ kind: Literal['AbbController'] = 'AbbController'
85
+ controller_ip: str
86
+ controller_port: int
87
+ """
88
+ Default values: 80, 443. If custom value is set, field is required.
89
+
90
+ """
91
+ egm_server: EgmServer
92
+ """
93
+ The EGM server runs inside of the cell, thus its IP must be in the same network as the 'controller_ip'
94
+ """
95
+
96
+
97
+ class FanucController(BaseModel):
98
+ """
99
+ The configuration of a physical FANUC robot controller has to contain IP address of the controller.
100
+ """
101
+
102
+ kind: Literal['FanucController'] = 'FanucController'
103
+ controller_ip: str
104
+
105
+
106
+ class RsiServer(BaseModel):
107
+ """
108
+ The RSI server runs inside of the cell.
109
+ """
110
+
111
+ ip: str
112
+ port: int
113
+
114
+
115
+ class KukaController(BaseModel):
116
+ """
117
+ The configuration of a physical KUKA robot controller has to contain an IP address.
118
+ Additionally an RSI server configuration has to be specified in order to control the robot.
119
+ Deploying the server is a functionality of this API.
120
+
121
+ """
122
+
123
+ kind: Literal['KukaController'] = 'KukaController'
124
+ controller_ip: str
125
+ controller_port: int
126
+ rsi_server: RsiServer
127
+ """
128
+ The RSI server runs inside of the cell.
129
+ """
130
+ slow_cycle_rate: Optional[bool] = False
131
+ """
132
+ If true, uses slower cycle time of 12ms instead of 4ms.
133
+
134
+ """
135
+
136
+
137
+ class UniversalrobotsController(BaseModel):
138
+ """
139
+ The configuration of a physical Universal Robots controller has to contain IP address of the controller.
140
+ """
141
+
142
+ kind: Literal['UniversalrobotsController'] = 'UniversalrobotsController'
143
+ controller_ip: str
144
+
145
+
146
+ class Manufacturer(Enum):
147
+ ABB = 'abb'
148
+ FANUC = 'fanuc'
149
+ KUKA = 'kuka'
150
+ UNIVERSALROBOTS = 'universalrobots'
151
+ YASKAWA = 'yaskawa'
152
+
153
+
154
+ class VirtualControllerTypes(Enum):
155
+ ABB_IRB1010_037_15 = 'abb-irb1010_037_15'
156
+ ABB_IRB1100_0475_4 = 'abb-irb1100_0475_4'
157
+ ABB_IRB1100_058_4 = 'abb-irb1100_058_4'
158
+ ABB_IRB1200_7 = 'abb-irb1200_7'
159
+ ABB_IRB1300_09_11 = 'abb-irb1300_09_11'
160
+ ABB_IRB1300_115_10 = 'abb-irb1300_115_10'
161
+ ABB_IRB1300_14_12 = 'abb-irb1300_14_12'
162
+ ABB_IRB1300_14_7 = 'abb-irb1300_14_7'
163
+ ABB_IRB1600_12_10 = 'abb-irb1600_12_10'
164
+ ABB_IRB1600_12_6 = 'abb-irb1600_12_6'
165
+ ABB_IRB1600_145_10 = 'abb-irb1600_145_10'
166
+ ABB_IRB1600_145_6 = 'abb-irb1600_145_6'
167
+ ABB_IRB2600_ID_185_15 = 'abb-irb2600ID_185_15'
168
+ ABB_IRB2600_ID_200_8 = 'abb-irb2600ID_200_8'
169
+ ABB_IRB2600_165_12 = 'abb-irb2600_165_12'
170
+ ABB_IRB2600_165_20 = 'abb-irb2600_165_20'
171
+ ABB_IRB2600_185_12 = 'abb-irb2600_185_12'
172
+ ABB_IRB4600_205_45 = 'abb-irb4600_205_45'
173
+ ABB_IRB4600_205_60 = 'abb-irb4600_205_60'
174
+ ABB_IRB4600_250_20 = 'abb-irb4600_250_20'
175
+ ABB_IRB4600_255_40 = 'abb-irb4600_255_40'
176
+ ABB_IRB6730_210_310 = 'abb-irb6730_210_310'
177
+ ABB_IRB6730_240_290 = 'abb-irb6730_240_290'
178
+ FANUC_ARC_MATE_100I_D = 'fanuc-arc_mate_100iD'
179
+ FANUC_ARC_MATE_100I_D16_S = 'fanuc-arc_mate_100iD16S'
180
+ FANUC_ARC_MATE_120I_D = 'fanuc-arc_mate_120iD'
181
+ FANUC_ARC_MATE_120I_D12_L = 'fanuc-arc_mate_120iD12L'
182
+ FANUC_ARC_MATE_120I_D35 = 'fanuc-arc_mate_120iD35'
183
+ FANUC_CR35IB = 'fanuc-cr35ib'
184
+ FANUC_CR7IA = 'fanuc-cr7ia'
185
+ FANUC_CR7IAL = 'fanuc-cr7ial'
186
+ FANUC_CRX10IA = 'fanuc-crx10ia'
187
+ FANUC_CRX10IAL = 'fanuc-crx10ial'
188
+ FANUC_CRX20IAL = 'fanuc-crx20ial'
189
+ FANUC_CRX25IA = 'fanuc-crx25ia'
190
+ FANUC_CRX30IA = 'fanuc-crx30ia'
191
+ FANUC_CRX5IA = 'fanuc-crx5ia'
192
+ FANUC_LR_MATE_200I_D = 'fanuc-lr_mate_200iD'
193
+ FANUC_LR_MATE_200I_D4_S = 'fanuc-lr_mate_200iD4S'
194
+ FANUC_LR_MATE_200I_D7_L = 'fanuc-lr_mate_200iD7L'
195
+ FANUC_M10I_D12 = 'fanuc-m10iD12'
196
+ FANUC_M10I_D16_S = 'fanuc-m10iD16S'
197
+ FANUC_M20I_D25 = 'fanuc-m20iD25'
198
+ FANUC_M20I_D35 = 'fanuc-m20iD35'
199
+ FANUC_M710I_C20_L = 'fanuc-m710iC20L'
200
+ FANUC_M900I_B280_L = 'fanuc-m900iB280L'
201
+ FANUC_M900I_B360_E = 'fanuc-m900iB360E'
202
+ FANUC_R2000IC125L = 'fanuc-r2000ic125l'
203
+ FANUC_R2000IC210F = 'fanuc-r2000ic210f'
204
+ KUKA_KR10_R1100 = 'kuka-kr10_r1100'
205
+ KUKA_KR10_R1100_2 = 'kuka-kr10_r1100_2'
206
+ KUKA_KR10_R900 = 'kuka-kr10_r900'
207
+ KUKA_KR10_R900_2 = 'kuka-kr10_r900_2'
208
+ KUKA_KR120_R2700_2 = 'kuka-kr120_r2700_2'
209
+ KUKA_KR12_R1810_2 = 'kuka-kr12_r1810_2'
210
+ KUKA_KR150_R2 = 'kuka-kr150_r2'
211
+ KUKA_KR16_R1610_2 = 'kuka-kr16_r1610_2'
212
+ KUKA_KR16_R2010_2 = 'kuka-kr16_r2010_2'
213
+ KUKA_KR20_R1810 = 'kuka-kr20_r1810'
214
+ KUKA_KR20_R1810_2 = 'kuka-kr20_r1810_2'
215
+ KUKA_KR120_R3100_2 = 'kuka-kr120_r3100_2'
216
+ KUKA_KR120_R3900_2_K = 'kuka-kr120_r3900_2_k'
217
+ KUKA_KR210_R2700_EXTRA = 'kuka-kr210_r2700_extra'
218
+ KUKA_KR210_R2700_2 = 'kuka-kr210_r2700_2'
219
+ KUKA_KR210_R3100_2 = 'kuka-kr210_r3100_2'
220
+ KUKA_KR210_R3300_2 = 'kuka-kr210_r3300_2'
221
+ KUKA_KR240_R2700 = 'kuka-kr240_r2700'
222
+ KUKA_KR240_R2900 = 'kuka-kr240_r2900'
223
+ KUKA_KR240_R3700_2 = 'kuka-kr240_r3700_2'
224
+ KUKA_KR250_R2700_2 = 'kuka-kr250_r2700_2'
225
+ KUKA_KR270_R2700 = 'kuka-kr270_r2700'
226
+ KUKA_KR30_R2100 = 'kuka-kr30_r2100'
227
+ KUKA_KR30_R3 = 'kuka-kr30_r3'
228
+ KUKA_KR360_L240_3 = 'kuka-kr360_l240_3'
229
+ KUKA_KR3_R540 = 'kuka-kr3_r540'
230
+ KUKA_KR4_R600 = 'kuka-kr4_r600'
231
+ KUKA_KR500_L340_3 = 'kuka-kr500_l340_3'
232
+ KUKA_KR50_R2500 = 'kuka-kr50_r2500'
233
+ KUKA_KR60_R3 = 'kuka-kr60_r3'
234
+ KUKA_KR6_R1820 = 'kuka-kr6_r1820'
235
+ KUKA_KR6_R700_2 = 'kuka-kr6_r700_2'
236
+ KUKA_KR6_R700_SIXX = 'kuka-kr6_r700_sixx'
237
+ KUKA_KR6_R900 = 'kuka-kr6_r900'
238
+ KUKA_KR6_R900_2 = 'kuka-kr6_r900_2'
239
+ KUKA_KR70_R2100 = 'kuka-kr70_r2100'
240
+ KUKA_LBR_IISY_11_R1300 = 'kuka-lbr_iisy_11_r1300'
241
+ UNIVERSALROBOTS_UR10CB = 'universalrobots-ur10cb'
242
+ UNIVERSALROBOTS_UR10E = 'universalrobots-ur10e'
243
+ UNIVERSALROBOTS_UR12E = 'universalrobots-ur12e'
244
+ UNIVERSALROBOTS_UR16E = 'universalrobots-ur16e'
245
+ UNIVERSALROBOTS_UR20E = 'universalrobots-ur20e'
246
+ UNIVERSALROBOTS_UR3E = 'universalrobots-ur3e'
247
+ UNIVERSALROBOTS_UR5CB = 'universalrobots-ur5cb'
248
+ UNIVERSALROBOTS_UR5E = 'universalrobots-ur5e'
249
+ UNIVERSALROBOTS_UR7E = 'universalrobots-ur7e'
250
+ YASKAWA_AR1440 = 'yaskawa-ar1440'
251
+ YASKAWA_AR1730 = 'yaskawa-ar1730'
252
+ YASKAWA_AR2010 = 'yaskawa-ar2010'
253
+ YASKAWA_AR3120 = 'yaskawa-ar3120'
254
+ YASKAWA_AR700 = 'yaskawa-ar700'
255
+ YASKAWA_AR900 = 'yaskawa-ar900'
256
+ YASKAWA_GP110 = 'yaskawa-gp110'
257
+ YASKAWA_GP12 = 'yaskawa-gp12'
258
+ YASKAWA_GP180 = 'yaskawa-gp180'
259
+ YASKAWA_GP180_120 = 'yaskawa-gp180-120'
260
+ YASKAWA_GP20HL = 'yaskawa-gp20hl'
261
+ YASKAWA_GP215 = 'yaskawa-gp215'
262
+ YASKAWA_GP225 = 'yaskawa-gp225'
263
+ YASKAWA_GP25 = 'yaskawa-gp25'
264
+ YASKAWA_GP250 = 'yaskawa-gp250'
265
+ YASKAWA_GP25_12 = 'yaskawa-gp25_12'
266
+ YASKAWA_GP280 = 'yaskawa-gp280'
267
+ YASKAWA_GP35_L = 'yaskawa-gp35L'
268
+ YASKAWA_GP400 = 'yaskawa-gp400'
269
+ YASKAWA_GP50 = 'yaskawa-gp50'
270
+ YASKAWA_GP600 = 'yaskawa-gp600'
271
+ YASKAWA_GP7 = 'yaskawa-gp7'
272
+ YASKAWA_GP8 = 'yaskawa-gp8'
273
+ YASKAWA_GP88 = 'yaskawa-gp88'
274
+ YASKAWA_HC10DTP = 'yaskawa-hc10dtp'
275
+ YASKAWA_HC20DTP = 'yaskawa-hc20dtp'
276
+
277
+
278
+ class VirtualController(BaseModel):
279
+ """
280
+ The configuration of a virtual robot controller has to contain the manufacturer string,
281
+ an optional joint position string array and either a preset `type` **or** the complete JSON configuration.
282
+
283
+ """
284
+
285
+ kind: Literal['VirtualController'] = 'VirtualController'
286
+ manufacturer: Manufacturer
287
+ type: Optional[VirtualControllerTypes] = None
288
+ json_: Annotated[Optional[str], Field(alias='json')] = None
289
+ """
290
+ Complete JSON configuration of the virtual robot controller.
291
+ Can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](getVirtualControllerConfiguration).
292
+ If provided, the `type` field should not be used.
293
+
294
+ """
295
+ initial_joint_position: Optional[str] = None
296
+ """
297
+ Initial joint position of the first motion group from the virtual robot controller.
298
+ Provide the joint position as a JSON array containing 7 float values,
299
+ each representing a joint position in radians, e.g., "[0, 0, 0, 0, 0, 0, 0]". If the robot has fewer than 7 joints,
300
+ use "0" for each remaining position to ensure the array has exactly 7 values.
301
+
302
+ """
303
+
304
+
305
+ class YaskawaController(BaseModel):
306
+ """
307
+ The configuration of a physical Yaskawa robot controller has to contain IP address of the controller.
308
+ """
309
+
310
+ kind: Literal['YaskawaController'] = 'YaskawaController'
311
+ controller_ip: str
312
+
313
+
314
+ class RobotController(BaseModel):
315
+ """
316
+ The configuration of a physical or virtual robot controller.
317
+ """
318
+
319
+ name: Annotated[str, Field(pattern='^[a-z][a-z0-9-]{0,61}[a-z0-9]$')]
320
+ """
321
+ Unique name of controller within the cell.
322
+ It must be a valid k8s label name as defined by [RFC 1035](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#rfc-1035-label-names).
323
+
324
+ """
325
+ configuration: Annotated[
326
+ Union[
327
+ AbbController,
328
+ FanucController,
329
+ KukaController,
330
+ UniversalrobotsController,
331
+ VirtualController,
332
+ YaskawaController,
333
+ ],
334
+ Field(discriminator='kind'),
335
+ ]
336
+
337
+
338
+ class ImageCredentials(BaseModel):
339
+ """
340
+ User provided credentials for creating a secret to pull an image from a registry.
341
+
342
+ """
343
+
344
+ registry: str
345
+ user: str
346
+ password: str
347
+
348
+
349
+ class Secret(BaseModel):
350
+ name: str
351
+
352
+
353
+ class ContainerImage(BaseModel):
354
+ """
355
+ A user provided, custom container image and the required credentials to pull it from a registry.
356
+
357
+ """
358
+
359
+ image: Annotated[str, Field(min_length=1)]
360
+ """
361
+ The location of a container image in the form of `<registry>/<image>:<tag>`.
362
+ """
363
+ credentials: Optional[ImageCredentials] = None
364
+ secrets: Optional[List[Secret]] = None
365
+ """
366
+ Known secrets for authentication with the container registry.
367
+ """
368
+
369
+
370
+ class ContainerEnvironmentItem(BaseModel):
371
+ name: str
372
+ value: str
373
+
374
+
375
+ class ContainerEnvironment(RootModel):
376
+ """
377
+ A list of environment variables with name and their value.
378
+ These can be used to configure the containerized application, and turn features on or off.
379
+
380
+ """
381
+
382
+ root: List[ContainerEnvironmentItem]
383
+ """
384
+ A list of environment variables with name and their value.
385
+ These can be used to configure the containerized application, and turn features on or off.
386
+
387
+ """
388
+
389
+ def __getitem__(self, index: int) -> ContainerEnvironmentItem:
390
+ """
391
+ Make list RootModel directly indexable.
392
+ """
393
+ return self.root[index]
394
+
395
+ def __setitem__(self, index: int, value: ContainerEnvironmentItem) -> None:
396
+ """
397
+ Make list RootModel directly indexable.
398
+ """
399
+ self.root[index] = value
400
+
401
+ def __len__(self) -> int:
402
+ """
403
+ Make list RootModel directly usable with len().
404
+ """
405
+ return len(self.root)
406
+
407
+ def __iter__(self):
408
+ """
409
+ Make list RootModel directly iterable.
410
+ """
411
+ return iter(self.root)
412
+
413
+
414
+ class Capacity(RootModel):
415
+ root: Annotated[
416
+ str,
417
+ Field(
418
+ examples=['100Mi'], pattern='^[0-9]+(\\\\.[0-9]+)?(Ki|Mi|Gi|Ti|Pi|Ei|B)?$'
419
+ ),
420
+ ]
421
+ """
422
+ The amount of requested storage capacity.
423
+ """
424
+
425
+
426
+ class ContainerStorage(BaseModel):
427
+ """
428
+ The path and capacity of a volume that retains data across application restarts.
429
+ The maximal requestable capacity is 300Mi.
430
+ If you need more capacity consider using [storeObject](storeObject).
431
+
432
+ """
433
+
434
+ mount_path: Annotated[Path, Field(examples=['/data'])]
435
+ capacity: Capacity
436
+ """
437
+ The amount of local storage available for the application.
438
+
439
+ **NOTE:** The capacity can NEVER be reduced!
440
+
441
+ """
442
+
443
+
444
+ class ContainerResources(BaseModel):
445
+ """
446
+ Additional resources that the application requires.
447
+ """
448
+
449
+ intel_gpu: Annotated[Optional[int], Field(ge=0, le=1)] = None
450
+ """
451
+ Number of GPUs the application requires.
452
+ """
453
+ memory_limit: Annotated[Optional[str], Field(examples=['1000Mi'])] = None
454
+ """
455
+ The maximum memory allocated to this application.
456
+ """
457
+
458
+
459
+ class App(BaseModel):
460
+ """
461
+ An App is defined by a webserver, packed inside a container, serving a web-application.
462
+
463
+ """
464
+
465
+ name: Annotated[str, Field(min_length=1, pattern='^[a-z][a-z0-9-]{0,61}[a-z0-9]$')]
466
+ """
467
+ The name of the provided application.
468
+ The name must be unique within the cell and is used as a identifier for addressing the application in all API calls
469
+ , e.g., when updating the application.
470
+
471
+ It also defines where the application is reachable (/$cell/$name).
472
+
473
+ It must be a valid k8s label name as defined by [RFC 1035](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#rfc-1035-label-names).
474
+
475
+ """
476
+ app_icon: Annotated[str, Field(min_length=1)]
477
+ """
478
+ The path of the icon for the App (/$cell/$name/$app_icon).
479
+ """
480
+ container_image: ContainerImage
481
+ port: Optional[int] = 8080
482
+ """
483
+ The port the containerized webserver is listening on.
484
+ """
485
+ environment: Optional[ContainerEnvironment] = None
486
+ storage: Optional[ContainerStorage] = None
487
+ resources: Optional[ContainerResources] = None
488
+ health_path: Optional[str] = None
489
+ """
490
+ Defines the URL path suffix used to check the application's health status. The complete health check URL
491
+ is constructed as `/$cell/$name/$health_path`. When the application is working as expected,
492
+ the endpoint returns an HTTP 200 status code.
493
+
494
+ If not specified, the system will default to using the application icon path suffix
495
+ (the value of `app_icon`) as the health check endpoint, resulting in `/$cell/$name/$app_icon`.
496
+
497
+ If the health check fails (no response or non-200 status code), the system will
498
+ automatically restart the application container to restore service.
499
+
500
+ """
501
+ diagnosis_path: Optional[str] = None
502
+ """
503
+ Defines the URL path suffix used to provide an endpoint for diagnosis data collection.
504
+ The complete diagnosis check URL is constructed as `/$cell/$name/$diagnosis_path`.
505
+
506
+ The endpoint is called when a diagnosis package is requested via the diagnosis API.
507
+ The endpoint needs to return the data within a zip file `application/zip` response.
508
+
509
+ """
510
+
511
+
512
+ class Cell(BaseModel):
513
+ """
514
+ To create a robot cell, only a valid name is required.
515
+ Once created, a robot cell provides access to the Wandelbots NOVA foundation services.
516
+ The configuration can be customized, e.g., robot controllers, also within apps.
517
+
518
+ """
519
+
520
+ name: CellName
521
+ description: Optional[CellDescription] = None
522
+ controllers: Optional[List[RobotController]] = None
523
+ apps: Optional[List[App]] = None
524
+
525
+
526
+ class Error(BaseModel):
527
+ code: Optional[str] = None
528
+ message: str
529
+
530
+
531
+ class OperatingState(Enum):
532
+ """
533
+ The operating state.
534
+ """
535
+
536
+ ACTIVE = 'ACTIVE'
537
+ INACTIVE = 'INACTIVE'
538
+
539
+
540
+ class ServiceGroup(Enum):
541
+ SYSTEM_SERVICE = 'SystemService'
542
+ CELL_SERVICE = 'CellService'
543
+ ROBOT_CONTROLLER = 'RobotController'
544
+ APP = 'App'
545
+
546
+
547
+ class ServiceStatusSeverity(Enum):
548
+ INFO = 'INFO'
549
+ WARNING = 'WARNING'
550
+ ERROR = 'ERROR'
551
+
552
+
553
+ class ServiceStatusPhase(Enum):
554
+ TERMINATING = 'Terminating'
555
+ INITIALIZED = 'Initialized'
556
+ RUNNING = 'Running'
557
+ NO_READY = 'NoReady'
558
+ COMPLETED = 'Completed'
559
+ CONTAINER_CREATING = 'ContainerCreating'
560
+ POD_INITIALIZING = 'PodInitializing'
561
+ UNKNOWN = 'Unknown'
562
+ CRASH_LOOP_BACK_OFF = 'CrashLoopBackOff'
563
+ ERROR = 'Error'
564
+ IMAGE_PULL_BACK_OFF = 'ImagePullBackOff'
565
+ OOM_KILLED = 'OOMKilled'
566
+ PENDING = 'Pending'
567
+ EVICTED = 'Evicted'
568
+
569
+
570
+ class Status(BaseModel):
571
+ severity: ServiceStatusSeverity
572
+ code: ServiceStatusPhase
573
+ reason: Optional[str] = None
574
+
575
+
576
+ class ServiceStatus(BaseModel):
577
+ service: str
578
+ group: ServiceGroup
579
+ status: Status
580
+
581
+
582
+ class ServiceStatusList(RootModel):
583
+ root: List[ServiceStatus]
584
+
585
+ def __getitem__(self, index: int) -> ServiceStatus:
586
+ """
587
+ Make list RootModel directly indexable.
588
+ """
589
+ return self.root[index]
590
+
591
+ def __setitem__(self, index: int, value: ServiceStatus) -> None:
592
+ """
593
+ Make list RootModel directly indexable.
594
+ """
595
+ self.root[index] = value
596
+
597
+ def __len__(self) -> int:
598
+ """
599
+ Make list RootModel directly usable with len().
600
+ """
601
+ return len(self.root)
602
+
603
+ def __iter__(self):
604
+ """
605
+ Make list RootModel directly iterable.
606
+ """
607
+ return iter(self.root)
608
+
609
+
610
+ class ServiceStatusResponse(BaseModel):
611
+ """
612
+ Response containing both the overall operating state of the cell and detailed status information for each service within the cell.
613
+
614
+ The operating state indicates whether the cell is active or inactive, while the service statuses provide specific health and operational
615
+ information for individual service running in the cell.
616
+
617
+ """
618
+
619
+ operating_state: OperatingState
620
+ service_status: ServiceStatusList
621
+
622
+
623
+ class BusIOProfinetIpConfig(BaseModel):
624
+ """
625
+ Network configuration or IPv4 record of the virtual ethernet interface (pnio1) created by the PROFINET driver.
626
+ The IPv4 record is used in combination with the Name of Station (NoS) to identify your device in the PROFINET network.
627
+
628
+ The `ip_config` will be used as IPv4 record if no REMA XML file is already present on your machine and no `rema_xml_content` is provided.
629
+
630
+ """
631
+
632
+ ip: Annotated[str, Field(examples=['192.168.1.100'])]
633
+ """
634
+ IP address for the device's virtual ethernet interface (pnio1).
635
+ """
636
+ netmask: Annotated[str, Field(examples=['255.255.255.0'])]
637
+ """
638
+ Network mask for the device's virtual ethernet interface (pnio1).
639
+ """
640
+ gateway: Annotated[str, Field(examples=['192.168.178.1'])]
641
+ """
642
+ Gateway for connections to other devices outside of the virtual ethernet interface's subnet.
643
+ """
644
+
645
+
646
+ class BusIOProfinetNetwork(BaseModel):
647
+ device_name: Annotated[Optional[str], Field(examples=['pnDevice'])] = None
648
+ """
649
+ Name of Station (NoS) of the PROFINET device. The NoS is used in combination with IPv4 record to identify your device in the PROFINET network.
650
+ The `device_name` will be used as NoS if no REMA XML file is already present on your machine and no `rema_xml_content` is provided.
651
+
652
+ """
653
+ ip_config: Optional[BusIOProfinetIpConfig] = None
654
+ rema_xml_content: Optional[str] = None
655
+ """
656
+ Content of the PROFINET REMA XML file.
657
+ Is used when PROFINET service is added for the first time to create the REMA XML file that holds data to be kept for the next session.
658
+ Stores information like IP address, Name of Station (NoS) and hardware configuration.
659
+ If you use a PROFINET controller to assign an IP address to the PROFINET device, this information will be written to the REMA XML file.
660
+
661
+ Refer to the PDF version of the "PN Driver I/O Base programming interface" documentation for more information and an example REMA file.
662
+
663
+ """
664
+
665
+
666
+ class BusIOProfinetDefaultRoute(BaseModel):
667
+ """
668
+ Current default route configuration of your NOVA instance.
669
+ The default route is a setting that tells data where to go if there isn’t a specific path already known for its destination.
670
+ Usually this will be the path to your router, enabling accessing the internet.
671
+ On Linux, use `ip route show` to view your default routes and match the output
672
+ `default via <gateway> dev <interface> ...` to get your gateway and interface.
673
+
674
+ """
675
+
676
+ gateway: Annotated[str, Field(examples=['192.168.124.1'])]
677
+ """
678
+ Gateway for the default route.
679
+ """
680
+ interface: Annotated[str, Field(examples=['enp3s0'])]
681
+ """
682
+ Interface for the default route.
683
+ """
684
+
685
+
686
+ class BusIOProfinet(BaseModel):
687
+ """
688
+ PROFINET BUS inputs/outputs service configuration.
689
+
690
+ """
691
+
692
+ bus_type: Literal['profinet'] = 'profinet'
693
+ network_config: Optional[BusIOProfinetNetwork] = None
694
+ """
695
+ Used to enable IP communication through the same physical ethernet interface while PROFINET driver is active.
696
+
697
+ """
698
+ plc_ip: Annotated[str, Field(examples=['192.168.1.100'])]
699
+ """
700
+ IP address of the PLC to establish PROFINET communication with.
701
+
702
+ The IP address is used to configure the host machine's firewall. The firewall configuration is applied while the BUS input/output service is active.
703
+ Without proper firewall configuration, PROFINET device discovery, configuration exchanges,
704
+ and real-time cyclic data communication will fail.
705
+
706
+ """
707
+ mac: Annotated[str, Field(examples=['00:11:22:33:44:55'])]
708
+ """
709
+ MAC address of the physical ethernet interface that you want to use for PROFINET communication.
710
+
711
+ """
712
+ default_route: Optional[BusIOProfinetDefaultRoute] = None
713
+
714
+
715
+ class BusIOProfinetVirtual(BaseModel):
716
+ """
717
+ Virtual PROFINET BUS inputs/outputs service configuration.
718
+
719
+ """
720
+
721
+ bus_type: Literal['profinet_virtual'] = 'profinet_virtual'
722
+
723
+
724
+ class BusIOModbusTCPServer(BaseModel):
725
+ network_type: Optional[Literal['tcp']] = None
726
+ port: Annotated[int, Field(examples=[502], ge=1, le=65534)]
727
+ """
728
+ Port number of the MODBUS server to establish communication with.
729
+
730
+ """
731
+
732
+
733
+ class BusIOModbusServer(BaseModel):
734
+ """
735
+ MODBUS server inputs/outputs service configuration.
736
+
737
+ """
738
+
739
+ bus_type: Literal['modbus_server'] = 'modbus_server'
740
+ network: BusIOModbusTCPServer
741
+ connections: Annotated[int, Field(examples=[2], ge=0, le=255)]
742
+ """
743
+ Number of connections this MODBUS server can handle.
744
+
745
+ """
746
+ coils_size: Annotated[int, Field(examples=[10], ge=0, le=65535)]
747
+ """
748
+ Size of the Coils memory area.
749
+
750
+ """
751
+ discrete_inputs_size: Annotated[int, Field(examples=[10], ge=0, le=65535)]
752
+ """
753
+ Size of the Discrete Inputs memory area.
754
+
755
+ """
756
+ holding_registers_size: Annotated[int, Field(examples=[10], ge=0, le=65535)]
757
+ """
758
+ Size of the Holding Registers memory area.
759
+
760
+ """
761
+ input_registers_size: Annotated[int, Field(examples=[10], ge=0, le=65535)]
762
+ """
763
+ Size of the Input Registers memory area.
764
+
765
+ """
766
+
767
+
768
+ class BusIOModbusTCPClient(BaseModel):
769
+ network_type: Optional[Literal['tcp']] = None
770
+ ip: Annotated[str, Field(examples=['192.168.1.100'])]
771
+ """
772
+ IP address of the MODBUS server to establish communication with.
773
+
774
+ """
775
+ port: Annotated[int, Field(examples=[502], ge=1, le=65534)]
776
+ """
777
+ Port number of the MODBUS server to establish communication with.
778
+
779
+ """
780
+
781
+
782
+ class BusIOModbusClient(BaseModel):
783
+ """
784
+ MODBUS client inputs/outputs service configuration.
785
+
786
+ """
787
+
788
+ bus_type: Literal['modbus_client'] = 'modbus_client'
789
+ network: BusIOModbusTCPClient
790
+
791
+
792
+ class BusIOModbusVirtual(BaseModel):
793
+ """
794
+ Virtual MODBUS inputs/outputs service configuration.
795
+
796
+ """
797
+
798
+ bus_type: Literal['modbus_virtual'] = 'modbus_virtual'
799
+
800
+
801
+ class BusIOType(RootModel):
802
+ root: Annotated[
803
+ Union[
804
+ BusIOProfinet,
805
+ BusIOProfinetVirtual,
806
+ BusIOModbusServer,
807
+ BusIOModbusClient,
808
+ BusIOModbusVirtual,
809
+ ],
810
+ Field(discriminator='bus_type'),
811
+ ]
812
+
813
+
814
+ class ReleaseChannel(Enum):
815
+ """
816
+ The channel that defines what a new Wandelbots NOVA version is.
817
+
818
+ * `next` the over all latest version
819
+ * `stable` newes patch of the current version
820
+
821
+ """
822
+
823
+ STABLE = 'stable'
824
+ NEXT = 'next'
825
+
826
+
827
+ class UpdateNovaVersionRequest(BaseModel):
828
+ """
829
+ An update is defined by the indicated Wandelbots NOVA release channel.
830
+
831
+ """
832
+
833
+ channel: ReleaseChannel
834
+
835
+
836
+ class ConfigurationResourceId(RootModel):
837
+ root: str
838
+ """
839
+ Identifier of a configuration resource.
840
+ """
841
+
842
+
843
+ class Metadata(RootModel):
844
+ """
845
+ Additional metadata to add to the backup
846
+ """
847
+
848
+ root: Dict[str, str]
849
+
850
+
851
+ class ConfigurationArchive(RootModel):
852
+ root: bytes
853
+ """
854
+ Binary data representing a configuration archive.
855
+ """
856
+
857
+
858
+ class ConfigurationArchiveStatusCreating(BaseModel):
859
+ status: Literal['creating'] = 'creating'
860
+ """
861
+ Backup is in progress.
862
+ """
863
+ progress: Annotated[float, Field(ge=0.0, le=1.0)]
864
+ """
865
+ Current completion ratio (0 – 1).
866
+ """
867
+
868
+
869
+ class ConfigurationArchiveStatusError(BaseModel):
870
+ status: Literal['error'] = 'error'
871
+ message: str
872
+ """
873
+ Human-readable explanation of the failure.
874
+ """
875
+
876
+
877
+ class ConfigurationArchiveStatusSuccess(BaseModel):
878
+ status: Literal['success'] = 'success'
879
+ """
880
+ Backup successfully created.
881
+ """
882
+
883
+
884
+ class ConfigurationArchiveStatus(RootModel):
885
+ root: Annotated[
886
+ Union[
887
+ ConfigurationArchiveStatusCreating,
888
+ ConfigurationArchiveStatusError,
889
+ ConfigurationArchiveStatusSuccess,
890
+ ],
891
+ Field(discriminator='status'),
892
+ ]
893
+ """
894
+ Result of a backup operation.
895
+ """
896
+
897
+
898
+ class LicenseStatusEnum(Enum):
899
+ OK = 'OK'
900
+ EXPIRED = 'EXPIRED'
901
+ SUSPENDED = 'SUSPENDED'
902
+ GRACE_PERIOD_OVER = 'GRACE_PERIOD_OVER'
903
+ NOT_FOUND = 'NOT_FOUND'
904
+
905
+
906
+ class LicenseStatus(BaseModel):
907
+ """
908
+ Status of the license.
909
+ """
910
+
911
+ status: LicenseStatusEnum
912
+ message: str
913
+
914
+
915
+ class License(BaseModel):
916
+ product_name: str
917
+ """
918
+ Name of the licensed product.
919
+ """
920
+ owner_email: EmailStr
921
+ """
922
+ Mail address of the license owner.
923
+ """
924
+ license_key: str
925
+ """
926
+ Identification key of the license.
927
+ """
928
+ license_expiry_date: Optional[date] = None
929
+ """
930
+ Expiration date of the license.
931
+ """
932
+ grace_period_expiry_date: AwareDatetime
933
+ """
934
+ End date of grace period, given if instance is not connected to internet.
935
+ """
936
+ consumed_activations: int
937
+ """
938
+ Amount of times the license was activated.
939
+ """
940
+ allowed_activations: int
941
+ """
942
+ Amount of times the license can be activated.
943
+ """
944
+ feature_limitations: Optional[Dict[str, int]] = None
945
+ """
946
+ Feature limitations of the license.
947
+ """
948
+ feature_flags: Optional[List[str]] = None
949
+ """
950
+ Features enabled by a license.
951
+ """
952
+ status: LicenseStatus
953
+
954
+
955
+ class ActivateLicenseRequest(BaseModel):
956
+ """
957
+ The authentication token to fetch the license from the license server.
958
+ """
959
+
960
+ owner_refresh_token: str
961
+
962
+
963
+ class Sphere(BaseModel):
964
+ """
965
+ Defines a spherical shape centred around the origin.
966
+ """
967
+
968
+ shape_type: Literal['sphere'] = 'sphere'
969
+ radius: float
970
+ """
971
+ The radius of the sphere in [mm].
972
+ """
973
+
974
+
975
+ class BoxType(Enum):
976
+ """
977
+ The box type defines if the box is hollow or full.
978
+ """
979
+
980
+ HOLLOW = 'HOLLOW'
981
+ FULL = 'FULL'
982
+
983
+
984
+ class Box(BaseModel):
985
+ """
986
+ Defines a cuboid shape centred around an origin.
987
+
988
+ If a margin is applied to the box type full, it is added to all size values. The shape will keep its edges.
989
+ The hollow box type consists of thin boxes that make up its walls.
990
+ If a margin is applied to the box type hollow, its size values are reduced by the margin.
991
+
992
+ """
993
+
994
+ shape_type: Literal['box'] = 'box'
995
+ size_x: float
996
+ """
997
+ The dimension in x-direction in [mm].
998
+ """
999
+ size_y: float
1000
+ """
1001
+ The dimension in y-direction in [mm].
1002
+ """
1003
+ size_z: float
1004
+ """
1005
+ The dimension in z-direction in [mm].
1006
+ """
1007
+ box_type: BoxType
1008
+ """
1009
+ The box type defines if the box is hollow or full.
1010
+ """
1011
+
1012
+
1013
+ class Rectangle(BaseModel):
1014
+ """
1015
+ Defines an x/y-plane with finite size. Centred around the z-axis.
1016
+ """
1017
+
1018
+ shape_type: Literal['rectangle'] = 'rectangle'
1019
+ size_x: float
1020
+ """
1021
+ The dimension in x-direction in [mm].
1022
+ """
1023
+ size_y: float
1024
+ """
1025
+ The dimension in y-direction in [mm].
1026
+ """
1027
+
1028
+
1029
+ class Plane(BaseModel):
1030
+ """
1031
+ Defines an x/y-plane with infinite size.
1032
+ """
1033
+
1034
+ shape_type: Literal['plane'] = 'plane'
1035
+
1036
+
1037
+ class Cylinder(BaseModel):
1038
+ """
1039
+ Defines a cylindrical shape.
1040
+ Centred around origin, symmetric around z-axis.
1041
+
1042
+ If a margin is applied, it is added to radius and height. The shape will keep its edges.
1043
+
1044
+ """
1045
+
1046
+ shape_type: Literal['cylinder'] = 'cylinder'
1047
+ radius: float
1048
+ """
1049
+ The radius of the cylinder in [mm].
1050
+ """
1051
+ height: float
1052
+ """
1053
+ The height of the cylinder in [mm].
1054
+ """
1055
+
1056
+
1057
+ class Capsule(BaseModel):
1058
+ """
1059
+ Defines a cylindrical shape with 2 semi-spheres on the top and bottom.
1060
+ Centred around origin, symmetric around z-axis.
1061
+
1062
+ """
1063
+
1064
+ shape_type: Literal['capsule'] = 'capsule'
1065
+ radius: float
1066
+ """
1067
+ The radius of the cylinder and semi-spheres in [mm].
1068
+ """
1069
+ cylinder_height: float
1070
+ """
1071
+ The height of the inner cylinder in [mm].
1072
+ """
1073
+
1074
+
1075
+ class RectangularCapsule(BaseModel):
1076
+ """
1077
+ Convex hull around four spheres. Sphere center points in x/y-plane, offset by either combination "+/- sizeX" or "+/- sizeY".
1078
+
1079
+ Alternative description: Rectangle in x/y-plane with a 3D padding.
1080
+
1081
+ """
1082
+
1083
+ shape_type: Literal['rectangular_capsule'] = 'rectangular_capsule'
1084
+ radius: float
1085
+ """
1086
+ The radius of the inner spheres in [mm].
1087
+ """
1088
+ sphere_center_distance_x: float
1089
+ """
1090
+ The distance of the sphere center in x-direction in [mm].
1091
+ """
1092
+ sphere_center_distance_y: float
1093
+ """
1094
+ The distance of the sphere center in y-direction in [mm].
1095
+ """
1096
+
1097
+
1098
+ class Vector3d(RootModel):
1099
+ """
1100
+ A three-dimensional vector [x, y, z] with double precision.
1101
+
1102
+ """
1103
+
1104
+ root: Annotated[List[float], Field(max_length=3, min_length=3, title='Vector3d')]
1105
+ """
1106
+ A three-dimensional vector [x, y, z] with double precision.
1107
+
1108
+ """
1109
+
1110
+ def __getitem__(self, index: int) -> float:
1111
+ """
1112
+ Make list RootModel directly indexable.
1113
+ """
1114
+ return self.root[index]
1115
+
1116
+ def __setitem__(self, index: int, value: float) -> None:
1117
+ """
1118
+ Make list RootModel directly indexable.
1119
+ """
1120
+ self.root[index] = value
1121
+
1122
+ def __len__(self) -> int:
1123
+ """
1124
+ Make list RootModel directly usable with len().
1125
+ """
1126
+ return len(self.root)
1127
+
1128
+ def __iter__(self):
1129
+ """
1130
+ Make list RootModel directly iterable.
1131
+ """
1132
+ return iter(self.root)
1133
+
1134
+
1135
+ class ConvexHull(BaseModel):
1136
+ """
1137
+ Defines a convex hull encapsulating a set of vertices.
1138
+ """
1139
+
1140
+ shape_type: Literal['convex_hull'] = 'convex_hull'
1141
+ vertices: List[Vector3d]
1142
+ """
1143
+ The list of encapsulated points.
1144
+ """
1145
+
1146
+
1147
+ class RotationVector(RootModel):
1148
+ """
1149
+ Defines a rotation in 3D space.
1150
+ A three-dimensional Vector [rx, ry, rz] with double precision.
1151
+ Rotation is applied around the vector.
1152
+ The angle of rotation equals the length of the vector.
1153
+
1154
+ """
1155
+
1156
+ root: Annotated[
1157
+ List[float], Field(max_length=3, min_length=3, title='RotationVector')
1158
+ ]
1159
+ """
1160
+ Defines a rotation in 3D space.
1161
+ A three-dimensional Vector [rx, ry, rz] with double precision.
1162
+ Rotation is applied around the vector.
1163
+ The angle of rotation equals the length of the vector.
1164
+
1165
+ """
1166
+
1167
+ def __getitem__(self, index: int) -> float:
1168
+ """
1169
+ Make list RootModel directly indexable.
1170
+ """
1171
+ return self.root[index]
1172
+
1173
+ def __setitem__(self, index: int, value: float) -> None:
1174
+ """
1175
+ Make list RootModel directly indexable.
1176
+ """
1177
+ self.root[index] = value
1178
+
1179
+ def __len__(self) -> int:
1180
+ """
1181
+ Make list RootModel directly usable with len().
1182
+ """
1183
+ return len(self.root)
1184
+
1185
+ def __iter__(self):
1186
+ """
1187
+ Make list RootModel directly iterable.
1188
+ """
1189
+ return iter(self.root)
1190
+
1191
+
1192
+ class Pose(BaseModel):
1193
+ """
1194
+ Defines a pose in 3D space.
1195
+ A pose is a combination of a position and an orientation.
1196
+ The position is applied before the orientation.
1197
+
1198
+ """
1199
+
1200
+ position: Optional[Vector3d] = None
1201
+ orientation: Optional[RotationVector] = None
1202
+
1203
+
1204
+ class Collider(BaseModel):
1205
+ """
1206
+ Defines a collider with a single shape.
1207
+
1208
+ A collider is an object that is used for collision detection.
1209
+ It defines the `shape` that is attached with the offset of `pose` to a reference frame.
1210
+
1211
+ Use colliders to:
1212
+ - Define the shape of a workpiece. The reference frame is the scene origin.
1213
+ - Define the shape of a link in a motion group. The reference frame is the link coordinate system.
1214
+ - Define the shape of a tool. The reference frame is the flange coordinate system.
1215
+
1216
+ """
1217
+
1218
+ shape: Annotated[
1219
+ Union[
1220
+ Sphere,
1221
+ Box,
1222
+ Rectangle,
1223
+ Plane,
1224
+ Cylinder,
1225
+ Capsule,
1226
+ RectangularCapsule,
1227
+ ConvexHull,
1228
+ ],
1229
+ Field(discriminator='shape_type'),
1230
+ ]
1231
+ pose: Optional[Pose] = None
1232
+ margin: Optional[float] = 0
1233
+ """
1234
+ Increases the shape's size in all dimensions. Applied in [mm]. Can be used to keep a safe distance to the shape.
1235
+ """
1236
+
1237
+
1238
+ class Link(RootModel):
1239
+ root: Dict[str, Collider]
1240
+
1241
+
1242
+ class LinkChain(RootModel):
1243
+ """
1244
+ A link chain is a kinematic chain of links that is connected via joints.
1245
+ A motion group can be used to control the motion of the joints in a link chain.
1246
+
1247
+ A link is a group of colliders that is attached to the link reference frame.
1248
+
1249
+ The reference frame of a link is obtained after applying all sets of Denavit-Hartenberg-parameters from base to (including) the link index.
1250
+
1251
+ This means that the reference frame of the link is on the rotation axis of the next joint in the kinematic chain.
1252
+ Example: For a motion group with 2 joints, the collider reference frame (CRF) for link 1 is on the rotation axis of joint 2. The chain looks like:
1253
+ - Origin >> Mounting >> Base >> (CRF Base) Joint 0 >> Link 0 >> (CRF Link 0) Joint 1 >> Link 1 >> (CRF Link 1) Flange (CRF Tool) >> TCP
1254
+
1255
+ Adjacent links in the kinematic chain of the motion group are not checked for mutual collision.
1256
+
1257
+ """
1258
+
1259
+ root: Annotated[
1260
+ List[Link],
1261
+ Field(
1262
+ examples=[
1263
+ [
1264
+ {
1265
+ 'link_0_sphere': {
1266
+ 'shape': {'shape_type': 'sphere', 'radius': 10},
1267
+ 'pose': {'position': [0, 0, -10]},
1268
+ },
1269
+ 'link_0_capsule': {
1270
+ 'shape': {
1271
+ 'shape_type': 'capsule',
1272
+ 'radius': 5,
1273
+ 'cylinder_height': 20,
1274
+ }
1275
+ },
1276
+ },
1277
+ {},
1278
+ {
1279
+ 'link_2_capsule': {
1280
+ 'shape': {
1281
+ 'shape_type': 'capsule',
1282
+ 'radius': 5,
1283
+ 'cylinder_height': 20,
1284
+ }
1285
+ }
1286
+ },
1287
+ ]
1288
+ ],
1289
+ title='Link Chain',
1290
+ ),
1291
+ ]
1292
+ """
1293
+ A link chain is a kinematic chain of links that is connected via joints.
1294
+ A motion group can be used to control the motion of the joints in a link chain.
1295
+
1296
+ A link is a group of colliders that is attached to the link reference frame.
1297
+
1298
+ The reference frame of a link is obtained after applying all sets of Denavit-Hartenberg-parameters from base to (including) the link index.
1299
+
1300
+ This means that the reference frame of the link is on the rotation axis of the next joint in the kinematic chain.
1301
+ Example: For a motion group with 2 joints, the collider reference frame (CRF) for link 1 is on the rotation axis of joint 2. The chain looks like:
1302
+ - Origin >> Mounting >> Base >> (CRF Base) Joint 0 >> Link 0 >> (CRF Link 0) Joint 1 >> Link 1 >> (CRF Link 1) Flange (CRF Tool) >> TCP
1303
+
1304
+ Adjacent links in the kinematic chain of the motion group are not checked for mutual collision.
1305
+
1306
+ """
1307
+
1308
+ def __getitem__(self, index: int) -> Link:
1309
+ """
1310
+ Make list RootModel directly indexable.
1311
+ """
1312
+ return self.root[index]
1313
+
1314
+ def __setitem__(self, index: int, value: Link) -> None:
1315
+ """
1316
+ Make list RootModel directly indexable.
1317
+ """
1318
+ self.root[index] = value
1319
+
1320
+ def __len__(self) -> int:
1321
+ """
1322
+ Make list RootModel directly usable with len().
1323
+ """
1324
+ return len(self.root)
1325
+
1326
+ def __iter__(self):
1327
+ """
1328
+ Make list RootModel directly iterable.
1329
+ """
1330
+ return iter(self.root)
1331
+
1332
+
1333
+ class ControllerDescription(BaseModel):
1334
+ """
1335
+ The data type to describe a robot controller.
1336
+ """
1337
+
1338
+ connected_motion_groups: List[str]
1339
+ supports_freedrive: bool
1340
+ """
1341
+ Can this controller be moved through freedrive (true), or not (false).
1342
+ """
1343
+ supports_control: bool
1344
+ """
1345
+ Can this controller be controlled with NOVA (true) or is it only possible to read data (false).
1346
+ """
1347
+ supports_safety_zones: bool
1348
+ """
1349
+ True if NOVA supports reading safety zone-, tool- and link-geometries for this motion group.
1350
+ Safety zones are used to define areas where the robot should slow down or stop.
1351
+ If false, NOVA can't guarantee that the executed motions respect safety zones defined on the controller.
1352
+
1353
+ """
1354
+
1355
+
1356
+ class RobotSystemMode(Enum):
1357
+ """
1358
+ Defines the current system mode of the robot system, including NOVA communicating with the robot controller.
1359
+
1360
+ ### MODE_CONTROLLER_NOT_CONFIGURED
1361
+
1362
+ No controller with the specified identifier is configured. Call [addRobotController](addRobotController) to register a controller.
1363
+
1364
+ ### MODE_INITIALIZING
1365
+
1366
+ Indicates that a connection to the robot controller is established or reestablished in case of a disconnect.
1367
+ On success, the controller is set to MODE_MONITOR.
1368
+ On failure, the initialization process is retried until successful or cancelled by the user.
1369
+
1370
+ ### MODE_MONITOR
1371
+
1372
+ Read-only mode with an active controller connection.
1373
+ - Receives robot state and I/O signals
1374
+ - Move requests are rejected
1375
+ - No commands are sent to the controller
1376
+
1377
+ ### MODE_CONTROL
1378
+
1379
+ Active control mode.
1380
+
1381
+ **Movement is possible in this mode**
1382
+
1383
+ The robot is cyclically commanded to hold its current position.
1384
+ The robot state is received in sync with the controller cycle.
1385
+ Motion and jogging requests are accepted and executed.
1386
+ Input/Output interaction is enabled.
1387
+
1388
+ ### MODE_FREE_DRIVE
1389
+
1390
+ Read-only mode with servo motors enabled for manual movement (Free Drive).
1391
+
1392
+ Move requests are rejected.
1393
+
1394
+ Not supported by all robots: Use [getSupportedModes](getSupportedModes) to check Free Drive availability.
1395
+
1396
+ """
1397
+
1398
+ MODE_CONTROLLER_NOT_CONFIGURED = 'MODE_CONTROLLER_NOT_CONFIGURED'
1399
+ MODE_INITIALIZING = 'MODE_INITIALIZING'
1400
+ MODE_MONITOR = 'MODE_MONITOR'
1401
+ MODE_CONTROL = 'MODE_CONTROL'
1402
+ MODE_FREE_DRIVE = 'MODE_FREE_DRIVE'
1403
+
1404
+
1405
+ class OperationMode(Enum):
1406
+ """
1407
+ Current operation mode of the configured robot controller.
1408
+ Operation modes in which the attached motion groups can be moved are:
1409
+ - OPERATION_MODE_MANUAL (if enabling switch is pressed)
1410
+ - OPERATION_MODE_MANUAL_T1 (if enabling switch is pressed)
1411
+ - OPERATION_MODE_MANUAL_T2 (if enabling switch is pressed)
1412
+ - OPERATION_MODE_AUTO (without needing to press enabling switch)
1413
+ All other modes are considered as non-operational.
1414
+
1415
+ """
1416
+
1417
+ OPERATION_MODE_UNKNOWN = 'OPERATION_MODE_UNKNOWN'
1418
+ OPERATION_MODE_NO_CONTROLLER = 'OPERATION_MODE_NO_CONTROLLER'
1419
+ OPERATION_MODE_DISCONNECTED = 'OPERATION_MODE_DISCONNECTED'
1420
+ OPERATION_MODE_POWER_ON = 'OPERATION_MODE_POWER_ON'
1421
+ OPERATION_MODE_PENDING = 'OPERATION_MODE_PENDING'
1422
+ OPERATION_MODE_MANUAL = 'OPERATION_MODE_MANUAL'
1423
+ OPERATION_MODE_MANUAL_T1 = 'OPERATION_MODE_MANUAL_T1'
1424
+ OPERATION_MODE_MANUAL_T2 = 'OPERATION_MODE_MANUAL_T2'
1425
+ OPERATION_MODE_AUTO = 'OPERATION_MODE_AUTO'
1426
+ OPERATION_MODE_RECOVERY = 'OPERATION_MODE_RECOVERY'
1427
+
1428
+
1429
+ class SafetyStateType(Enum):
1430
+ """
1431
+ Current safety state of the configured robot controller.
1432
+ Operation modes in which the attached motion groups can be moved are:
1433
+ - SAFETY_STATE_NORMAL
1434
+ - SAFETY_STATE_REDUCED
1435
+ All other modes are considered as non-operational.
1436
+
1437
+ """
1438
+
1439
+ SAFETY_STATE_UNKNOWN = 'SAFETY_STATE_UNKNOWN'
1440
+ SAFETY_STATE_FAULT = 'SAFETY_STATE_FAULT'
1441
+ SAFETY_STATE_NORMAL = 'SAFETY_STATE_NORMAL'
1442
+ SAFETY_STATE_MASTERING = 'SAFETY_STATE_MASTERING'
1443
+ SAFETY_STATE_CONFIRM_SAFETY = 'SAFETY_STATE_CONFIRM_SAFETY'
1444
+ SAFETY_STATE_OPERATOR_SAFETY = 'SAFETY_STATE_OPERATOR_SAFETY'
1445
+ SAFETY_STATE_PROTECTIVE_STOP = 'SAFETY_STATE_PROTECTIVE_STOP'
1446
+ SAFETY_STATE_REDUCED = 'SAFETY_STATE_REDUCED'
1447
+ SAFETY_STATE_STOP = 'SAFETY_STATE_STOP'
1448
+ SAFETY_STATE_STOP_0 = 'SAFETY_STATE_STOP_0'
1449
+ SAFETY_STATE_STOP_1 = 'SAFETY_STATE_STOP_1'
1450
+ SAFETY_STATE_STOP_2 = 'SAFETY_STATE_STOP_2'
1451
+ SAFETY_STATE_RECOVERY = 'SAFETY_STATE_RECOVERY'
1452
+ SAFETY_STATE_DEVICE_EMERGENCY_STOP = 'SAFETY_STATE_DEVICE_EMERGENCY_STOP'
1453
+ SAFETY_STATE_ROBOT_EMERGENCY_STOP = 'SAFETY_STATE_ROBOT_EMERGENCY_STOP'
1454
+ SAFETY_STATE_VIOLATION = 'SAFETY_STATE_VIOLATION'
1455
+
1456
+
1457
+ class Joints(RootModel):
1458
+ """
1459
+ This structure describes a set of joint values, e.g., positions, currents, torques, of a motion group.
1460
+
1461
+ Float precision is the default.
1462
+
1463
+ """
1464
+
1465
+ root: List[float]
1466
+ """
1467
+ This structure describes a set of joint values, e.g., positions, currents, torques, of a motion group.
1468
+
1469
+ Float precision is the default.
1470
+
1471
+ """
1472
+
1473
+ def __getitem__(self, index: int) -> float:
1474
+ """
1475
+ Make list RootModel directly indexable.
1476
+ """
1477
+ return self.root[index]
1478
+
1479
+ def __setitem__(self, index: int, value: float) -> None:
1480
+ """
1481
+ Make list RootModel directly indexable.
1482
+ """
1483
+ self.root[index] = value
1484
+
1485
+ def __len__(self) -> int:
1486
+ """
1487
+ Make list RootModel directly usable with len().
1488
+ """
1489
+ return len(self.root)
1490
+
1491
+ def __iter__(self):
1492
+ """
1493
+ Make list RootModel directly iterable.
1494
+ """
1495
+ return iter(self.root)
1496
+
1497
+
1498
+ class MotionGroupStateJointLimitReached(BaseModel):
1499
+ """
1500
+ Indicates which joint of the motion group is in a limit.
1501
+ If a joint is in its limit, only this joint can be moved. Movements that affect any other joints are not executed.
1502
+
1503
+ """
1504
+
1505
+ limit_reached: List[bool]
1506
+ """
1507
+ If true, operational (soft) jointLimit is reached for specific joint.
1508
+ """
1509
+
1510
+
1511
+ class JoggingRunning(BaseModel):
1512
+ """
1513
+ Jogging is active.
1514
+
1515
+ """
1516
+
1517
+ kind: Literal['RUNNING'] = 'RUNNING'
1518
+
1519
+
1520
+ class JoggingPausedByUser(BaseModel):
1521
+ """
1522
+ User has paused jogging.
1523
+
1524
+ """
1525
+
1526
+ kind: Literal['PAUSED_BY_USER'] = 'PAUSED_BY_USER'
1527
+
1528
+
1529
+ class JoggingPausedOnIO(BaseModel):
1530
+ """
1531
+ Jogging was paused because of an I/O event.
1532
+
1533
+ """
1534
+
1535
+ kind: Literal['PAUSED_ON_IO'] = 'PAUSED_ON_IO'
1536
+
1537
+
1538
+ class JointIndice(RootModel):
1539
+ root: Annotated[int, Field(ge=0, le=2147483647)]
1540
+
1541
+
1542
+ class JoggingPausedNearJointLimit(BaseModel):
1543
+ """
1544
+ Jogging was paused because a joint is near its limit.
1545
+
1546
+ """
1547
+
1548
+ kind: Literal['PAUSED_NEAR_JOINT_LIMIT'] = 'PAUSED_NEAR_JOINT_LIMIT'
1549
+ joint_indices: List[JointIndice]
1550
+
1551
+
1552
+ class JoggingPausedNearCollision(BaseModel):
1553
+ """
1554
+ Jogging was paused because the motion group neared a collision.
1555
+
1556
+ """
1557
+
1558
+ kind: Literal['PAUSED_NEAR_COLLISION'] = 'PAUSED_NEAR_COLLISION'
1559
+ description: str
1560
+
1561
+
1562
+ class JoggingDetails(BaseModel):
1563
+ """
1564
+ State of jogging execution.
1565
+ This state is sent during jogging movement, response-rate closest to the nearest multiple of controller step-rate but not exceeding the configured rate.
1566
+ The jogging state can be one of the following:
1567
+ - RUNNING: Jogging is active.
1568
+ - PAUSED_BY_USER: User has paused jogging.
1569
+ - PAUSED_NEAR_JOINT_LIMIT: Jogging was paused because a joint is is near its limit.
1570
+ - PAUSED_NEAR_COLLISION: Jogging was paused because the motion group neared a collision.
1571
+ - PAUSED_ON_IO: Jogging was paused because of an I/O event.
1572
+
1573
+ """
1574
+
1575
+ state: Annotated[
1576
+ Union[
1577
+ JoggingRunning,
1578
+ JoggingPausedByUser,
1579
+ JoggingPausedOnIO,
1580
+ JoggingPausedNearJointLimit,
1581
+ JoggingPausedNearCollision,
1582
+ ],
1583
+ Field(discriminator='kind'),
1584
+ ]
1585
+ kind: Literal['JOGGING'] = 'JOGGING'
1586
+
1587
+
1588
+ class Location(RootModel):
1589
+ root: float
1590
+ """
1591
+ Location on trajectory where the execution will start.
1592
+ The default value is the start (forward movement) or end (backward movement) of the trajectory.
1593
+ If you want to start your movement from an arbitrary location, e.g., in combination with [streamMoveToTrajectoryViaJointPTP](streamMoveToTrajectoryViaJointPTP),
1594
+ set the location by respecting the following format:
1595
+ - The location is a scalar value that defines a position along a path, typically ranging from 0 to `n`,
1596
+ where `n` denotes the number of motion commands
1597
+ - Each integer value of the location corresponds to a specific motion command,
1598
+ while non-integer values interpolate positions within the segments.
1599
+ - The location is calculated from the joint path
1600
+
1601
+ """
1602
+
1603
+
1604
+ class TrajectoryRunning(BaseModel):
1605
+ """
1606
+ Trajectory is being executed.
1607
+
1608
+ """
1609
+
1610
+ kind: Literal['RUNNING'] = 'RUNNING'
1611
+ time_to_end: Annotated[int, Field(ge=0, le=4294967295)]
1612
+ """
1613
+ Remaining time in milliseconds (ms) to reach the end of the motion.
1614
+ """
1615
+
1616
+
1617
+ class TrajectoryPausedByUser(BaseModel):
1618
+ """
1619
+ User has paused execution.
1620
+
1621
+ """
1622
+
1623
+ kind: Literal['PAUSED_BY_USER'] = 'PAUSED_BY_USER'
1624
+
1625
+
1626
+ class TrajectoryEnded(BaseModel):
1627
+ """
1628
+ First or last sample (depending on direction) of trajectory has been sent.
1629
+
1630
+ """
1631
+
1632
+ kind: Literal['END_OF_TRAJECTORY'] = 'END_OF_TRAJECTORY'
1633
+
1634
+
1635
+ class TrajectoryWaitForIO(BaseModel):
1636
+ """
1637
+ Waiting for an I/O event to start execution.
1638
+
1639
+ """
1640
+
1641
+ kind: Literal['WAIT_FOR_IO'] = 'WAIT_FOR_IO'
1642
+
1643
+
1644
+ class TrajectoryPausedOnIO(BaseModel):
1645
+ """
1646
+ Execution was paused because of an I/O event.
1647
+
1648
+ """
1649
+
1650
+ kind: Literal['PAUSED_ON_IO'] = 'PAUSED_ON_IO'
1651
+
1652
+
1653
+ class TrajectoryDetails(BaseModel):
1654
+ """
1655
+ State of trajectory execution.
1656
+ This state is sent during trajectory movement, response-rate closest to the nearest multiple of controller step-rate but not exceeding the configured rate.
1657
+ The trajectory state can be one of the following:
1658
+ - RUNNING: Trajectory is being executed.
1659
+ - PAUSED_BY_USER: User has paused execution.
1660
+ - END_OF_TRAJECTORY: First or last sample (depending on direction) of trajectory has been sent.
1661
+ - WAIT_FOR_IO: Waiting for an I/O event to start execution.
1662
+ - PAUSED_ON_IO: Execution was paused because of an I/O event.
1663
+
1664
+ """
1665
+
1666
+ trajectory: str
1667
+ """
1668
+ Unique identifier of the trajectory being executed.
1669
+
1670
+ """
1671
+ location: Location
1672
+ state: Annotated[
1673
+ Union[
1674
+ TrajectoryRunning,
1675
+ TrajectoryPausedByUser,
1676
+ TrajectoryEnded,
1677
+ TrajectoryWaitForIO,
1678
+ TrajectoryPausedOnIO,
1679
+ ],
1680
+ Field(discriminator='kind'),
1681
+ ]
1682
+ kind: Literal['TRAJECTORY'] = 'TRAJECTORY'
1683
+ """
1684
+ Discriminator for OpenApi generators, which is always "TRAJECTORY" for this schema.
1685
+
1686
+ """
1687
+
1688
+
1689
+ class Execute(BaseModel):
1690
+ """
1691
+ Details about the state of the motion execution.
1692
+ The details are either for a jogging or a trajectory.
1693
+ If NOVA is not controlling this motion group at the moment, this field is omitted.
1694
+
1695
+ """
1696
+
1697
+ joint_position: List[float]
1698
+ """
1699
+ Commanded joint position of each joint in [rad]. This command was sent in the time step the corresponding state was received.
1700
+
1701
+ """
1702
+ details: Annotated[
1703
+ Optional[Union[JoggingDetails, TrajectoryDetails]], Field(discriminator='kind')
1704
+ ] = None
1705
+
1706
+
1707
+ class MotionGroupState(BaseModel):
1708
+ """
1709
+ Presents the current state of the motion group.
1710
+ """
1711
+
1712
+ timestamp: AwareDatetime
1713
+ """
1714
+ Timestamp for when data was received from the robot controller.
1715
+ """
1716
+ sequence_number: Annotated[int, Field(ge=0, le=4294967295)]
1717
+ """
1718
+ Sequence number of the controller state. It starts with 0 upon establishing the connection with a physical controller.
1719
+ The sequence number is reset when the connection to the physical controller is closed and re-established.
1720
+
1721
+ """
1722
+ motion_group: str
1723
+ """
1724
+ Identifier of the motion group.
1725
+ """
1726
+ controller: str
1727
+ """
1728
+ Convenience: Identifier of the robot controller the motion group is attached to.
1729
+ """
1730
+ joint_position: Joints
1731
+ """
1732
+ Current joint position of each joint in [rad]
1733
+
1734
+ """
1735
+ joint_limit_reached: MotionGroupStateJointLimitReached
1736
+ """
1737
+ Indicates whether the joint is in a limit for all joints of the motion group.
1738
+
1739
+ """
1740
+ joint_torque: Optional[Joints] = None
1741
+ """
1742
+ Current joint torque of each joint in [Nm].
1743
+ Is only available if the robot controller supports it, e.g., available for UR controllers.
1744
+
1745
+ """
1746
+ joint_current: Optional[Joints] = None
1747
+ """
1748
+ Current at TCP in [A].
1749
+ Is only available if the robot controller supports it, e.g., available for UR controllers.
1750
+
1751
+ """
1752
+ flange_pose: Optional[Pose] = None
1753
+ """
1754
+ Pose of the flange.
1755
+ Positions are in [mm].
1756
+ Oriantations are in [rad].
1757
+ The pose is relative to the response_coordinate_system specified in the request.
1758
+ For robot arms a flange pose is always returned, for positioners the flange might not be available, depending on the model.
1759
+
1760
+ """
1761
+ tcp: Optional[str] = None
1762
+ """
1763
+ Unique identifier addressing the active TCP.
1764
+ Might not be returned for positioners as some do not support TCPs, depending on the model.
1765
+
1766
+ """
1767
+ tcp_pose: Optional[Pose] = None
1768
+ """
1769
+ Pose of the TCP selected on the robot control panel.
1770
+ Positions are in [mm].
1771
+ Oriantations are in [rad].
1772
+ The pose is relative to the response_coordinate_system specified in the request.
1773
+ Might not be returned for positioners as some do not support TCPs, depending on the model.
1774
+
1775
+ """
1776
+ coordinate_system: Optional[str] = None
1777
+ """
1778
+ Unique identifier addressing the reference coordinate system of the cartesian data.
1779
+ Might not be returned for positioners as some do not support TCPs, depending on the model.
1780
+ Default: world coordinate system of corresponding controller.
1781
+
1782
+ """
1783
+ payload: Optional[str] = None
1784
+ """
1785
+ Unique identifier addressing the active payload.
1786
+ Only fetchable via GET endpoint, not available in WebSocket.
1787
+
1788
+ """
1789
+ standstill: bool
1790
+ """
1791
+ Indicates whether the motion group is in standstill.
1792
+ Convenience: Signals that NOVA treats measured joint velocities as 0.
1793
+
1794
+ """
1795
+ execute: Optional[Execute] = None
1796
+ """
1797
+ Data that was commanded to the motion group. Includes additional data on NOVA's execution components for executing trajectories and jogging.
1798
+ This is a convenience field to indicate the last command sent to the motion group.
1799
+ It is not available in all cases, e.g., if the motion group is not moved by NOVA.
1800
+
1801
+ """
1802
+
1803
+
1804
+ class RobotControllerState(BaseModel):
1805
+ """
1806
+ Returns the whole current state of robot controller.
1807
+ """
1808
+
1809
+ mode: RobotSystemMode
1810
+ """
1811
+ Mode of communication and control between NOVA and the robot controller.
1812
+ """
1813
+ last_error: Optional[List[str]] = None
1814
+ """
1815
+ Last error stack encountered during initialization process or after a controller disconnect.
1816
+ At this stage, it's unclear whether the error is fatal.
1817
+
1818
+ Evaluate `last_error` to decide whether to remove the controller using `deleteController`.
1819
+ Examples:
1820
+ - Delete required: Host resolution fails repeatedly due to an incorrect IP.
1821
+ - Delete not required: Temporary network delay caused a disconnect; the system will auto-reconnect.
1822
+
1823
+ """
1824
+ timestamp: AwareDatetime
1825
+ """
1826
+ Timestamp indicating when the represented information was received from the robot controller.
1827
+ """
1828
+ sequence_number: Annotated[int, Field(ge=0, le=4294967295)]
1829
+ """
1830
+ Sequence number of the controller state. It starts with 0 upon establishing the connection with a physical controller.
1831
+ The sequence number is reset when the connection to the physical controller is closed and re-established.
1832
+
1833
+ """
1834
+ controller: str
1835
+ """
1836
+ Identifier of the configured robot controller.
1837
+ """
1838
+ operation_mode: OperationMode
1839
+ safety_state: SafetyStateType
1840
+ velocity_override: Annotated[Optional[int], Field(ge=1, le=100)] = None
1841
+ """
1842
+ If made available by the robot controller, returns the current velocity override in
1843
+ [percentage] for movements adjusted on robot control panel.
1844
+ Valid value range: 1 - 100.
1845
+
1846
+ """
1847
+ motion_groups: Annotated[List[MotionGroupState], Field(title='MotionGroupState[]')]
1848
+ """
1849
+ State of indicated motion groups.
1850
+ In case of state request via controller all configured motion groups are returned.
1851
+ In case of executing a motion only the affected motion groups are returned.
1852
+
1853
+ """
1854
+
1855
+
1856
+ class IODirection(Enum):
1857
+ """
1858
+ Identifies the input/output type.
1859
+ """
1860
+
1861
+ IO_TYPE_INPUT = 'IO_TYPE_INPUT'
1862
+ IO_TYPE_OUTPUT = 'IO_TYPE_OUTPUT'
1863
+
1864
+
1865
+ class IOValueType(Enum):
1866
+ """
1867
+ Data type of the input/output.
1868
+ """
1869
+
1870
+ IO_VALUE_BOOLEAN = 'IO_VALUE_BOOLEAN'
1871
+ IO_VALUE_ANALOG_FLOAT = 'IO_VALUE_ANALOG_FLOAT'
1872
+ IO_VALUE_ANALOG_INTEGER = 'IO_VALUE_ANALOG_INTEGER'
1873
+
1874
+
1875
+ class UnitType(Enum):
1876
+ """
1877
+ The unit of input/output value.
1878
+ """
1879
+
1880
+ UNIT_NONE = 'UNIT_NONE'
1881
+ UNIT_KILOGRAM = 'UNIT_KILOGRAM'
1882
+ UNIT_AMPERE = 'UNIT_AMPERE'
1883
+ UNIT_KELVIN = 'UNIT_KELVIN'
1884
+ UNIT_HERTZ = 'UNIT_HERTZ'
1885
+ UNIT_NEWTON = 'UNIT_NEWTON'
1886
+ UNIT_VOLT = 'UNIT_VOLT'
1887
+ UNIT_CELSIUS = 'UNIT_CELSIUS'
1888
+ UNIT_NEWTON_METER = 'UNIT_NEWTON_METER'
1889
+ UNIT_METER = 'UNIT_METER'
1890
+
1891
+
1892
+ class BooleanValue(BaseModel):
1893
+ """
1894
+ Value of a digital input/output.
1895
+
1896
+ """
1897
+
1898
+ value: bool
1899
+ value_type: Literal['boolean'] = 'boolean'
1900
+
1901
+
1902
+ class IntegerValue(BaseModel):
1903
+ """
1904
+ Value of an input/output with integer representation.
1905
+
1906
+ > The integral value is transmitted as a string to avoid precision loss during conversion to JSON.
1907
+ > Recommended: Use int64 in your implementation. If you want to interact with int64 in numbers,
1908
+ > JS bigint libraries can help you to parse the string into an integral value.
1909
+
1910
+ """
1911
+
1912
+ value: str
1913
+ value_type: Literal['integer'] = 'integer'
1914
+
1915
+
1916
+ class FloatValue(BaseModel):
1917
+ value: float
1918
+ """
1919
+ Value of an analog input/output in floating number representation.
1920
+
1921
+ """
1922
+ value_type: Literal['float'] = 'float'
1923
+
1924
+
1925
+ class IOBoundary(RootModel):
1926
+ root: Annotated[
1927
+ Union[BooleanValue, IntegerValue, FloatValue],
1928
+ Field(discriminator='value_type', title='IOBoundary'),
1929
+ ]
1930
+
1931
+
1932
+ class IODescription(BaseModel):
1933
+ io: str
1934
+ """
1935
+ Unique identifier of the input/output.
1936
+
1937
+ """
1938
+ name: str
1939
+ """
1940
+ Name of the input/output. Customize it on the physical controller or in the virtual robot specification.
1941
+
1942
+ """
1943
+ group: Optional[str] = None
1944
+ """
1945
+ Name of the input/output group. Customize it on the physical controller or in the virtual robot specification.
1946
+
1947
+ """
1948
+ direction: IODirection
1949
+ value_type: IOValueType
1950
+ unit: Optional[UnitType] = None
1951
+ min: Optional[IOBoundary] = None
1952
+ max: Optional[IOBoundary] = None
1953
+
1954
+
1955
+ class ListIODescriptionsResponse(RootModel):
1956
+ root: List[IODescription]
1957
+
1958
+ def __getitem__(self, index: int) -> IODescription:
1959
+ """
1960
+ Make list RootModel directly indexable.
1961
+ """
1962
+ return self.root[index]
1963
+
1964
+ def __setitem__(self, index: int, value: IODescription) -> None:
1965
+ """
1966
+ Make list RootModel directly indexable.
1967
+ """
1968
+ self.root[index] = value
1969
+
1970
+ def __len__(self) -> int:
1971
+ """
1972
+ Make list RootModel directly usable with len().
1973
+ """
1974
+ return len(self.root)
1975
+
1976
+ def __iter__(self):
1977
+ """
1978
+ Make list RootModel directly iterable.
1979
+ """
1980
+ return iter(self.root)
1981
+
1982
+
1983
+ class IOBooleanValue(BaseModel):
1984
+ """
1985
+ Input/Output boolean value representation.
1986
+ """
1987
+
1988
+ io: str
1989
+ """
1990
+ Unique identifier of the input/output.
1991
+ """
1992
+ value: bool
1993
+ """
1994
+ Value of a digital input/output.
1995
+
1996
+ """
1997
+ value_type: Literal['boolean'] = 'boolean'
1998
+
1999
+
2000
+ class IOIntegerValue(BaseModel):
2001
+ io: str
2002
+ """
2003
+ Unique identifier of the input/output.
2004
+ """
2005
+ value: str
2006
+ """
2007
+ Value of an input/output with integer representation.
2008
+
2009
+ > The integral value is transmitted as a string to avoid precision loss during conversion to JSON.
2010
+ > Recommended: Use int64 in your implementation. If you want to interact with int64 in numbers,
2011
+ > JS bigint libraries can help you to parse the string into an integral value.
2012
+
2013
+ """
2014
+ value_type: Literal['integer'] = 'integer'
2015
+
2016
+
2017
+ class IOFloatValue(BaseModel):
2018
+ io: str
2019
+ """
2020
+ Unique identifier of the input/output.
2021
+ """
2022
+ value: float
2023
+ """
2024
+ Value of an analog input/output in floating number representation.
2025
+
2026
+ """
2027
+ value_type: Literal['float'] = 'float'
2028
+
2029
+
2030
+ class IOValue(RootModel):
2031
+ root: Annotated[
2032
+ Union[IOBooleanValue, IOIntegerValue, IOFloatValue],
2033
+ Field(discriminator='value_type'),
2034
+ ]
2035
+
2036
+
2037
+ class StreamIOValuesResponse(BaseModel):
2038
+ """
2039
+ Array of input/output values.
2040
+ """
2041
+
2042
+ io_values: List[IOValue]
2043
+ timestamp: AwareDatetime
2044
+ """
2045
+ Timestamp indicating when the represented information was received from the robot controller.
2046
+ """
2047
+ sequence_number: Annotated[int, Field(ge=0, le=4294967295)]
2048
+ """
2049
+ Sequence number of the controller state. It starts with 0 upon establishing the connection with a physical controller.
2050
+ The sequence number is reset when the connection to the physical controller is closed and re-established.
2051
+
2052
+ """
2053
+
2054
+
2055
+ class ListIOValuesResponse(RootModel):
2056
+ """
2057
+ Array of input/output values.
2058
+ """
2059
+
2060
+ root: Annotated[
2061
+ List[IOValue],
2062
+ Field(
2063
+ examples=[
2064
+ {
2065
+ 'io_values': [
2066
+ {'io': 'io1', 'value': True, 'value_type': 'boolean'},
2067
+ {'io': 'io2', 'value': '42', 'value_type': 'integer'},
2068
+ {'io': 'io3', 'value': 3.14, 'value_type': 'float'},
2069
+ ]
2070
+ }
2071
+ ]
2072
+ ),
2073
+ ]
2074
+ """
2075
+ Array of input/output values.
2076
+ """
2077
+
2078
+ def __getitem__(self, index: int) -> IOValue:
2079
+ """
2080
+ Make list RootModel directly indexable.
2081
+ """
2082
+ return self.root[index]
2083
+
2084
+ def __setitem__(self, index: int, value: IOValue) -> None:
2085
+ """
2086
+ Make list RootModel directly indexable.
2087
+ """
2088
+ self.root[index] = value
2089
+
2090
+ def __len__(self) -> int:
2091
+ """
2092
+ Make list RootModel directly usable with len().
2093
+ """
2094
+ return len(self.root)
2095
+
2096
+ def __iter__(self):
2097
+ """
2098
+ Make list RootModel directly iterable.
2099
+ """
2100
+ return iter(self.root)
2101
+
2102
+
2103
+ class Comparator(Enum):
2104
+ """
2105
+ Comparator for the comparison of two values.
2106
+ The comparator is used to compare two values and return a boolean result.
2107
+ The default comparator is unknown.
2108
+
2109
+ """
2110
+
2111
+ COMPARATOR_EQUALS = 'COMPARATOR_EQUALS'
2112
+ COMPARATOR_NOT_EQUALS = 'COMPARATOR_NOT_EQUALS'
2113
+ COMPARATOR_GREATER = 'COMPARATOR_GREATER'
2114
+ COMPARATOR_GREATER_EQUAL = 'COMPARATOR_GREATER_EQUAL'
2115
+ COMPARATOR_LESS = 'COMPARATOR_LESS'
2116
+ COMPARATOR_LESS_EQUAL = 'COMPARATOR_LESS_EQUAL'
2117
+
2118
+
2119
+ class WaitForIOEventRequest(BaseModel):
2120
+ """
2121
+ The value to compare with the current value of the input/output.
2122
+ """
2123
+
2124
+ io: IOValue
2125
+ comparator: Comparator
2126
+ """
2127
+ Comparator for the comparison of two values.
2128
+ Use the measured I/O as the base value (a) and the expected input/output value as the comparator (b): e.g., a > b.
2129
+
2130
+ """
2131
+
2132
+
2133
+ class SettableRobotSystemMode(Enum):
2134
+ ROBOT_SYSTEM_MODE_MONITOR = 'ROBOT_SYSTEM_MODE_MONITOR'
2135
+ ROBOT_SYSTEM_MODE_CONTROL = 'ROBOT_SYSTEM_MODE_CONTROL'
2136
+
2137
+
2138
+ class VirtualRobotConfiguration(BaseModel):
2139
+ name: str
2140
+ """
2141
+ Name of the configuration file generated by the unique identifier of the controller and a time stamp.
2142
+
2143
+ """
2144
+ content: str
2145
+ """
2146
+ Content of the configuration file. Copy & paste to the [addRobotController](addRobotController) configuration.json parameter.
2147
+
2148
+ """
2149
+
2150
+
2151
+ class OrientationType(Enum):
2152
+ """
2153
+ The type of rotation description that is used to specify the orientation.
2154
+
2155
+ **Rotation Vector notation**
2156
+
2157
+ * The rotation is represented using an axis-angle representation:
2158
+ > axis = Vector[0:2]
2159
+ > angle = |axis| in [rad]
2160
+ > axis.normalized * angle
2161
+
2162
+ **Quaternion notation**
2163
+
2164
+ * The rotation is represented using a unit quaternion: [x, y, z, w].
2165
+ * The vector part [x, y, z] is the imaginary part of the quaternion, and the scalar part [w] is the real part.
2166
+
2167
+ **Euler notation**
2168
+
2169
+ * *extrinsic* fixed external reference system
2170
+ * *intrinsic* reference system fixed to rotation body
2171
+ > angles = Vector[0:2] in [rad].
2172
+ * ZYX, ZXZ,...
2173
+ - mapping of the given angles values to the (either intrinsic
2174
+ or extrinsic) axes in the stated order.
2175
+ > Example ZYX: Z = Vector[0], Y = Vector[1], X = Vector[2].
2176
+
2177
+ """
2178
+
2179
+ ROTATION_VECTOR = 'ROTATION_VECTOR'
2180
+ QUATERNION = 'QUATERNION'
2181
+ EULER_ANGLES_INTRINSIC_ZXZ = 'EULER_ANGLES_INTRINSIC_ZXZ'
2182
+ EULER_ANGLES_INTRINSIC_XYX = 'EULER_ANGLES_INTRINSIC_XYX'
2183
+ EULER_ANGLES_INTRINSIC_YZY = 'EULER_ANGLES_INTRINSIC_YZY'
2184
+ EULER_ANGLES_INTRINSIC_ZYZ = 'EULER_ANGLES_INTRINSIC_ZYZ'
2185
+ EULER_ANGLES_INTRINSIC_XZX = 'EULER_ANGLES_INTRINSIC_XZX'
2186
+ EULER_ANGLES_INTRINSIC_YXY = 'EULER_ANGLES_INTRINSIC_YXY'
2187
+ EULER_ANGLES_INTRINSIC_XYZ = 'EULER_ANGLES_INTRINSIC_XYZ'
2188
+ EULER_ANGLES_INTRINSIC_YZX = 'EULER_ANGLES_INTRINSIC_YZX'
2189
+ EULER_ANGLES_INTRINSIC_ZXY = 'EULER_ANGLES_INTRINSIC_ZXY'
2190
+ EULER_ANGLES_INTRINSIC_XZY = 'EULER_ANGLES_INTRINSIC_XZY'
2191
+ EULER_ANGLES_INTRINSIC_ZYX = 'EULER_ANGLES_INTRINSIC_ZYX'
2192
+ EULER_ANGLES_INTRINSIC_YXZ = 'EULER_ANGLES_INTRINSIC_YXZ'
2193
+ EULER_ANGLES_EXTRINSIC_ZXZ = 'EULER_ANGLES_EXTRINSIC_ZXZ'
2194
+ EULER_ANGLES_EXTRINSIC_XYX = 'EULER_ANGLES_EXTRINSIC_XYX'
2195
+ EULER_ANGLES_EXTRINSIC_YZY = 'EULER_ANGLES_EXTRINSIC_YZY'
2196
+ EULER_ANGLES_EXTRINSIC_ZYZ = 'EULER_ANGLES_EXTRINSIC_ZYZ'
2197
+ EULER_ANGLES_EXTRINSIC_XZX = 'EULER_ANGLES_EXTRINSIC_XZX'
2198
+ EULER_ANGLES_EXTRINSIC_YXY = 'EULER_ANGLES_EXTRINSIC_YXY'
2199
+ EULER_ANGLES_EXTRINSIC_ZYX = 'EULER_ANGLES_EXTRINSIC_ZYX'
2200
+ EULER_ANGLES_EXTRINSIC_XZY = 'EULER_ANGLES_EXTRINSIC_XZY'
2201
+ EULER_ANGLES_EXTRINSIC_YXZ = 'EULER_ANGLES_EXTRINSIC_YXZ'
2202
+ EULER_ANGLES_EXTRINSIC_YZX = 'EULER_ANGLES_EXTRINSIC_YZX'
2203
+ EULER_ANGLES_EXTRINSIC_XYZ = 'EULER_ANGLES_EXTRINSIC_XYZ'
2204
+ EULER_ANGLES_EXTRINSIC_ZXY = 'EULER_ANGLES_EXTRINSIC_ZXY'
2205
+
2206
+
2207
+ class Orientation(RootModel):
2208
+ """
2209
+ Describes an orientation in 3D space.
2210
+ A tree-to-four-dimensional vector [x, y, z, w] with double precision.
2211
+
2212
+ """
2213
+
2214
+ root: Annotated[List[float], Field(max_length=4, min_length=3, title='Orientation')]
2215
+ """
2216
+ Describes an orientation in 3D space.
2217
+ A tree-to-four-dimensional vector [x, y, z, w] with double precision.
2218
+
2219
+ """
2220
+
2221
+ def __getitem__(self, index: int) -> float:
2222
+ """
2223
+ Make list RootModel directly indexable.
2224
+ """
2225
+ return self.root[index]
2226
+
2227
+ def __setitem__(self, index: int, value: float) -> None:
2228
+ """
2229
+ Make list RootModel directly indexable.
2230
+ """
2231
+ self.root[index] = value
2232
+
2233
+ def __len__(self) -> int:
2234
+ """
2235
+ Make list RootModel directly usable with len().
2236
+ """
2237
+ return len(self.root)
2238
+
2239
+ def __iter__(self):
2240
+ """
2241
+ Make list RootModel directly iterable.
2242
+ """
2243
+ return iter(self.root)
2244
+
2245
+
2246
+ class CoordinateSystemData(BaseModel):
2247
+ name: Optional[str] = None
2248
+ """
2249
+ Human readable name of this coordinate system.
2250
+ """
2251
+ reference_coordinate_system: Optional[str] = None
2252
+ """
2253
+ The identifier of the reference coordinate system. Empty if world is used.
2254
+ """
2255
+ position: Optional[Vector3d] = None
2256
+ orientation: Optional[Orientation] = None
2257
+ orientation_type: Optional[OrientationType] = 'ROTATION_VECTOR'
2258
+
2259
+
2260
+ class CoordinateSystem(CoordinateSystemData):
2261
+ coordinate_system: str
2262
+ """
2263
+ Unique identifier of the coordinate system.
2264
+ """
2265
+
2266
+
2267
+ class ListCoordinateSystemsResponse(RootModel):
2268
+ root: List[CoordinateSystem]
2269
+
2270
+ def __getitem__(self, index: int) -> CoordinateSystem:
2271
+ """
2272
+ Make list RootModel directly indexable.
2273
+ """
2274
+ return self.root[index]
2275
+
2276
+ def __setitem__(self, index: int, value: CoordinateSystem) -> None:
2277
+ """
2278
+ Make list RootModel directly indexable.
2279
+ """
2280
+ self.root[index] = value
2281
+
2282
+ def __len__(self) -> int:
2283
+ """
2284
+ Make list RootModel directly usable with len().
2285
+ """
2286
+ return len(self.root)
2287
+
2288
+ def __iter__(self):
2289
+ """
2290
+ Make list RootModel directly iterable.
2291
+ """
2292
+ return iter(self.root)
2293
+
2294
+
2295
+ class MotionGroupModel(RootModel):
2296
+ root: Annotated[str, Field(title='MotionGroupModel')]
2297
+ """
2298
+ String identifiying the model of a motion group.
2299
+ """
2300
+
2301
+
2302
+ class TcpOffset(BaseModel):
2303
+ name: str
2304
+ """
2305
+ A readable and changeable name for frontend visualization.
2306
+ """
2307
+ pose: Pose
2308
+
2309
+
2310
+ class ColliderDictionary(RootModel):
2311
+ """
2312
+ A collection of identifiable colliders.
2313
+ """
2314
+
2315
+ root: Dict[str, Collider]
2316
+
2317
+
2318
+ class LimitRange(BaseModel):
2319
+ """
2320
+ The upper_limit must be greater then the lower_limit.
2321
+ """
2322
+
2323
+ lower_limit: Optional[float] = None
2324
+ upper_limit: Optional[float] = None
2325
+
2326
+
2327
+ class JointLimits(BaseModel):
2328
+ position: Optional[LimitRange] = None
2329
+ velocity: Optional[float] = None
2330
+ acceleration: Optional[float] = None
2331
+ torque: Optional[float] = None
2332
+
2333
+
2334
+ class CartesianLimits(BaseModel):
2335
+ velocity: Optional[float] = None
2336
+ acceleration: Optional[float] = None
2337
+ orientation_velocity: Optional[float] = None
2338
+ orientation_acceleration: Optional[float] = None
2339
+
2340
+
2341
+ class LimitSet(BaseModel):
2342
+ joints: Optional[List[JointLimits]] = None
2343
+ tcp: Optional[CartesianLimits] = None
2344
+ elbow: Optional[CartesianLimits] = None
2345
+ flange: Optional[CartesianLimits] = None
2346
+ coupled_shoulder_elbow_joint: Optional[JointLimits] = None
2347
+
2348
+
2349
+ class OperationLimits(BaseModel):
2350
+ auto_limits: Optional[LimitSet] = None
2351
+ manual_limits: Optional[LimitSet] = None
2352
+ manual_t1_limits: Optional[LimitSet] = None
2353
+ manual_t2_limits: Optional[LimitSet] = None
2354
+
2355
+
2356
+ class Payload(BaseModel):
2357
+ name: str
2358
+ payload: float
2359
+ """
2360
+ Mass of payload in [kg].
2361
+ """
2362
+ center_of_mass: Optional[Vector3d] = None
2363
+ moment_of_inertia: Optional[Vector3d] = None
2364
+
2365
+
2366
+ class DHParameter(BaseModel):
2367
+ """
2368
+ A single set of DH parameters.
2369
+ """
2370
+
2371
+ alpha: Optional[float] = None
2372
+ """
2373
+ Angle about x-axis in [rad].
2374
+ """
2375
+ theta: Optional[float] = None
2376
+ """
2377
+ Angle about z-axis in [rad].
2378
+ """
2379
+ a: Optional[float] = None
2380
+ """
2381
+ Offset along x-axis in [mm].
2382
+ """
2383
+ d: Optional[float] = None
2384
+ """
2385
+ Offset along z-axis in [mm].
2386
+ """
2387
+ reverse_rotation_direction: Optional[bool] = None
2388
+ """
2389
+ True, if rotation direction of joint is reversed.
2390
+ """
2391
+
2392
+
2393
+ class MotionGroupDescription(BaseModel):
2394
+ """
2395
+ The configuration of a motion-group used for motion planning.
2396
+ """
2397
+
2398
+ motion_group_model: MotionGroupModel
2399
+ mounting: Optional[Pose] = None
2400
+ """
2401
+ The offset from the world frame to the motion group base.
2402
+ """
2403
+ tcps: Annotated[
2404
+ Optional[Dict[str, TcpOffset]], Field(title='TcpOffsetDictionary')
2405
+ ] = None
2406
+ """
2407
+ Maps a TCP name to its offset relative to the flange coordinate system. Key must be a TCP identifier.
2408
+ Values are TcpOffsets.
2409
+
2410
+ """
2411
+ safety_zones: Optional[ColliderDictionary] = None
2412
+ """
2413
+ SafetyZones are areas which cannot be entered or where certain limits apply.
2414
+ """
2415
+ safety_link_colliders: Optional[List[ColliderDictionary]] = None
2416
+ """
2417
+ The shape of the MotionGroups links to validate against safety zones.
2418
+ Indexed along the kinematic chain, starting with a static base shape before first joint.
2419
+
2420
+ """
2421
+ safety_tool_colliders: Annotated[
2422
+ Optional[Dict[str, ColliderDictionary]], Field(title='SafetyToolColliders')
2423
+ ] = None
2424
+ """
2425
+ Maps a TCP name to its tool collider. Key must be a TCP identifier.
2426
+ Values are ColliderDictionaries that make up the shape of one tool to validate against safety zones.
2427
+
2428
+ """
2429
+ operation_limits: OperationLimits
2430
+ payloads: Annotated[
2431
+ Optional[Dict[str, Payload]], Field(title='PayloadDictionary')
2432
+ ] = None
2433
+ """
2434
+ Maps a payload name to its configuration. Key must be a payload identifier.
2435
+ Values are payload objects.
2436
+
2437
+ """
2438
+ cycle_time: Annotated[Optional[int], Field(ge=0, le=2147483647)] = None
2439
+ """
2440
+ [ms] cycle time of the motion group controller. A trajectory for this motion group should be computed to this resolution.
2441
+ """
2442
+ dh_parameters: Optional[List[DHParameter]] = None
2443
+ """
2444
+ The DH parameters describing the motion group geometry, starting from base.
2445
+ """
2446
+
2447
+
2448
+ class Tool(RootModel):
2449
+ """
2450
+ Defines the shape of a tool.
2451
+
2452
+ A tool is a dictionary of colliders.
2453
+
2454
+ All colliders that make up a tool are attached to the flange frame of the motion group.
2455
+
2456
+ """
2457
+
2458
+ root: Dict[str, Collider]
2459
+
2460
+
2461
+ class CollisionSetup(BaseModel):
2462
+ colliders: Optional[ColliderDictionary] = None
2463
+ """
2464
+ Colliders are checked against links and tool.
2465
+
2466
+ """
2467
+ link_chain: Optional[LinkChain] = None
2468
+ """
2469
+ The shape of the motion groups links to validate against colliders.
2470
+ Indexed along the kinematic chain, starting with a static base shape before first joint.
2471
+ The base of the motion group is not checked for collision against the environment.
2472
+
2473
+ """
2474
+ tool: Optional[Tool] = None
2475
+ """
2476
+ Shape of the tool to validate against colliders.
2477
+
2478
+ """
2479
+ self_collision_detection: Optional[bool] = True
2480
+ """
2481
+ If true, self-collision detection is enabled for the motion group.
2482
+
2483
+ Self-collision detection checks if links in the kinematic chain of the motion group collide with each other.
2484
+ Adjacent links in the kinematic chain of the motion group are not checked for mutual collision.
2485
+ The tool is treated like a link at the end of the kinematic chain. It is checked against all links except the last one.
2486
+
2487
+ Default is true.
2488
+
2489
+ """
2490
+
2491
+
2492
+ class CollisionSetups(RootModel):
2493
+ """
2494
+ Collision layers to be respected by the motion planner when planning for a single motion group.
2495
+ Each setup represents one layer, e.g., the safety zones and shapes or a fine grained tool and workpiece model.
2496
+ Layers are checked individually along the trajectory and independently of other layers.
2497
+
2498
+ To respect the safety zones of the controller and check for collision:
2499
+ 1. Fetch the safety zones, link and tool shapes from the controller.
2500
+ 2. Add the fetched zones, links and tools to a layer.
2501
+ 3. Create other layers from your own 3D data as needed.
2502
+ 4. Plan trajectory.
2503
+ 5. The response highlights the layer in which a collision was detected by key.
2504
+
2505
+ """
2506
+
2507
+ root: Dict[str, CollisionSetup]
2508
+
2509
+
2510
+ class MotionGroupSetup(BaseModel):
2511
+ motion_group_model: MotionGroupModel
2512
+ cycle_time: Annotated[int, Field(ge=0, le=2147483647)]
2513
+ """
2514
+ [ms] cycle time of the motion group controller. A trajectory for this motion group should be computed to this resolution.
2515
+ """
2516
+ mounting: Optional[Pose] = None
2517
+ """
2518
+ The offset from the world frame to the motion group base.
2519
+ """
2520
+ tcp_offset: Optional[Pose] = None
2521
+ global_limits: Optional[LimitSet] = None
2522
+ payload: Optional[Payload] = None
2523
+ collision_setups: Optional[CollisionSetups] = None
2524
+
2525
+
2526
+ class DoubleArray(RootModel):
2527
+ root: List[float]
2528
+
2529
+ def __getitem__(self, index: int) -> float:
2530
+ """
2531
+ Make list RootModel directly indexable.
2532
+ """
2533
+ return self.root[index]
2534
+
2535
+ def __setitem__(self, index: int, value: float) -> None:
2536
+ """
2537
+ Make list RootModel directly indexable.
2538
+ """
2539
+ self.root[index] = value
2540
+
2541
+ def __len__(self) -> int:
2542
+ """
2543
+ Make list RootModel directly usable with len().
2544
+ """
2545
+ return len(self.root)
2546
+
2547
+ def __iter__(self):
2548
+ """
2549
+ Make list RootModel directly iterable.
2550
+ """
2551
+ return iter(self.root)
2552
+
2553
+
2554
+ class BlendingAuto(BaseModel):
2555
+ min_velocity_in_percent: Annotated[Optional[int], Field(ge=0, le=100)] = None
2556
+ """
2557
+ Auto-blending is used to keep a constant velocity when blending between two motion commands.
2558
+ It changes the TCP path around the target point of the motion command.
2559
+ The value represents the percentage of the original velocity.
2560
+
2561
+ """
2562
+ blending_name: Literal['BlendingAuto'] = 'BlendingAuto'
2563
+
2564
+
2565
+ class BlendingPosition(BaseModel):
2566
+ position_zone_radius: Optional[float] = None
2567
+ """
2568
+ Specifies the maximum radius in [mm] around the motion command's target point
2569
+ where the TCP path can be altered to blend the motion command into the following one.
2570
+ If auto-blending blends too much of the resulting trajectory, use position-blending to restrict the blending zone radius.
2571
+
2572
+ """
2573
+ blending_name: Literal['BlendingPosition'] = 'BlendingPosition'
2574
+
2575
+
2576
+ class LimitsOverride(BaseModel):
2577
+ """
2578
+ If a limit is not set, the default value will be used.
2579
+
2580
+ """
2581
+
2582
+ joint_velocity_limits: Optional[List[float]] = None
2583
+ """
2584
+ Maximum joint velocity in [rad/s] for each joint.
2585
+ Either leave this field empty or set a value for each joint.
2586
+
2587
+ """
2588
+ joint_acceleration_limits: Optional[List[float]] = None
2589
+ """
2590
+ Maximum joint acceleration in [rad/s^2] for each joint.
2591
+ Either leave this field empty or set a value for each joint.
2592
+
2593
+ """
2594
+ tcp_velocity_limit: Optional[float] = None
2595
+ """
2596
+ Maximum allowed TCP velocity in [mm/s].
2597
+
2598
+ """
2599
+ tcp_acceleration_limit: Optional[float] = None
2600
+ """
2601
+ Maximum allowed TCP acceleration in [mm/s^2].
2602
+
2603
+ """
2604
+ tcp_orientation_velocity_limit: Optional[float] = None
2605
+ """
2606
+ Maximum allowed TCP rotation velocity in [rad/s].
2607
+
2608
+ """
2609
+ tcp_orientation_acceleration_limit: Optional[float] = None
2610
+ """
2611
+ Maximum allowed TCP rotation acceleration in [rad/s^2].
2612
+
2613
+ """
2614
+
2615
+
2616
+ class PathCartesianPTP(BaseModel):
2617
+ """
2618
+ A cartesian point-to-point is representing a joint point-to-point motion from start point to the indicated target pose.
2619
+ The target pose is a joint point-to-point given in cartesian space. The target joint configuration will be calculated
2620
+ to be in the same kinematic configuration as the start point is. If that is not possible, planning will fail.
2621
+
2622
+ """
2623
+
2624
+ target_pose: Pose
2625
+ path_definition_name: Literal['PathCartesianPTP'] = 'PathCartesianPTP'
2626
+
2627
+
2628
+ class CubicSplineParameter(BaseModel):
2629
+ pose: Pose
2630
+ path_parameter: float
2631
+
2632
+
2633
+ class PathCubicSpline(BaseModel):
2634
+ """
2635
+ A [cubic spline](https://de.wikipedia.org/wiki/Spline-Interpolation) represents a cartesian cubic spline
2636
+ in translative and orientational space from start point to indicated target pose via control points.
2637
+
2638
+ """
2639
+
2640
+ parameters: List[CubicSplineParameter]
2641
+ path_definition_name: Literal['PathCubicSpline'] = 'PathCubicSpline'
2642
+
2643
+
2644
+ class PathLine(BaseModel):
2645
+ """
2646
+ A line represents a straight line from start position to indicated target position.
2647
+ The orientation is calculated via a quaternion [slerp](https://en.wikipedia.org/wiki/Slerp) from start orientation to indicated target orientation.
2648
+
2649
+ """
2650
+
2651
+ target_pose: Pose
2652
+ path_definition_name: Literal['PathLine'] = 'PathLine'
2653
+
2654
+
2655
+ class PathCircle(BaseModel):
2656
+ """
2657
+ A circular constructs a circle in translative space from 1) the start position which is provided via position, and 2) the indicated target position.
2658
+ The orientation is calculated via a [bezier spline](https://en.wikipedia.org/wiki/B%C3%A9zier_curve) from start orientation to the indicated target orientation.
2659
+ The via point defines the control point for the bezier spline.
2660
+ Therefore, the control point will not be hit directly.
2661
+
2662
+ """
2663
+
2664
+ via_pose: Pose
2665
+ target_pose: Pose
2666
+ path_definition_name: Literal['PathCircle'] = 'PathCircle'
2667
+
2668
+
2669
+ class PathJointPTP(BaseModel):
2670
+ """
2671
+ A joint point-to-point represents a line in joint space. All joints will be moved synchronously.
2672
+
2673
+ """
2674
+
2675
+ target_joint_position: DoubleArray
2676
+ path_definition_name: Literal['PathJointPTP'] = 'PathJointPTP'
2677
+
2678
+
2679
+ class MotionCommand(BaseModel):
2680
+ blending: Annotated[
2681
+ Optional[Union[BlendingAuto, BlendingPosition]],
2682
+ Field(discriminator='blending_name'),
2683
+ ] = None
2684
+ """
2685
+ Blending alters the TCP path at the target point of a motion command
2686
+ to ensure that the velocity does not drop to zero between two motion commands.
2687
+
2688
+ """
2689
+ limits_override: Optional[LimitsOverride] = None
2690
+ """
2691
+ Limits override is used to override the global limits of the motion group for this segment of the motion.
2692
+
2693
+ """
2694
+ path: Annotated[
2695
+ Union[PathCartesianPTP, PathCubicSpline, PathLine, PathCircle, PathJointPTP],
2696
+ Field(discriminator='path_definition_name'),
2697
+ ]
2698
+
2699
+
2700
+ class PlanTrajectoryRequest(BaseModel):
2701
+ motion_group_setup: MotionGroupSetup
2702
+ """
2703
+ The data to assemble the robot setup can be retrieved from [getMotionGroupDescription](getMotionGroupDescription) endpoint.
2704
+ """
2705
+ start_joint_position: DoubleArray
2706
+ """
2707
+ To define a motion the start joints have to be indicated.
2708
+ Cartesian movements will be in the same kinematic configuration as the start joint position until the first joint point-to-point motion.
2709
+ Motions can only be executed if the start joint position is the current joint position of the motion group.
2710
+ To retrieve the current joint position use the endpoint [getCurrentMotionGroupState](getCurrentMotionGroupState).
2711
+ To move the robot to the start joint position use the endpoint [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P).
2712
+
2713
+ """
2714
+ motion_commands: List[MotionCommand]
2715
+ """
2716
+ List of motion commands. A command consists of a path definition (line, circle, joint_ptp, cartesian_ptp, cubic_spline), blending, and limits override.
2717
+
2718
+ """
2719
+
2720
+
2721
+ class JointTrajectory(BaseModel):
2722
+ joint_positions: List[Joints]
2723
+ """
2724
+ List of joint positions [rad] for each sample.
2725
+ The number of samples must match the number of timestamps provided in the times field.
2726
+
2727
+ """
2728
+ times: List[float]
2729
+ """
2730
+ Timestamp for each sample [s].
2731
+ """
2732
+ locations: List[Location]
2733
+
2734
+
2735
+ class FeedbackOutOfWorkspace(BaseModel):
2736
+ """
2737
+ Requested TCP pose is outside of motion group's workspace.
2738
+ """
2739
+
2740
+ invalid_tcp_pose: Optional[Pose] = None
2741
+ error_feedback_name: Literal['FeedbackOutOfWorkspace'] = 'FeedbackOutOfWorkspace'
2742
+
2743
+
2744
+ class SingularityTypeEnum(Enum):
2745
+ WRIST = 'WRIST'
2746
+ ELBOW = 'ELBOW'
2747
+ SHOULDER = 'SHOULDER'
2748
+
2749
+
2750
+ class FeedbackSingularity(BaseModel):
2751
+ """
2752
+ A singularity is a point in the robot's workspace where the robot loses one or more degrees of freedom with regards to moving its TCP.
2753
+ This means the robot cannot move or rotate the TCP in a certain direction from this specific point.
2754
+
2755
+ Use PTP motions if possible. They will almost never fail due to singularities (only if the target point is at a singularity).
2756
+
2757
+ Alternatively change the robot TCP's path to avoid moving through this point or try to move the TCP through this point in a different direction.
2758
+
2759
+ """
2760
+
2761
+ singularity_type: Optional[SingularityTypeEnum] = None
2762
+ singular_joint_position: Optional[DoubleArray] = None
2763
+ error_feedback_name: Literal['FeedbackSingularity'] = 'FeedbackSingularity'
2764
+
2765
+
2766
+ class FeedbackJointLimitExceeded(BaseModel):
2767
+ """
2768
+ This error is returned when a joint position limit is exceeded.
2769
+ The joint index denotes which joint is out of its limits, starting with 1 and followed by the full joint position.
2770
+
2771
+ """
2772
+
2773
+ joint_index: Annotated[Optional[int], Field(ge=0, le=2147483647)] = None
2774
+ joint_position: Optional[DoubleArray] = None
2775
+ error_feedback_name: Literal['FeedbackJointLimitExceeded'] = (
2776
+ 'FeedbackJointLimitExceeded'
2777
+ )
2778
+
2779
+
2780
+ class CollisionContact(BaseModel):
2781
+ local: Optional[Vector3d] = None
2782
+ root: Optional[Vector3d] = None
2783
+
2784
+
2785
+ class Collision(BaseModel):
2786
+ id_of_a: Optional[str] = None
2787
+ id_of_b: Optional[str] = None
2788
+ id_of_layer: Optional[str] = None
2789
+ normal_root_on_b: Optional[Vector3d] = None
2790
+ position_on_a: Optional[CollisionContact] = None
2791
+ position_on_b: Optional[CollisionContact] = None
2792
+
2793
+
2794
+ class FeedbackCollision(BaseModel):
2795
+ collisions: Optional[List[Collision]] = None
2796
+ joint_position: Optional[DoubleArray] = None
2797
+ tcp_pose: Optional[Pose] = None
2798
+ error_feedback_name: Literal['FeedbackCollision'] = 'FeedbackCollision'
2799
+
2800
+
2801
+ class PlanTrajectoryFailedResponse(BaseModel):
2802
+ error_feedback: Annotated[
2803
+ Union[
2804
+ FeedbackOutOfWorkspace,
2805
+ FeedbackSingularity,
2806
+ FeedbackJointLimitExceeded,
2807
+ FeedbackCollision,
2808
+ ],
2809
+ Field(discriminator='error_feedback_name'),
2810
+ ]
2811
+ error_location_on_trajectory: Location
2812
+ joint_trajectory: Optional[JointTrajectory] = None
2813
+ """
2814
+ The joint trajectory from the start joint position to the error.
2815
+
2816
+ """
2817
+
2818
+
2819
+ class PlanTrajectoryResponse(BaseModel):
2820
+ response: Union[JointTrajectory, PlanTrajectoryFailedResponse]
2821
+
2822
+
2823
+ class ValidationError(BaseModel):
2824
+ loc: Annotated[List[Union[str, int]], Field(title='Location')]
2825
+ msg: Annotated[str, Field(title='Message')]
2826
+ type: Annotated[str, Field(title='Error Type')]
2827
+ input: Dict[str, Any]
2828
+
2829
+
2830
+ class ErrorInvalidJointCount(BaseModel):
2831
+ """
2832
+ The provided joint data does not match the expected number of joints
2833
+ for this motion group.
2834
+
2835
+ """
2836
+
2837
+ expected_joint_count: int
2838
+ """
2839
+ The expected number of joints for this motion group.
2840
+
2841
+ """
2842
+ provided_joint_count: int
2843
+ """
2844
+ The number of provided joints.
2845
+
2846
+ """
2847
+ error_feedback_name: Literal['ErrorInvalidJointCount'] = 'ErrorInvalidJointCount'
2848
+
2849
+
2850
+ class ErrorJointLimitExceeded(BaseModel):
2851
+ """
2852
+ A reference joint position (start or target) exceeds the configured joint limits.
2853
+
2854
+ """
2855
+
2856
+ joint_index: Annotated[Optional[int], Field(ge=0, le=2147483647)] = None
2857
+ """
2858
+ Index of the joint exceeding its limits (0-based).
2859
+
2860
+ """
2861
+ joint_position: Optional[DoubleArray] = None
2862
+ """
2863
+ The joint position violating the limits.
2864
+
2865
+ """
2866
+ error_feedback_name: Literal['ErrorJointLimitExceeded'] = 'ErrorJointLimitExceeded'
2867
+
2868
+
2869
+ class ErrorJointPositionCollision(BaseModel):
2870
+ """
2871
+ A reference joint position, e.g., start or target joint position, results in collisions that prevent processing.
2872
+
2873
+ """
2874
+
2875
+ collisions: Optional[List[Collision]] = None
2876
+ joint_position: Optional[DoubleArray] = None
2877
+ """
2878
+ The joint position that collides.
2879
+
2880
+ """
2881
+ error_feedback_name: Literal['ErrorJointPositionCollision'] = (
2882
+ 'ErrorJointPositionCollision'
2883
+ )
2884
+
2885
+
2886
+ class PlanValidationError(ValidationError):
2887
+ data: Annotated[
2888
+ Optional[
2889
+ Union[
2890
+ ErrorInvalidJointCount,
2891
+ ErrorJointLimitExceeded,
2892
+ ErrorJointPositionCollision,
2893
+ ]
2894
+ ],
2895
+ Field(discriminator='error_feedback_name'),
2896
+ ] = None
2897
+ """
2898
+ Optional data further specifying the validation error.
2899
+
2900
+ """
2901
+
2902
+
2903
+ class Plan422Response(BaseModel):
2904
+ detail: Annotated[Optional[List[PlanValidationError]], Field(title='Detail')] = None
2905
+
2906
+
2907
+ class RRTConnectAlgorithm(BaseModel):
2908
+ algorithm_name: Literal['RRTConnectAlgorithm'] = 'RRTConnectAlgorithm'
2909
+ """
2910
+ Algorithm discriminator.
2911
+
2912
+ RRT Connect algorithm configuration for collision-free path planning.
2913
+ Rapidly-exploring Random Trees (RRT) builds trees of valid configurations by randomly sampling
2914
+ the joint space and connecting feasible points with JointPTP motions.
2915
+ RRT Connect grows two trees simultaneously from start and target positions until they meet.
2916
+ This is a custom implementation optimized for manipulator kinematics and collision checking in industrial contexts.
2917
+
2918
+ """
2919
+ max_iterations: Annotated[Optional[int], Field(ge=1)] = 10000
2920
+ """
2921
+ Maximum number of iterations for the RRT Connect algorithm.
2922
+ Higher values increase likelihood of success, but also computation time.
2923
+
2924
+ """
2925
+ max_step_size: Optional[float] = 1
2926
+ """
2927
+ Maximum step size for tree extension in joint space.
2928
+ """
2929
+ adaptive_step_size: Optional[bool] = True
2930
+ """
2931
+ Adjust the maximum step size during the search based on the recent success rate of tree expansion.
2932
+ """
2933
+ apply_smoothing: Optional[bool] = True
2934
+ """
2935
+ Apply smoothing after the search has succeeded. This will remove as many intermediate points as possible while keeping the path valid.
2936
+ """
2937
+ apply_blending: Optional[bool] = True
2938
+ """
2939
+ Apply blending after the search has succeeded and smoothing has been applied. This will apply the largest viable blending at each intermediate point.
2940
+ """
2941
+
2942
+
2943
+ class MidpointInsertionAlgorithm(BaseModel):
2944
+ algorithm_name: Literal['MidpointInsertionAlgorithm'] = 'MidpointInsertionAlgorithm'
2945
+ """
2946
+ Algorithm discriminator.
2947
+
2948
+ Midpoint insertion algorithm configuration for collision-free path planning.
2949
+ This algorithm adds a single midpoint between the start and target joint position to find collision-free paths.
2950
+
2951
+ """
2952
+ max_iterations: Annotated[Optional[int], Field(ge=1)] = 1000
2953
+ """
2954
+ Maximum number of iterations for the midpoint insertion algorithm.
2955
+ Higher values increase likelyhood of success, but also computation time (linear).
2956
+
2957
+ """
2958
+
2959
+
2960
+ class CollisionFreeAlgorithm(RootModel):
2961
+ root: Annotated[
2962
+ Union[RRTConnectAlgorithm, MidpointInsertionAlgorithm],
2963
+ Field(discriminator='algorithm_name', title='CollisionFreeAlgorithm'),
2964
+ ]
2965
+ """
2966
+ Configuration for collision-free path planning algorithms.
2967
+ Different algorithms may have different parameters and behavior.
2968
+
2969
+ Recommendation:
2970
+ - For **cells with many obstacles**, use the RRTConnect algorithm. Use it as a starting point.
2971
+ - For **simple cells with very few obstacles** and when a faster solution is needed, try the MidpointInsertion algorithm.
2972
+
2973
+ """
2974
+
2975
+
2976
+ class PlanCollisionFreeRequest(BaseModel):
2977
+ motion_group_setup: MotionGroupSetup
2978
+ """
2979
+ The data to assemble the robot setup can be retrieved from [getMotionGroupDescription](getMotionGroupDescription) endpoint.
2980
+ """
2981
+ start_joint_position: DoubleArray
2982
+ """
2983
+ Starting joint position for the collision-free motion.
2984
+ Must contain exactly the same number of values as joints in the motion group.
2985
+ To retrieve the current joint position use the endpoint [getCurrentMotionGroupState](getCurrentMotionGroupState).
2986
+
2987
+ """
2988
+ target: DoubleArray
2989
+ """
2990
+ The target joint position of the motion.
2991
+ Must contain exactly the same number of values as joints in the motion group.
2992
+ To compute target joint position from a TCP pose use the endpoint [inverseKinematics](inverseKinematics).
2993
+
2994
+ """
2995
+ algorithm: CollisionFreeAlgorithm
2996
+
2997
+
2998
+ class ErrorMaxIterationsExceeded(BaseModel):
2999
+ """
3000
+ The collision-free planning algorithm reached its maximum iteration limit
3001
+ without finding a valid path. Increase max_iterations or
3002
+ modify the start/target positions.
3003
+
3004
+ """
3005
+
3006
+ max_iterations: Optional[int] = None
3007
+ """
3008
+ The maximum number of iterations that was reached.
3009
+
3010
+ """
3011
+ error_feedback_name: Literal['ErrorMaxIterationsExceeded'] = (
3012
+ 'ErrorMaxIterationsExceeded'
3013
+ )
3014
+
3015
+
3016
+ class PlanCollisionFreeFailedResponse(BaseModel):
3017
+ """
3018
+ Response when collision-free trajectory planning fails.
3019
+ Contains specific feedback about why the planning failed.
3020
+
3021
+ """
3022
+
3023
+ error_feedback: ErrorMaxIterationsExceeded
3024
+
3025
+
3026
+ class PlanCollisionFreeResponse(BaseModel):
3027
+ """
3028
+ Response from collision-free trajectory planning.
3029
+ Contains either a successful joint trajectory or failure information.
3030
+
3031
+ """
3032
+
3033
+ response: Union[JointTrajectory, PlanCollisionFreeFailedResponse]
3034
+
3035
+
3036
+ class JointPositionLimits(RootModel):
3037
+ """
3038
+ Joint position limits in [rad], indexed starting from base.
3039
+
3040
+ """
3041
+
3042
+ root: Annotated[List[LimitRange], Field(title='JointPositionLimits')]
3043
+ """
3044
+ Joint position limits in [rad], indexed starting from base.
3045
+
3046
+ """
3047
+
3048
+ def __getitem__(self, index: int) -> LimitRange:
3049
+ """
3050
+ Make list RootModel directly indexable.
3051
+ """
3052
+ return self.root[index]
3053
+
3054
+ def __setitem__(self, index: int, value: LimitRange) -> None:
3055
+ """
3056
+ Make list RootModel directly indexable.
3057
+ """
3058
+ self.root[index] = value
3059
+
3060
+ def __len__(self) -> int:
3061
+ """
3062
+ Make list RootModel directly usable with len().
3063
+ """
3064
+ return len(self.root)
3065
+
3066
+ def __iter__(self):
3067
+ """
3068
+ Make list RootModel directly iterable.
3069
+ """
3070
+ return iter(self.root)
3071
+
3072
+
3073
+ class InverseKinematicsRequest(BaseModel):
3074
+ motion_group_model: MotionGroupModel
3075
+ tcp_poses: List[Pose]
3076
+ """
3077
+ List of TCP poses for which the inverse solutions are computed.
3078
+
3079
+ """
3080
+ tcp_offset: Optional[Pose] = None
3081
+ mounting: Optional[Pose] = None
3082
+ """
3083
+ Offset from the world frame to the motion group base.
3084
+ """
3085
+ joint_position_limits: Optional[JointPositionLimits] = None
3086
+ collision_setups: Optional[CollisionSetups] = None
3087
+
3088
+
3089
+ class InverseKinematicsResponse(BaseModel):
3090
+ joints: List[List[DoubleArray]]
3091
+
3092
+
3093
+ class InverseKinematicsValidationError(ValidationError):
3094
+ data: Annotated[
3095
+ Optional[Union[ErrorInvalidJointCount, ErrorJointLimitExceeded]],
3096
+ Field(discriminator='error_feedback_name'),
3097
+ ] = None
3098
+ """
3099
+ Optional data further specifying the validation error.
3100
+
3101
+ """
3102
+
3103
+
3104
+ class InverseKinematics422Response(BaseModel):
3105
+ detail: Annotated[
3106
+ Optional[List[InverseKinematicsValidationError]], Field(title='Detail')
3107
+ ] = None
3108
+
3109
+
3110
+ class ForwardKinematicsRequest(BaseModel):
3111
+ motion_group_model: MotionGroupModel
3112
+ joint_positions: List[DoubleArray]
3113
+ """
3114
+ List of joint positions [rad] for which TCP poses are computed.
3115
+
3116
+ """
3117
+ tcp_offset: Optional[Pose] = None
3118
+ mounting: Optional[Pose] = None
3119
+ """
3120
+ Offset from the world frame to the motion group base.
3121
+ """
3122
+
3123
+
3124
+ class ForwardKinematicsResponse(BaseModel):
3125
+ tcp_poses: List[Pose]
3126
+ """
3127
+ List of computed TCP poses corresponding to the input joint positions.
3128
+
3129
+ """
3130
+
3131
+
3132
+ class ForwardKinematicsValidationError(ValidationError):
3133
+ data: Optional[ErrorInvalidJointCount] = None
3134
+
3135
+
3136
+ class ForwardKinematics422Response(BaseModel):
3137
+ detail: Annotated[
3138
+ Optional[List[ForwardKinematicsValidationError]], Field(title='Detail')
3139
+ ] = None
3140
+
3141
+
3142
+ class ListTrajectoriesResponse(BaseModel):
3143
+ trajectories: Optional[List[str]] = None
3144
+ """
3145
+ Identifiers of trajectories which are currently cached.
3146
+ Use [addTrajectory](addTrajectory) to add a new trajectory. Adding trajectories is necessary to execute them.
3147
+ Trajectories are removed if the corresponding motion group or controller disconnects.
3148
+
3149
+ """
3150
+
3151
+
3152
+ class AddTrajectoryRequest(BaseModel):
3153
+ motion_group: str
3154
+ """
3155
+ Unique identifier of the motion group the trajectory is planned for.
3156
+ """
3157
+ trajectory: JointTrajectory
3158
+ """
3159
+ The trajectory consisting of a list of joint positions and
3160
+ an equal number of corresponding timestamps.
3161
+
3162
+ """
3163
+ tcp: Optional[str] = None
3164
+ """
3165
+ Unique identifier of the tool the trajectory is planned for.
3166
+ """
3167
+
3168
+
3169
+ class TcpRequiredError(BaseModel):
3170
+ """
3171
+ Requested motion group requires TCP to be defined.
3172
+ """
3173
+
3174
+ tcp_missing: Optional[Dict[str, Any]] = None
3175
+
3176
+
3177
+ class InconsistentTrajectorySize(BaseModel):
3178
+ joint_position_size: Optional[int] = None
3179
+ times_size: Optional[int] = None
3180
+ locations_size: Optional[int] = None
3181
+
3182
+
3183
+ class InconsistentTrajectorySizeError(BaseModel):
3184
+ """
3185
+ Indicates that the trajectory contains an inconsistent number of joint positions, times, or locations.
3186
+
3187
+ """
3188
+
3189
+ inconsistent_trajectory_size: Optional[InconsistentTrajectorySize] = None
3190
+
3191
+
3192
+ class JointLimitExceededError(BaseModel):
3193
+ joint_limit_exceeded: Optional[FeedbackJointLimitExceeded] = None
3194
+
3195
+
3196
+ class CollisionError(BaseModel):
3197
+ collision: Optional[FeedbackCollision] = None
3198
+
3199
+
3200
+ class TorqueExceeded(BaseModel):
3201
+ torque_value: Optional[float] = None
3202
+ """
3203
+ The torque value that was exceeded.
3204
+
3205
+ """
3206
+ torque_limit: Optional[float] = None
3207
+ """
3208
+ The value of the torque limit that was exceeded.
3209
+
3210
+ """
3211
+
3212
+
3213
+ class TorqueExceededError(BaseModel):
3214
+ torque_exceeded: Optional[TorqueExceeded] = None
3215
+
3216
+
3217
+ class InvalidDof(BaseModel):
3218
+ valid_dof: Optional[int] = None
3219
+ """
3220
+ The valid degrees of freedom for the motion group.
3221
+
3222
+ """
3223
+ joint_position: Optional[List[float]] = None
3224
+ """
3225
+ The joint position that is out of its limits.
3226
+ """
3227
+
3228
+
3229
+ class InvalidDofError(BaseModel):
3230
+ invalid_dof: Optional[InvalidDof] = None
3231
+
3232
+
3233
+ class NanValue(BaseModel):
3234
+ """
3235
+ Requested joint position contains NaN values.
3236
+ """
3237
+
3238
+ joint_position: Optional[List[float]] = None
3239
+ """
3240
+ The joint position that is out of its limits.
3241
+ """
3242
+
3243
+
3244
+ class NanValueError(BaseModel):
3245
+ nan_value: Optional[NanValue] = None
3246
+ """
3247
+ Requested joint position contains NaN values.
3248
+ """
3249
+
3250
+
3251
+ class AddTrajectoryError(BaseModel):
3252
+ message: Optional[str] = None
3253
+ location: Optional[Location] = None
3254
+ data: Optional[
3255
+ Union[
3256
+ TcpRequiredError,
3257
+ InconsistentTrajectorySizeError,
3258
+ JointLimitExceededError,
3259
+ CollisionError,
3260
+ TorqueExceededError,
3261
+ InvalidDofError,
3262
+ NanValueError,
3263
+ ]
3264
+ ] = None
3265
+
3266
+
3267
+ class AddTrajectoryResponse(BaseModel):
3268
+ """
3269
+ The response signals if the trajectory is valid or faulty resulting in an executable, partially executable or not executable state.
3270
+ - valid trajectory: response contains only the unique identifier for the trajectory
3271
+ - trajectory has error on path: response contains the unique identifier for the trajectory and information about the failure. It is executable up to the point of failure.
3272
+ - trajectory has error at start or invalid data: response contains only information about the failure.
3273
+
3274
+ To execute the trajectory use the unique identifier for calling [executeTrajectory](executeTrajectory).
3275
+ If you want to validate your trajectory before execution, execute it with a virtual motion group and check the state in the response stream of [executeTrajectory](executeTrajectory).
3276
+
3277
+ """
3278
+
3279
+ trajectory: Optional[str] = None
3280
+ """
3281
+ The unique identifier of the trajectory. Use this identifier to execute the trajectory with the [executeTrajectory](executeTrajectory) endpoint.
3282
+
3283
+ """
3284
+ error: Optional[AddTrajectoryError] = None
3285
+ """
3286
+ Always check this field first. If this field is present, the trajectory has an error and is only partially or not executable.
3287
+
3288
+ """
3289
+
3290
+
3291
+ class GetTrajectoryResponse(BaseModel):
3292
+ motion_group: str
3293
+ """
3294
+ Unique identifier of the motion group the trajectory is planned for.
3295
+ """
3296
+ trajectory: JointTrajectory
3297
+ """
3298
+ The trajectory consisting of a list of joint positions and
3299
+ an equal number of corresponding timestamps.
3300
+
3301
+ """
3302
+ tcp: str
3303
+ """
3304
+ Unique identifier of the tool the trajectory is planned for.
3305
+ """
3306
+
3307
+
3308
+ class TrajectoryId(BaseModel):
3309
+ message_type: Literal['TrajectoryId'] = 'TrajectoryId'
3310
+ """
3311
+ Type specifier for server, set automatically.
3312
+
3313
+ """
3314
+ id: str
3315
+ """
3316
+ The identifier of the trajectory which was returned by the [addTrajectory](addTrajectory) endpoint.
3317
+
3318
+ """
3319
+
3320
+
3321
+ class TrajectoryData(BaseModel):
3322
+ message_type: Literal['TrajectoryData'] = 'TrajectoryData'
3323
+ """
3324
+ Type specifier for server, set automatically.
3325
+
3326
+ """
3327
+ motion_group: Optional[str] = None
3328
+ """
3329
+ Identifier of the motion-group.
3330
+ """
3331
+ data: JointTrajectory
3332
+ """
3333
+ The trajectory consisting of a list of joint positions and
3334
+ an equal number of corresponding timestamps.
3335
+
3336
+ """
3337
+ tcp: Optional[str] = None
3338
+ """
3339
+ Unique identifier of the tool the trajectory is planned for.
3340
+ """
3341
+
3342
+
3343
+ class InitializeMovementRequest(BaseModel):
3344
+ """
3345
+ Sets up connection by locking a trajectory for execution. The robot controller mode is set to control mode.
3346
+ ATTENTION: This request has to be sent before any StartMovementRequest is sent.
3347
+ If initializing the movement was successful, no further movements can be initialized. To execute another trajectory, another connection has to be established.
3348
+
3349
+ """
3350
+
3351
+ message_type: Literal['InitializeMovementRequest'] = 'InitializeMovementRequest'
3352
+ """
3353
+ Type specifier for server, set automatically.
3354
+
3355
+ """
3356
+ trajectory: Annotated[
3357
+ Union[TrajectoryId, TrajectoryData], Field(discriminator='message_type')
3358
+ ]
3359
+ """
3360
+ The trajectory which should be executed and locked to the connection.
3361
+
3362
+ """
3363
+ initial_location: Optional[Location] = None
3364
+ response_coordinate_system: Optional[str] = None
3365
+ """
3366
+ Unique identifier addressing a coordinate system to which the responses are transformed.
3367
+ If not set, world coordinate system is used.
3368
+
3369
+ """
3370
+
3371
+
3372
+ class Direction(Enum):
3373
+ """
3374
+ The direction in which the trajectory is executed. Default: Forward.
3375
+
3376
+ """
3377
+
3378
+ DIRECTION_FORWARD = 'DIRECTION_FORWARD'
3379
+ DIRECTION_BACKWARD = 'DIRECTION_BACKWARD'
3380
+
3381
+
3382
+ class IOOrigin(Enum):
3383
+ """
3384
+ States the source of the input/output signal.
3385
+
3386
+ """
3387
+
3388
+ CONTROLLER = 'CONTROLLER'
3389
+ BUS_IO = 'BUS_IO'
3390
+
3391
+
3392
+ class SetIO(BaseModel):
3393
+ """
3394
+ Defines an input/output that should be set upon reaching a specified location on the trajectory.
3395
+ """
3396
+
3397
+ io: IOValue
3398
+ location: float
3399
+ """
3400
+ The location on the trajectory where the input/output should be set.
3401
+ """
3402
+ io_origin: IOOrigin
3403
+
3404
+
3405
+ class StartOnIO(BaseModel):
3406
+ """
3407
+ Defines an input/output that the motion should wait for to start the execution.
3408
+ """
3409
+
3410
+ io: IOValue
3411
+ comparator: Comparator
3412
+ """
3413
+ Comparator for the comparison of two values.
3414
+ Use the measured I/O as the base value (a) and the expected input/output value as the comparator (b): e.g., a > b.
3415
+
3416
+ """
3417
+ io_origin: IOOrigin
3418
+
3419
+
3420
+ class PauseOnIO(BaseModel):
3421
+ """
3422
+ Defines an input/output that the motion will be paused for. The motion will stop gracefully on path.
3423
+ """
3424
+
3425
+ io: IOValue
3426
+ comparator: Comparator
3427
+ """
3428
+ Comparator for the comparison of two values.
3429
+ Use the measured I/O as the base value (a) and the expected input/output value as the comparator (b): e.g., a > b.
3430
+
3431
+ """
3432
+ io_origin: IOOrigin
3433
+
3434
+
3435
+ class StartMovementRequest(BaseModel):
3436
+ """
3437
+ Moves the motion group along a trajectory, added via [planTrajectory](planTrajectory) or [planMotion](planMotion).
3438
+ Trajectories can be executed forwards or backwards("in reverse").
3439
+
3440
+ Pause the execution with PauseMovementRequest.
3441
+ Resume execution with StartMovementRequest.
3442
+
3443
+ Precondition: To start execution, the motion group must be located at the trajectory's start location specified in InitializeMovementRequest.
3444
+
3445
+ """
3446
+
3447
+ message_type: Literal['StartMovementRequest'] = 'StartMovementRequest'
3448
+ """
3449
+ Type specifier for server, set automatically.
3450
+
3451
+ """
3452
+ direction: Optional[Direction] = 'DIRECTION_FORWARD'
3453
+ target_location: Optional[Location] = None
3454
+ """
3455
+ The target location to which the motion group moves along the trajectory to.
3456
+ If `direction` and `target_location` are both specified, target location takes precedence.
3457
+ If neither is specified, the default is `DIRECTION_FORWARD`.
3458
+
3459
+ """
3460
+ set_outputs: Optional[List[SetIO]] = None
3461
+ """
3462
+ Attaches a list of output commands to the trajectory. The outputs are set to the specified values right after the specified location was reached.
3463
+ If the specified location is located before the start location (forward direction: value is smaller, backward direction: value is bigger), the output is not set.
3464
+
3465
+ """
3466
+ start_on_io: Optional[StartOnIO] = None
3467
+ """
3468
+ Defines an input/output that is listened to before the movement. Execution starts if the defined comparator evaluates to `true`.
3469
+
3470
+ """
3471
+ pause_on_io: Optional[PauseOnIO] = None
3472
+ """
3473
+ Defines an input/output that is listened to during the movement. Execution pauses if the defined comparator evaluates to `true`.
3474
+
3475
+ """
3476
+
3477
+
3478
+ class PauseMovementRequest(BaseModel):
3479
+ """
3480
+ Request to pause the movement execution. Movement pauses as soon as a [Standstill](Standstill.yaml) is sent back to the client.
3481
+ Resume movement with StartMovementRequest.
3482
+
3483
+ """
3484
+
3485
+ message_type: Literal['PauseMovementRequest'] = 'PauseMovementRequest'
3486
+ """
3487
+ Type specifier for server, set automatically.
3488
+
3489
+ """
3490
+
3491
+
3492
+ class PlaybackSpeedRequest(BaseModel):
3493
+ """
3494
+ Sets velocity for executed movements of the motion, in percent. Send after initializing the connection with InitializeMovementRequest.
3495
+
3496
+ """
3497
+
3498
+ message_type: Literal['PlaybackSpeedRequest'] = 'PlaybackSpeedRequest'
3499
+ """
3500
+ Type specifier for server, set automatically.
3501
+
3502
+ """
3503
+ playback_speed_in_percent: Annotated[int, Field(ge=0, le=100)]
3504
+ """
3505
+ Sets velocity for executed movements of the trajectory, in percent. 100% means that the motion group moves as
3506
+ fast as possible without violating any planning and motion group limits. Setting this value does not affect the overall shape of the velocity profile.
3507
+ The velocity profile of the trajectory is scaled down by the same factor. Therefore, this should only be used for teaching and trajectory
3508
+ evaluation purposes. To maintain a specific velocity, set the respective limits when planning the trajectory.
3509
+
3510
+ """
3511
+
3512
+
3513
+ class ExecuteTrajectoryRequest(RootModel):
3514
+ root: Annotated[
3515
+ Union[
3516
+ InitializeMovementRequest,
3517
+ StartMovementRequest,
3518
+ PauseMovementRequest,
3519
+ PlaybackSpeedRequest,
3520
+ ],
3521
+ Field(discriminator='message_type', title='ExecuteTrajectoryRequest'),
3522
+ ]
3523
+
3524
+
3525
+ class InitializeMovementResponse(BaseModel):
3526
+ """
3527
+ Response for InitializeMovementRequest message.
3528
+
3529
+ """
3530
+
3531
+ message: Optional[str] = None
3532
+ """
3533
+ Error message in case of invalid InitializeMovementRequest.
3534
+ """
3535
+ add_trajectory_error: Optional[AddTrajectoryError] = None
3536
+ """
3537
+ Error can occur if joint trajectory was added by [InitializeMovementRequest](InitializeMovementRequest) and the trajectory is invalid.
3538
+
3539
+ """
3540
+ kind: Literal['INITIALIZE_RECEIVED'] = 'INITIALIZE_RECEIVED'
3541
+
3542
+
3543
+ class StartMovementResponse(BaseModel):
3544
+ """
3545
+ Acknowledgment for StartMovementRequest message.
3546
+ ATTENTION: No confirmation that the movement was started. Confirmation that the StartMovementRequest was received and is processed.
3547
+ Fields `execute` and `standstill` of response of [streamMotionGroupState](streamMotionGroupState) signal start of movement execution.
3548
+
3549
+ """
3550
+
3551
+ message: Optional[str] = None
3552
+ """
3553
+ Error message in case of invalid StartMovementResquest.
3554
+ """
3555
+ kind: Literal['START_RECEIVED'] = 'START_RECEIVED'
3556
+
3557
+
3558
+ class PauseMovementResponse(BaseModel):
3559
+ """
3560
+ Acknowledgment for PauseMovementRequest message.
3561
+ ATTENTION: No confirmation that the movement was paused. Confirmation that the PauseMovementRequest was received and is processed.
3562
+ End of movement execution is signalled by [StillstandResponse](StillstandResponse).
3563
+
3564
+ """
3565
+
3566
+ message: Optional[str] = None
3567
+ """
3568
+ Error message in case of invalid PauseMovementResquest.
3569
+ """
3570
+ kind: Literal['PAUSE_RECEIVED'] = 'PAUSE_RECEIVED'
3571
+
3572
+
3573
+ class PlaybackSpeedResponse(BaseModel):
3574
+ """
3575
+ Acknowledgment for PlaybackSpeedRequest message.
3576
+
3577
+ """
3578
+
3579
+ message: Optional[str] = None
3580
+ """
3581
+ Error message in case of invalid PlaybackSpeedRequest.
3582
+ """
3583
+ kind: Literal['PLAYBACK_SPEED_RECEIVED'] = 'PLAYBACK_SPEED_RECEIVED'
3584
+
3585
+
3586
+ class MovementErrorResponse(BaseModel):
3587
+ """
3588
+ Error message in case an error occurs during movement execution.
3589
+
3590
+ """
3591
+
3592
+ message: str
3593
+ """
3594
+ Detailed error message describing the issue encountered during movement execution.
3595
+ """
3596
+ kind: Literal['MOTION_ERROR'] = 'MOTION_ERROR'
3597
+
3598
+
3599
+ class ExecuteTrajectoryResponse(RootModel):
3600
+ root: Annotated[
3601
+ Union[
3602
+ InitializeMovementResponse,
3603
+ StartMovementResponse,
3604
+ PauseMovementResponse,
3605
+ PlaybackSpeedResponse,
3606
+ MovementErrorResponse,
3607
+ ],
3608
+ Field(discriminator='kind', title='ExecuteTrajectoryResponse'),
3609
+ ]
3610
+
3611
+
3612
+ class InitializeJoggingRequest(BaseModel):
3613
+ """
3614
+ Send this message to start jogging a motion group.
3615
+ """
3616
+
3617
+ message_type: Literal['InitializeJoggingRequest'] = 'InitializeJoggingRequest'
3618
+ """
3619
+ Type specifier for server, set automatically.
3620
+
3621
+ """
3622
+ motion_group: str
3623
+ """
3624
+ Identifier of the motion group.
3625
+ """
3626
+ tcp: Optional[str] = None
3627
+ """
3628
+ Identifier of the tool. Required for robots (all limits, including TCP limits, are respected at all times regardless of the motion). Not required for external axes.
3629
+
3630
+ """
3631
+ response_coordinate_system: Optional[str] = None
3632
+ """
3633
+ Unique identifier addressing a coordinate system to which the responses are transformed.
3634
+ If not set, world coordinate system is used.
3635
+
3636
+ """
3637
+
3638
+
3639
+ class JointVelocityRequest(BaseModel):
3640
+ """
3641
+ Sets target joint velocities for jogging a motion group.
3642
+ """
3643
+
3644
+ message_type: Literal['JointVelocityRequest'] = 'JointVelocityRequest'
3645
+ """
3646
+ Type specifier for server, set automatically.
3647
+ """
3648
+ velocity: Joints
3649
+ """
3650
+ in [rad/s]
3651
+ """
3652
+
3653
+
3654
+ class TcpVelocityRequest(BaseModel):
3655
+ """
3656
+ Sets target TCP velocities for jogging a motion group.
3657
+ The motion group needs to have an inverse kinematic solver to be jogged by TCP velocities.
3658
+ Check `supports_inverse_kinematics` field in response of [listController](listController) for the motion group.
3659
+
3660
+ """
3661
+
3662
+ message_type: Literal['TcpVelocityRequest'] = 'TcpVelocityRequest'
3663
+ """
3664
+ Type specifier for server, set automatically.
3665
+
3666
+ """
3667
+ translation: Vector3d
3668
+ rotation: Vector3d
3669
+ use_tool_coordinate_system: Optional[bool] = False
3670
+ """
3671
+ If true, TCP velocities are interpreted in the tool coordinate system, specified by the TCP.
3672
+ If false, TCP velocities are interpreted in the world coordinate system.
3673
+
3674
+ """
3675
+
3676
+
3677
+ class PauseJoggingRequest(BaseModel):
3678
+ """
3679
+ Request to pause jogging. If successful, `execute` jogging state in [MotionGroupState](MotionGroupState.yaml) is set to `PAUSED_BY_USER`.
3680
+
3681
+ """
3682
+
3683
+ message_type: Literal['PauseJoggingRequest'] = 'PauseJoggingRequest'
3684
+ """
3685
+ Type specifier for server, set automatically.
3686
+
3687
+ """
3688
+
3689
+
3690
+ class ExecuteJoggingRequest(RootModel):
3691
+ root: Annotated[
3692
+ Union[
3693
+ InitializeJoggingRequest,
3694
+ JointVelocityRequest,
3695
+ TcpVelocityRequest,
3696
+ PauseJoggingRequest,
3697
+ ],
3698
+ Field(discriminator='message_type', title='ExecuteJoggingRequest'),
3699
+ ]
3700
+
3701
+
3702
+ class InitializeJoggingResponse(BaseModel):
3703
+ """
3704
+ Acknowledgment to an InitializeJoggingRequest.
3705
+
3706
+ """
3707
+
3708
+ message: Optional[str] = None
3709
+ """
3710
+ Error message in case of invalid InitializeJoggingRequest.
3711
+ """
3712
+ kind: Literal['INITIALIZE_RECEIVED'] = 'INITIALIZE_RECEIVED'
3713
+
3714
+
3715
+ class PauseJoggingResponse(BaseModel):
3716
+ """
3717
+ Acknowledgment to a PauseJoggingRequest.
3718
+
3719
+ """
3720
+
3721
+ message: Optional[str] = None
3722
+ """
3723
+ Error message in case of invalid PauseJoggingRequest.
3724
+ """
3725
+ kind: Literal['PAUSE_RECEIVED'] = 'PAUSE_RECEIVED'
3726
+
3727
+
3728
+ class TcpVelocityResponse(BaseModel):
3729
+ """
3730
+ Acknowledgment to a TcpVelocityRequest.
3731
+
3732
+ """
3733
+
3734
+ message: Optional[str] = None
3735
+ """
3736
+ Error message in case of invalid TcpVelocityRequest.
3737
+ """
3738
+ kind: Literal['TCP_VELOCITY_RECEIVED'] = 'TCP_VELOCITY_RECEIVED'
3739
+
3740
+
3741
+ class JointVelocityResponse(BaseModel):
3742
+ """
3743
+ Acknowledgment to a JointVelocityRequest.
3744
+
3745
+ """
3746
+
3747
+ message: Optional[str] = None
3748
+ """
3749
+ Error message in case of invalid JointVelocityRequest.
3750
+ """
3751
+ kind: Literal['JOINT_VELOCITY_RECEIVED'] = 'JOINT_VELOCITY_RECEIVED'
3752
+
3753
+
3754
+ class ExecuteJoggingResponse(RootModel):
3755
+ root: Annotated[
3756
+ Union[
3757
+ InitializeJoggingResponse,
3758
+ PauseJoggingResponse,
3759
+ TcpVelocityResponse,
3760
+ JointVelocityResponse,
3761
+ MovementErrorResponse,
3762
+ ],
3763
+ Field(discriminator='kind', title='ExecuteJoggingResponse'),
3764
+ ]
3765
+
3766
+
3767
+ class Program(BaseModel):
3768
+ """
3769
+ A program is a collection of instructions that are executed in the robot cell.
3770
+ """
3771
+
3772
+ program: Annotated[
3773
+ str,
3774
+ Field(
3775
+ examples=['my_program'],
3776
+ max_length=255,
3777
+ min_length=1,
3778
+ pattern='^[a-zA-Z0-9_-]+$',
3779
+ title='Unique program identifier',
3780
+ ),
3781
+ ]
3782
+ name: Annotated[Optional[str], Field(title='Program name')] = None
3783
+ description: Annotated[Optional[str], Field(title='Program description')] = None
3784
+ app: Annotated[str, Field(title='The app containing the program.')]
3785
+ input_schema: Annotated[
3786
+ Optional[Dict[str, Any]], Field(title='Program input json schema')
3787
+ ] = None
3788
+ preconditions: Annotated[
3789
+ Optional[Dict[str, Any]],
3790
+ Field(title='Preconditions before the program can be started'),
3791
+ ] = None
3792
+
3793
+
3794
+ class ProgramStartRequest(BaseModel):
3795
+ """
3796
+ The state of a program run.
3797
+ """
3798
+
3799
+ arguments: Dict[str, Any]
3800
+ """
3801
+ The arguments to pass to the program.
3802
+ """
3803
+
3804
+
3805
+ class ProgramRunState(Enum):
3806
+ """
3807
+ The state of a program run.
3808
+ """
3809
+
3810
+ PREPARING = 'PREPARING'
3811
+ RUNNING = 'RUNNING'
3812
+ COMPLETED = 'COMPLETED'
3813
+ FAILED = 'FAILED'
3814
+ STOPPED = 'STOPPED'
3815
+
3816
+
3817
+ class ProgramRun(BaseModel):
3818
+ """
3819
+ Holds the state of a program run.
3820
+ """
3821
+
3822
+ run: Annotated[str, Field(title='Run Id')]
3823
+ """
3824
+ Unique identifier of the program run
3825
+ """
3826
+ program: Annotated[str, Field(title='Program Id')]
3827
+ """
3828
+ Unique identifier of the program
3829
+ """
3830
+ app: Annotated[Optional[str], Field(title='App Id')] = None
3831
+ """
3832
+ Identifier of the app that produced the program run
3833
+ """
3834
+ state: Annotated[ProgramRunState, Field(title='State')]
3835
+ """
3836
+ State of the program run
3837
+ """
3838
+ logs: Annotated[Optional[str], Field(title='Logs')] = None
3839
+ """
3840
+ Logs of the program run
3841
+ """
3842
+ stdout: Annotated[Optional[str], Field(title='Stdout')] = None
3843
+ """
3844
+ Stdout of the program run
3845
+ """
3846
+ stderr: Annotated[Optional[str], Field(title='Stderr')] = None
3847
+ """
3848
+ Stderr of the program run
3849
+ """
3850
+ error: Annotated[Optional[str], Field(title='Error')] = None
3851
+ """
3852
+ Error message of the program run, if any
3853
+ """
3854
+ traceback: Annotated[Optional[str], Field(title='Traceback')] = None
3855
+ """
3856
+ Traceback of the program run, if any
3857
+ """
3858
+ start_time: Annotated[Optional[AwareDatetime], Field(title='Start Time')] = None
3859
+ """
3860
+ Start time of the program run in RFC3339 format
3861
+ """
3862
+ end_time: Annotated[Optional[AwareDatetime], Field(title='End Time')] = None
3863
+ """
3864
+ End time of the program run in RFC3339 format
3865
+ """
3866
+ input_data: Annotated[Optional[Dict[str, Any]], Field(title='Input Data')] = None
3867
+ """
3868
+ Input data of the program run
3869
+ """
3870
+
3871
+
3872
+ class ValidationError2(BaseModel):
3873
+ """
3874
+ A validation error of a program.
3875
+ """
3876
+
3877
+ loc: Annotated[List[int], Field(title='Location')]
3878
+ msg: Annotated[str, Field(title='Message')]
3879
+ type: Annotated[str, Field(title='Error Type')]
3880
+
3881
+
3882
+ class HTTPValidationError(BaseModel):
3883
+ detail: Annotated[Optional[List[ValidationError2]], Field(title='Detail')] = None
3884
+
3885
+
3886
+ class MotionGroupInfo(BaseModel):
3887
+ motion_group: str
3888
+ """
3889
+ The unique identifier of the motion group. Use it to refer to the motion group in other calls.
3890
+
3891
+ """
3892
+ name: str
3893
+ """
3894
+ The name of the motion group for display purposes.
3895
+
3896
+ """
3897
+ dof: Annotated[int, Field(ge=0, le=2147483647)]
3898
+ """
3899
+ The number of joints aka degrees of freedom in the motion group.
3900
+
3901
+ """
3902
+
3903
+
3904
+ class MotionGroupInfos(RootModel):
3905
+ root: List[MotionGroupInfo]
3906
+
3907
+ def __getitem__(self, index: int) -> MotionGroupInfo:
3908
+ """
3909
+ Make list RootModel directly indexable.
3910
+ """
3911
+ return self.root[index]
3912
+
3913
+ def __setitem__(self, index: int, value: MotionGroupInfo) -> None:
3914
+ """
3915
+ Make list RootModel directly indexable.
3916
+ """
3917
+ self.root[index] = value
3918
+
3919
+ def __len__(self) -> int:
3920
+ """
3921
+ Make list RootModel directly usable with len().
3922
+ """
3923
+ return len(self.root)
3924
+
3925
+ def __iter__(self):
3926
+ """
3927
+ Make list RootModel directly iterable.
3928
+ """
3929
+ return iter(self.root)
3930
+
3931
+
3932
+ class MotionGroupJoints(BaseModel):
3933
+ """
3934
+ Ensure to provide one value for each joint. See [getMotionGroups](getMotionGroups) for the number of joints.
3935
+ Everything but positions is optional.
3936
+ """
3937
+
3938
+ positions: List[float]
3939
+ """
3940
+ The joint positions of the motion group.
3941
+
3942
+ """
3943
+ velocities: Optional[List[float]] = None
3944
+ """
3945
+ The joint velocities of the motion group.
3946
+
3947
+ """
3948
+ accelerations: Optional[List[float]] = None
3949
+ """
3950
+ The joint accelerations of the motion group.
3951
+
3952
+ """
3953
+ torques: Optional[List[float]] = None
3954
+ """
3955
+ The joint torques of the motion group.
3956
+
3957
+ """
3958
+
3959
+
3960
+ class RobotTcpData(BaseModel):
3961
+ name: Optional[str] = None
3962
+ """
3963
+ A readable and changeable name for frontend visualization.
3964
+ """
3965
+ position: Vector3d
3966
+ orientation: Optional[Orientation] = None
3967
+ orientation_type: Optional[OrientationType] = 'ROTATION_VECTOR'
3968
+
3969
+
3970
+ class RobotTcp(RobotTcpData):
3971
+ id: str
3972
+ """
3973
+ Identifier of this tcp.
3974
+ """
3975
+
3976
+
3977
+ class RobotTcps(RootModel):
3978
+ root: Annotated[
3979
+ List[RobotTcp],
3980
+ Field(
3981
+ examples=[
3982
+ [
3983
+ {
3984
+ 'id': 'BASE/schmalz_gripper',
3985
+ 'name': 'BASE/schmalz_gripper',
3986
+ 'position': [0, 0, 110],
3987
+ 'orientation': [0, 0, 0, 1],
3988
+ 'orientation_type': 'QUATERNION',
3989
+ },
3990
+ {
3991
+ 'id': 'WB_EGM/egm_tool',
3992
+ 'name': 'WB_EGM/egm_tool',
3993
+ 'position': [400, 250, 0],
3994
+ 'orientation': [1.57079632679, 0, 3.14159265359],
3995
+ 'orientation_type': 'ROTATION_VECTOR',
3996
+ },
3997
+ ]
3998
+ ]
3999
+ ),
4000
+ ]
4001
+
4002
+ def __getitem__(self, index: int) -> RobotTcp:
4003
+ """
4004
+ Make list RootModel directly indexable.
4005
+ """
4006
+ return self.root[index]
4007
+
4008
+ def __setitem__(self, index: int, value: RobotTcp) -> None:
4009
+ """
4010
+ Make list RootModel directly indexable.
4011
+ """
4012
+ self.root[index] = value
4013
+
4014
+ def __len__(self) -> int:
4015
+ """
4016
+ Make list RootModel directly usable with len().
4017
+ """
4018
+ return len(self.root)
4019
+
4020
+ def __iter__(self):
4021
+ """
4022
+ Make list RootModel directly iterable.
4023
+ """
4024
+ return iter(self.root)
4025
+
4026
+
4027
+ class Flag(BaseModel):
4028
+ active: bool
4029
+
4030
+
4031
+ class OpMode(BaseModel):
4032
+ """
4033
+ Controllers have two operating modes: AUTOMATIC and MANUAL.
4034
+ MANUAL mode is mainly used for teaching a robot application.
4035
+ To ensure safe operation the velocity of the robot is limited to 250 mm/s.
4036
+ Running the finished application is done in AUTOMATIC operating mode without the limited velocity of the MANUAL mode.
4037
+
4038
+ """
4039
+
4040
+ mode: OperationMode
4041
+
4042
+
4043
+ class CycleTime(BaseModel):
4044
+ cycle_time_ms: Annotated[int, Field(ge=0, le=4294967295)]
4045
+ """
4046
+ Cycle time of controller communication in [ms].
4047
+ """
4048
+
4049
+
4050
+ class Behavior(Enum):
4051
+ """
4052
+ ## BEHAVIOR_AUTOMATIC
4053
+ This is the default behavior.
4054
+ The motion groups of the controller take commanded joint configuration as actual joint state.
4055
+ Configures the compliance of the virtual robot with the normal ControllerState cycle time. If set, the virtual robot will act like a physical one, e.g., with a cycle time of 8ms to respond to a new joint state command.
4056
+ ## BEHAVIOR_AUTOMATIC_NOT_COMPLY_WITH_CYCLETIME
4057
+ Configures the compliance of the virtual robot with the normal ControllerState cycle time. If set, the robot will respond as fast as possible, limited only by software execution speed. Because of that the execution of a movement requires less time than with BEHAVIOR_AUTOMATIC.
4058
+ ## BEHAVIOR_EXTERNAL_SOURCE
4059
+ The external client is the only source of actual joint state changes.
4060
+ This mode is used to enable third party software indicating the current joint state via [externalJointsStream](externalJointsStream).
4061
+
4062
+ """
4063
+
4064
+ BEHAVIOR_AUTOMATIC = 'BEHAVIOR_AUTOMATIC'
4065
+ BEHAVIOR_AUTOMATIC_NOT_COMPLY_WITH_CYCLETIME = (
4066
+ 'BEHAVIOR_AUTOMATIC_NOT_COMPLY_WITH_CYCLETIME'
4067
+ )
4068
+ BEHAVIOR_EXTERNAL_SOURCE = 'BEHAVIOR_EXTERNAL_SOURCE'
4069
+
4070
+
4071
+ class ExternalJointStreamDatapoint(BaseModel):
4072
+ """
4073
+ A datapoint inside external joint stream.
4074
+ """
4075
+
4076
+ motion_group: str
4077
+ """
4078
+ The unique identifier of the motion group.
4079
+
4080
+ """
4081
+ value: MotionGroupJoints
4082
+
4083
+
4084
+ class ExternalJointStreamDatapoints(RootModel):
4085
+ root: List[ExternalJointStreamDatapoint]
4086
+
4087
+ def __getitem__(self, index: int) -> ExternalJointStreamDatapoint:
4088
+ """
4089
+ Make list RootModel directly indexable.
4090
+ """
4091
+ return self.root[index]
4092
+
4093
+ def __setitem__(self, index: int, value: ExternalJointStreamDatapoint) -> None:
4094
+ """
4095
+ Make list RootModel directly indexable.
4096
+ """
4097
+ self.root[index] = value
4098
+
4099
+ def __len__(self) -> int:
4100
+ """
4101
+ Make list RootModel directly usable with len().
4102
+ """
4103
+ return len(self.root)
4104
+
4105
+ def __iter__(self):
4106
+ """
4107
+ Make list RootModel directly iterable.
4108
+ """
4109
+ return iter(self.root)
4110
+
4111
+
4112
+ class ExternalJointStreamRequest(BaseModel):
4113
+ states: ExternalJointStreamDatapoints
4114
+
4115
+
4116
+ class Key(RootModel):
4117
+ root: Annotated[str, Field(title='Key')]
4118
+ """
4119
+ Unique identifier describing to adress an object.
4120
+
4121
+ Special characters, such as `;`, `/`, `?`, `:`, `@`, `=` and `&`, have to be URL encoded.
4122
+
4123
+ """
4124
+
4125
+
4126
+ class MetadataObject(RootModel):
4127
+ """
4128
+ A metadata object.
4129
+ """
4130
+
4131
+ root: Dict[str, str]
4132
+
4133
+
4134
+ class BinaryObject(RootModel):
4135
+ root: Annotated[bytes, Field(title='BinaryObject')]
4136
+ """
4137
+ Any value encoded as a binary string.
4138
+ """
4139
+
4140
+
4141
+ class BusIODescription(BaseModel):
4142
+ io: str
4143
+ """
4144
+ Unique identifier of the input/output.
4145
+
4146
+ """
4147
+ name: str
4148
+ """
4149
+ Name of the input/output. Customize it using the respective BUS service, e.g., [addProfinetIO](addProfinetIO) for PROFINET service.
4150
+
4151
+ """
4152
+ direction: IODirection
4153
+ value_type: IOValueType
4154
+ unit: Optional[UnitType] = None
4155
+ min: Optional[IOBoundary] = None
4156
+ max: Optional[IOBoundary] = None
4157
+
4158
+
4159
+ class ListBusIODescriptionsResponse(RootModel):
4160
+ root: List[BusIODescription]
4161
+
4162
+ def __getitem__(self, index: int) -> BusIODescription:
4163
+ """
4164
+ Make list RootModel directly indexable.
4165
+ """
4166
+ return self.root[index]
4167
+
4168
+ def __setitem__(self, index: int, value: BusIODescription) -> None:
4169
+ """
4170
+ Make list RootModel directly indexable.
4171
+ """
4172
+ self.root[index] = value
4173
+
4174
+ def __len__(self) -> int:
4175
+ """
4176
+ Make list RootModel directly usable with len().
4177
+ """
4178
+ return len(self.root)
4179
+
4180
+ def __iter__(self):
4181
+ """
4182
+ Make list RootModel directly iterable.
4183
+ """
4184
+ return iter(self.root)
4185
+
4186
+
4187
+ class BusIOsStateEnum(Enum):
4188
+ """
4189
+ Current state of the BUS input/output service.
4190
+
4191
+ """
4192
+
4193
+ BUS_IOS_STATE_UNKNOWN = 'BUS_IOS_STATE_UNKNOWN'
4194
+ BUS_IOS_STATE_INITIALIZING = 'BUS_IOS_STATE_INITIALIZING'
4195
+ BUS_IOS_STATE_CONNECTED = 'BUS_IOS_STATE_CONNECTED'
4196
+ BUS_IOS_STATE_DISCONNECTED = 'BUS_IOS_STATE_DISCONNECTED'
4197
+
4198
+
4199
+ class BusIOsState(BaseModel):
4200
+ state: BusIOsStateEnum
4201
+ message: Optional[str] = None
4202
+ """
4203
+ A message providing additional information on the input/output service, e.g., BUS service status, encountered errors.
4204
+ May be empty if no additional information is available.
4205
+
4206
+ """
4207
+
4208
+
4209
+ class ProfinetSubSlotDescription(BaseModel):
4210
+ number: Annotated[int, Field(ge=0, le=2147483647)]
4211
+ """
4212
+ The number/index of the PROFINET subslot.
4213
+
4214
+ """
4215
+ input_length: Annotated[int, Field(ge=0, le=2147483647)]
4216
+ """
4217
+ The amount of bytes allocated for the subslot in the input process image buffer.
4218
+
4219
+ """
4220
+ output_length: Annotated[int, Field(ge=0, le=2147483647)]
4221
+ """
4222
+ The amount of bytes allocated for the subslot in the output process image buffer.
4223
+
4224
+ """
4225
+
4226
+
4227
+ class ProfinetSlotDescription(BaseModel):
4228
+ """
4229
+ An array of PROFINET slots.
4230
+
4231
+ PROFINET models each device’s input/output hardware as a hierarchy of slots (modules) and subslots (submodules).
4232
+ A slot can represent a physical or virtual input/output card and each subslot one of its individual channels or functions.
4233
+ Every slot and subslot has unique identifiers that the controller uses to map cyclic input/output data and parameter records to its process image.
4234
+ This slot/subslot separation enables e.g., addressing each input/output stream when establishing input/output application relations (I/O-AR).
4235
+
4236
+ """
4237
+
4238
+ number: Annotated[int, Field(ge=0, le=2147483647)]
4239
+ """
4240
+ The number/index of the PROFINET slot. Per default, slot 0 is reserved for the device access point (DAP). Slots that are part of the cyclic input/output data exchange start at number 1.
4241
+
4242
+ """
4243
+ api: Annotated[int, Field(ge=0, le=2147483647)]
4244
+ """
4245
+ The application process identifier (API) number of the PROFINET input.
4246
+ The API identifies the application relation (AR) that is using the slot.
4247
+
4248
+ """
4249
+ subslots: List[ProfinetSubSlotDescription]
4250
+ """
4251
+ An array of PROFINET subslots.
4252
+
4253
+ """
4254
+
4255
+
4256
+ class ProfinetDescription(BaseModel):
4257
+ vendor_id: str
4258
+ """
4259
+ The vendor identifier of the PROFINET device, identifying the manufacturer.
4260
+
4261
+ """
4262
+ device_id: str
4263
+ """
4264
+ The device identifier of the PROFINET device, identifying the specific device within the vendor's range.
4265
+
4266
+ """
4267
+ slots: Optional[List[ProfinetSlotDescription]] = None
4268
+ device_name: Annotated[Optional[str], Field(examples=['pnDevice'])] = None
4269
+ """
4270
+ Name of Station (NoS) of the PROFINET device. The NoS is used in combination with IPv4 record to identify your device in the PROFINET network.
4271
+ The `device_name` will be used as NoS if no REMA XML file is already present on your NOVA instance and no `rema_xml_content` is provided.
4272
+
4273
+ """
4274
+ ip_config: Optional[BusIOProfinetIpConfig] = None
4275
+
4276
+
4277
+ class ProfinetIOTypeEnum(Enum):
4278
+ """
4279
+ Value type of the PROFINET input/output variable. Is used to interpret the corresponding bits correctly.
4280
+
4281
+ """
4282
+
4283
+ PROFINET_IO_TYPE_UNKNOWN = 'PROFINET_IO_TYPE_UNKNOWN'
4284
+ PROFINET_IO_TYPE_BOOL = 'PROFINET_IO_TYPE_BOOL'
4285
+ PROFINET_IO_TYPE_USINT = 'PROFINET_IO_TYPE_USINT'
4286
+ PROFINET_IO_TYPE_SINT = 'PROFINET_IO_TYPE_SINT'
4287
+ PROFINET_IO_TYPE_UINT = 'PROFINET_IO_TYPE_UINT'
4288
+ PROFINET_IO_TYPE_INT = 'PROFINET_IO_TYPE_INT'
4289
+ PROFINET_IO_TYPE_UDINT = 'PROFINET_IO_TYPE_UDINT'
4290
+ PROFINET_IO_TYPE_DINT = 'PROFINET_IO_TYPE_DINT'
4291
+ PROFINET_IO_TYPE_REAL = 'PROFINET_IO_TYPE_REAL'
4292
+ PROFINET_IO_TYPE_LREAL = 'PROFINET_IO_TYPE_LREAL'
4293
+
4294
+
4295
+ class ProfinetIODirection(Enum):
4296
+ """
4297
+ The direction of the input/output variable, indicating whether it is an input or output for the PROFINET device, e.g., NOVA's PROFINET service.
4298
+ """
4299
+
4300
+ PROFINET_IO_DIRECTION_INPUT = 'PROFINET_IO_DIRECTION_INPUT'
4301
+ PROFINET_IO_DIRECTION_OUTPUT = 'PROFINET_IO_DIRECTION_OUTPUT'
4302
+ PROFINET_IO_DIRECTION_INOUT = 'PROFINET_IO_DIRECTION_INOUT'
4303
+
4304
+
4305
+ class ProfinetIOData(BaseModel):
4306
+ description: str
4307
+ """
4308
+ Descriptive name or note for the input/output variable.
4309
+
4310
+ """
4311
+ type: ProfinetIOTypeEnum
4312
+ direction: ProfinetIODirection
4313
+ """
4314
+ The direction of the input/output variable, indicating whether it is an input or output for the PROFINET device, e.g., NOVA's PROFINET service.
4315
+
4316
+ """
4317
+ byte_address: Annotated[int, Field(ge=0, le=65535)]
4318
+ """
4319
+ The byte address of the input/output variable in the PROFINET device, e.g., NOVA's PROFINET service.
4320
+ The byte address is used to locate the specific input/output variable within the device's memory or data structure.
4321
+
4322
+ """
4323
+ bit_address: Annotated[Optional[int], Field(ge=0, le=7)] = None
4324
+ """
4325
+ The bit address of the input/output variable within the byte or word address.
4326
+ The bit address is used to specify the exact bit within the byte or word that corresponds to the input/output variable.
4327
+
4328
+ """
4329
+
4330
+
4331
+ class ProfinetIO(ProfinetIOData):
4332
+ io: str
4333
+ """
4334
+ The unique identifier for the input/output value.
4335
+ This identifier is used to reference the specific input/output variable in the PROFINET device, e.g., NOVA's PROFINET service.
4336
+
4337
+ """
4338
+
4339
+
4340
+ class ProfinetIOs(RootModel):
4341
+ """
4342
+ Array of PROFINET input/output variable configurations.
4343
+ """
4344
+
4345
+ root: List[ProfinetIO]
4346
+ """
4347
+ Array of PROFINET input/output variable configurations.
4348
+ """
4349
+
4350
+ def __getitem__(self, index: int) -> ProfinetIO:
4351
+ """
4352
+ Make list RootModel directly indexable.
4353
+ """
4354
+ return self.root[index]
4355
+
4356
+ def __setitem__(self, index: int, value: ProfinetIO) -> None:
4357
+ """
4358
+ Make list RootModel directly indexable.
4359
+ """
4360
+ self.root[index] = value
4361
+
4362
+ def __len__(self) -> int:
4363
+ """
4364
+ Make list RootModel directly usable with len().
4365
+ """
4366
+ return len(self.root)
4367
+
4368
+ def __iter__(self):
4369
+ """
4370
+ Make list RootModel directly iterable.
4371
+ """
4372
+ return iter(self.root)
4373
+
4374
+
4375
+ class ProfinetInputOutputConfig(BaseModel):
4376
+ config: Annotated[
4377
+ str,
4378
+ Field(
4379
+ examples=[
4380
+ '<Tagtable name=\'Standard variable table\'>\\n\n <Tag type="Bool" hmiVisible="True" hmiWriteable="True" hmiAccessible="True" retain="False" remark="" addr="%I100.0">bLightRed</Tag>\\n\n <Tag type="Int" hmiVisible="True" hmiWriteable="True" hmiAccessible="True" retain="False" remark="" addr="%QW800">nCounter</Tag>\\n\n</Tagtable>\n'
4381
+ ]
4382
+ ),
4383
+ ]
4384
+ """
4385
+ Content of the input/output variable configuration XML file.
4386
+ The XML File has to be embedded as a string by escaping quotes, line breaks and so forth.
4387
+
4388
+ """
4389
+ input_offset: Annotated[int, Field(examples=[100], ge=0, le=2147483647)]
4390
+ """
4391
+ Offset in bytes for the address of the input (perspective of the controller) variables. The offset will be subtracted from to the byte addresses of the sent XML content.
4392
+ """
4393
+ output_offset: Annotated[int, Field(examples=[800], ge=0, le=2147483647)]
4394
+ """
4395
+ Offset in bytes for the address of the output (perspective of the controller) variables. The offset will be subtracted from to the byte addresses of the sent XML content.
4396
+ """
4397
+
4398
+
4399
+ class ModbusIOTypeEnum(Enum):
4400
+ """
4401
+ Value type of the MODBUS input/output variable. Used to interpret the corresponding bits correctly.
4402
+
4403
+ """
4404
+
4405
+ MODBUS_IO_TYPE_UNKNOWN = 'MODBUS_IO_TYPE_UNKNOWN'
4406
+ MODBUS_IO_TYPE_BOOL = 'MODBUS_IO_TYPE_BOOL'
4407
+ MODBUS_IO_TYPE_UINT16 = 'MODBUS_IO_TYPE_UINT16'
4408
+ MODBUS_IO_TYPE_FLOAT32 = 'MODBUS_IO_TYPE_FLOAT32'
4409
+
4410
+
4411
+ class ModbusIOByteOrder(Enum):
4412
+ """
4413
+ Byte order of the MODBUS input/output variable. Used to interpret the corresponding bits correctly.
4414
+
4415
+ """
4416
+
4417
+ MODBUS_IO_BYTE_ORDER_UNKNOWN = 'MODBUS_IO_BYTE_ORDER_UNKNOWN'
4418
+ MODBUS_IO_BYTE_ORDER_ABCD = 'MODBUS_IO_BYTE_ORDER_ABCD'
4419
+ MODBUS_IO_BYTE_ORDER_BADC = 'MODBUS_IO_BYTE_ORDER_BADC'
4420
+ MODBUS_IO_BYTE_ORDER_CDAB = 'MODBUS_IO_BYTE_ORDER_CDAB'
4421
+ MODBUS_IO_BYTE_ORDER_DCBA = 'MODBUS_IO_BYTE_ORDER_DCBA'
4422
+
4423
+
4424
+ class ModbusIOArea(Enum):
4425
+ """
4426
+ Area of the MODBUS input/output variable. Is used to interpret the corresponding bits correctly.
4427
+
4428
+ """
4429
+
4430
+ MODBUS_IO_AREA_UNKNOWN = 'MODBUS_IO_AREA_UNKNOWN'
4431
+ MODBUS_IO_AREA_COILS = 'MODBUS_IO_AREA_COILS'
4432
+ MODBUS_IO_AREA_DISCRETE_INPUTS = 'MODBUS_IO_AREA_DISCRETE_INPUTS'
4433
+ MODBUS_IO_AREA_HOLDING_REGISTERS = 'MODBUS_IO_AREA_HOLDING_REGISTERS'
4434
+ MODBUS_IO_AREA_INPUT_REGISTERS = 'MODBUS_IO_AREA_INPUT_REGISTERS'
4435
+
4436
+
4437
+ class ModbusIOData(BaseModel):
4438
+ description: str
4439
+ """
4440
+ Descriptive name or note for the input/output variable.
4441
+
4442
+ """
4443
+ address: Annotated[int, Field(ge=0, le=65535)]
4444
+ """
4445
+ The byte address of the input/output variable in the MODBUS device, e.g., NOVA's MODBUS service.
4446
+ Used to locate the input/output variable within the device's memory or data structure.
4447
+
4448
+ """
4449
+ type: ModbusIOTypeEnum
4450
+ byte_order: ModbusIOByteOrder
4451
+ """
4452
+ The byte sequence of the input/output variable, indicating the order of bytes in memory for the MODBUS device, e.g., NOVA's MODBUS service.
4453
+
4454
+ """
4455
+ area: ModbusIOArea
4456
+ """
4457
+ The area of the input/output variable, indicating the memory region it belongs to for the MODBUS device, e.g., NOVA's MODBUS service.
4458
+
4459
+ """
4460
+
4461
+
4462
+ class ModbusIO(ModbusIOData):
4463
+ io: str
4464
+ """
4465
+ The unique identifier for the input/output value.
4466
+ Used to reference the input/output variable in the MODBUS device, e.g., NOVA's MODBUS service.
4467
+
4468
+ """
4469
+
4470
+
4471
+ class ModbusIOs(RootModel):
4472
+ """
4473
+ Array of MODBUS input/output variable configurations.
4474
+ """
4475
+
4476
+ root: List[ModbusIO]
4477
+ """
4478
+ Array of MODBUS input/output variable configurations.
4479
+ """
4480
+
4481
+ def __getitem__(self, index: int) -> ModbusIO:
4482
+ """
4483
+ Make list RootModel directly indexable.
4484
+ """
4485
+ return self.root[index]
4486
+
4487
+ def __setitem__(self, index: int, value: ModbusIO) -> None:
4488
+ """
4489
+ Make list RootModel directly indexable.
4490
+ """
4491
+ self.root[index] = value
4492
+
4493
+ def __len__(self) -> int:
4494
+ """
4495
+ Make list RootModel directly usable with len().
4496
+ """
4497
+ return len(self.root)
4498
+
4499
+ def __iter__(self):
4500
+ """
4501
+ Make list RootModel directly iterable.
4502
+ """
4503
+ return iter(self.root)
4504
+
4505
+
4506
+ class ApiVersion(BaseModel):
4507
+ version: str
4508
+ """
4509
+ The version of the API.
4510
+ """
4511
+
4512
+
4513
+ class ConfigurationResource(BaseModel):
4514
+ """
4515
+ Configuration resource object.
4516
+ """
4517
+
4518
+ id: ConfigurationResourceId
4519
+ name: str
4520
+ """
4521
+ Human-readable name of the configuration resource.
4522
+ """
4523
+ children: Optional[ConfigurationResourceArray] = None
4524
+
4525
+
4526
+ class ConfigurationResourceArray(RootModel):
4527
+ """
4528
+ Array of configuration resources.
4529
+ """
4530
+
4531
+ root: List[ConfigurationResource]
4532
+ """
4533
+ Array of configuration resources.
4534
+ """
4535
+
4536
+ def __getitem__(self, index: int) -> ConfigurationResource:
4537
+ """
4538
+ Make list RootModel directly indexable.
4539
+ """
4540
+ return self.root[index]
4541
+
4542
+ def __setitem__(self, index: int, value: ConfigurationResource) -> None:
4543
+ """
4544
+ Make list RootModel directly indexable.
4545
+ """
4546
+ self.root[index] = value
4547
+
4548
+ def __len__(self) -> int:
4549
+ """
4550
+ Make list RootModel directly usable with len().
4551
+ """
4552
+ return len(self.root)
4553
+
4554
+ def __iter__(self):
4555
+ """
4556
+ Make list RootModel directly iterable.
4557
+ """
4558
+ return iter(self.root)
4559
+
4560
+
4561
+ ConfigurationResource.model_rebuild()