wandelbots-api-client 26.2.0.dev62__py3-none-any.whl → 26.2.0.dev63__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 (22) hide show
  1. wandelbots_api_client/__init__.py +1 -1
  2. wandelbots_api_client/api_client.py +1 -1
  3. wandelbots_api_client/configuration.py +1 -1
  4. wandelbots_api_client/v2/__init__.py +1 -1
  5. wandelbots_api_client/v2/api/robot_configurations_api.py +278 -0
  6. wandelbots_api_client/v2/api/virtual_controller_api.py +3 -3
  7. wandelbots_api_client/v2/api_client.py +1 -1
  8. wandelbots_api_client/v2/configuration.py +1 -1
  9. wandelbots_api_client/v2/models/__init__.py +2 -0
  10. wandelbots_api_client/v2/models/motion_group_from_json.py +3 -3
  11. wandelbots_api_client/v2/models/robot_controller_configuration_request.py +110 -0
  12. wandelbots_api_client/v2_pydantic/__init__.py +1 -1
  13. wandelbots_api_client/v2_pydantic/api/robot_configurations_api.py +281 -0
  14. wandelbots_api_client/v2_pydantic/api/virtual_controller_api.py +3 -3
  15. wandelbots_api_client/v2_pydantic/api_client.py +1 -1
  16. wandelbots_api_client/v2_pydantic/configuration.py +1 -1
  17. wandelbots_api_client/v2_pydantic/models.py +15 -2
  18. {wandelbots_api_client-26.2.0.dev62.dist-info → wandelbots_api_client-26.2.0.dev63.dist-info}/METADATA +2 -2
  19. {wandelbots_api_client-26.2.0.dev62.dist-info → wandelbots_api_client-26.2.0.dev63.dist-info}/RECORD +22 -21
  20. {wandelbots_api_client-26.2.0.dev62.dist-info → wandelbots_api_client-26.2.0.dev63.dist-info}/WHEEL +0 -0
  21. {wandelbots_api_client-26.2.0.dev62.dist-info → wandelbots_api_client-26.2.0.dev63.dist-info}/licenses/LICENSE +0 -0
  22. {wandelbots_api_client-26.2.0.dev62.dist-info → wandelbots_api_client-26.2.0.dev63.dist-info}/top_level.txt +0 -0
@@ -13,7 +13,7 @@
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.2.0.dev62"
16
+ __version__ = "26.2.0.dev63"
17
17
 
18
18
  from . import models
19
19
  from . import api
@@ -91,7 +91,7 @@ class ApiClient:
91
91
  self.default_headers[header_name] = header_value
92
92
  self.cookie = cookie
93
93
  # Set default User-Agent.
94
- self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.2.0.dev62'
94
+ self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.2.0.dev63'
95
95
  self.client_side_validation = configuration.client_side_validation
96
96
 
97
97
  async def __aenter__(self):
@@ -511,7 +511,7 @@ class Configuration:
511
511
  "OS: {env}\n"\
512
512
  "Python Version: {pyversion}\n"\
513
513
  "Version of the API: 1.3.0 dev\n"\
514
- "SDK Package Version: 26.2.0.dev62".\
514
+ "SDK Package Version: 26.2.0.dev63".\
515
515
  format(env=sys.platform, pyversion=sys.version)
516
516
 
517
517
  def get_host_settings(self) -> List[HostSetting]:
@@ -13,7 +13,7 @@
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.2.0.dev62"
16
+ __version__ = "26.2.0.dev63"
17
17
 
18
18
  from . import models
19
19
  from . import api
@@ -24,6 +24,8 @@ from urllib.parse import quote
24
24
 
25
25
  from pydantic import StrictStr
26
26
  from typing import List
27
+ from wandelbots_api_client.v2.models.robot_controller import RobotController
28
+ from wandelbots_api_client.v2.models.robot_controller_configuration_request import RobotControllerConfigurationRequest
27
29
 
28
30
  from wandelbots_api_client.v2.api_client import ApiClient, RequestSerialized
29
31
  from wandelbots_api_client.v2.api_response import ApiResponse
@@ -41,6 +43,282 @@ class RobotConfigurationsApi:
41
43
  api_client = ApiClient.get_default()
42
44
  self.api_client = api_client
43
45
 
