wandelbots_api_client 26.6.0.dev47__py3-none-any.whl → 26.6.0.dev49__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.
@@ -13,7 +13,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech)
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.6.0.dev47"
16
+ __version__ = "26.6.0.dev49"
17
17
 
18
18
  from . import api
19
19
  from . import api_client
@@ -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.dev47"
88
+ self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.dev49"
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.dev47".format(env=sys.platform, pyversion=sys.version)
515
+ "SDK Package Version: 26.6.0.dev49".format(env=sys.platform, pyversion=sys.version)
516
516
  )
517
517
 
518
518
  def get_host_settings(self) -> List[HostSetting]:
@@ -32,6 +32,7 @@ from wandelbots_api_client.v2.models.blending_auto import BlendingAuto
32
32
  from wandelbots_api_client.v2.models.blending_position import BlendingPosition
33
33
  from wandelbots_api_client.v2.models.blending_space import BlendingSpace
34
34
  from wandelbots_api_client.v2.models.boolean_value import BooleanValue
35
+ from wandelbots_api_client.v2.models.bostondynamics_controller import BostondynamicsController
35
36
  from wandelbots_api_client.v2.models.box import Box
36
37
  from wandelbots_api_client.v2.models.bus_io_description import BusIODescription
37
38
  from wandelbots_api_client.v2.models.bus_io_modbus_client import BusIOModbusClient
@@ -422,6 +423,7 @@ from wandelbots_api_client.v2.models.trajectory_running import TrajectoryRunning
422
423
  from wandelbots_api_client.v2.models.trajectory_section import TrajectorySection
423
424
  from wandelbots_api_client.v2.models.trajectory_wait_for_io import TrajectoryWaitForIO
424
425
  from wandelbots_api_client.v2.models.unit_type import UnitType
426
+ from wandelbots_api_client.v2.models.unitree_controller import UnitreeController
425
427
  from wandelbots_api_client.v2.models.universalrobots_controller import UniversalrobotsController
426
428
  from wandelbots_api_client.v2.models.update_cell_version_request import UpdateCellVersionRequest
427
429
  from wandelbots_api_client.v2.models.update_nova_version_request import UpdateNovaVersionRequest
@@ -0,0 +1,127 @@
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.6.0 dev
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+ from __future__ import annotations
15
+ import pprint
16
+ import re # noqa: F401
17
+ import json
18
+
19
+ from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr, field_validator
20
+ from typing import Any, ClassVar, Dict, List, Optional, Union
21
+ from typing import Optional, Set
22
+ from typing_extensions import Self
23
+ from pydantic_core import to_jsonable_python
24
+
25
+
26
+ class BostondynamicsController(BaseModel):
27
+ """
28
+ The configuration of a Boston Dynamics robot controller. Requires the hostname or IP address of the robot and authentication credentials.
29
+ """ # noqa: E501
30
+
31
+ kind: StrictStr
32
+ controller_ip: StrictStr = Field(description="The hostname or IP address of the robot.")
33
+ robot_type: Optional[StrictStr] = Field(default="spot", description="The Boston Dynamics robot model type.")
34
+ password: StrictStr = Field(description="The authentication password for the robot.")
35
+ username: Optional[StrictStr] = Field(default="admin", description="The authentication username for the robot.")
36
+ network_interface: Optional[StrictStr] = Field(default="eth0", description="The network interface used to communicate with the robot.")
37
+ stream_quality: Optional[StrictInt] = Field(default=75, description="JPEG quality for camera streams (1-100).")
38
+ stream_fps: Optional[Union[StrictFloat, StrictInt]] = Field(default=10, description="Frames per second for camera streams.")
39
+ __properties: ClassVar[List[str]] = [
40
+ "kind",
41
+ "controller_ip",
42
+ "robot_type",
43
+ "password",
44
+ "username",
45
+ "network_interface",
46
+ "stream_quality",
47
+ "stream_fps",
48
+ ]
49
+
50
+ @field_validator("kind")
51
+ def kind_validate_enum(cls, value):
52
+ """Validates the enum"""
53
+ if value not in set(["BostondynamicsController"]):
54
+ raise ValueError("must be one of enum values ('BostondynamicsController')")
55
+ return value
56
+
57
+ @field_validator("robot_type")
58
+ def robot_type_validate_enum(cls, value):
59
+ """Validates the enum"""
60
+ if value is None:
61
+ return value
62
+
63
+ if value not in set(["spot"]):
64
+ raise ValueError("must be one of enum values ('spot')")
65
+ return value
66
+
67
+ model_config = ConfigDict(
68
+ validate_by_name=True,
69
+ validate_by_alias=True,
70
+ validate_assignment=True,
71
+ protected_namespaces=(),
72
+ )
73
+
74
+ def to_str(self) -> str:
75
+ """Returns the string representation of the model using alias"""
76
+ return pprint.pformat(self.model_dump(by_alias=True))
77
+
78
+ def to_json(self) -> str:
79
+ """Returns the JSON representation of the model using alias"""
80
+ return json.dumps(to_jsonable_python(self.to_dict()))
81
+
82
+ @classmethod
83
+ def from_json(cls, json_str: str) -> Optional[Self]:
84
+ """Create an instance of BostondynamicsController from a JSON string"""
85
+ return cls.from_dict(json.loads(json_str))
86
+
87
+ def to_dict(self) -> Dict[str, Any]:
88
+ """Return the dictionary representation of the model using alias.
89
+
90
+ This has the following differences from calling pydantic's
91
+ `self.model_dump(by_alias=True)`:
92
+
93
+ * `None` is only added to the output dict for nullable fields that
94
+ were set at model initialization. Other fields with value `None`
95
+ are ignored.
96
+ """
97
+ excluded_fields: Set[str] = set([])
98
+
99
+ _dict = self.model_dump(
100
+ by_alias=True,
101
+ exclude=excluded_fields,
102
+ exclude_none=True,
103
+ )
104
+ return _dict
105
+
106
+ @classmethod
107
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
108
+ """Create an instance of BostondynamicsController from a dict"""
109
+ if obj is None:
110
+ return None
111
+
112
+ if not isinstance(obj, dict):
113
+ return cls.model_validate(obj)
114
+
115
+ _obj = cls.model_validate(
116
+ {
117
+ "kind": obj.get("kind"),
118
+ "controller_ip": obj.get("controller_ip"),
119
+ "robot_type": obj.get("robot_type") if obj.get("robot_type") is not None else "spot",
120
+ "password": obj.get("password"),
121
+ "username": obj.get("username") if obj.get("username") is not None else "admin",
122
+ "network_interface": obj.get("network_interface") if obj.get("network_interface") is not None else "eth0",
123
+ "stream_quality": obj.get("stream_quality") if obj.get("stream_quality") is not None else 75,
124
+ "stream_fps": obj.get("stream_fps") if obj.get("stream_fps") is not None else 10,
125
+ }
126
+ )
127
+ return _obj
@@ -26,9 +26,11 @@ class Manufacturer(str, Enum):
26
26
  allowed enum values
