wandelbots_api_client 26.6.0.dev43__py3-none-any.whl → 26.6.0.dev45__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.
- wandelbots_api_client/__init__.py +0 -48
- wandelbots_api_client/authorization.py +201 -206
- wandelbots_api_client/v2/__init__.py +1 -1
- wandelbots_api_client/v2/api_client.py +1 -1
- wandelbots_api_client/v2/configuration.py +1 -1
- wandelbots_api_client/v2_pydantic/__init__.py +1 -1
- wandelbots_api_client/v2_pydantic/api_client.py +1 -1
- wandelbots_api_client/v2_pydantic/configuration.py +1 -1
- wandelbots_api_client/v2_pydantic/models/__init__.py +2 -2
- wandelbots_api_client/v2_pydantic/models/models.py +1 -1
- wandelbots_api_client-26.6.0.dev45.dist-info/METADATA +52 -0
- {wandelbots_api_client-26.6.0.dev43.dist-info → wandelbots_api_client-26.6.0.dev45.dist-info}/RECORD +13 -340
- wandelbots_api_client/api/__init__.py +0 -63
- wandelbots_api_client/api/application_api.py +0 -1514
- wandelbots_api_client/api/cell_api.py +0 -1424
- wandelbots_api_client/api/controller_api.py +0 -2951
- wandelbots_api_client/api/controller_ios_api.py +0 -1205
- wandelbots_api_client/api/coordinate_systems_api.py +0 -1267
- wandelbots_api_client/api/device_configuration_api.py +0 -1193
- wandelbots_api_client/api/library_program_api.py +0 -1326
- wandelbots_api_client/api/library_program_metadata_api.py +0 -1090
- wandelbots_api_client/api/library_recipe_api.py +0 -1351
- wandelbots_api_client/api/library_recipe_metadata_api.py +0 -1050
- wandelbots_api_client/api/license_api.py +0 -865
- wandelbots_api_client/api/motion_api.py +0 -3596
- wandelbots_api_client/api/motion_group_api.py +0 -956
- wandelbots_api_client/api/motion_group_infos_api.py +0 -2611
- wandelbots_api_client/api/motion_group_jogging_api.py +0 -685
- wandelbots_api_client/api/motion_group_kinematic_api.py +0 -1055
- wandelbots_api_client/api/program_api.py +0 -1987
- wandelbots_api_client/api/program_operator_api.py +0 -1881
- wandelbots_api_client/api/program_values_api.py +0 -1444
- wandelbots_api_client/api/store_collision_components_api.py +0 -3074
- wandelbots_api_client/api/store_collision_scenes_api.py +0 -951
- wandelbots_api_client/api/store_object_api.py +0 -1387
- wandelbots_api_client/api/system_api.py +0 -1075
- wandelbots_api_client/api/version_api.py +0 -237
- wandelbots_api_client/api/virtual_robot_api.py +0 -1583
- wandelbots_api_client/api/virtual_robot_behavior_api.py +0 -649
- wandelbots_api_client/api/virtual_robot_mode_api.py +0 -1467
- wandelbots_api_client/api/virtual_robot_setup_api.py +0 -2116
- wandelbots_api_client/api_client.py +0 -688
- wandelbots_api_client/api_response.py +0 -20
- wandelbots_api_client/configuration.py +0 -579
- wandelbots_api_client/exceptions.py +0 -216
- wandelbots_api_client/models/__init__.py +0 -316
- wandelbots_api_client/models/abb_controller.py +0 -112
- wandelbots_api_client/models/abb_controller_egm_server.py +0 -87
- wandelbots_api_client/models/activate_license_request.py +0 -86
- wandelbots_api_client/models/add_request.py +0 -95
- wandelbots_api_client/models/all_joint_positions_request.py +0 -96
- wandelbots_api_client/models/all_joint_positions_response.py +0 -109
- wandelbots_api_client/models/api_version.py +0 -86
- wandelbots_api_client/models/app.py +0 -148
- wandelbots_api_client/models/array_input.py +0 -114
- wandelbots_api_client/models/array_output.py +0 -116
- wandelbots_api_client/models/behavior.py +0 -35
- wandelbots_api_client/models/blending_auto.py +0 -99
- wandelbots_api_client/models/blending_position.py +0 -97
- wandelbots_api_client/models/box.py +0 -98
- wandelbots_api_client/models/box2.py +0 -112
- wandelbots_api_client/models/box3.py +0 -112
- wandelbots_api_client/models/capsule.py +0 -87
- wandelbots_api_client/models/capsule2.py +0 -97
- wandelbots_api_client/models/capsule3.py +0 -101
- wandelbots_api_client/models/capture.py +0 -86
- wandelbots_api_client/models/cell.py +0 -142
- wandelbots_api_client/models/circle.py +0 -99
- wandelbots_api_client/models/code_with_arguments.py +0 -108
- wandelbots_api_client/models/collection_value.py +0 -322
- wandelbots_api_client/models/collider.py +0 -105
- wandelbots_api_client/models/collider_input.py +0 -105
- wandelbots_api_client/models/collider_output.py +0 -105
- wandelbots_api_client/models/collider_output_shape.py +0 -242
- wandelbots_api_client/models/collider_shape.py +0 -280
- wandelbots_api_client/models/collision.py +0 -110
- wandelbots_api_client/models/collision_contact.py +0 -92
- wandelbots_api_client/models/collision_motion_group.py +0 -124
- wandelbots_api_client/models/collision_motion_group_assembly.py +0 -128
- wandelbots_api_client/models/collision_robot_configuration_input.py +0 -121
- wandelbots_api_client/models/collision_robot_configuration_output.py +0 -121
- wandelbots_api_client/models/collision_scene.py +0 -117
- wandelbots_api_client/models/collision_scene_assembly.py +0 -133
- wandelbots_api_client/models/command.py +0 -140
- wandelbots_api_client/models/command_settings.py +0 -104
- wandelbots_api_client/models/comparator.py +0 -39
- wandelbots_api_client/models/compound.py +0 -114
- wandelbots_api_client/models/container_environment_inner.py +0 -87
- wandelbots_api_client/models/container_image.py +0 -122
- wandelbots_api_client/models/container_image_secrets_inner.py +0 -86
- wandelbots_api_client/models/container_resources.py +0 -89
- wandelbots_api_client/models/container_storage.py +0 -97
- wandelbots_api_client/models/controller_capabilities.py +0 -89
- wandelbots_api_client/models/controller_instance.py +0 -148
- wandelbots_api_client/models/controller_instance_list.py +0 -109
- wandelbots_api_client/models/convex_hull.py +0 -109
- wandelbots_api_client/models/convex_hull2.py +0 -97
- wandelbots_api_client/models/convex_hull3.py +0 -97
- wandelbots_api_client/models/coordinate_system.py +0 -108
- wandelbots_api_client/models/coordinate_systems.py +0 -109
- wandelbots_api_client/models/create_program_run200_response.py +0 -88
- wandelbots_api_client/models/create_program_run_request.py +0 -86
- wandelbots_api_client/models/create_trigger200_response.py +0 -86
- wandelbots_api_client/models/create_trigger_request.py +0 -101
- wandelbots_api_client/models/cubic_spline.py +0 -109
- wandelbots_api_client/models/cubic_spline_cubic_spline_parameter.py +0 -93
- wandelbots_api_client/models/cubic_spline_parameter.py +0 -93
- wandelbots_api_client/models/cycle_time.py +0 -86
- wandelbots_api_client/models/cylinder.py +0 -87
- wandelbots_api_client/models/cylinder2.py +0 -95
- wandelbots_api_client/models/cylinder3.py +0 -101
- wandelbots_api_client/models/devices_inner.py +0 -321
- wandelbots_api_client/models/dh_parameter.py +0 -98
- wandelbots_api_client/models/direction.py +0 -34
- wandelbots_api_client/models/direction_jogging_request.py +0 -136
- wandelbots_api_client/models/error.py +0 -87
- wandelbots_api_client/models/execute_trajectory_request.py +0 -182
- wandelbots_api_client/models/execute_trajectory_response.py +0 -223
- wandelbots_api_client/models/execution_result.py +0 -113
- wandelbots_api_client/models/external_joint_stream_datapoint.py +0 -96
- wandelbots_api_client/models/external_joint_stream_datapoint_value.py +0 -96
- wandelbots_api_client/models/fanuc_controller.py +0 -99
- wandelbots_api_client/models/feedback_collision.py +0 -126
- wandelbots_api_client/models/feedback_joint_limit_exceeded.py +0 -101
- wandelbots_api_client/models/feedback_out_of_workspace.py +0 -103
- wandelbots_api_client/models/feedback_singularity.py +0 -102
- wandelbots_api_client/models/flag.py +0 -86
- wandelbots_api_client/models/force_vector.py +0 -103
- wandelbots_api_client/models/geometry.py +0 -167
- wandelbots_api_client/models/get_all_program_runs200_response.py +0 -109
- wandelbots_api_client/models/get_all_triggers200_response.py +0 -109
- wandelbots_api_client/models/get_mode_response.py +0 -87
- wandelbots_api_client/models/get_trajectory_response.py +0 -112
- wandelbots_api_client/models/get_trajectory_sample_response.py +0 -90
- wandelbots_api_client/models/google_protobuf_any.py +0 -102
- wandelbots_api_client/models/http_exception_response.py +0 -86
- wandelbots_api_client/models/http_validation_error.py +0 -109
- wandelbots_api_client/models/http_validation_error2.py +0 -109
- wandelbots_api_client/models/image_credentials.py +0 -88
- wandelbots_api_client/models/info_service_capabilities.py +0 -110
- wandelbots_api_client/models/initialize_movement_request.py +0 -111
- wandelbots_api_client/models/initialize_movement_response.py +0 -96
- wandelbots_api_client/models/initialize_movement_response_init_response.py +0 -89
- wandelbots_api_client/models/io.py +0 -105
- wandelbots_api_client/models/io_description.py +0 -156
- wandelbots_api_client/models/io_value.py +0 -104
- wandelbots_api_client/models/ios.py +0 -109
- wandelbots_api_client/models/jogging_response.py +0 -117
- wandelbots_api_client/models/jogging_service_capabilities.py +0 -87
- wandelbots_api_client/models/joint_jogging_request.py +0 -108
- wandelbots_api_client/models/joint_limit.py +0 -123
- wandelbots_api_client/models/joint_limit_exceeded.py +0 -96
- wandelbots_api_client/models/joint_position_request.py +0 -104
- wandelbots_api_client/models/joint_trajectory.py +0 -117
- wandelbots_api_client/models/joints.py +0 -86
- wandelbots_api_client/models/kinematic_service_capabilities.py +0 -96
- wandelbots_api_client/models/kuka_controller.py +0 -112
- wandelbots_api_client/models/kuka_controller_rsi_server.py +0 -92
- wandelbots_api_client/models/license.py +0 -124
- wandelbots_api_client/models/license_status.py +0 -88
- wandelbots_api_client/models/license_status_enum.py +0 -37
- wandelbots_api_client/models/limit_settings.py +0 -223
- wandelbots_api_client/models/limits_override.py +0 -132
- wandelbots_api_client/models/list_io_descriptions_response.py +0 -109
- wandelbots_api_client/models/list_io_values_response.py +0 -109
- wandelbots_api_client/models/list_payloads_response.py +0 -109
- wandelbots_api_client/models/list_program_metadata_response.py +0 -109
- wandelbots_api_client/models/list_recipe_metadata_response.py +0 -109
- wandelbots_api_client/models/list_response.py +0 -109
- wandelbots_api_client/models/list_tcps_response.py +0 -112
- wandelbots_api_client/models/location_inner.py +0 -153
- wandelbots_api_client/models/location_inner1.py +0 -142
- wandelbots_api_client/models/manufacturer.py +0 -37
- wandelbots_api_client/models/mode_change_response.py +0 -97
- wandelbots_api_client/models/motion_command.py +0 -109
- wandelbots_api_client/models/motion_command_blending.py +0 -164
- wandelbots_api_client/models/motion_command_path.py +0 -221
- wandelbots_api_client/models/motion_group_behavior_getter.py +0 -87
- wandelbots_api_client/models/motion_group_info.py +0 -88
- wandelbots_api_client/models/motion_group_infos.py +0 -109
- wandelbots_api_client/models/motion_group_instance.py +0 -101
- wandelbots_api_client/models/motion_group_instance_list.py +0 -109
- wandelbots_api_client/models/motion_group_joints.py +0 -100
- wandelbots_api_client/models/motion_group_physical.py +0 -105
- wandelbots_api_client/models/motion_group_specification.py +0 -136
- wandelbots_api_client/models/motion_group_state.py +0 -180
- wandelbots_api_client/models/motion_group_state_joint_limit_reached.py +0 -86
- wandelbots_api_client/models/motion_group_state_response.py +0 -103
- wandelbots_api_client/models/motion_id.py +0 -88
- wandelbots_api_client/models/motion_ids_list_response.py +0 -89
- wandelbots_api_client/models/motion_vector.py +0 -103
- wandelbots_api_client/models/mounting.py +0 -98
- wandelbots_api_client/models/move_request.py +0 -162
- wandelbots_api_client/models/move_response.py +0 -91
- wandelbots_api_client/models/move_to_trajectory_via_joint_ptp_request.py +0 -107
- wandelbots_api_client/models/movement.py +0 -90
- wandelbots_api_client/models/movement_error.py +0 -90
- wandelbots_api_client/models/movement_error_error.py +0 -86
- wandelbots_api_client/models/movement_movement.py +0 -98
- wandelbots_api_client/models/op_mode.py +0 -93
- wandelbots_api_client/models/opcua_node_value_trigger_config.py +0 -100
- wandelbots_api_client/models/opcua_node_value_trigger_config_node_value.py +0 -159
- wandelbots_api_client/models/optimizer_setup.py +0 -145
- wandelbots_api_client/models/out_of_workspace.py +0 -92
- wandelbots_api_client/models/path.py +0 -109
- wandelbots_api_client/models/path_cartesian_ptp.py +0 -103
- wandelbots_api_client/models/path_circle.py +0 -108
- wandelbots_api_client/models/path_cubic_spline.py +0 -118
- wandelbots_api_client/models/path_joint_ptp.py +0 -96
- wandelbots_api_client/models/path_line.py +0 -103
- wandelbots_api_client/models/pause_movement_request.py +0 -95
- wandelbots_api_client/models/pause_movement_response.py +0 -96
- wandelbots_api_client/models/pause_movement_response_pause_response.py +0 -89
- wandelbots_api_client/models/pause_on_io.py +0 -96
- wandelbots_api_client/models/payload.py +0 -103
- wandelbots_api_client/models/plan_collision_free_ptp_request.py +0 -131
- wandelbots_api_client/models/plan_collision_free_ptp_request_target.py +0 -150
- wandelbots_api_client/models/plan_failed_on_trajectory_response.py +0 -149
- wandelbots_api_client/models/plan_failed_response.py +0 -136
- wandelbots_api_client/models/plan_request.py +0 -127
- wandelbots_api_client/models/plan_response.py +0 -112
- wandelbots_api_client/models/plan_successful_response.py +0 -100
- wandelbots_api_client/models/plan_trajectory_failed_response.py +0 -106
- wandelbots_api_client/models/plan_trajectory_failed_response_error_feedback.py +0 -209
- wandelbots_api_client/models/plan_trajectory_request.py +0 -154
- wandelbots_api_client/models/plan_trajectory_response.py +0 -92
- wandelbots_api_client/models/plan_trajectory_response_response.py +0 -147
- wandelbots_api_client/models/plane2.py +0 -93
- wandelbots_api_client/models/plane3.py +0 -93
- wandelbots_api_client/models/planned_motion.py +0 -125
- wandelbots_api_client/models/planner_pose.py +0 -100
- wandelbots_api_client/models/planning_limits.py +0 -168
- wandelbots_api_client/models/planning_limits_limit_range.py +0 -87
- wandelbots_api_client/models/playback_speed_request.py +0 -94
- wandelbots_api_client/models/playback_speed_response.py +0 -96
- wandelbots_api_client/models/playback_speed_response_playback_speed_response.py +0 -86
- wandelbots_api_client/models/point_cloud.py +0 -86
- wandelbots_api_client/models/pose.py +0 -107
- wandelbots_api_client/models/pose2.py +0 -93
- wandelbots_api_client/models/program_metadata.py +0 -100
- wandelbots_api_client/models/program_run.py +0 -168
- wandelbots_api_client/models/program_run_object.py +0 -103
- wandelbots_api_client/models/program_run_state.py +0 -37
- wandelbots_api_client/models/program_runner_reference.py +0 -88
- wandelbots_api_client/models/pyjectory_datatypes_core_pose.py +0 -88
- wandelbots_api_client/models/pyjectory_datatypes_serializer_orientation.py +0 -87
- wandelbots_api_client/models/pyjectory_datatypes_serializer_pose.py +0 -87
- wandelbots_api_client/models/pyjectory_datatypes_serializer_position.py +0 -87
- wandelbots_api_client/models/pyriphery_etcd_etcd_configuration.py +0 -101
- wandelbots_api_client/models/pyriphery_hardware_isaac_isaac_configuration.py +0 -101
- wandelbots_api_client/models/pyriphery_opcua_opcua_configuration.py +0 -99
- wandelbots_api_client/models/pyriphery_pyrae_controller_controller_configuration.py +0 -107
- wandelbots_api_client/models/pyriphery_pyrae_robot_robot_configuration.py +0 -119
- wandelbots_api_client/models/pyriphery_robotics_configurable_collision_scene_configurable_collision_scene_configuration_input.py +0 -130
- wandelbots_api_client/models/pyriphery_robotics_configurable_collision_scene_configurable_collision_scene_configuration_output.py +0 -130
- wandelbots_api_client/models/pyriphery_robotics_robotcell_timer_configuration.py +0 -102
- wandelbots_api_client/models/pyriphery_robotics_simulation_robot_with_view_open3d_configuration.py +0 -99
- wandelbots_api_client/models/pyriphery_robotics_simulation_simulated_io_configuration.py +0 -94
- wandelbots_api_client/models/pyriphery_robotics_simulation_simulated_opcua_configuration.py +0 -94
- wandelbots_api_client/models/quaternion.py +0 -89
- wandelbots_api_client/models/recipe_metadata.py +0 -102
- wandelbots_api_client/models/rectangle.py +0 -87
- wandelbots_api_client/models/rectangle2.py +0 -95
- wandelbots_api_client/models/rectangle3.py +0 -101
- wandelbots_api_client/models/rectangular_capsule.py +0 -94
- wandelbots_api_client/models/rectangular_capsule2.py +0 -103
- wandelbots_api_client/models/rectangular_capsule3.py +0 -103
- wandelbots_api_client/models/release_channel.py +0 -34
- wandelbots_api_client/models/request.py +0 -142
- wandelbots_api_client/models/request1.py +0 -140
- wandelbots_api_client/models/response_get_devices_devices_get_inner.py +0 -321
- wandelbots_api_client/models/response_get_value_programs_values_key_get.py +0 -317
- wandelbots_api_client/models/response_get_values_programs_values_get_value.py +0 -322
- wandelbots_api_client/models/robot_controller.py +0 -108
- wandelbots_api_client/models/robot_controller_configuration.py +0 -262
- wandelbots_api_client/models/robot_controller_state.py +0 -191
- wandelbots_api_client/models/robot_link_geometry.py +0 -98
- wandelbots_api_client/models/robot_state.py +0 -101
- wandelbots_api_client/models/robot_system_mode.py +0 -37
- wandelbots_api_client/models/robot_tcp.py +0 -104
- wandelbots_api_client/models/robot_tcps.py +0 -109
- wandelbots_api_client/models/rotation_angle_types.py +0 -58
- wandelbots_api_client/models/rotation_angles.py +0 -91
- wandelbots_api_client/models/safety_configuration.py +0 -182
- wandelbots_api_client/models/safety_setup.py +0 -172
- wandelbots_api_client/models/safety_setup_safety_settings.py +0 -106
- wandelbots_api_client/models/safety_setup_safety_zone.py +0 -103
- wandelbots_api_client/models/safety_zone.py +0 -98
- wandelbots_api_client/models/safety_zone_limits.py +0 -96
- wandelbots_api_client/models/safety_zone_violation.py +0 -86
- wandelbots_api_client/models/service_status.py +0 -96
- wandelbots_api_client/models/service_status_phase.py +0 -46
- wandelbots_api_client/models/service_status_severity.py +0 -35
- wandelbots_api_client/models/service_status_status.py +0 -90
- wandelbots_api_client/models/set_io.py +0 -93
- wandelbots_api_client/models/set_playback_speed.py +0 -91
- wandelbots_api_client/models/single_joint_limit.py +0 -112
- wandelbots_api_client/models/singularity.py +0 -110
- wandelbots_api_client/models/singularity_type_enum.py +0 -35
- wandelbots_api_client/models/sphere.py +0 -86
- wandelbots_api_client/models/sphere2.py +0 -94
- wandelbots_api_client/models/sphere3.py +0 -96
- wandelbots_api_client/models/standstill.py +0 -92
- wandelbots_api_client/models/standstill_reason.py +0 -36
- wandelbots_api_client/models/standstill_standstill.py +0 -99
- wandelbots_api_client/models/start_movement_request.py +0 -135
- wandelbots_api_client/models/start_on_io.py +0 -96
- wandelbots_api_client/models/status.py +0 -119
- wandelbots_api_client/models/stop_response.py +0 -109
- wandelbots_api_client/models/store_value.py +0 -349
- wandelbots_api_client/models/stream_move_backward.py +0 -90
- wandelbots_api_client/models/stream_move_forward.py +0 -90
- wandelbots_api_client/models/stream_move_playback_speed.py +0 -92
- wandelbots_api_client/models/stream_move_request.py +0 -207
- wandelbots_api_client/models/stream_move_response.py +0 -110
- wandelbots_api_client/models/stream_move_to_trajectory.py +0 -96
- wandelbots_api_client/models/stream_stop.py +0 -90
- wandelbots_api_client/models/tcp_pose.py +0 -105
- wandelbots_api_client/models/tcp_pose_request.py +0 -106
- wandelbots_api_client/models/tool_geometry.py +0 -111
- wandelbots_api_client/models/trajectory_sample.py +0 -139
- wandelbots_api_client/models/trigger_object.py +0 -110
- wandelbots_api_client/models/trigger_type.py +0 -33
- wandelbots_api_client/models/universalrobots_controller.py +0 -102
- wandelbots_api_client/models/update_nova_version_request.py +0 -87
- wandelbots_api_client/models/update_program_metadata_request.py +0 -88
- wandelbots_api_client/models/update_recipe_metadata_request.py +0 -88
- wandelbots_api_client/models/update_trigger_request.py +0 -100
- wandelbots_api_client/models/validation_error.py +0 -113
- wandelbots_api_client/models/validation_error2.py +0 -113
- wandelbots_api_client/models/value.py +0 -317
- wandelbots_api_client/models/vector3d.py +0 -88
- wandelbots_api_client/models/version_number.py +0 -113
- wandelbots_api_client/models/virtual_controller.py +0 -117
- wandelbots_api_client/models/virtual_controller_types.py +0 -154
- wandelbots_api_client/models/virtual_robot_configuration.py +0 -91
- wandelbots_api_client/models/yaskawa_controller.py +0 -99
- wandelbots_api_client/py.typed +0 -0
- wandelbots_api_client/rest.py +0 -188
- wandelbots_api_client-26.6.0.dev43.dist-info/METADATA +0 -241
- {wandelbots_api_client-26.6.0.dev43.dist-info → wandelbots_api_client-26.6.0.dev45.dist-info}/WHEEL +0 -0
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
|
-
|
|
3
|
-
# flake8: noqa
|
|
4
|
-
|
|
5
|
-
"""
|
|
6
|
-
Wandelbots NOVA API
|
|
7
|
-
|
|
8
|
-
Interact with robots in an easy and intuitive way.
|
|
9
|
-
|
|
10
|
-
The version of the OpenAPI document: 1.6.0 dev
|
|
11
|
-
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
12
|
-
|
|
13
|
-
Do not edit the class manually.
|
|
14
|
-
""" # noqa: E501
|
|
15
|
-
|
|
16
|
-
__version__ = "26.6.0.dev43"
|
|
17
|
-
|
|
18
|
-
from . import models
|
|
19
|
-
from . import api
|
|
20
|
-
from . import api_client
|
|
21
|
-
from . import exceptions
|
|
22
|
-
from . import configuration
|
|
23
|
-
|
|
24
|
-
from .api import *
|
|
25
|
-
|
|
26
|
-
# import ApiClient
|
|
27
|
-
from .api_response import ApiResponse
|
|
28
|
-
from .api_client import ApiClient
|
|
29
|
-
from .configuration import Configuration
|
|
30
|
-
from .exceptions import OpenApiException
|
|
31
|
-
from .exceptions import ApiTypeError
|
|
32
|
-
from .exceptions import ApiValueError
|
|
33
|
-
from .exceptions import ApiKeyError
|
|
34
|
-
from .exceptions import ApiAttributeError
|
|
35
|
-
from .exceptions import ApiException
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
__all__ = [
|
|
39
|
-
"ApiResponse",
|
|
40
|
-
"ApiClient",
|
|
41
|
-
"Configuration",
|
|
42
|
-
"OpenApiException",
|
|
43
|
-
"ApiTypeError",
|
|
44
|
-
"ApiValueError",
|
|
45
|
-
"ApiKeyError",
|
|
46
|
-
"ApiAttributeError",
|
|
47
|
-
"ApiException",
|
|
48
|
-
]
|
|
@@ -1,243 +1,238 @@
|
|
|
1
|
-
|
|
1
|
+
"""OAuth2 Device Code Flow implementation for Auth0 and Entra ID."""
|
|
2
2
|
|
|
3
|
-
import asyncio
|
|
4
3
|
import aiohttp
|
|
4
|
+
import asyncio
|
|
5
|
+
from typing import Any
|
|
6
|
+
from abc import ABC, abstractmethod
|
|
5
7
|
import pydantic
|
|
6
8
|
|
|
7
9
|
|
|
8
|
-
class
|
|
9
|
-
"""
|
|
10
|
+
class DeviceCodeFlowConfig(pydantic.BaseModel, ABC):
|
|
11
|
+
"""Base class for OAuth2 device code flow authentication."""
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
client_id: Optional[str] = None
|
|
13
|
-
audience: Optional[str] = None
|
|
13
|
+
scope: str = "openid profile email offline_access"
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"""Create Auth0Config from environment variables"""
|
|
18
|
-
return cls(
|
|
19
|
-
domain="",
|
|
20
|
-
client_id="",
|
|
21
|
-
audience="",
|
|
22
|
-
)
|
|
15
|
+
class Config:
|
|
16
|
+
arbitrary_types_allowed = True
|
|
23
17
|
|
|
18
|
+
@abstractmethod
|
|
24
19
|
def is_complete(self) -> bool:
|
|
25
|
-
"""Check if all required fields are set
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
device_code: str
|
|
48
|
-
user_code: str
|
|
49
|
-
verification_uri: str
|
|
50
|
-
expires_in: int
|
|
51
|
-
interval: int = pydantic.Field(default=5)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
class Auth0TokenInfo(pydantic.BaseModel):
|
|
55
|
-
"""
|
|
56
|
-
Model to store token information.
|
|
57
|
-
|
|
58
|
-
Attributes:
|
|
59
|
-
access_token (str): The access token.
|
|
60
|
-
refresh_token (str, optional): The refresh token.
|
|
61
|
-
"""
|
|
62
|
-
|
|
63
|
-
access_token: str
|
|
64
|
-
refresh_token: Optional[str] = None
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
class Auth0DeviceAuthorization:
|
|
68
|
-
"""
|
|
69
|
-
Class to handle Auth0 device authorization.
|
|
70
|
-
|
|
71
|
-
Methods:
|
|
72
|
-
__init__(auth0_config: Auth0Config | None = None):
|
|
73
|
-
Initializes the Auth0DeviceAuthorization instance with the given parameters.
|
|
74
|
-
request_device_code():
|
|
75
|
-
Requests a device code from Auth0.
|
|
76
|
-
display_user_instructions():
|
|
77
|
-
Displays instructions for the user to authenticate.
|
|
78
|
-
poll_token_endpoint():
|
|
79
|
-
Polls the token endpoint to obtain an access token.
|
|
80
|
-
refresh_access_token(refresh_token: str):
|
|
81
|
-
Refreshes the access token using the refresh token.
|
|
82
|
-
"""
|
|
83
|
-
|
|
84
|
-
def __init__(self, auth0_config: Optional[Auth0Config] = None):
|
|
20
|
+
"""Check if all required fields are set."""
|
|
21
|
+
pass
|
|
22
|
+
|
|
23
|
+
@property
|
|
24
|
+
@abstractmethod
|
|
25
|
+
def token_endpoint(self) -> str:
|
|
26
|
+
"""Get the token endpoint URL."""
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
@abstractmethod
|
|
31
|
+
def device_endpoint(self) -> str:
|
|
32
|
+
"""Get the device code endpoint URL."""
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
@abstractmethod
|
|
36
|
+
def _build_device_code_request(self) -> dict[str, str]:
|
|
37
|
+
"""Build the device code request data."""
|
|
38
|
+
pass
|
|
39
|
+
|
|
40
|
+
async def request_device_code(self) -> dict[str, Any]:
|
|
85
41
|
"""
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
Args:
|
|
89
|
-
auth0_config: Optional Auth0Config object. If not provided,
|
|
90
|
-
will be created using default configuration.
|
|
91
|
-
"""
|
|
92
|
-
try:
|
|
93
|
-
self.params = auth0_config or Auth0Config.default()
|
|
94
|
-
if not self.params.is_complete():
|
|
95
|
-
raise ValueError("Auth0 configuration is incomplete")
|
|
96
|
-
|
|
97
|
-
domain, client_id, audience = self.params.get_validated_config()
|
|
98
|
-
self.auth0_domain = domain
|
|
99
|
-
self.auth0_client_id = client_id
|
|
100
|
-
self.auth0_audience = audience
|
|
101
|
-
|
|
102
|
-
except ValueError as e:
|
|
103
|
-
raise ValueError(f"Error: Auth0 configuration is invalid: {e}")
|
|
104
|
-
|
|
105
|
-
self.headers = {"content-type": "application/x-www-form-urlencoded"}
|
|
106
|
-
self.device_code_info: Optional[Auth0DeviceCodeInfo] = None
|
|
107
|
-
self.refresh_token: Optional[str] = None
|
|
108
|
-
self.interval = 5
|
|
109
|
-
self.attempts = 10
|
|
110
|
-
|
|
111
|
-
async def request_device_code(self) -> Auth0DeviceCodeInfo:
|
|
112
|
-
"""
|
|
113
|
-
Requests a device code from Auth0.
|
|
42
|
+
Request device code from the authorization server.
|
|
114
43
|
|
|
115
44
|
Returns:
|
|
116
|
-
|
|
45
|
+
Device code response with verification_uri, user_code, etc.
|
|
117
46
|
|
|
118
47
|
Raises:
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
device_code_url = f"https://{self.auth0_domain}/oauth/device/code"
|
|
122
|
-
data = {
|
|
123
|
-
"client_id": self.auth0_client_id,
|
|
124
|
-
"scope": "openid profile email",
|
|
125
|
-
"audience": self.auth0_audience,
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
async with aiohttp.ClientSession() as session:
|
|
129
|
-
async with session.post(device_code_url, headers=self.headers, data=data) as response:
|
|
130
|
-
if response.status == 200:
|
|
131
|
-
response_data = await response.json()
|
|
132
|
-
self.device_code_info = Auth0DeviceCodeInfo(**response_data)
|
|
133
|
-
self.interval = self.device_code_info.interval
|
|
134
|
-
return self.device_code_info
|
|
135
|
-
else:
|
|
136
|
-
error_data = await response.json()
|
|
137
|
-
raise Exception("Error requesting device code:", error_data)
|
|
138
|
-
|
|
139
|
-
def get_device_code_info(self) -> Optional[Auth0DeviceCodeInfo]:
|
|
48
|
+
ValueError: If configuration is incomplete
|
|
49
|
+
Exception: If device code request fails
|
|
140
50
|
"""
|
|
141
|
-
|
|
51
|
+
if not self.is_complete():
|
|
52
|
+
raise ValueError(f"{self.__class__.__name__} configuration is incomplete")
|
|
142
53
|
|
|
143
|
-
|
|
144
|
-
Optional[Auth0DeviceCodeInfo]: The device code information.
|
|
145
|
-
"""
|
|
146
|
-
return self.device_code_info
|
|
54
|
+
data = self._build_device_code_request()
|
|
147
55
|
|
|
148
|
-
|
|
56
|
+
async with aiohttp.ClientSession() as session:
|
|
57
|
+
async with session.post(
|
|
58
|
+
self.device_endpoint,
|
|
59
|
+
data=data,
|
|
60
|
+
headers={"Content-Type": "application/x-www-form-urlencoded"},
|
|
61
|
+
) as response:
|
|
62
|
+
if response.status != 200:
|
|
63
|
+
error_text = await response.text()
|
|
64
|
+
raise Exception(f"Device code request failed: {error_text}")
|
|
65
|
+
|
|
66
|
+
return await response.json()
|
|
67
|
+
|
|
68
|
+
async def poll_token_endpoint(self, device_code: str, interval: int = 5, expires_in: int = 900) -> dict[str, str]:
|
|
149
69
|
"""
|
|
150
|
-
|
|
70
|
+
Poll the token endpoint until authorization is complete.
|
|
151
71
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
verification_uri = f"{self.device_code_info.verification_uri}?user_code={self.device_code_info.user_code}"
|
|
157
|
-
user_code = self.device_code_info.user_code
|
|
158
|
-
print(f"Please visit {verification_uri} and validate the code {user_code} to authenticate.")
|
|
159
|
-
else:
|
|
160
|
-
raise Exception("Device code information is not available.")
|
|
161
|
-
|
|
162
|
-
async def poll_token_endpoint(self):
|
|
163
|
-
"""
|
|
164
|
-
Polls the token endpoint to obtain an access token.
|
|
72
|
+
Args:
|
|
73
|
+
device_code: Device code from request_device_code
|
|
74
|
+
interval: Polling interval in seconds
|
|
75
|
+
expires_in: Expiration time in seconds
|
|
165
76
|
|
|
166
77
|
Returns:
|
|
167
|
-
|
|
78
|
+
Token response with access_token, refresh_token, etc.
|
|
168
79
|
|
|
169
80
|
Raises:
|
|
170
|
-
|
|
81
|
+
TimeoutError: If authorization times out
|
|
82
|
+
Exception: If authorization fails
|
|
171
83
|
"""
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
84
|
+
start_time = asyncio.get_event_loop().time()
|
|
85
|
+
|
|
86
|
+
while (asyncio.get_event_loop().time() - start_time) < expires_in:
|
|
87
|
+
await asyncio.sleep(interval)
|
|
88
|
+
|
|
89
|
+
async with aiohttp.ClientSession() as session:
|
|
90
|
+
async with session.post(
|
|
91
|
+
self.token_endpoint,
|
|
92
|
+
data={
|
|
93
|
+
"grant_type": "urn:ietf:params:oauth:grant-type:device_code",
|
|
94
|
+
"device_code": device_code,
|
|
95
|
+
"client_id": self._get_client_id(),
|
|
96
|
+
},
|
|
97
|
+
headers={"Content-Type": "application/x-www-form-urlencoded"},
|
|
98
|
+
) as response:
|
|
99
|
+
if response.status == 200:
|
|
100
|
+
return await response.json()
|
|
181
101
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
self.refresh_token = token_info.refresh_token
|
|
191
|
-
return token_info.access_token
|
|
192
|
-
elif token_response.status == 400:
|
|
193
|
-
# If the response status is 400, check the error type.
|
|
194
|
-
error_data = await token_response.json()
|
|
195
|
-
error = error_data.get("error")
|
|
196
|
-
if error == "authorization_pending":
|
|
197
|
-
# If the error is 'authorization_pending', it means the user has not yet authorized.
|
|
198
|
-
await asyncio.sleep(self.interval)
|
|
199
|
-
elif error == "slow_down":
|
|
200
|
-
# If the error is 'slow_down', it means the server requests to slow down polling.
|
|
201
|
-
self.interval += 5
|
|
202
|
-
await asyncio.sleep(self.interval)
|
|
203
|
-
elif token_response.status == 403:
|
|
204
|
-
# If the response status is 403, it means the request is forbidden, wait and retry.
|
|
205
|
-
await asyncio.sleep(self.interval)
|
|
102
|
+
error_data = await response.json()
|
|
103
|
+
error = error_data.get("error")
|
|
104
|
+
|
|
105
|
+
if error == "authorization_pending":
|
|
106
|
+
continue
|
|
107
|
+
elif error == "slow_down":
|
|
108
|
+
interval += 5
|
|
109
|
+
continue
|
|
206
110
|
else:
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
raise Exception("Error: It was not able to authenticate. Please try again.")
|
|
111
|
+
raise Exception(f"Authorization failed: {error}")
|
|
112
|
+
|
|
113
|
+
raise TimeoutError("Device authorization timed out")
|
|
211
114
|
|
|
212
|
-
async def
|
|
115
|
+
async def refresh_token(self, refresh_token: str) -> dict[str, str]:
|
|
213
116
|
"""
|
|
214
|
-
|
|
117
|
+
Refresh access token using refresh token.
|
|
215
118
|
|
|
216
119
|
Args:
|
|
217
|
-
refresh_token
|
|
120
|
+
refresh_token: Refresh token from previous authentication
|
|
218
121
|
|
|
219
122
|
Returns:
|
|
220
|
-
|
|
123
|
+
New token response with access_token and potentially new refresh_token
|
|
221
124
|
|
|
222
125
|
Raises:
|
|
223
|
-
Exception: If
|
|
126
|
+
Exception: If token refresh fails
|
|
224
127
|
"""
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
128
|
+
async with aiohttp.ClientSession() as session:
|
|
129
|
+
async with session.post(
|
|
130
|
+
self.token_endpoint,
|
|
131
|
+
data={
|
|
132
|
+
"grant_type": "refresh_token",
|
|
133
|
+
"refresh_token": refresh_token,
|
|
134
|
+
"client_id": self._get_client_id(),
|
|
135
|
+
},
|
|
136
|
+
headers={"Content-Type": "application/x-www-form-urlencoded"},
|
|
137
|
+
) as response:
|
|
138
|
+
if response.status != 200:
|
|
139
|
+
error_text = await response.text()
|
|
140
|
+
raise Exception(f"Token refresh failed: {error_text}")
|
|
141
|
+
|
|
142
|
+
return await response.json()
|
|
143
|
+
|
|
144
|
+
@abstractmethod
|
|
145
|
+
def _get_client_id(self) -> str:
|
|
146
|
+
"""Get the client ID for the configuration."""
|
|
147
|
+
pass
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class Auth0Config(DeviceCodeFlowConfig):
|
|
151
|
+
"""Configuration for Auth0 device code flow authentication."""
|
|
152
|
+
|
|
153
|
+
domain: str | None = None
|
|
154
|
+
client_id: str | None = None
|
|
155
|
+
audience: str | None = None
|
|
156
|
+
|
|
157
|
+
@classmethod
|
|
158
|
+
def default(cls) -> "Auth0Config":
|
|
159
|
+
"""Provide the default Auth0 configuration."""
|
|
160
|
+
return cls(
|
|
161
|
+
domain="",
|
|
162
|
+
client_id="",
|
|
163
|
+
audience="",
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
def is_complete(self) -> bool:
|
|
167
|
+
"""Check if all required fields are set."""
|
|
168
|
+
return bool(self.domain and self.client_id and self.audience)
|
|
169
|
+
|
|
170
|
+
@property
|
|
171
|
+
def token_endpoint(self) -> str:
|
|
172
|
+
"""Get the token endpoint URL."""
|
|
173
|
+
if not self.domain:
|
|
174
|
+
raise ValueError("Domain is not set")
|
|
175
|
+
return f"https://{self.domain}/oauth/token"
|
|
176
|
+
|
|
177
|
+
@property
|
|
178
|
+
def device_endpoint(self) -> str:
|
|
179
|
+
"""Get the device code endpoint URL."""
|
|
180
|
+
if not self.domain:
|
|
181
|
+
raise ValueError("Domain is not set")
|
|
182
|
+
return f"https://{self.domain}/oauth/device/code"
|
|
183
|
+
|
|
184
|
+
def _get_client_id(self) -> str:
|
|
185
|
+
"""Get the client ID for the configuration."""
|
|
186
|
+
if not self.client_id:
|
|
187
|
+
raise ValueError("Client ID is not set")
|
|
188
|
+
return self.client_id
|
|
189
|
+
|
|
190
|
+
def _build_device_code_request(self) -> dict[str, str]:
|
|
191
|
+
"""Build the device code request data."""
|
|
192
|
+
data = {
|
|
193
|
+
"client_id": self.client_id,
|
|
194
|
+
"scope": self.scope,
|
|
233
195
|
}
|
|
196
|
+
if self.audience:
|
|
197
|
+
data["audience"] = self.audience
|
|
198
|
+
return data
|
|
234
199
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
200
|
+
|
|
201
|
+
class EntraIDConfig(DeviceCodeFlowConfig):
|
|
202
|
+
"""Configuration for Microsoft Entra ID (Azure AD) device code flow authentication."""
|
|
203
|
+
|
|
204
|
+
client_id: str | None = None
|
|
205
|
+
tenant_id: str | None = None
|
|
206
|
+
|
|
207
|
+
def is_complete(self) -> bool:
|
|
208
|
+
"""Check if all required fields are set."""
|
|
209
|
+
return bool(self.client_id and self.tenant_id)
|
|
210
|
+
|
|
211
|
+
@property
|
|
212
|
+
def token_endpoint(self) -> str:
|
|
213
|
+
"""Get the token endpoint URL."""
|
|
214
|
+
if not self.tenant_id:
|
|
215
|
+
raise ValueError("Tenant ID is not set")
|
|
216
|
+
return f"https://login.microsoftonline.com/{self.tenant_id}/oauth2/v2.0/token"
|
|
217
|
+
|
|
218
|
+
@property
|
|
219
|
+
def device_endpoint(self) -> str:
|
|
220
|
+
"""Get the device code endpoint URL."""
|
|
221
|
+
if not self.tenant_id:
|
|
222
|
+
raise ValueError("Tenant ID is not set")
|
|
223
|
+
return f"https://login.microsoftonline.com/{self.tenant_id}/oauth2/v2.0/devicecode"
|
|
224
|
+
|
|
225
|
+
def _get_client_id(self) -> str:
|
|
226
|
+
"""Get the client ID for the configuration."""
|
|
227
|
+
if not self.client_id:
|
|
228
|
+
raise ValueError("Client ID is not set")
|
|
229
|
+
return self.client_id
|
|
230
|
+
|
|
231
|
+
def _build_device_code_request(self) -> dict[str, str]:
|
|
232
|
+
"""Build the device code request data."""
|
|
233
|
+
if not self.client_id:
|
|
234
|
+
raise ValueError("Client ID is not set")
|
|
235
|
+
return {
|
|
236
|
+
"client_id": self.client_id,
|
|
237
|
+
"scope": self.scope,
|
|
238
|
+
}
|
|
@@ -85,7 +85,7 @@ class ApiClient:
|
|
|
85
85
|
self.default_headers[header_name] = header_value
|
|
86
86
|
self.cookie = cookie
|
|
87
87
|
# Set default User-Agent.
|
|
88
|
-
self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.
|
|
88
|
+
self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.dev45"
|
|
89
89
|
self.client_side_validation = configuration.client_side_validation
|
|
90
90
|
|
|
91
91
|
async def __aenter__(self):
|
|
@@ -512,7 +512,7 @@ class Configuration:
|
|
|
512
512
|
"OS: {env}\n"
|
|
513
513
|
"Python Version: {pyversion}\n"
|
|
514
514
|
"Version of the API: 2.6.0 dev\n"
|
|
515
|
-
"SDK Package Version: 26.6.0.
|
|
515
|
+
"SDK Package Version: 26.6.0.dev45".format(env=sys.platform, pyversion=sys.version)
|
|
516
516
|
)
|
|
517
517
|
|
|
518
518
|
def get_host_settings(self) -> List[HostSetting]:
|
|
@@ -85,7 +85,7 @@ class ApiClient:
|
|
|
85
85
|
self.default_headers[header_name] = header_value
|
|
86
86
|
self.cookie = cookie
|
|
87
87
|
# Set default User-Agent.
|
|
88
|
-
self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.
|
|
88
|
+
self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.dev45"
|
|
89
89
|
self.client_side_validation = configuration.client_side_validation
|
|
90
90
|
|
|
91
91
|
async def __aenter__(self):
|
|
@@ -512,7 +512,7 @@ class Configuration:
|
|
|
512
512
|
"OS: {env}\n"
|
|
513
513
|
"Python Version: {pyversion}\n"
|
|
514
514
|
"Version of the API: 2.6.0 dev\n"
|
|
515
|
-
"SDK Package Version: 26.6.0.
|
|
515
|
+
"SDK Package Version: 26.6.0.dev45".format(env=sys.platform, pyversion=sys.version)
|
|
516
516
|
)
|
|
517
517
|
|
|
518
518
|
def get_host_settings(self) -> List[HostSetting]:
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: wandelbots_api_client
|
|
3
|
+
Version: 26.6.0.dev45
|
|
4
|
+
Summary: Wandelbots Python Client: Interact with robots in an easy and intuitive way.
|
|
5
|
+
Author: Copyright (c) 2025 Wandelbots GmbH
|
|
6
|
+
Author-email: Copyright (c) 2025 Wandelbots GmbH <contact@wandelbots.com>
|
|
7
|
+
License-Expression: Apache-2.0
|
|
8
|
+
Classifier: Typing :: Typed
|
|
9
|
+
Classifier: Topic :: Software Development
|
|
10
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
11
|
+
Classifier: Operating System :: POSIX
|
|
12
|
+
Classifier: Operating System :: Unix
|
|
13
|
+
Classifier: Operating System :: MacOS
|
|
14
|
+
Requires-Dist: urllib3>=1.25.3
|
|
15
|
+
Requires-Dist: python-dateutil>=2.8.2
|
|
16
|
+
Requires-Dist: aiohttp>=3.8.4
|
|
17
|
+
Requires-Dist: aiohttp-retry>=2.8.3
|
|
18
|
+
Requires-Dist: pydantic>=2
|
|
19
|
+
Requires-Dist: websockets
|
|
20
|
+
Requires-Dist: typing-extensions>=4.7.1
|
|
21
|
+
Requires-Dist: furl
|
|
22
|
+
Requires-Dist: pyhumps
|
|
23
|
+
Requires-Dist: pydantic-core
|
|
24
|
+
Requires-Dist: annotated-types
|
|
25
|
+
Requires-Dist: pydantic[email]
|
|
26
|
+
Requires-Python: >=3.9
|
|
27
|
+
Project-URL: homepage, https://wandelbots.com/
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
# wandelbots-api-client.v2
|
|
31
|
+
Interact with robots in an easy and intuitive way.
|
|
32
|
+
|
|
33
|
+
- Compatible API version: 2.6.0 dev (can be found at the home screen of your instance -> API)
|
|
34
|
+
- Package version: 26.6.0.dev45
|
|
35
|
+
|
|
36
|
+
## Requirements.
|
|
37
|
+
Python >=3.9, Python < 4.0
|
|
38
|
+
|
|
39
|
+
## Installation
|
|
40
|
+
```
|
|
41
|
+
pip install wandelbots-api-client
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
OR
|
|
45
|
+
|
|
46
|
+
pyproject.toml:
|
|
47
|
+
```
|
|
48
|
+
[tool.poetry.dependencies]
|
|
49
|
+
wandelbots-api-client = "*"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
|