46
+ @validate_call
47
+ async def get_controller_config_from_arp_scan(
48
+ self,
49
+ robot_controller_configuration_request: RobotControllerConfigurationRequest,
50
+ _request_timeout: Union[
51
+ None,
52
+ Annotated[StrictFloat, Field(gt=0)],
53
+ Tuple[
54
+ Annotated[StrictFloat, Field(gt=0)],
55
+ Annotated[StrictFloat, Field(gt=0)]
56
+ ]
57
+ ] = None,
58
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
59
+ _content_type: Optional[StrictStr] = None,
60
+ _headers: Optional[Dict[StrictStr, Any]] = None,
61
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
62
+ ) -> List[RobotController]:
63
+ """Robot Controller Configurations
64
+
65
+ Returns all robot controller configurations that match the provided [ARP scan result](#/operations/getArpScan).
66
+
67
+ :param robot_controller_configuration_request: (required)
68
+ :type robot_controller_configuration_request: RobotControllerConfigurationRequest
69
+ :param _request_timeout: timeout setting for this request. If one
70
+ number provided, it will be total request
71
+ timeout. It can also be a pair (tuple) of
72
+ (connection, read) timeouts.
73
+ :type _request_timeout: int, tuple(int, int), optional
74
+ :param _request_auth: set to override the auth_settings for an a single
75
+ request; this effectively ignores the
76
+ authentication in the spec for a single request.
77
+ :type _request_auth: dict, optional
78
+ :param _content_type: force content-type for the request.
79
+ :type _content_type: str, Optional
80
+ :param _headers: set to override the headers for a single
81
+ request; this effectively ignores the headers
82
+ in the spec for a single request.
83
+ :type _headers: dict, optional
84
+ :param _host_index: set to override the host_index for a single
85
+ request; this effectively ignores the host_index
86
+ in the spec for a single request.
87
+ :type _host_index: int, optional
88
+ :return: Returns the result object.
89
+ """ # noqa: E501
90
+
91
+ _param = self._get_controller_config_from_arp_scan_serialize(
92
+ robot_controller_configuration_request=robot_controller_configuration_request,
93
+ _request_auth=_request_auth,
94
+ _content_type=_content_type,
95
+ _headers=_headers,
96
+ _host_index=_host_index
97
+ )
98
+
99
+ _response_types_map: Dict[str, Optional[str]] = {
100
+ '200': "List[RobotController]",
101
+ '404': None,
102
+ '500': None,
103
+ }
104
+ response_data = await self.api_client.call_api(
105
+ *_param,
106
+ _request_timeout=_request_timeout
107
+ )
108
+ await response_data.read()
109
+ return self.api_client.response_deserialize(
110
+ response_data=response_data,
111
+ response_types_map=_response_types_map,
112
+ ).data
113
+
114
+
115
+ @validate_call
116
+ async def get_controller_config_from_arp_scan_with_http_info(
117
+ self,
118
+ robot_controller_configuration_request: RobotControllerConfigurationRequest,
119
+ _request_timeout: Union[
120
+ None,
121
+ Annotated[StrictFloat, Field(gt=0)],
122
+ Tuple[
123
+ Annotated[StrictFloat, Field(gt=0)],
124
+ Annotated[StrictFloat, Field(gt=0)]
125
+ ]
126
+ ] = None,
127
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
128
+ _content_type: Optional[StrictStr] = None,
129
+ _headers: Optional[Dict[StrictStr, Any]] = None,
130
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
131
+ ) -> ApiResponse[List[RobotController]]:
132
+ """Robot Controller Configurations
133
+
134
+ Returns all robot controller configurations that match the provided [ARP scan result](#/operations/getArpScan).
135
+
136
+ :param robot_controller_configuration_request: (required)
137
+ :type robot_controller_configuration_request: RobotControllerConfigurationRequest
138
+ :param _request_timeout: timeout setting for this request. If one
139
+ number provided, it will be total request
140
+ timeout. It can also be a pair (tuple) of
141
+ (connection, read) timeouts.
142
+ :type _request_timeout: int, tuple(int, int), optional
143
+ :param _request_auth: set to override the auth_settings for an a single
144
+ request; this effectively ignores the
145
+ authentication in the spec for a single request.
146
+ :type _request_auth: dict, optional
147
+ :param _content_type: force content-type for the request.
148
+ :type _content_type: str, Optional
149
+ :param _headers: set to override the headers for a single
150
+ request; this effectively ignores the headers
151
+ in the spec for a single request.
152
+ :type _headers: dict, optional
153
+ :param _host_index: set to override the host_index for a single
154
+ request; this effectively ignores the host_index
155
+ in the spec for a single request.
156
+ :type _host_index: int, optional
157
+ :return: Returns the result object.
158
+ """ # noqa: E501
159
+
160
+ _param = self._get_controller_config_from_arp_scan_serialize(
161
+ robot_controller_configuration_request=robot_controller_configuration_request,
162
+ _request_auth=_request_auth,
163
+ _content_type=_content_type,
164
+ _headers=_headers,
165
+ _host_index=_host_index
166
+ )
167
+
168
+ _response_types_map: Dict[str, Optional[str]] = {
169
+ '200': "List[RobotController]",
170
+ '404': None,
171
+ '500': None,
172
+ }
173
+ response_data = await self.api_client.call_api(
174
+ *_param,
175
+ _request_timeout=_request_timeout
176
+ )
177
+ await response_data.read()
178
+ return self.api_client.response_deserialize(
179
+ response_data=response_data,
180
+ response_types_map=_response_types_map,
181
+ )
182
+
183
+
184
+ @validate_call
185
+ async def get_controller_config_from_arp_scan_without_preload_content(
186
+ self,
187
+ robot_controller_configuration_request: RobotControllerConfigurationRequest,
188
+ _request_timeout: Union[
189
+ None,
190
+ Annotated[StrictFloat, Field(gt=0)],
191
+ Tuple[
192
+ Annotated[StrictFloat, Field(gt=0)],
193
+ Annotated[StrictFloat, Field(gt=0)]
194
+ ]
195
+ ] = None,
196
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
197
+ _content_type: Optional[StrictStr] = None,
198
+ _headers: Optional[Dict[StrictStr, Any]] = None,
199
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
200
+ ) -> RESTResponseType:
201
+ """Robot Controller Configurations
202
+
203
+ Returns all robot controller configurations that match the provided [ARP scan result](#/operations/getArpScan).
204
+
205
+ :param robot_controller_configuration_request: (required)
206
+ :type robot_controller_configuration_request: RobotControllerConfigurationRequest
207
+ :param _request_timeout: timeout setting for this request. If one
208
+ number provided, it will be total request
209
+ timeout. It can also be a pair (tuple) of
210
+ (connection, read) timeouts.
211
+ :type _request_timeout: int, tuple(int, int), optional
212
+ :param _request_auth: set to override the auth_settings for an a single
213
+ request; this effectively ignores the
214
+ authentication in the spec for a single request.
215
+ :type _request_auth: dict, optional
216
+ :param _content_type: force content-type for the request.
217
+ :type _content_type: str, Optional
218
+ :param _headers: set to override the headers for a single
219
+ request; this effectively ignores the headers
220
+ in the spec for a single request.
221
+ :type _headers: dict, optional
222
+ :param _host_index: set to override the host_index for a single
223
+ request; this effectively ignores the host_index
224
+ in the spec for a single request.
225
+ :type _host_index: int, optional
226
+ :return: Returns the result object.
227
+ """ # noqa: E501
228
+
229
+ _param = self._get_controller_config_from_arp_scan_serialize(
230
+ robot_controller_configuration_request=robot_controller_configuration_request,
231
+ _request_auth=_request_auth,
232
+ _content_type=_content_type,
233
+ _headers=_headers,
234
+ _host_index=_host_index
235
+ )
236
+
237
+ _response_types_map: Dict[str, Optional[str]] = {
238
+ '200': "List[RobotController]",
239
+ '404': None,
240
+ '500': None,
241
+ }
242
+ response_data = await self.api_client.call_api(
243
+ *_param,
244
+ _request_timeout=_request_timeout
245
+ )
246
+ return response_data.response
247
+
248
+
249
+ def _get_controller_config_from_arp_scan_serialize(
250
+ self,
251
+ robot_controller_configuration_request,
252
+ _request_auth,
253
+ _content_type,
254
+ _headers,
255
+ _host_index,
256
+ ) -> RequestSerialized:
257
+
258
+ _host = None
259
+
260
+ _collection_formats: Dict[str, str] = {
261
+ }
262
+
263
+ _path_params: Dict[str, str] = {}
264
+ _query_params: List[Tuple[str, str]] = []
265
+ _header_params: Dict[str, Optional[str]] = _headers or {}
266
+ _form_params: List[Tuple[str, str]] = []
267
+ _files: Dict[str, Union[str, bytes]] = {}
268
+ _body_params: Optional[bytes] = None
269
+
270
+ # process the path parameters
271
+ # process the query parameters
272
+ # process the header parameters
273
+ # process the form parameters
274
+ # process the body parameter
275
+ if robot_controller_configuration_request is not None:
276
+ _body_params = robot_controller_configuration_request
277
+
278
+
279
+ # set the HTTP header `Accept`
280
+ _header_params['Accept'] = self.api_client.select_header_accept(
281
+ [
282
+ 'application/json'
283
+ ]
284
+ )
285
+
286
+ # set the HTTP header `Content-Type`
287
+ if _content_type:
288
+ _header_params['Content-Type'] = _content_type
289
+ else:
290
+ _default_content_type = (
291
+ self.api_client.select_header_content_type(
292
+ [
293
+ 'application/json'
294
+ ]
295
+ )
296
+ )
297
+ if _default_content_type is not None:
298
+ _header_params['Content-Type'] = _default_content_type
299
+
300
+ # authentication setting
301
+ _auth_settings: List[str] = [
302
+ 'BearerAuth'
303
+ ]
304
+
305
+ return self.api_client.param_serialize(
306
+ method='POST',
307
+ resource_path='/v2/experimental/system/network/controllers',
308
+ path_params=_path_params,
309
+ query_params=_query_params,
310
+ header_params=_header_params,
311
+ body=_body_params,
312
+ post_params=_form_params,
313
+ files=_files,
314
+ auth_settings=_auth_settings,
315
+ collection_formats=_collection_formats,
316
+ _host=_host,
317
+ _request_auth=_request_auth
318
+ )
319
+
320
+
321
+
44
322
  @validate_call