27
27
  """
28
28
  ABB = "abb"
29
+ BOSTONDYNAMICS = "bostondynamics"
29
30
  FANUC = "fanuc"
30
31
  KUKA = "kuka"
31
32
  STAUBLI = "staubli"
33
+ UNITREE = "unitree"
32
34
  UNIVERSALROBOTS = "universalrobots"
33
35
  YASKAWA = "yaskawa"
34
36
 
@@ -17,8 +17,10 @@ import pprint
17
17
  from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
18
18
  from typing import Any, List, Optional
19
19
  from wandelbots_api_client.v2.models.abb_controller import AbbController
20
+ from wandelbots_api_client.v2.models.bostondynamics_controller import BostondynamicsController
20
21
  from wandelbots_api_client.v2.models.fanuc_controller import FanucController
21
22
  from wandelbots_api_client.v2.models.kuka_controller import KukaController
23
+ from wandelbots_api_client.v2.models.unitree_controller import UnitreeController
22
24
  from wandelbots_api_client.v2.models.universalrobots_controller import UniversalrobotsController
23
25
  from wandelbots_api_client.v2.models.virtual_controller import VirtualController
24
26
  from wandelbots_api_client.v2.models.yaskawa_controller import YaskawaController
@@ -28,8 +30,10 @@ from typing_extensions import Literal, Self
28
30
 
29
31
  ROBOTCONTROLLERCONFIGURATION_ONE_OF_SCHEMAS = [
30
32
  "AbbController",
33
+ "BostondynamicsController",
31
34
  "FanucController",
32
35
  "KukaController",
36
+ "UnitreeController",
33
37
  "UniversalrobotsController",
34
38
  "VirtualController",
35
39
  "YaskawaController",
@@ -53,13 +57,28 @@ class RobotControllerConfiguration(BaseModel):
53
57
  oneof_schema_5_validator: Optional[VirtualController] = None
54
58
  # data type: YaskawaController
55
59
  oneof_schema_6_validator: Optional[YaskawaController] = None
60
+ # data type: BostondynamicsController
61
+ oneof_schema_7_validator: Optional[BostondynamicsController] = None
62
+ # data type: UnitreeController
63
+ oneof_schema_8_validator: Optional[UnitreeController] = None
56
64
  actual_instance: Optional[
57
- Union[AbbController, FanucController, KukaController, UniversalrobotsController, VirtualController, YaskawaController]
65
+ Union[
66
+ AbbController,
67
+ BostondynamicsController,
68
+ FanucController,
69
+ KukaController,
70
+ UnitreeController,
71
+ UniversalrobotsController,
72
+ VirtualController,
73
+ YaskawaController,
74
+ ]
58
75
  ] = None
59
76
  one_of_schemas: Set[str] = {
60
77
  "AbbController",
78
+ "BostondynamicsController",
61
79
  "FanucController",
62
80
  "KukaController",
81
+ "UnitreeController",
63
82
  "UniversalrobotsController",
64
83
  "VirtualController",
65
84
  "YaskawaController",
@@ -117,16 +136,26 @@ class RobotControllerConfiguration(BaseModel):
117
136
  error_messages.append(f"Error! Input type `{type(v)}` is not `YaskawaController`")
118
137
  else:
119
138
  match += 1
139
+ # validate data type: BostondynamicsController
140
+ if not isinstance(v, BostondynamicsController):
141
+ error_messages.append(f"Error! Input type `{type(v)}` is not `BostondynamicsController`")
142
+ else:
143
+ match += 1
144
+ # validate data type: UnitreeController
145
+ if not isinstance(v, UnitreeController):
146
+ error_messages.append(f"Error! Input type `{type(v)}` is not `UnitreeController`")
147
+ else:
148
+ match += 1
120
149
  if match > 1:
121
150
  # more than 1 match
122
151
  raise ValueError(
123
- "Multiple matches found when setting `actual_instance` in RobotControllerConfiguration with oneOf schemas: AbbController, FanucController, KukaController, UniversalrobotsController, VirtualController, YaskawaController. Details: "
152
+ "Multiple matches found when setting `actual_instance` in RobotControllerConfiguration with oneOf schemas: AbbController, BostondynamicsController, FanucController, KukaController, UnitreeController, UniversalrobotsController, VirtualController, YaskawaController. Details: "
124
153
  + ", ".join(error_messages)
125
154
  )
126
155
  elif match == 0:
127
156
  # no match
128
157
  raise ValueError(
129
- "No match found when setting `actual_instance` in RobotControllerConfiguration with oneOf schemas: AbbController, FanucController, KukaController, UniversalrobotsController, VirtualController, YaskawaController. Details: "
158
+ "No match found when setting `actual_instance` in RobotControllerConfiguration with oneOf schemas: AbbController, BostondynamicsController, FanucController, KukaController, UnitreeController, UniversalrobotsController, VirtualController, YaskawaController. Details: "
130
159
  + ", ".join(error_messages)
131
160
  )
132
161
  else:
@@ -153,6 +182,11 @@ class RobotControllerConfiguration(BaseModel):
153
182
  instance.actual_instance = AbbController.from_json(json_str)
154
183
  return instance
155
184
 
185
+ # check if data type is `BostondynamicsController`
186
+ if _data_type == "BostondynamicsController":
187
+ instance.actual_instance = BostondynamicsController.from_json(json_str)
188
+ return instance
189
+
156
190
  # check if data type is `FanucController`
157
191
  if _data_type == "FanucController":
158
192
  instance.actual_instance = FanucController.from_json(json_str)
@@ -163,6 +197,11 @@ class RobotControllerConfiguration(BaseModel):
163
197
  instance.actual_instance = KukaController.from_json(json_str)
164
198
  return instance
165
199
 
200
+ # check if data type is `UnitreeController`
201
+ if _data_type == "UnitreeController":
202
+ instance.actual_instance = UnitreeController.from_json(json_str)
203
+ return instance
204
+
166
205
  # check if data type is `UniversalrobotsController`
167
206
  if _data_type == "UniversalrobotsController":
168
207
  instance.actual_instance = UniversalrobotsController.from_json(json_str)
@@ -214,17 +253,29 @@ class RobotControllerConfiguration(BaseModel):
214
253
  match += 1
215
254
  except (ValidationError, ValueError) as e:
216
255
  error_messages.append(str(e))
256
+ # deserialize data into BostondynamicsController
257
+ try:
258
+ instance.actual_instance = BostondynamicsController.from_json(json_str)
259
+ match += 1
260
+ except (ValidationError, ValueError) as e:
261
+ error_messages.append(str(e))
262
+ # deserialize data into UnitreeController
263
+ try:
264
+ instance.actual_instance = UnitreeController.from_json(json_str)
265
+ match += 1
266
+ except (ValidationError, ValueError) as e:
267
+ error_messages.append(str(e))
217
268
 
218
269
  if match > 1:
219
270
  # more than 1 match
220
271
  raise ValueError(
221
- "Multiple matches found when deserializing the JSON string into RobotControllerConfiguration with oneOf schemas: AbbController, FanucController, KukaController, UniversalrobotsController, VirtualController, YaskawaController. Details: "
272
+ "Multiple matches found when deserializing the JSON string into RobotControllerConfiguration with oneOf schemas: AbbController, BostondynamicsController, FanucController, KukaController, UnitreeController, UniversalrobotsController, VirtualController, YaskawaController. Details: "
222
273
  + ", ".join(error_messages)
223
274
  )
224
275
  elif match == 0:
225
276
  # no match
226
277
  raise ValueError(
227
- "No match found when deserializing the JSON string into RobotControllerConfiguration with oneOf schemas: AbbController, FanucController, KukaController, UniversalrobotsController, VirtualController, YaskawaController. Details: "
278
+ "No match found when deserializing the JSON string into RobotControllerConfiguration with oneOf schemas: AbbController, BostondynamicsController, FanucController, KukaController, UnitreeController, UniversalrobotsController, VirtualController, YaskawaController. Details: "
228
279
  + ", ".join(error_messages)
229
280
  )
230
281
  else:
@@ -244,7 +295,15 @@ class RobotControllerConfiguration(BaseModel):
244
295
  self,
245
296
  ) -> Optional[
246
297
  Union[
247
- Dict[str, Any], AbbController, FanucController, KukaController, UniversalrobotsController, VirtualController, YaskawaController
298
+ Dict[str, Any],
299
+ AbbController,
300
+ BostondynamicsController,
301
+ FanucController,
302
+ KukaController,
303
+ UnitreeController,
304
+ UniversalrobotsController,
305
+ VirtualController,
306
+ YaskawaController,
248
307
  ]
249
308
  ]:
250
309
  """Returns the dict representation of the actual instance"""
@@ -0,0 +1,113 @@
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.6.0 dev
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+ from __future__ import annotations
15
+ import pprint
16
+ import re # noqa: F401
17
+ import json
18
+
19
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator
20
+ from typing import Any, ClassVar, Dict, List, Optional
21
+ from typing import Optional, Set
22
+ from typing_extensions import Self
23
+ from pydantic_core import to_jsonable_python
24
+
25
+
26
+ class UnitreeController(BaseModel):
27
+ """
28
+ The configuration of a Unitree robot controller. Supports Go2, G1, B2, and H1 robot models. Requires the IP address of the robot and the robot model type.
29
+ """ # noqa: E501
30
+
31
+ kind: StrictStr
32
+ controller_ip: StrictStr = Field(description="The IP address of the Unitree robot.")
33
+ robot_type: StrictStr = Field(description="The Unitree robot model type.")
34
+ network_interface: Optional[StrictStr] = Field(default="enp1s0f1", description="The network interface used for DDS discovery.")
35
+ dds_unicast_mode: Optional[StrictBool] = Field(
36
+ default=False, description="Enable DDS unicast mode for environments where multicast is unavailable."
37
+ )
38
+ enable_lease: Optional[StrictBool] = Field(default=False, description="Enable exclusive lease-based control of the robot.")
39
+ __properties: ClassVar[List[str]] = ["kind", "controller_ip", "robot_type", "network_interface", "dds_unicast_mode", "enable_lease"]
40
+
41
+ @field_validator("kind")
42
+ def kind_validate_enum(cls, value):
43
+ """Validates the enum"""
44
+ if value not in set(["UnitreeController"]):
45
+ raise ValueError("must be one of enum values ('UnitreeController')")
46
+ return value
47
+
48
+ @field_validator("robot_type")
49
+ def robot_type_validate_enum(cls, value):
50
+ """Validates the enum"""
51
+ if value not in set(["go2", "g1", "b2", "h1"]):
52
+ raise ValueError("must be one of enum values ('go2', 'g1', 'b2', 'h1')")
53
+ return value
54
+
55
+ model_config = ConfigDict(
56
+ validate_by_name=True,
57
+ validate_by_alias=True,
58
+ validate_assignment=True,
59
+ protected_namespaces=(),
60
+ )
61
+
62
+ def to_str(self) -> str:
63
+ """Returns the string representation of the model using alias"""
64
+ return pprint.pformat(self.model_dump(by_alias=True))
65
+
66
+ def to_json(self) -> str:
67
+ """Returns the JSON representation of the model using alias"""
68
+ return json.dumps(to_jsonable_python(self.to_dict()))
69
+
70
+ @classmethod
71
+ def from_json(cls, json_str: str) -> Optional[Self]:
72
+ """Create an instance of UnitreeController from a JSON string"""
73
+ return cls.from_dict(json.loads(json_str))
74
+
75
+ def to_dict(self) -> Dict[str, Any]:
76
+ """Return the dictionary representation of the model using alias.
77
+
78
+ This has the following differences from calling pydantic's
79
+ `self.model_dump(by_alias=True)`:
80
+
81
+ * `None` is only added to the output dict for nullable fields that
82
+ were set at model initialization. Other fields with value `None`
83
+ are ignored.
84
+ """
85
+ excluded_fields: Set[str] = set([])
86
+
87
+ _dict = self.model_dump(
88
+ by_alias=True,
89
+ exclude=excluded_fields,
90
+ exclude_none=True,
91
+ )
92
+ return _dict
93
+
94
+ @classmethod
95
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
96
+ """Create an instance of UnitreeController from a dict"""
97
+ if obj is None:
98
+ return None
99
+
100
+ if not isinstance(obj, dict):
101
+ return cls.model_validate(obj)
102
+
103
+ _obj = cls.model_validate(
104
+ {
105
+ "kind": obj.get("kind"),
106
+ "controller_ip": obj.get("controller_ip"),
107
+ "robot_type": obj.get("robot_type"),
108
+ "network_interface": obj.get("network_interface") if obj.get("network_interface") is not None else "enp1s0f1",
109
+ "dds_unicast_mode": obj.get("dds_unicast_mode") if obj.get("dds_unicast_mode") is not None else False,
110
+ "enable_lease": obj.get("enable_lease") if obj.get("enable_lease") is not None else False,
111
+ }
112
+ )
113
+ return _obj
@@ -13,7 +13,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech)
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.6.0.dev47"
16
+ __version__ = "26.6.0.dev49"
17
17
 
18
18
  from . import api
19
19
  from . import api_client
@@ -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.dev47"
88
+ self.user_agent = "Wandelbots-Nova-API-Python-Client/26.6.0.dev49"
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.dev47".format(env=sys.platform, pyversion=sys.version)
515
+ "SDK Package Version: 26.6.0.dev49".format(env=sys.platform, pyversion=sys.version)
516
516
  )
517
517
 
518
518
  def get_host_settings(self) -> List[HostSetting]:
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: tmpq6k18884
3
- # timestamp: 2026-07-01T11:55:12+00:00
2
+ # filename: tmprgg55w0a
3
+ # timestamp: 2026-07-01T16:58:33+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -26,6 +26,7 @@ from .models import (
26
26
  BlendingPosition,
27
27
  BlendingSpace,
28
28
  BooleanValue,
29
+ BostondynamicsController,
29
30
  Box,
30
31
  BoxType,
31
32
  BusIODescription,
@@ -370,6 +371,7 @@ from .models import (
370
371
  RobotTcp,
371
372
  RobotTcpData,
372
373
  RobotTcps,
374
+ RobotType,
373
375
  RotationVector,
374
376
  RsiServer,
375
377
  SafetyGeometry,
@@ -426,6 +428,7 @@ from .models import (
426
428
  TrajectorySection,
427
429
  TrajectoryWaitForIO,
428
430
  UnitType,
431
+ UnitreeController,
429
432
  UniversalrobotsController,
430
433
  UpdateCellVersionRequest,
431
434
  UpdateNovaVersionRequest,
@@ -461,6 +464,7 @@ __all__ = [
461
464
  "BlendingPosition",
462
465
  "BlendingSpace",
463
466
  "BooleanValue",
467
+ "BostondynamicsController",
464
468
  "Box",
465
469
  "BoxType",
466
470
  "BusIODescription",
@@ -805,6 +809,7 @@ __all__ = [
805
809
  "RobotTcp",
806
810
  "RobotTcpData",
807
811
  "RobotTcps",
812
+ "RobotType",
808
813
  "RotationVector",
809
814
  "RsiServer",
810
815
  "SafetyGeometry",
@@ -861,6 +866,7 @@ __all__ = [
861
866
  "TrajectorySection",
862
867
  "TrajectoryWaitForIO",
863
868
  "UnitType",
869
+ "UnitreeController",
864
870
  "UniversalrobotsController",
865
871
  "UpdateCellVersionRequest",
866
872
  "UpdateNovaVersionRequest",
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: models.yaml
3
- # timestamp: 2026-07-01T11:55:12+00:00
3
+ # timestamp: 2026-07-01T16:58:33+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
  from pydantic import AnyUrl, AwareDatetime, BaseModel, EmailStr, Field, RootModel
@@ -175,9 +175,11 @@ class UniversalrobotsController(BaseModel):
175
175
 
176
176
  class Manufacturer(Enum):
177
177
  ABB = "abb"
178
+ BOSTONDYNAMICS = "bostondynamics"
178
179
  FANUC = "fanuc"
179
180
  KUKA = "kuka"
180
181
  STAUBLI = "staubli"
182
+ UNITREE = "unitree"
181
183
  UNIVERSALROBOTS = "universalrobots"
182
184
  YASKAWA = "yaskawa"
183
185
 
@@ -326,6 +328,86 @@ class YaskawaController(BaseModel):
326
328
  controller_ip: str
327
329
 
328
330
 
331
+ class BostondynamicsController(BaseModel):
332
+ """
333
+ The configuration of a Boston Dynamics robot controller.
334
+ Requires the hostname or IP address of the robot and authentication credentials.
335
+
336
+ """
337
+
338
+ kind: Literal["BostondynamicsController"] = "BostondynamicsController"
339
+ controller_ip: str
340
+ """
341
+ The hostname or IP address of the robot.
342
+ """
343
+ robot_type: Literal["spot"] = "spot"
344
+ """
345
+ The Boston Dynamics robot model type.
346
+ """
347
+ password: str
348
+ """
349
+ The authentication password for the robot.
350
+ """
351
+ username: str = "admin"
352
+ """
353
+ The authentication username for the robot.
354
+ """
355
+ network_interface: str = "eth0"
356
+ """
357
+ The network interface used to communicate with the robot.
358
+ """
359
+ stream_quality: int = 75
360
+ """
361
+ JPEG quality for camera streams (1-100).
362
+ """
363
+ stream_fps: float = 10
364
+ """
365
+ Frames per second for camera streams.
366
+ """
367
+
368
+
369
+ class RobotType(Enum):
370
+ """
371
+ The Unitree robot model type.
372
+ """
373
+
374
+ GO2 = "go2"
375
+ G1 = "g1"
376
+ B2 = "b2"
377
+ H1 = "h1"
378
+
379
+
380
+ class UnitreeController(BaseModel):
381
+ """
382
+ The configuration of a Unitree robot controller.
383
+ Supports Go2, G1, B2, and H1 robot models.
384
+ Requires the IP address of the robot and the robot model type.
385
+
386
+ """
387
+
388
+ kind: Literal["UnitreeController"] = "UnitreeController"
389
+ controller_ip: str
390
+ """
391
+ The IP address of the Unitree robot.
392
+ """
393
+ robot_type: RobotType
394
+ """
395
+ The Unitree robot model type.
396
+ """
397
+ network_interface: str = "enp1s0f1"
398
+ """
399
+ The network interface used for DDS discovery.
400
+ """
401
+ dds_unicast_mode: bool = False
402
+ """
403
+ Enable DDS unicast mode for environments where multicast is unavailable.
404
+ """
405
+ enable_lease: bool = False
406
+ """
407
+ Enable exclusive lease-based control of the robot.
408
+ """
409
+
410
+
329
411
  class RobotController(BaseModel):
330
412
  """