45
323
  async def get_robot_configurations(
46
324
  self,
@@ -394,7 +394,7 @@ class VirtualControllerApi:
394
394
  ) -> None:
395
395
  """Add Motion Group
396
396
 
397
- Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
397
+ Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json_data** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json_data**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json_data): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
398
398
 
399
399
  :param cell: Unique identifier addressing a cell in all API calls. (required)
400
400
  :type cell: str
@@ -471,7 +471,7 @@ class VirtualControllerApi:
471
471
  ) -> ApiResponse[None]:
472
472
  """Add Motion Group
473
473
 
474
- Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
474
+ Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json_data** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json_data**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json_data): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
475
475
 
476
476
  :param cell: Unique identifier addressing a cell in all API calls. (required)
477
477
  :type cell: str
@@ -548,7 +548,7 @@ class VirtualControllerApi:
548
548
  ) -> RESTResponseType:
549
549
  """Add Motion Group
550
550
 
551
- Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
551
+ Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json_data** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json_data**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json_data): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
552
552
 
553
553
  :param cell: Unique identifier addressing a cell in all API calls. (required)
554
554
  :type cell: str
@@ -91,7 +91,7 @@ class ApiClient:
91
91
  self.default_headers[header_name] = header_value
92
92
  self.cookie = cookie
93
93
  # Set default User-Agent.
94
- self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.2.0.dev62'
94
+ self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.2.0.dev63'
95
95
  self.client_side_validation = configuration.client_side_validation
96
96
 
97
97
  async def __aenter__(self):
@@ -511,7 +511,7 @@ class Configuration:
511
511
  "OS: {env}\n"\
512
512
  "Python Version: {pyversion}\n"\
513
513
  "Version of the API: 2.2.0 dev\n"\
514
- "SDK Package Version: 26.2.0.dev62".\
514
+ "SDK Package Version: 26.2.0.dev63".\
515
515
  format(env=sys.platform, pyversion=sys.version)
516
516
 
517
517
  def get_host_settings(self) -> List[HostSetting]:
@@ -228,6 +228,7 @@ from .rectangular_capsule import RectangularCapsule
228
228
  from .release_channel import ReleaseChannel
229
229
  from .robot_controller import RobotController
230
230
  from .robot_controller_configuration import RobotControllerConfiguration
231
+ from .robot_controller_configuration_request import RobotControllerConfigurationRequest
231
232
  from .robot_controller_state import RobotControllerState
232
233
  from .robot_system_mode import RobotSystemMode
233
234
  from .robot_tcp import RobotTcp
@@ -492,6 +493,7 @@ __all__ = [
492
493
  "ReleaseChannel",
493
494
  "RobotController",
494
495
  "RobotControllerConfiguration",
496
+ "RobotControllerConfigurationRequest",
495
497
  "RobotControllerState",
496
498
  "RobotSystemMode",
497
499
  "RobotTcp",
@@ -27,10 +27,10 @@ class MotionGroupFromJson(BaseModel):
27
27
  MotionGroupFromJson
28
28
  """ # noqa: E501
29
29
  motion_group: StrictStr = Field(description="Unique identifier for the motion group to be added.")
30
- var_json: StrictStr = Field(description="Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). ", alias="json")
30
+ json_data: StrictStr = Field(description="Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). ")
31
31
  extracted_motion_group_id: StrictStr = Field(description="The identifier of the motion group that needs to be extracted from the provided JSON configuration. ")
32
32
  initial_joint_position: Optional[StrictStr] = Field(default=None, description="Initial joint position of the added motion group. Provides the joint position as a JSON array of float values in radians, where the array length must match the robot's degrees of freedom (DOF), e.g., `\"[0, 0, 0, 0, 0, 0]\"` for a 6-DOF robot. If the provided array length does not match the robot's DOF, the array will be adjusted: if it is longer, extra values will be truncated; if it is shorter, missing values will be filled with zeros. ")
33
- __properties: ClassVar[List[str]] = ["motion_group", "json", "extracted_motion_group_id", "initial_joint_position"]
33
+ __properties: ClassVar[List[str]] = ["motion_group", "json_data", "extracted_motion_group_id", "initial_joint_position"]
34
34
 
35
35
  model_config = ConfigDict(
36
36
  populate_by_name=True,
@@ -88,7 +88,7 @@ class MotionGroupFromJson(BaseModel):
88
88
 
89
89
  _obj = cls.model_validate({
90
90
  "motion_group": obj.get("motion_group"),
91
- "json": obj.get("json"),
91
+ "json_data": obj.get("json_data"),
92
92
  "extracted_motion_group_id": obj.get("extracted_motion_group_id"),
93
93
  "initial_joint_position": obj.get("initial_joint_position")
94
94
  })
@@ -0,0 +1,110 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Wandelbots NOVA API
5
+
6
+ Interact with robots in an easy and intuitive way.
7
+
8
+ The version of the OpenAPI document: 2.2.0 dev
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
21
+ from typing import Any, ClassVar, Dict, List
22
+ from wandelbots_api_client.v2.models.network_device import NetworkDevice
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+ class RobotControllerConfigurationRequest(BaseModel):
27
+ """
28
+ Information to generate all robot controller configurations that match a given ARP scan result.
29
+ """ # noqa: E501
30
+ ip: StrictStr = Field(description="The IPv4 address assigned to the network interface where the ARP scan was performed. ")
31
+ network_devices: List[NetworkDevice] = Field(description="Array of network devices.")
32
+ __properties: ClassVar[List[str]] = ["ip", "network_devices"]
33
+
34
+ model_config = ConfigDict(
35
+ populate_by_name=True,
36
+ validate_assignment=True,
37
+ protected_namespaces=(),
38
+ )
39
+
40
+
41
+ def to_str(self) -> str:
42
+ """Returns the string representation of the model using alias"""
43
+ return pprint.pformat(self.model_dump(by_alias=True, exclude_none=True))
44
+
45
+ def to_json(self) -> str:
46
+ """
47
+ Returns the JSON representation of the model using alias
48
+
49
+ Do not use pydantic v2 .model_dump_json(by_alias=True, exclude_unset=True) here!
50
+ It is unable to resolve nested types generated by openapi-generator.
51
+ """
52
+ return json.dumps(self.to_dict())
53
+
54
+ @classmethod
55
+ def from_json(cls, json_str: str) -> Optional[Self]:
56
+ """Create an instance of RobotControllerConfigurationRequest from a JSON string"""
57
+ return cls.from_dict(json.loads(json_str))
58
+
59
+ def to_dict(self) -> Dict[str, Any]:
60
+ """Return the dictionary representation of the model using alias.
61
+
62
+ This has the following differences from calling pydantic's
63
+ `self.model_dump(by_alias=True)`:
64
+
65
+ * `None` is only added to the output dict for nullable fields that
66
+ were set at model initialization. Other fields with value `None`
67
+ are ignored.
68
+ """
69
+ excluded_fields: Set[str] = set([
70
+ ])
71
+
72
+ _dict = self.model_dump(
73
+ by_alias=True,
74
+ exclude=excluded_fields,
75
+ exclude_none=True,
76
+ )
77
+ # override the default output from pydantic by calling `to_dict()` of each item in network_devices (list)
78
+ _items = []
79
+ if self.network_devices:
80
+ for _item in self.network_devices:
81
+ # >>> Modified from https://github.com/OpenAPITools/openapi-generator/blob/v7.6.0/modules/openapi-generator/src/main/resources/python/model_generic.mustache
82
+ # to not drop empty elements in lists
83
+ if _item is not None:
84
+ _items.append(_item.to_dict())
85
+ # <<< End modification
86
+ _dict['network_devices'] = _items
87
+ return _dict
88
+
89
+ @classmethod
90
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
91
+ """Create an instance of RobotControllerConfigurationRequest from a dict"""
92
+ if obj is None:
93
+ return None
94
+
95
+ if not isinstance(obj, dict):
96
+ return cls.model_validate(obj)
97
+
98
+ _obj = cls.model_validate({
99
+ "ip": obj.get("ip"),
100
+ "network_devices": [
101
+ # >>> Modified from https://github.com/OpenAPITools/openapi-generator/blob/v7.6.0/modules/openapi-generator/src/main/resources/python/model_generic.mustache
102
+ # to allow dicts in lists
103
+ NetworkDevice.from_dict(_item) if hasattr(NetworkDevice, 'from_dict') else _item
104
+ # <<< End modification
105
+ for _item in obj["network_devices"]
106
+ ] if obj.get("network_devices") is not None else None
107
+ })
108
+ return _obj
109
+
110
+
@@ -13,7 +13,7 @@
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.2.0.dev62"
16
+ __version__ = "26.2.0.dev63"
17
17
 
18
18
  from . import api
19
19
  from . import api_client
@@ -24,6 +24,8 @@ from urllib.parse import quote
24
24
 
25
25
  from pydantic import StrictStr
26
26
  from typing import List
27
+ from wandelbots_api_client.v2_pydantic.models import RobotController
28
+ from wandelbots_api_client.v2_pydantic.models import RobotControllerConfigurationRequest
27
29
 
28
30
  from wandelbots_api_client.v2_pydantic.api_client import ApiClient, RequestSerialized
29
31
  from wandelbots_api_client.v2_pydantic.api_response import ApiResponse
@@ -41,6 +43,285 @@ class RobotConfigurationsApi:
41
43
  api_client = ApiClient.get_default()
42
44
  self.api_client = api_client
43
45
 
46
+ @validate_call
47
+ async def get_controller_config_from_arp_scan(
48
+ self,
49
+ robot_controller_configuration_request: RobotControllerConfigurationRequest,
50
+ _request_timeout: Union[
51
+ None,
52
+ Annotated[StrictFloat, Field(gt=0)],
53
+ Tuple[
54
+ Annotated[StrictFloat, Field(gt=0)],
55
+ Annotated[StrictFloat, Field(gt=0)]
56
+ ]
57
+ ] = None,
58
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
59
+ _content_type: Optional[StrictStr] = None,
60
+ _headers: Optional[Dict[StrictStr, Any]] = None,
61
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
62
+ ) -> List[RobotController]:
63
+ """Robot Controller Configurations
64
+
65
+ Returns all robot controller configurations that match the provided [ARP scan result](#/operations/getArpScan).
66
+
67
+ :param robot_controller_configuration_request: (required)
68
+ :type robot_controller_configuration_request: RobotControllerConfigurationRequest
69
+ :param _request_timeout: timeout setting for this request. If one
70
+ number provided, it will be total request
71
+ timeout. It can also be a pair (tuple) of
72
+ (connection, read) timeouts.
73
+ :type _request_timeout: int, tuple(int, int), optional
74
+ :param _request_auth: set to override the auth_settings for an a single
75
+ request; this effectively ignores the
76
+ authentication in the spec for a single request.
77
+ :type _request_auth: dict, optional
78
+ :param _content_type: force content-type for the request.
79
+ :type _content_type: str, Optional
80
+ :param _headers: set to override the headers for a single
81
+ request; this effectively ignores the headers
82
+ in the spec for a single request.
83
+ :type _headers: dict, optional
84
+ :param _host_index: set to override the host_index for a single
85
+ request; this effectively ignores the host_index
86
+ in the spec for a single request.
87
+ :type _host_index: int, optional
88
+ :return: Returns the result object.
89
+ """ # noqa: E501
90
+
91
+ _param = self._get_controller_config_from_arp_scan_serialize(
92
+ robot_controller_configuration_request=robot_controller_configuration_request,
93
+ _request_auth=_request_auth,
94
+ _content_type=_content_type,
95
+ _headers=_headers,
96
+ _host_index=_host_index
97
+ )
98
+
99
+ _response_types_map: Dict[str, Optional[str]] = {
100
+ '200': "List[RobotController]",
101
+ '404': None,
102
+ '500': None,
103
+ }
104
+
105
+ response_data = await self.api_client.call_api(
106
+ *_param,
107
+ _request_timeout=_request_timeout
108
+ )
109
+ await response_data.read()
110
+ return self.api_client.response_deserialize(
111
+ response_data=response_data,
112
+ response_types_map=_response_types_map,
113
+ ).data
114
+
115
+
116
+ @validate_call
117
+ async def get_controller_config_from_arp_scan_with_http_info(
118
+ self,
119
+ robot_controller_configuration_request: RobotControllerConfigurationRequest,
120
+ _request_timeout: Union[
121
+ None,
122
+ Annotated[StrictFloat, Field(gt=0)],
123
+ Tuple[
124
+ Annotated[StrictFloat, Field(gt=0)],
125
+ Annotated[StrictFloat, Field(gt=0)]
126
+ ]
127
+ ] = None,
128
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
129
+ _content_type: Optional[StrictStr] = None,
130
+ _headers: Optional[Dict[StrictStr, Any]] = None,
131
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
132
+ ) -> ApiResponse[List[RobotController]]:
133
+ """Robot Controller Configurations
134
+
135
+ Returns all robot controller configurations that match the provided [ARP scan result](#/operations/getArpScan).
136
+
137
+ :param robot_controller_configuration_request: (required)
138
+ :type robot_controller_configuration_request: RobotControllerConfigurationRequest
139
+ :param _request_timeout: timeout setting for this request. If one
140
+ number provided, it will be total request
141
+ timeout. It can also be a pair (tuple) of
142
+ (connection, read) timeouts.
143
+ :type _request_timeout: int, tuple(int, int), optional
144
+ :param _request_auth: set to override the auth_settings for an a single
145
+ request; this effectively ignores the
146
+ authentication in the spec for a single request.
147
+ :type _request_auth: dict, optional
148
+ :param _content_type: force content-type for the request.
149
+ :type _content_type: str, Optional
150
+ :param _headers: set to override the headers for a single
151
+ request; this effectively ignores the headers
152
+ in the spec for a single request.
153
+ :type _headers: dict, optional
154
+ :param _host_index: set to override the host_index for a single
155
+ request; this effectively ignores the host_index
156
+ in the spec for a single request.
157
+ :type _host_index: int, optional
158
+ :return: Returns the result object.
159
+ """ # noqa: E501
160
+
161
+ _param = self._get_controller_config_from_arp_scan_serialize(
162
+ robot_controller_configuration_request=robot_controller_configuration_request,
163
+ _request_auth=_request_auth,
164
+ _content_type=_content_type,
165
+ _headers=_headers,
166
+ _host_index=_host_index
167
+ )
168
+
169
+ _response_types_map: Dict[str, Optional[str]] = {
170
+ '200': "List[RobotController]",
171
+ '404': None,
172
+ '500': None,
173
+ }
174
+
175
+ response_data = await self.api_client.call_api(
176
+ *_param,
177
+ _request_timeout=_request_timeout
178
+ )
179
+ await response_data.read()
180
+ return self.api_client.response_deserialize(
181
+ response_data=response_data,
182
+ response_types_map=_response_types_map,
183
+ )
184
+
185
+
186
+ @validate_call
187
+ async def get_controller_config_from_arp_scan_without_preload_content(
188
+ self,
189
+ robot_controller_configuration_request: RobotControllerConfigurationRequest,
190
+ _request_timeout: Union[
191
+ None,
192
+ Annotated[StrictFloat, Field(gt=0)],
193
+ Tuple[
194
+ Annotated[StrictFloat, Field(gt=0)],
195
+ Annotated[StrictFloat, Field(gt=0)]
196
+ ]
197
+ ] = None,
198
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
199
+ _content_type: Optional[StrictStr] = None,
200
+ _headers: Optional[Dict[StrictStr, Any]] = None,
201
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
202
+ ) -> RESTResponseType:
203
+ """Robot Controller Configurations
204
+
205
+ Returns all robot controller configurations that match the provided [ARP scan result](#/operations/getArpScan).
206
+
207
+ :param robot_controller_configuration_request: (required)
208
+ :type robot_controller_configuration_request: RobotControllerConfigurationRequest
209
+ :param _request_timeout: timeout setting for this request. If one
210
+ number provided, it will be total request
211
+ timeout. It can also be a pair (tuple) of
212
+ (connection, read) timeouts.
213
+ :type _request_timeout: int, tuple(int, int), optional
214
+ :param _request_auth: set to override the auth_settings for an a single
215
+ request; this effectively ignores the
216
+ authentication in the spec for a single request.
217
+ :type _request_auth: dict, optional
218
+ :param _content_type: force content-type for the request.
219
+ :type _content_type: str, Optional
220
+ :param _headers: set to override the headers for a single
221
+ request; this effectively ignores the headers
222
+ in the spec for a single request.
223
+ :type _headers: dict, optional
224
+ :param _host_index: set to override the host_index for a single
225
+ request; this effectively ignores the host_index
226
+ in the spec for a single request.
227
+ :type _host_index: int, optional
228
+ :return: Returns the result object.
229
+ """ # noqa: E501
230
+
231
+ _param = self._get_controller_config_from_arp_scan_serialize(
232
+ robot_controller_configuration_request=robot_controller_configuration_request,
233
+ _request_auth=_request_auth,
234
+ _content_type=_content_type,
235
+ _headers=_headers,
236
+ _host_index=_host_index
237
+ )
238
+
239
+ _response_types_map: Dict[str, Optional[str]] = {
240
+ '200': "List[RobotController]",
241
+ '404': None,
242
+ '500': None,
243
+ }
244
+
245
+ response_data = await self.api_client.call_api(
246
+ *_param,
247
+ _request_timeout=_request_timeout
248
+ )
249
+ return response_data.response
250
+
251
+
252
+ def _get_controller_config_from_arp_scan_serialize(
253
+ self,
254
+ robot_controller_configuration_request,
255
+ _request_auth,
256
+ _content_type,
257
+ _headers,
258
+ _host_index,
259
+ ) -> RequestSerialized:
260
+
261
+ _host = None
262
+
263
+ _collection_formats: Dict[str, str] = {
264
+ }
265
+
266
+ _path_params: Dict[str, str] = {}
267
+ _query_params: List[Tuple[str, str]] = []
268
+ _header_params: Dict[str, Optional[str]] = _headers or {}
269
+ _form_params: List[Tuple[str, str]] = []
270
+ _files: Dict[str, Union[str, bytes]] = {}
271
+ _body_params: Optional[bytes] = None
272
+
273
+ # process the path parameters
274
+ # process the query parameters
275
+ # process the header parameters
276
+ # process the form parameters
277
+ # process the body parameter
278
+ if robot_controller_configuration_request is not None:
279
+ _body_params = robot_controller_configuration_request
280
+
281
+
282
+ # set the HTTP header `Accept`
283
+ _header_params['Accept'] = self.api_client.select_header_accept(
284
+ [
285
+ 'application/json'
286
+ ]
287
+ )
288
+
289
+ # set the HTTP header `Content-Type`
290
+ if _content_type:
291
+ _header_params['Content-Type'] = _content_type
292
+ else:
293
+ _default_content_type = (
294
+ self.api_client.select_header_content_type(
295
+ [
296
+ 'application/json'
297
+ ]
298
+ )
299
+ )
300
+ if _default_content_type is not None:
301
+ _header_params['Content-Type'] = _default_content_type
302
+
303
+ # authentication setting
304
+ _auth_settings: List[str] = [
305
+ 'BearerAuth'
306
+ ]
307
+
308
+ return self.api_client.param_serialize(
309
+ method='POST',
310
+ resource_path='/v2/experimental/system/network/controllers',
311
+ path_params=_path_params,
312
+ query_params=_query_params,
313
+ header_params=_header_params,
314
+ body=_body_params,
315
+ post_params=_form_params,
316
+ files=_files,
317
+ auth_settings=_auth_settings,
318
+ collection_formats=_collection_formats,
319
+ _host=_host,
320
+ _request_auth=_request_auth
321
+ )
322
+
323
+
324
+
44
325
  @validate_call
45
326
  async def get_robot_configurations(
46
327
  self,
@@ -397,7 +397,7 @@ class VirtualControllerApi:
397
397
  ) -> None:
398
398
  """Add Motion Group
399
399
 
400
- Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
400
+ Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json_data** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json_data**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json_data): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
401
401
 
402
402
  :param cell: Unique identifier addressing a cell in all API calls. (required)
403
403
  :type cell: str
@@ -475,7 +475,7 @@ class VirtualControllerApi:
475
475
  ) -> ApiResponse[None]:
476
476
  """Add Motion Group
477
477
 
478
- Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
478
+ Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json_data** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json_data**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json_data): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
479
479
 