331
413
  The configuration of a physical or virtual robot controller.
@@ -337,9 +419,16 @@ class RobotController(BaseModel):
337
419
  It must be a valid k8s label name as defined by [RFC 1035](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#rfc-1035-label-names).
338
420
 
339
421
  """
340
- configuration: AbbController | FanucController | KukaController | UniversalrobotsController | VirtualController | YaskawaController = (
341
- Field(..., discriminator="kind")
342
- )
422
+ configuration: (
423
+ AbbController
424
+ | FanucController
425
+ | KukaController
426
+ | UniversalrobotsController
427
+ | VirtualController
428
+ | YaskawaController
429
+ | BostondynamicsController
430
+ | UnitreeController
431
+ ) = Field(..., discriminator="kind")
343
432
 
344
433
 
345
434
  class ImageCredentials(BaseModel):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wandelbots_api_client
3
- Version: 26.6.0.dev47
3
+ Version: 26.6.0.dev49
4
4
  Summary: Wandelbots Python Client: Interact with robots in an easy and intuitive way.
5
5
  Author: Copyright (c) 2025 Wandelbots GmbH
6
6
  Author-email: Copyright (c) 2025 Wandelbots GmbH <contact@wandelbots.com>
@@ -31,7 +31,7 @@ Description-Content-Type: text/markdown
31
31
  Interact with robots in an easy and intuitive way.
32
32
 
33
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.dev47
34
+ - Package version: 26.6.0.dev49
35
35
 
36
36
  ## Requirements.
37
37
  Python >=3.9, Python < 4.0
@@ -1,6 +1,6 @@
1
1
  wandelbots_api_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  wandelbots_api_client/authorization.py,sha256=9AuS2mZ4a5fmbumMuK52rhgMvCj_hPrfaAIayj1Ecks,7914
3
- wandelbots_api_client/v2/__init__.py,sha256=fE46bgnC_nt6SScXn-UZz6WkI3ba2qKdVlLefKw2Awc,1032
3
+ wandelbots_api_client/v2/__init__.py,sha256=2QxBVUmwACr0PoocOR1YonEPI4YFsWCD4RoiIY4Gs94,1032
4
4
  wandelbots_api_client/v2/api/__init__.py,sha256=P0yGp2xWLeEPi0maOq33OfqhAM3pyWPwtc5AJpdTp8Y,1967
5
5
  wandelbots_api_client/v2/api/application_api.py,sha256=nVY1ZFCeazTJOou0UKhtAaFURbixCIFAl-AIAFvn4-8,69559
6
6
  wandelbots_api_client/v2/api/bus_inputs_outputs_api.py,sha256=3V_7OHnjzC0LnS-jAnEhb_Yv90TGnAP-egURffcUIcs,267414
@@ -27,11 +27,11 @@ wandelbots_api_client/v2/api/version_api.py,sha256=1dAhtFz73CmB6F8fMOgsLGjCWq4w6
27
27
  wandelbots_api_client/v2/api/virtual_controller_api.py,sha256=nQ_rkwRufKGKGHB3QIjm7i771tqKRJGlt8nGxWupMPI,291431
28
28
  wandelbots_api_client/v2/api/virtual_controller_behavior_api.py,sha256=ByeJFFto88jrhAu8LpXAuHosXXIKpks5rSY8ZOWUdG4,41046
29
29
  wandelbots_api_client/v2/api/virtual_controller_inputs_outputs_api.py,sha256=OcQg8mxoQqZLHpByvSY3iqWNLia8rsxlvdpwlc02wb0,42027
30
- wandelbots_api_client/v2/api_client.py,sha256=uqji83QpfR39TBqrUBGs9bgXt562kMynw1F9fBZFthY,27803
30
+ wandelbots_api_client/v2/api_client.py,sha256=55D69pJYmWqOYyaEncjquMU9_SRlnotQ88ovedkX4Vc,27803
31
31
  wandelbots_api_client/v2/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
32
- wandelbots_api_client/v2/configuration.py,sha256=6hLeriO2645tgK-RMknVp8rT8rDxBGjyY6FgxGHxJV8,18047
32
+ wandelbots_api_client/v2/configuration.py,sha256=F3IcBXLV4cg6VF_Z1efE0IqTrCuPtGmU_n2hZzhAah8,18047
33
33
  wandelbots_api_client/v2/exceptions.py,sha256=7XIPwMCrxI3N-TgSYabwGXMOROXRQdrJA2wOpyaRC1A,6393
34
- wandelbots_api_client/v2/models/__init__.py,sha256=4wLRAzaYdkgSfHjD-vvFPsngM6Wp4Cf9GDRn7gwp0IA,36492
34
+ wandelbots_api_client/v2/models/__init__.py,sha256=FCz0wNdHnamp-8ByecRs_XtpLpdx25u6D_iE-xqmJYE,36668
35
35
  wandelbots_api_client/v2/models/abb_confdata.py,sha256=lXK9rOsDRyCc2urbmVISftopF5LEbANjZ1R-1jXeLNg,3378
36
36
  wandelbots_api_client/v2/models/abb_configured_pose.py,sha256=Lg-eaUD80RzyQRshY3vm5BIq3_qFPZdz3kQk0ue9w_w,3144
37
37
  wandelbots_api_client/v2/models/abb_controller.py,sha256=P7QY_bKvz5fbW_nub4o2yROATVzb8xNr4cBetw5reSk,3741
@@ -51,6 +51,7 @@ wandelbots_api_client/v2/models/blending_auto.py,sha256=2z9xoc8xJHOcu7bMejDKFEGZ
51
51
  wandelbots_api_client/v2/models/blending_position.py,sha256=ljiB95-Io4TU73yistLXjrbObQ8csS1wjYnIe9TNgmk,6050
52
52
  wandelbots_api_client/v2/models/blending_space.py,sha256=y4cggZJneafoEPGksy3Ge-tUXVugIpbDP2vZcNTMoHM,843
53
53
  wandelbots_api_client/v2/models/boolean_value.py,sha256=BTijCBjnMWsGlozoAK2SOP-EbBI-2mhAncxfvH33wRg,2756
54
+ wandelbots_api_client/v2/models/bostondynamics_controller.py,sha256=nRSSVTzoH3k1Vb4LqTn8_DI5NUbUmVylvvkhR7w5XaE,4836
54
55
  wandelbots_api_client/v2/models/box.py,sha256=w-cemsH2ejhtzsFh1rta3cMQvfxOMEupX6lhw_t8NdI,3963
55
56
  wandelbots_api_client/v2/models/bus_io_description.py,sha256=kHe7PV0T8IO613aI-FIBn1xInh5hGugRoXfhrIRmUkw,3889
56
57
  wandelbots_api_client/v2/models/bus_io_modbus_client.py,sha256=WL0Ds16pC3zNs2NUKmUidUMCvKyQmLorGt0b4nzz8Kg,3192
@@ -255,7 +256,7 @@ wandelbots_api_client/v2/models/link_chain_value.py,sha256=RJCt4rBgWRoeYIqKhlzbU
255
256
  wandelbots_api_client/v2/models/link_chain_value_or_key.py,sha256=FNaj9KXNS2dXNsxVxhcbAHWI4ePclmHSpgw6Vqco7s4,6185
256
257
  wandelbots_api_client/v2/models/list_trajectories_response.py,sha256=aeEAu2_w-44m92_slu90xovE_-MxaF37vyTgAN0rTg0,2815
257
258
  wandelbots_api_client/v2/models/location1_inner.py,sha256=py-T-cAq-8_k7mw8XO7APVBJtnZL2d2p68INpO-FfHY,5350
258
- wandelbots_api_client/v2/models/manufacturer.py,sha256=kUdQmJujVTleRgDZZY9Ibbo9bAHx5YpDva54l_d60Zg,784
259
+ wandelbots_api_client/v2/models/manufacturer.py,sha256=zjIYcCeEA6UxD-6f5dVXA1MXahiQquSwUSZe1SaOLLA,846
259
260
  wandelbots_api_client/v2/models/merge_trajectories422_response.py,sha256=6pLEFWukYAOL4fjh2STT20hMHoxKjIsLMkcorOXCOR0,3116
260
261
  wandelbots_api_client/v2/models/merge_trajectories_error.py,sha256=H0xQZubCeEobmuiy8OscQL1JEw-4X095pvz9nPpuVU8,3576
261
262
  wandelbots_api_client/v2/models/merge_trajectories_error_error_feedback.py,sha256=X9v_T8Yq0no0WcKWM5GPIc6q4uzHFYdRgTVqAZJ9eos,8864
@@ -360,7 +361,7 @@ wandelbots_api_client/v2/models/rectangle.py,sha256=GS65qBcAXe2zIS1U4UcFh07w3sg8
360
361
  wandelbots_api_client/v2/models/rectangular_capsule.py,sha256=1Y72g8xb4Ea5ZCk2bsexyLHo-efi8qo1sB3triR7BDs,3644
361
362
  wandelbots_api_client/v2/models/release_channel.py,sha256=iuTK-yo81IbWC_oD9JfORx5MTi2uXaxTaIlEu0PgBFw,817
362
363
  wandelbots_api_client/v2/models/robot_controller.py,sha256=KmD8ZbQyD3COuFklhnT2FNeMQNVdzJ-wX33-5R_q9CY,3657
363
- wandelbots_api_client/v2/models/robot_controller_configuration.py,sha256=oul-wzhZZe8tY8_eM1v4g50KuuJxRDHLPdqGqmP2qkQ,10599
364
+ wandelbots_api_client/v2/models/robot_controller_configuration.py,sha256=Bt7n4DsjZKtIuaOrEn7Y8B4-iGbvFYbEJnrjkn4ISuc,13019
364
365
  wandelbots_api_client/v2/models/robot_controller_configuration_request.py,sha256=CED_CG1S9g-d5wKM_LJLkADkGIHD8JokaryH3PRh018,3445
365
366
  wandelbots_api_client/v2/models/robot_controller_state.py,sha256=MKnpYcK8JytbkwG6WEm5Yec6QybMSkmAhMpKqIR1mT8,5982
366
367
  wandelbots_api_client/v2/models/robot_system_mode.py,sha256=U74kQ5eo3gLuf8NxS8rMoSm8PZhldaUZqDwzncoFkbo,2150
@@ -419,6 +420,7 @@ wandelbots_api_client/v2/models/trajectory_running.py,sha256=B7IZ2kd3q6qdVi4CR3v
419
420
  wandelbots_api_client/v2/models/trajectory_section.py,sha256=PDh104V51lPnM4rhjCRF6HiP81oVT7n4ajvc6pfDJKo,2581
420
421
  wandelbots_api_client/v2/models/trajectory_wait_for_io.py,sha256=TKB8XfW4rgM-JZXwjZ6DMPuUce4xcYWaU-gofhGS6bY,2691
421
422
  wandelbots_api_client/v2/models/unit_type.py,sha256=G8Fg5u1oA7jzuq3MnvF3f-_sCZBpzyQjY_HZqIKDMyc,979
423
+ wandelbots_api_client/v2/models/unitree_controller.py,sha256=Sl6nABjxP6gHXLv990NAbBreOpQrtJIgu_DTVr0z5g8,4315
422
424
  wandelbots_api_client/v2/models/universalrobots_controller.py,sha256=cYjliEvh9VXBenzzY6KfNmFnp4a6w48tAZyw3Qbjq2Q,2886
423
425
  wandelbots_api_client/v2/models/update_cell_version_request.py,sha256=PX0SHCpRptbmjtff8LuwCtSQ7TAvTc3TQeDU6iwyCWM,2568
424
426
  wandelbots_api_client/v2/models/update_nova_version_request.py,sha256=Ud4caP7pkiThl_yiwjd_r7CTXOQ-Z-0v671SmOMFKnM,2955
@@ -435,7 +437,7 @@ wandelbots_api_client/v2/models/zod_validation_error_error_details_inner.py,sha2
435
437
  wandelbots_api_client/v2/models/zod_validation_error_error_details_inner_path_inner.py,sha256=BJFV1ZqYKcQauiUfZ10UhbRxVhOL0DjQyHzHhlQ-hUA,5652
436
438
  wandelbots_api_client/v2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
437
439
  wandelbots_api_client/v2/rest.py,sha256=pzalGbo_80nNBxbupQKYjZjOpOgPbYrEJtCfm236vL4,7253
438
- wandelbots_api_client/v2_pydantic/__init__.py,sha256=KPLURm_m6mjsU1R7IDb0z52rO6mJRSUGh0Yt3J5_-Uc,1041
440
+ wandelbots_api_client/v2_pydantic/__init__.py,sha256=dAVHj_KToKTNoKKnoQBbOtGxgzDRdqNrS27VnCNAucw,1041
439
441
  wandelbots_api_client/v2_pydantic/api/__init__.py,sha256=P0yGp2xWLeEPi0maOq33OfqhAM3pyWPwtc5AJpdTp8Y,1967
440
442
  wandelbots_api_client/v2_pydantic/api/application_api.py,sha256=vU-xA4SdVSJuXu7EAO7tTK9yJjSkMR1Y5_76RZdBp-E,69591
441
443
  wandelbots_api_client/v2_pydantic/api/bus_inputs_outputs_api.py,sha256=CKmqk0PsMcT0Cp-2zEQDIS65dTWJJonJ83vkCAWEjn8,267356
@@ -462,14 +464,14 @@ wandelbots_api_client/v2_pydantic/api/version_api.py,sha256=TTJwo3cWTBgxpeDO2S-S
462
464
  wandelbots_api_client/v2_pydantic/api/virtual_controller_api.py,sha256=rdrD4YOLnKKg_ILuzc37Ku_VMMJh2MUsR2a8frZraXc,291365
463
465
  wandelbots_api_client/v2_pydantic/api/virtual_controller_behavior_api.py,sha256=3mNzqQUb8JM_E7iZ4MJGg7rnEGdL9VFFqjLlrMa6bss,41027
464
466
  wandelbots_api_client/v2_pydantic/api/virtual_controller_inputs_outputs_api.py,sha256=LItWYQPUCu8mh2XAA9gOudhYTNMzIjtzY1ijXoV4w2E,42039
465
- wandelbots_api_client/v2_pydantic/api_client.py,sha256=fVJHgi2DhTlJwPOcpxX9f0IWn3vuh-juw5quy8ViDKU,27857
467
+ wandelbots_api_client/v2_pydantic/api_client.py,sha256=adikcF-143hv-khblgfH5A4SN1m-obnp3gHfr6TOKzI,27857
466
468
  wandelbots_api_client/v2_pydantic/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
467
- wandelbots_api_client/v2_pydantic/configuration.py,sha256=2Sce2OmsawQOsVZbMk3EN_cy6h9O5geueJbqT0wuN4E,18056
469
+ wandelbots_api_client/v2_pydantic/configuration.py,sha256=Uj0oxVUzAMqWhVmUo_IMZxMIgAK4uvMeD75cIEWvauM,18056
468
470
  wandelbots_api_client/v2_pydantic/exceptions.py,sha256=7XIPwMCrxI3N-TgSYabwGXMOROXRQdrJA2wOpyaRC1A,6393
469
- wandelbots_api_client/v2_pydantic/models/__init__.py,sha256=m7zvTLuSNQfvbx_Bvp-_KbMmt5n8br8RHPGxmrMWL9s,22385
470
- wandelbots_api_client/v2_pydantic/models/models.py,sha256=YPa813ocEbKutNn8aOPpDo2Y-qCV7-xoo2xi31QjizU,209028
471
+ wandelbots_api_client/v2_pydantic/models/__init__.py,sha256=fVcw4oUaJp6kwzqRNplPmZekQrSLia-ehqjD79E06xc,22527
472
+ wandelbots_api_client/v2_pydantic/models/models.py,sha256=77nQy4Kc4iPbBYCcUwa8ktpCTkfbVdP9FloOrydPcok,211031
471
473
  wandelbots_api_client/v2_pydantic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
472
474
  wandelbots_api_client/v2_pydantic/rest.py,sha256=EDM0lK-GKehCIR2PgMyO_5a5MGlOHws5c7Ue3j0FeSc,7262
473
- wandelbots_api_client-26.6.0.dev47.dist-info/WHEEL,sha256=WvwXFgRajeoYkfRVmDhkP4Qlqo31Mk687zIO2QQoFmw,80
474
- wandelbots_api_client-26.6.0.dev47.dist-info/METADATA,sha256=1S14K4YAMyUgKHypl8D3GODQBf_bhRjDOFrCIl3aoB4,1411
475
- wandelbots_api_client-26.6.0.dev47.dist-info/RECORD,,
475
+ wandelbots_api_client-26.6.0.dev49.dist-info/WHEEL,sha256=WvwXFgRajeoYkfRVmDhkP4Qlqo31Mk687zIO2QQoFmw,80
476
+ wandelbots_api_client-26.6.0.dev49.dist-info/METADATA,sha256=2iMy3KDMIzyaG_HXE9YrRF7jFqVR_iiyQ68wzv3teDk,1411
477
+ wandelbots_api_client-26.6.0.dev49.dist-info/RECORD,,