480
480
  :param cell: Unique identifier addressing a cell in all API calls. (required)
481
481
  :type cell: str
@@ -553,7 +553,7 @@ class VirtualControllerApi:
553
553
  ) -> RESTResponseType:
554
554
  """Add Motion Group
555
555
 
556
- Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
556
+ Adds a motion group configuration for the virtual robot controller. Fields: - Only one of **motion_group_model** or **json_data** should be set. - **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types. - **json_data**: Full JSON configuration of the virtual robot controller. This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration). - **extracted_motion_group_id** (required when using json_data): The motion group identifier to extract from the provided JSON configuration. - **motion_group**: Unique identifier for the motion group to be added. - **initial_joint_position**: Specifies the initial joint position for the added motion group. <!-- theme: info --> > #### NOTE > > When a motion group is added, **the virtual robot is restarted** to apply the new configuration. > > During this restart: > - Robot visualization can temporarily disappear or appear outdated in the UI. > - Motion group changes are not immediately visible in visualizations. > - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again. > > The API call itself **does not wait until the restart and re-synchronization are complete**. > This means that immediately after a successful response, the new motion group may not yet be available for use.
557
557
 
558
558
  :param cell: Unique identifier addressing a cell in all API calls. (required)
559
559
  :type cell: str
@@ -91,7 +91,7 @@ class ApiClient:
91
91
  self.default_headers[header_name] = header_value
92
92
  self.cookie = cookie
93
93
  # Set default User-Agent.
94
- self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.2.0.dev62'
94
+ self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.2.0.dev63'
95
95
  self.client_side_validation = configuration.client_side_validation
96
96
 
97
97
  async def __aenter__(self):
@@ -511,7 +511,7 @@ class Configuration:
511
511
  "OS: {env}\n"\
512
512
  "Python Version: {pyversion}\n"\
513
513
  "Version of the API: 2.2.0 dev\n"\
514
- "SDK Package Version: 26.2.0.dev62".\
514
+ "SDK Package Version: 26.2.0.dev63".\
515
515
  format(env=sys.platform, pyversion=sys.version)
516
516
 
517
517
  def get_host_settings(self) -> List[HostSetting]:
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: public.openapi.yaml
3
- # timestamp: 2026-02-27T13:31:59+00:00
3
+ # timestamp: 2026-02-27T17:12:39+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1456,6 +1456,19 @@ class KinematicModel(BaseModel):
1456
1456
  """
1457
1457
 
1458
1458
 
1459
+ class RobotControllerConfigurationRequest(BaseModel):
1460
+ """
1461
+ Information to generate all robot controller configurations that match a given ARP scan result.
1462
+ """
1463
+
1464
+ ip: IPv4Address
1465
+ """
1466
+ The IPv4 address assigned to the network interface where the ARP scan was performed.
1467
+
1468
+ """
1469
+ network_devices: ArpScanResponse
1470
+
1471
+
1459
1472
  class ControllerDescription(BaseModel):
1460
1473
  """
1461
1474
  The data type to describe a robot controller.
@@ -4235,7 +4248,7 @@ class MotionGroupFromJson(BaseModel):
4235
4248
  """
4236
4249
  Unique identifier for the motion group to be added.
4237
4250
  """
4238
- json_: Annotated[str, Field(alias='json')]
4251
+ json_data: str
4239
4252
  """
4240
4253
  Full JSON configuration of the virtual robot controller.
4241
4254
  This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wandelbots_api_client
3
- Version: 26.2.0.dev62
3
+ Version: 26.2.0.dev63
4
4
  Summary: Wandelbots Python Client: Interact with robots in an easy and intuitive way.
5
5
  Home-page:
6
6
  Author: Copyright (c) 2025 Wandelbots GmbH
@@ -41,7 +41,7 @@ Dynamic: license-file
41
41
  Interact with robots in an easy and intuitive way.
42
42
 
43
43
  - Compatible API version: 1.3.0 dev (can be found at the home screen of your instance -> API)
44
- - Package version: 26.2.0.dev62
44
+ - Package version: 26.2.0.dev63
45
45
 
46
46
  ## Requirements.
47
47
  Python >=3.11, Python < 4.0
@@ -1,8 +1,8 @@
1
- wandelbots_api_client/__init__.py,sha256=wE8IS4OZFiqJzOhirhhXrrqkQXS35fjt3BzyzbM_DDw,1026
2
- wandelbots_api_client/api_client.py,sha256=jwP2QUAzznEa9cSn_fwUfRGb_WHDN7SrCVA4_A9Toj0,27916
1
+ wandelbots_api_client/__init__.py,sha256=mNi2vmkrUZNrrYBXFt0jeu02z81dte9q-bkwsVaElbI,1026
2
+ wandelbots_api_client/api_client.py,sha256=w1lc3OYXJMx4gayvHhP6rjebifKo_9afYP6XQtX_Uxs,27916
3
3
  wandelbots_api_client/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
4
4
  wandelbots_api_client/authorization.py,sha256=1ZKTpDU3t-7clI0hOqijkg-4Em0hKAbLQL6dyGO_r9w,7928
5
- wandelbots_api_client/configuration.py,sha256=9IiTVx9Rg6ST92ZsE4tikAGe9ZU5YKAxfFPUl4KzBaw,18177
5
+ wandelbots_api_client/configuration.py,sha256=FLtJb8RwkglxSnKqUSapyEflBnYZQaSgSEf_MsIqAPQ,18177
6
6
  wandelbots_api_client/exceptions.py,sha256=usEVkwFo1FU6F0d3eOnKPZ-VkKMr8ipSO6DPOnKkZ1A,6432
7
7
  wandelbots_api_client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  wandelbots_api_client/rest.py,sha256=aR_w-qoIH3t8kc2_3w_UMZc7dK7jHrS3FyoeSur_n6I,7260
@@ -327,10 +327,10 @@ wandelbots_api_client/models/virtual_controller.py,sha256=64M1EgNZNDz77egckd4koi
327
327
  wandelbots_api_client/models/virtual_controller_types.py,sha256=IIcNSonSxyah0DlHiiW_bSol1P5m5wSY5_DTvU2nj0w,6571
328
328
  wandelbots_api_client/models/virtual_robot_configuration.py,sha256=Hwdh6-w7eAXOSQoShhK9ZzAai5bGTaEbnQ0Sraprnsg,2971
329
329
  wandelbots_api_client/models/yaskawa_controller.py,sha256=Qc_ABUh8wphtDA0IKPTpaIo91vkGKJyS60Q5YEklCwA,3192
330
- wandelbots_api_client/v2/__init__.py,sha256=u15rujzpQxfANH7A1o9FQ0U_dSzfUeJMSFF1GXTKzGI,1026
331
- wandelbots_api_client/v2/api_client.py,sha256=BLWMeB1HHcAqLGOy-f3_B3i6_jupbLD4I3eWYzDFuT4,27934
330
+ wandelbots_api_client/v2/__init__.py,sha256=4EJlHTZ_ITnK1qHRn1FYYy8nknrRlGJ7apNWPoIzJq0,1026
331
+ wandelbots_api_client/v2/api_client.py,sha256=cvqHPQyicUn3Lnu2tqYbwSgyaYUvghRB4dAg2am-ybM,27934
332
332
  wandelbots_api_client/v2/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
333
- wandelbots_api_client/v2/configuration.py,sha256=mu4BGxfyK_bNPBW6IUav6pSDY7faAtmiVkfNSuXSzME,18180
333
+ wandelbots_api_client/v2/configuration.py,sha256=fvBcEdgHNkp85VTQCM_eEjBZGsW6JVV-BJBVZK_TSvU,18180
334
334
  wandelbots_api_client/v2/exceptions.py,sha256=1wvgAKcxzKimGzzeIRqIAJVjNvzbWjcUDWWxahnpE-4,6432
335
335
  wandelbots_api_client/v2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
336
  wandelbots_api_client/v2/rest.py,sha256=ZAsCiRuuX90xFwHxyxE0aE6sl2fsSlXPKMG8SWMsvaA,7263
@@ -346,7 +346,7 @@ wandelbots_api_client/v2/api/license_api.py,sha256=m0_tRGwgGhfE-DOiP0BIrK5CTjXKe
346
346
  wandelbots_api_client/v2/api/motion_group_api.py,sha256=bsoBhxsRBVyMyDJ1uyFc7fDzrxi8lRLkcwV2qdrWqjs,32740
347
347
  wandelbots_api_client/v2/api/motion_group_models_api.py,sha256=ho4GGqiYYFMGr887JJJBenUhEsDKJaOKjkF0bJNkOLk,59568
348
348
  wandelbots_api_client/v2/api/program_api.py,sha256=YPYtpJQc0xJBP_TGPmwZOaQhhyroD-7z_LMFrhUF6A4,45835
349
- wandelbots_api_client/v2/api/robot_configurations_api.py,sha256=Bl48y6vfDzHac9NicUWDSJ9y-O9-0JzC6HvWssBtSxU,10969
349
+ wandelbots_api_client/v2/api/robot_configurations_api.py,sha256=D2cTipYgkofalm5vHnSUbXcLGHi9nrd5XWgeEPsiQk4,22644
350
350
  wandelbots_api_client/v2/api/store_collision_components_api.py,sha256=sO4aO7zj0bKaeBpusRazIgWZCO1bSIFI6llsplGN_7I,164794
351
351
  wandelbots_api_client/v2/api/store_collision_setups_api.py,sha256=sxFzLYJHjV4mLfPykRuW_LgPTWhzkZRAw3A3HBSeslg,55807
352
352
  wandelbots_api_client/v2/api/store_object_api.py,sha256=3YV4KU2eBGjb9B00vKymKFXybyuDC5Oqw3G06lA9xZY,65682
@@ -355,10 +355,10 @@ wandelbots_api_client/v2/api/trajectory_caching_api.py,sha256=o6KwUSHM0aXzPsrMgb
355
355
  wandelbots_api_client/v2/api/trajectory_execution_api.py,sha256=jy5FwwiYfxrrXxdGK1j2r-vwIsZiEWmp1e7lxa8tX_I,9179
356
356
  wandelbots_api_client/v2/api/trajectory_planning_api.py,sha256=x9BwKU6ANupL6XtquamlP1xpwaBEpCRxYyE5pBtnu1M,42708
357
357
  wandelbots_api_client/v2/api/version_api.py,sha256=Nu-0-dWBQOjeapuJuaytcJEEf85HCUoTq8lDEWlmGxE,10364
358
- wandelbots_api_client/v2/api/virtual_controller_api.py,sha256=9SgA1u2pikP8_9AnIEkEfkHgAC65rAv67YzbFrzdKkk,237743
358
+ wandelbots_api_client/v2/api/virtual_controller_api.py,sha256=RHruBBapGRfMkyevRd8gOcdv2aAPyf35WuwibcOB7ek,237788
359
359
  wandelbots_api_client/v2/api/virtual_controller_behavior_api.py,sha256=PyqDhEKtZqzwq_HiWCSJ9kB-vSEziiFNxf34VGYlbxE,42162
360
360
  wandelbots_api_client/v2/api/virtual_controller_inputs_outputs_api.py,sha256=_qfFNwbJqrBfoogjuvOj4wr48eqLATitQN5t-eywfhA,42407
361
- wandelbots_api_client/v2/models/__init__.py,sha256=0FoIWfGFlU0TfUTnCTzDeF0S-LdFjdgaqVE2qUJfjXA,21438
361
+ wandelbots_api_client/v2/models/__init__.py,sha256=j12JNmenTq800zkfB6CDEKWrqIZqouYikTGlQbCkJC0,21570
362
362
  wandelbots_api_client/v2/models/abb_controller.py,sha256=MweK0lJwvzbAe1eXgHDGd2JC_ocr67zhiU42SqWGTSs,3860
363
363
  wandelbots_api_client/v2/models/abb_controller_egm_server.py,sha256=iLcA1wV55zAeEWlZFKN5XbgdUbh0rLRnH7lRiQSpZ1I,2776
364
364
  wandelbots_api_client/v2/models/activate_license_request.py,sha256=6lAkeIFpdudXMdx_ZMQ8vzEuyPjbfB-gt7dUL-nz7U0,2693
@@ -511,7 +511,7 @@ wandelbots_api_client/v2/models/motion_command.py,sha256=oWk6WepLHkK2F0eF019_YMz
511
511
  wandelbots_api_client/v2/models/motion_command_blending.py,sha256=HcdEwR2bVBmrPySyOfD5z4huInPL60B9EnggrSSSkMg,6183
512
512
  wandelbots_api_client/v2/models/motion_command_path.py,sha256=EGtpR427TZf2wNp4U1LiFSqYBbID2jFuvSHU7Ylc9nE,8759
513
513
  wandelbots_api_client/v2/models/motion_group_description.py,sha256=RqdUnxn6H9XbfP9vz0K-zmHXHpCAjKc6XOrVQZ8t7V4,12371
514
- wandelbots_api_client/v2/models/motion_group_from_json.py,sha256=2HvkiQqB6WA5oXg9Pz-Gh-4moOwGCtdCQYIFht8bWfc,3919
514
+ wandelbots_api_client/v2/models/motion_group_from_json.py,sha256=xGgBwQbFCz2glQxC_6lkbOO2BXT6sgSWO9hzhmX7Ctc,3921
515
515
  wandelbots_api_client/v2/models/motion_group_from_type.py,sha256=OXhDlzVO6Gza_Xr801DEx8cel8vFuaeAbVbCi3jVezY,3594
516
516
  wandelbots_api_client/v2/models/motion_group_info.py,sha256=5Wz0O0smD9C3vpqn1asDwlspvGcEacw21UftO0GA0wA,3093
517
517
  wandelbots_api_client/v2/models/motion_group_joints.py,sha256=YdrVxl_tbueMaV_VXERBSER6Dq5GkPzAGNyIu0ewRi4,3473
@@ -573,6 +573,7 @@ wandelbots_api_client/v2/models/rectangular_capsule.py,sha256=lhhZ908LBftE5pbUl6
573
573
  wandelbots_api_client/v2/models/release_channel.py,sha256=vSeafz85KKHJKhWjn0TpG_0sFyagj0tHWhNTByAR-7Y,842
574
574
  wandelbots_api_client/v2/models/robot_controller.py,sha256=F_d_vsx7aoHKIBP5bwzUjQmX9gcSOHpRQWCF475URPc,3724
575
575
  wandelbots_api_client/v2/models/robot_controller_configuration.py,sha256=dJpPeL8BAK8QMsQmszmH04vumS6a2SLLTkX7Te2fyP0,10298
576
+ wandelbots_api_client/v2/models/robot_controller_configuration_request.py,sha256=R2cMMEU5xyg16XWX_hgORCXfko6DuAp0BsNT-k2qlrs,4114
576
577
  wandelbots_api_client/v2/models/robot_controller_state.py,sha256=QqxazjWVJgJpJHWBB257qDrKd3ZfA_oLHpQwYPI03-M,6486
577
578
  wandelbots_api_client/v2/models/robot_system_mode.py,sha256=0xfEPfLjx-qDiHeqNGcn47ghc2CgHClFkBysXfx8SRk,2175
578
579
  wandelbots_api_client/v2/models/robot_tcp.py,sha256=pVEj9roqRzYmhajcfblJFAMDPvGlNLWP1E_dizjPXVc,3629
@@ -621,12 +622,12 @@ wandelbots_api_client/v2/models/virtual_controller_types.py,sha256=IIcNSonSxyah0
621
622
  wandelbots_api_client/v2/models/virtual_robot_configuration.py,sha256=Cotzwk4S2ikyAWL-tK8lNJXMHOO7Qx8Gl7v99hf9Zwc,2971
622
623
  wandelbots_api_client/v2/models/wait_for_io_event_request.py,sha256=juYd2wGeS351Kjot-AInwM0Lyeow3pC96ejMBXAY6h0,3211
623
624
  wandelbots_api_client/v2/models/yaskawa_controller.py,sha256=W8S8_PQEUe6tvfdTmXfowxPMDIsOreUZNAZbfX8d6-c,3040
624
- wandelbots_api_client/v2_pydantic/__init__.py,sha256=XNQz4vBoCWyglV2UdWmzow62A-GaqaTjj-yjY71SiPU,1061
625
- wandelbots_api_client/v2_pydantic/api_client.py,sha256=FEq1-57CMte_Z7qWPri_bDSX4FQ-WBHRrAnkaOE6XaA,28142
625
+ wandelbots_api_client/v2_pydantic/__init__.py,sha256=mhBdRyS7RUqyHOh9vzKDdoS4j-O-gc3aZbkykKLALWE,1061
626
+ wandelbots_api_client/v2_pydantic/api_client.py,sha256=XeG85YOFYBfItDgL8F6WO_hoJ8PcuU6RxzZ_7jfMMro,28142
626
627
  wandelbots_api_client/v2_pydantic/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
627
- wandelbots_api_client/v2_pydantic/configuration.py,sha256=apBwECT18tTWNZ_8mnRAfqOg7wQHg3bIcATlSzGFXmQ,18189
628
+ wandelbots_api_client/v2_pydantic/configuration.py,sha256=taccyFSA9MgVZqv8R_6qIXh2xz65Z2m70lMZ2SMQVmM,18189
628
629
  wandelbots_api_client/v2_pydantic/exceptions.py,sha256=1wvgAKcxzKimGzzeIRqIAJVjNvzbWjcUDWWxahnpE-4,6432
629
- wandelbots_api_client/v2_pydantic/models.py,sha256=xpb56nV0vm88XLYx6aTCZnzLzRv0HyQHGf-dnVTjlLY,143527
630
+ wandelbots_api_client/v2_pydantic/models.py,sha256=aeiv7nVfq9VkbU11tgDGmz1DVcfyq_lKnOGJU8luObk,143835
630
631
  wandelbots_api_client/v2_pydantic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
631
632
  wandelbots_api_client/v2_pydantic/rest.py,sha256=1SMxpN1XkOOb8Za8f0bbru_dUFHRFF4XUv777xcLwz0,7272
632
633
  wandelbots_api_client/v2_pydantic/virtual_controller_types.py,sha256=luk6nO5VP4f8NmaHVrgzWmcw4TaFyNXD3B9WoECdID8,5225
@@ -642,7 +643,7 @@ wandelbots_api_client/v2_pydantic/api/license_api.py,sha256=UwHYMqOaRXvyde_brrK9
642
643
  wandelbots_api_client/v2_pydantic/api/motion_group_api.py,sha256=tW7Xa4mS1vMRyeB2m7rMeVWz4_2_pBupvwJNhZJXd2E,32832
643
644
  wandelbots_api_client/v2_pydantic/api/motion_group_models_api.py,sha256=ZUiQ1ZBQ7GqXoHN3U0811NrFbYd1wbRWas3GQXsK9f4,59803
644
645
  wandelbots_api_client/v2_pydantic/api/program_api.py,sha256=MrTZIn4GfnJsr1iVvVr429m4Rdnu-xqgGoML6dcDTMQ,46019
645
- wandelbots_api_client/v2_pydantic/api/robot_configurations_api.py,sha256=4fPH8vdE0kQg6zPLWtEiaSepIqJSHqriXjbgcypJZ5c,11039
646
+ wandelbots_api_client/v2_pydantic/api/robot_configurations_api.py,sha256=2L_zv5oSz09yipNMWYNdbcPAHqrRmMjLt56-a3iglC8,22719
646
647
  wandelbots_api_client/v2_pydantic/api/store_collision_components_api.py,sha256=6fVkFrBbi5FshyHvVZz5l_T1fK2rt-D689eU23gyNm8,165466
647
648
  wandelbots_api_client/v2_pydantic/api/store_collision_setups_api.py,sha256=D4bOcwrpSjir9y4CTKb1Y-MX4iQ2UDZCs5-zMLVPOpE,56042
648
649
  wandelbots_api_client/v2_pydantic/api/store_object_api.py,sha256=p5GYHniJrYS86w15-symeehq3mNLkVb4j_JDUiSjsuY,65967
@@ -651,11 +652,11 @@ wandelbots_api_client/v2_pydantic/api/trajectory_caching_api.py,sha256=RzXCfsGUs
651
652
  wandelbots_api_client/v2_pydantic/api/trajectory_execution_api.py,sha256=2-XWY85ttazd8iwW65ZfN7FhICR0PoczTJ79374zi24,9209
652
653
  wandelbots_api_client/v2_pydantic/api/trajectory_planning_api.py,sha256=DB0zyMX6ghGDhyzXQMQELnw5jamFrKJkjQNRT3AT-aw,42757
653
654
  wandelbots_api_client/v2_pydantic/api/version_api.py,sha256=_JiiFL6PtA1i0fGk7nqzI9t72iMfJXFfSgrZ0N82wAg,10431
654
- wandelbots_api_client/v2_pydantic/api/virtual_controller_api.py,sha256=3yeXjo_bLUloeLluBtaf9Ocm7hzjvKM1Ybxu8mPw0LQ,238415
655
+ wandelbots_api_client/v2_pydantic/api/virtual_controller_api.py,sha256=TpRfwm_pdD5ve1_Q_A8fcZm6LePDblcKhCmknI-ZnAE,238460
655
656
  wandelbots_api_client/v2_pydantic/api/virtual_controller_behavior_api.py,sha256=wjnltoitkklvFYjEM6YcNdf7nWnSjHo6xFwTVMMJj80,42312
656
657
  wandelbots_api_client/v2_pydantic/api/virtual_controller_inputs_outputs_api.py,sha256=yR_i2ihPXDP8GJ2TCcSZ4Cz04K2NtYfJSAj5B0mY5Yk,42548
657
- wandelbots_api_client-26.2.0.dev62.dist-info/licenses/LICENSE,sha256=PJyUaZgTVC0_nJmhRpcbnOcXvmTqJGE6axeSifngIGY,11344
658
- wandelbots_api_client-26.2.0.dev62.dist-info/METADATA,sha256=GgJlaUBOgzyjIf4CKeDroHHe_kblplhJjV5mFAEyA9A,8026
659
- wandelbots_api_client-26.2.0.dev62.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91
660
- wandelbots_api_client-26.2.0.dev62.dist-info/top_level.txt,sha256=eCDsV95XWqVBSMDe4MRzyOj53-TK-o5WU1Qv_yv493M,22
661
- wandelbots_api_client-26.2.0.dev62.dist-info/RECORD,,
658
+ wandelbots_api_client-26.2.0.dev63.dist-info/licenses/LICENSE,sha256=PJyUaZgTVC0_nJmhRpcbnOcXvmTqJGE6axeSifngIGY,11344
659
+ wandelbots_api_client-26.2.0.dev63.dist-info/METADATA,sha256=BbEdkvp0Uw4WddwDCv2lLzGBJDVQCS8IsaU_rhd9S7o,8026
660
+ wandelbots_api_client-26.2.0.dev63.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91
661
+ wandelbots_api_client-26.2.0.dev63.dist-info/top_level.txt,sha256=eCDsV95XWqVBSMDe4MRzyOj53-TK-o5WU1Qv_yv493M,22
662
+ wandelbots_api_client-26.2.0.dev63.dist-info/RECORD,,