standardbots 2.20241003.42__py3-none-any.whl → 2.20241119.1__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.

Potentially problematic release.


This version of standardbots might be problematic. Click here for more details.

@@ -1,1605 +1,2530 @@
1
1
  # Code autogenerated by StandardBots
2
- import urllib3
3
- from enum import Enum
4
2
  import json
5
3
  from contextlib import contextmanager
4
+ from enum import Enum
6
5
  from typing import Dict, Generic, TypeVar, Union
7
6
 
7
+ import urllib3
8
+
8
9
  from . import models
9
10
 
11
+
10
12
  class RobotKind(Enum):
11
- Live = "live"
12
- Simulated = "simulated"
13
+ Live = "live"
14
+ Simulated = "simulated"
15
+
13
16
 
14
17
  GenericResponseType = TypeVar('GenericResponseType')
15
18
  OkResponseType = TypeVar('OkResponseType')
16
19
 
20
+
17
21
  class Response(Generic[GenericResponseType, OkResponseType]):
18
- data: GenericResponseType
19
- status: int
20
- response: urllib3.HTTPResponse
21
- def __init__(self, data: GenericResponseType, status: int, response: urllib3.HTTPResponse):
22
- self.data = data
23
- self.status = status
24
- self.response = response
25
-
26
- def ok(self) -> OkResponseType:
27
- if self.status != 200:
28
- raise Exception("Request failed with status " + str(self.status) + ": " + str(self.data))
29
- return self.data
30
-
31
- def assert_status(self, status: int):
32
- if self.status != status:
33
- raise Exception("Expecting status " + str(self.status) + ", but found " + str(self.status))
22
+ data: GenericResponseType
23
+ status: int
24
+ response: urllib3.HTTPResponse
25
+
26
+ def __init__(self, data: GenericResponseType, status: int, response: urllib3.HTTPResponse):
27
+ self.data = data
28
+ self.status = status
29
+ self.response = response
30
+
31
+ def ok(self) -> GenericResponseType:
32
+ if self.status != 200:
33
+ raise Exception("Request failed with status " + str(self.status) + ": " + str(self.data))
34
+ return self.data
35
+
36
+ def d(self) -> GenericResponseType:
37
+ return self.data
38
+
39
+ def isNotOk(self):
40
+ return self.status != 200
41
+
42
+ def assert_status(self, status: int):
43
+ if self.status != status:
44
+ raise Exception("Expecting status " + str(self.status) + ", but found " + str(self.status))
34
45
 
35
46
  class RequestManager:
36
- token: str
37
- host: str
38
- robot_kind: RobotKind
39
- def __init__(
40
- self,
41
- http: urllib3.PoolManager,
42
- token: str,
43
- host: str,
47
+ token: str
48
+ host: str
44
49
  robot_kind: RobotKind
45
- ):
46
- self.http = http
47
- self.token = token
48
- self.host = host
49
- self.robot_kind = robot_kind
50
-
51
- def request(self, method: str, url: str, **kwargs):
52
- return self.http.request(method, self.host + url, **kwargs)
53
-
54
- def json_headers(self) -> Dict[str, str]:
55
- return {
56
- "Content-Type": "application/json",
57
- "Authorization": "Bearer " + self.token,
58
- # Include both for backwards-compatibility purposes.
59
- "robot_kind": self.robot_kind.value,
60
- "robot-kind": self.robot_kind.value,
61
- }
62
-
63
- def close(self):
64
- self.http.clear()
50
+ def __init__(
51
+ self,
52
+ http: urllib3.PoolManager,
53
+ token: str,
54
+ host: str,
55
+ robot_kind: RobotKind
56
+ ):
57
+ self.http = http
58
+ self.token = token
59
+ self.host = host
60
+ self.robot_kind = robot_kind
61
+
62
+ def request(self, method: str, url: str, **kwargs):
63
+ return self.http.request(method, self.host + url, **kwargs)
64
+
65
+ def json_headers(self) -> Dict[str, str]:
66
+ return {
67
+ "Content-Type": "application/json",
68
+ "Authorization": "Bearer " + self.token,
69
+ "robot_kind": self.robot_kind.value,
70
+ }
65
71
 
66
- class Default:
67
- _request_manager: RequestManager
68
- class Equipment:
69
- def __init__(self, request_manager: RequestManager):
70
- self._request_manager = request_manager
72
+ def close(self):
73
+ self.http.clear()
71
74
 
72
- def onrobot_2fg7_move(
73
- self,
74
- value: Union[int, float],
75
- direction: Union[str, models.LinearGripDirectionEnum] = models.LinearGripDirectionEnum.Inward,
76
- unit_kind: Union[str, models.LinearUnitKind] = models.LinearUnitKind.Millimeters
77
- ):
78
- """Move the robot to the onrobot_2fg7 position.
79
- """
80
- return self.control_gripper(
81
- models.GripperCommandRequest(
82
- kind=models.GripperKindEnum.Onrobot2Fg7,
83
- onrobot_2fg7=models.OnRobot2FG7GripperCommandRequest(
84
- control_kind=models.OnRobot2FG7ControlKindEnum.Move,
85
- target_grip_width=models.LinearUnit(
86
- unit_kind=models.LinearUnitKind(unit_kind),
87
- value=float(value),
88
- ),
89
- grip_direction=models.LinearGripDirectionEnum(direction),
75
+ class Default:
76
+ _request_manager: RequestManager
77
+ class Equipment:
78
+ def __init__(self, request_manager: RequestManager):
79
+ self._request_manager = request_manager
80
+
81
+ def onrobot_2fg7_move(
82
+ self,
83
+ value: Union[int, float],
84
+ direction: Union[str, models.LinearGripDirectionEnum] = models.LinearGripDirectionEnum.Inward,
85
+ unit_kind: Union[str, models.LinearUnitKind] = models.LinearUnitKind.Millimeters
86
+ ):
87
+ """Move the robot to the onrobot_2fg7 position.
88
+ """
89
+ return self.control_gripper(
90
+ models.GripperCommandRequest(
91
+ kind=models.GripperKindEnum.Onrobot2Fg7,
92
+ onrobot_2fg7=models.OnRobot2FG7GripperCommandRequest(
93
+ control_kind=models.OnRobot2FG7ControlKindEnum.Move,
94
+ target_grip_width=models.LinearUnit(
95
+ unit_kind=models.LinearUnitKind(unit_kind),
96
+ value=float(value),
97
+ ),
98
+ grip_direction=models.LinearGripDirectionEnum(direction),
99
+ )
100
+ )
90
101
  )
91
- )
92
- )
93
-
94
- def onrobot_2fg7_grip(
95
- self,
96
- value: Union[int, float],
97
- direction: Union[str, models.LinearGripDirectionEnum] = models.LinearGripDirectionEnum.Inward,
98
- unit_kind: Union[str, models.LinearUnitKind] = models.LinearUnitKind.Millimeters,
99
- force: Union[int, float] = 0.0,
100
- force_unit: Union[str, models.ForceUnitKind] = models.ForceUnitKind.Newtons
101
- ):
102
- """Move the robot to the onrobot_2fg7 position.
103
- """
104
- return self.control_gripper(
105
- models.GripperCommandRequest(
106
- kind=models.GripperKindEnum.Onrobot2Fg7,
107
- onrobot_2fg7=models.OnRobot2FG7GripperCommandRequest(
108
- control_kind=models.OnRobot2FG7ControlKindEnum.ForceGrip,
109
- target_grip_width=models.LinearUnit(
110
- unit_kind=models.LinearUnitKind(unit_kind),
111
- value=float(value),
112
- ),
113
- target_force=models.ForceUnit(
114
- unit_kind=models.ForceUnitKind(force_unit),
115
- value=float(force),
116
- ),
117
- grip_direction=models.LinearGripDirectionEnum(direction),
102
+
103
+ def onrobot_2fg7_grip(
104
+ self,
105
+ value: Union[int, float],
106
+ direction: Union[str, models.LinearGripDirectionEnum] = models.LinearGripDirectionEnum.Inward,
107
+ unit_kind: Union[str, models.LinearUnitKind] = models.LinearUnitKind.Millimeters,
108
+ force: Union[int, float] = 0.0,
109
+ force_unit: Union[str, models.ForceUnitKind] = models.ForceUnitKind.Newtons
110
+ ):
111
+ """Move the robot to the onrobot_2fg7 position.
112
+ """
113
+ return self.control_gripper(
114
+ models.GripperCommandRequest(
115
+ kind=models.GripperKindEnum.Onrobot2Fg7,
116
+ onrobot_2fg7=models.OnRobot2FG7GripperCommandRequest(
117
+ control_kind=models.OnRobot2FG7ControlKindEnum.ForceGrip,
118
+ target_grip_width=models.LinearUnit(
119
+ unit_kind=models.LinearUnitKind(unit_kind),
120
+ value=float(value),
121
+ ),
122
+ target_force=models.ForceUnit(
123
+ unit_kind=models.ForceUnitKind(force_unit),
124
+ value=float(force),
125
+ ),
126
+ grip_direction=models.LinearGripDirectionEnum(direction),
127
+ )
128
+ )
118
129
  )
119
- )
120
- )
121
-
122
- def dh_ag_grip(
123
- self,
124
- target_diameter: float,
125
- target_force: float | None,
126
- target_speed: float | None,
127
- ):
128
- """
129
- Control the DH AG gripper.
130
- Args:
131
- - target_diameter: 0.0 - 1.0
132
- - target_force: 0.2 - 1.0
133
- - target_speed: 0.01 - 1.0
134
- """
135
- return self.control_gripper(
136
- body=models.GripperCommandRequest(
137
- kind=models.GripperKindEnum.DhAg,
138
- dh_ag=models.DHAGGripperCommandRequest(
139
- target_diameter, target_force, target_speed
130
+
131
+ def dh_ag_grip(
132
+ self,
133
+ target_diameter: float,
134
+ target_force: float | None,
135
+ target_speed: float | None,
136
+ ):
137
+ """
138
+ Control the DH AG gripper.
139
+ Args:
140
+ - target_diameter: 0.0 - 1.0
141
+ - target_force: 0.2 - 1.0
142
+ - target_speed: 0.01 - 1.0
143
+ """
144
+ return self.control_gripper(
145
+ body=models.GripperCommandRequest(
146
+ kind=models.GripperKindEnum.DhAg,
147
+ dh_ag=models.DHAGGripperCommandRequest(
148
+ target_diameter, target_force, target_speed
149
+ ),
140
150
  ),
141
- ),
142
- )
143
- def dh_pgc_grip(
144
- self,
145
- target_diameter: float,
146
- target_force: float | None,
147
- target_speed: float | None,
148
- ):
149
- """
150
- Control the DH PGC gripper.
151
- Args:
152
- - target_diameter: 0.0 - 1.0
153
- - target_force: 0.2 - 1.0
154
- - target_speed: 0.01 - 1.0
155
- """
156
- return self.control_gripper(
157
- body=models.GripperCommandRequest(
158
- kind=models.GripperKindEnum.DhPgc,
159
- dh_pgc=models.DHPGCGripperCommandRequest(
160
- target_diameter, target_force, target_speed
151
+ )
152
+ def dh_pgc_grip(
153
+ self,
154
+ target_diameter: float,
155
+ target_force: float | None,
156
+ target_speed: float | None,
157
+ ):
158
+ """
159
+ Control the DH PGC gripper.
160
+ Args:
161
+ - target_diameter: 0.0 - 1.0
162
+ - target_force: 0.2 - 1.0
163
+ - target_speed: 0.01 - 1.0
164
+ """
165
+ return self.control_gripper(
166
+ body=models.GripperCommandRequest(
167
+ kind=models.GripperKindEnum.DhPgc,
168
+ dh_pgc=models.DHPGCGripperCommandRequest(
169
+ target_diameter, target_force, target_speed
170
+ ),
161
171
  ),
162
- ),
163
- )
164
- def dh_cgi_grip(
165
- self,
166
- target_diameter: float,
167
- target_force: float | None,
168
- target_speed: float | None,
169
- ):
170
- """
171
- Control the DH CGI gripper.
172
- Args:
173
- - target_diameter: 0.0 - 1.0
174
- - target_force: 0.2 - 1.0
175
- - target_speed: 0.01 - 1.0
176
- """
177
- return self.control_gripper(
178
- body=models.GripperCommandRequest(
179
- kind=models.GripperKindEnum.DhCgi,
180
- dh_pgc=models.DHCGIGripperCommandRequest(
181
- target_diameter, target_force, target_speed
172
+ )
173
+ def dh_cgi_grip(
174
+ self,
175
+ target_diameter: float,
176
+ target_force: float | None,
177
+ target_speed: float | None,
178
+ ):
179
+ """
180
+ Control the DH CGI gripper.
181
+ Args:
182
+ - target_diameter: 0.0 - 1.0
183
+ - target_force: 0.2 - 1.0
184
+ - target_speed: 0.01 - 1.0
185
+ """
186
+ return self.control_gripper(
187
+ body=models.GripperCommandRequest(
188
+ kind=models.GripperKindEnum.DhCgi,
189
+ dh_pgc=models.DHCGIGripperCommandRequest(
190
+ target_diameter, target_force, target_speed
191
+ ),
182
192
  ),
183
- ),
184
- )
185
-
186
-
187
- def control_gripper(
188
- self,
189
- body: models.GripperCommandRequest,
190
- ) -> Response[
191
- None,
192
- None
193
- ]:
194
- """
195
- Send commands to control the Gripper (End Effector) of the robot. The gripper can be any of Standard Bots supported grippers.
196
-
197
- """
198
- path = "/api/v1/equipment/end-effector/control"
199
- response = self._request_manager.request(
200
- "POST",
201
- path,
202
- headers=self._request_manager.json_headers(),
203
- body=json.dumps(models.serialize_gripper_command_request(body)),
204
- )
205
- parsed = None
206
-
207
- is_user_error = response.status >= 400 and response.status < 500
208
- is_unavailable = response.status == 503
209
- if parsed is None and (is_user_error or is_unavailable):
210
- parsed = models.parse_error_response(json.loads(response.data))
211
-
212
- return Response(
213
- parsed,
214
- response.status,
215
- response
216
- )
217
-
218
- def get_gripper_configuration(
219
- self,
220
- ) -> Response[
221
- Union[
222
- models.GripperConfiguration,
223
- models.ErrorResponse,
224
- None
225
- ],
226
- models.GripperConfiguration
227
- ]:
228
- """
229
- Get the current gripper configuration
230
-
231
- """
232
- path = "/api/v1/equipment/end-effector/configuration"
233
- response = self._request_manager.request(
234
- "GET",
235
- path,
236
- headers=self._request_manager.json_headers(),
237
- )
238
- parsed = None
239
- if response.status == 200:
240
- parsed = models.parse_gripper_configuration(json.loads(response.data))
241
-
242
- is_user_error = response.status >= 400 and response.status < 500
243
- is_unavailable = response.status == 503
244
- if parsed is None and (is_user_error or is_unavailable):
245
- parsed = models.parse_error_response(json.loads(response.data))
246
-
247
- return Response(
248
- parsed,
249
- response.status,
250
- response
251
- )
252
-
253
- class Space:
193
+ )
194
+
195
+
196
+ def control_gripper(
197
+ self,
198
+ body: models.GripperCommandRequest,
199
+ ) -> Response[
200
+ None,
201
+ None
202
+ ]:
203
+ """
204
+ Send commands to control the Gripper (End Effector) of the robot. The gripper can be any of Standard Bots supported grippers.
205
+
206
+ """
207
+ path = "/api/v1/equipment/end-effector/control"
208
+ try:
209
+ response = self._request_manager.request(
210
+ "POST",
211
+ path,
212
+ headers=self._request_manager.json_headers(),
213
+ body=json.dumps(models.serialize_gripper_command_request(body)),
214
+ )
215
+ parsed = None
216
+
217
+ is_user_error = response.status >= 400 and response.status <= 500
218
+ is_unavailable = response.status == 503
219
+ if parsed is None and (is_user_error or is_unavailable):
220
+ parsed = models.parse_error_response(json.loads(response.data))
221
+
222
+ return Response(
223
+ parsed,
224
+ response.status,
225
+ response
226
+ )
227
+ except urllib3.exceptions.MaxRetryError:
228
+ return Response(
229
+ models.ErrorResponse(
230
+ error=models.ErrorEnum.InternalServerError,
231
+ message="Connection Refused"
232
+ ),
233
+ 503,
234
+ None
235
+ )
236
+ def get_gripper_configuration(
237
+ self,
238
+ ) -> Response[
239
+ Union[
240
+ models.GripperConfiguration,
241
+ models.ErrorResponse,
242
+ None
243
+ ],
244
+ models.GripperConfiguration
245
+ ]:
246
+ """
247
+ Get the current gripper configuration
248
+
249
+ """
250
+ path = "/api/v1/equipment/end-effector/configuration"
251
+ try:
252
+ response = self._request_manager.request(
253
+ "GET",
254
+ path,
255
+ headers=self._request_manager.json_headers(),
256
+ )
257
+ parsed = None
258
+ if response.status == 200:
259
+ parsed = models.parse_gripper_configuration(json.loads(response.data))
260
+
261
+ is_user_error = response.status >= 400 and response.status <= 500
262
+ is_unavailable = response.status == 503
263
+ if parsed is None and (is_user_error or is_unavailable):
264
+ parsed = models.parse_error_response(json.loads(response.data))
265
+
266
+ return Response(
267
+ parsed,
268
+ response.status,
269
+ response
270
+ )
271
+ except urllib3.exceptions.MaxRetryError:
272
+ return Response(
273
+ models.ErrorResponse(
274
+ error=models.ErrorEnum.InternalServerError,
275
+ message="Connection Refused"
276
+ ),
277
+ 503,
278
+ None
279
+ )
280
+ class Sensors:
281
+ def __init__(self, request_manager: RequestManager):
282
+ self._request_manager = request_manager
283
+
284
+
285
+ def get_sensors(
286
+ self,
287
+ ) -> Response[
288
+ Union[
289
+ models.SensorsConfiguration,
290
+ models.ErrorResponse,
291
+ None
292
+ ],
293
+ models.SensorsConfiguration
294
+ ]:
295
+ """
296
+ Get the current state of all sensors
297
+ """
298
+ path = "/api/v1/equipment/custom/sensors"
299
+ try:
300
+ response = self._request_manager.request(
301
+ "GET",
302
+ path,
303
+ headers=self._request_manager.json_headers(),
304
+ )
305
+ parsed = None
306
+ if response.status == 200:
307
+ parsed = models.parse_sensors_configuration(json.loads(response.data))
308
+
309
+ is_user_error = response.status >= 400 and response.status <= 500
310
+ is_unavailable = response.status == 503
311
+ if parsed is None and (is_user_error or is_unavailable):
312
+ parsed = models.parse_error_response(json.loads(response.data))
313
+
314
+ return Response(
315
+ parsed,
316
+ response.status,
317
+ response
318
+ )
319
+ except urllib3.exceptions.MaxRetryError:
320
+ return Response(
321
+ models.ErrorResponse(
322
+ error=models.ErrorEnum.InternalServerError,
323
+ message="Connection Refused"
324
+ ),
325
+ 503,
326
+ None
327
+ )
328
+ class Space:
329
+ def __init__(self, request_manager: RequestManager):
330
+ self._request_manager = request_manager
331
+
332
+
333
+ def list_planes(
334
+ self,
335
+ limit: int,
336
+ offset: int,
337
+ ) -> Response[
338
+ Union[
339
+ models.PlanesPaginatedResponse,
340
+ models.ErrorResponse,
341
+ None
342
+ ],
343
+ models.PlanesPaginatedResponse
344
+ ]:
345
+ """
346
+ List Planes
347
+ """
348
+ path = "/api/v1/space/planes"
349
+ try:
350
+ response = self._request_manager.request(
351
+ "GET",
352
+ path,
353
+ headers=self._request_manager.json_headers(),
354
+ fields={
355
+ "limit": models.serialize_i_64(limit),
356
+ "offset": models.serialize_i_64(offset),
357
+ }
358
+ )
359
+ parsed = None
360
+ if response.status == 200:
361
+ parsed = models.parse_planes_paginated_response(json.loads(response.data))
362
+
363
+ is_user_error = response.status >= 400 and response.status <= 500
364
+ is_unavailable = response.status == 503
365
+ if parsed is None and (is_user_error or is_unavailable):
366
+ parsed = models.parse_error_response(json.loads(response.data))
367
+
368
+ return Response(
369
+ parsed,
370
+ response.status,
371
+ response
372
+ )
373
+ except urllib3.exceptions.MaxRetryError:
374
+ return Response(
375
+ models.ErrorResponse(
376
+ error=models.ErrorEnum.InternalServerError,
377
+ message="Connection Refused"
378
+ ),
379
+ 503,
380
+ None
381
+ )
382
+
383
+ equipment: Equipment
384
+ sensors: Sensors
385
+ space: Space
386
+
254
387
  def __init__(self, request_manager: RequestManager):
255
- self._request_manager = request_manager
256
-
257
-
258
- def list_position(
259
- self,
260
- limit: int,
261
- offset: int,
262
- ) -> Response[
263
- Union[
264
- models.PlanesPaginatedResponse,
265
- models.ErrorResponse,
266
- None
267
- ],
268
- models.PlanesPaginatedResponse
269
- ]:
270
- """
271
- List Positions
272
- """
273
- path = "/api/v1/space/positions"
274
- response = self._request_manager.request(
275
- "GET",
276
- path,
277
- headers=self._request_manager.json_headers(),
278
- fields={
279
- "limit": models.serialize_i_64(limit),
280
- "offset": models.serialize_i_64(offset),
281
- }
282
- )
283
- parsed = None
284
- if response.status == 200:
285
- parsed = models.parse_planes_paginated_response(json.loads(response.data))
286
-
287
- is_user_error = response.status >= 400 and response.status < 500
288
- is_unavailable = response.status == 503
289
- if parsed is None and (is_user_error or is_unavailable):
290
- parsed = models.parse_error_response(json.loads(response.data))
291
-
292
- return Response(
293
- parsed,
294
- response.status,
295
- response
296
- )
297
-
298
- def list_planes(
299
- self,
300
- limit: int,
301
- offset: int,
302
- ) -> Response[
303
- Union[
304
- models.PlanesPaginatedResponse,
305
- models.ErrorResponse,
306
- None
307
- ],
308
- models.PlanesPaginatedResponse
309
- ]:
310
- """
311
- List Planes
312
- """
313
- path = "/api/v1/space/planes"
314
- response = self._request_manager.request(
315
- "GET",
316
- path,
317
- headers=self._request_manager.json_headers(),
318
- fields={
319
- "limit": models.serialize_i_64(limit),
320
- "offset": models.serialize_i_64(offset),
321
- }
322
- )
323
- parsed = None
324
- if response.status == 200:
325
- parsed = models.parse_planes_paginated_response(json.loads(response.data))
326
-
327
- is_user_error = response.status >= 400 and response.status < 500
328
- is_unavailable = response.status == 503
329
- if parsed is None and (is_user_error or is_unavailable):
330
- parsed = models.parse_error_response(json.loads(response.data))
331
-
332
- return Response(
333
- parsed,
334
- response.status,
335
- response
336
- )
337
-
338
- equipment: Equipment
339
- space: Space
340
-
341
- def __init__(self, request_manager: RequestManager):
342
- self._request_manager = request_manager
343
- self.equipment = Default.Equipment(request_manager)
344
- self.space = Default.Space(request_manager)
388
+ self._request_manager = request_manager
389
+ self.equipment = Default.Equipment(request_manager)
390
+ self.sensors = Default.Sensors(request_manager)
391
+ self.space = Default.Space(request_manager)
345
392
 
346
393
  class Movement:
347
- _request_manager: RequestManager
348
- class Brakes:
349
- def __init__(self, request_manager: RequestManager):
350
- self._request_manager = request_manager
351
-
352
-
353
- def brake(self):
354
- """Brake the robot
355
- """
356
- return self.set_brakes_state(
357
- models.BrakesState(
358
- state=models.BrakesStateEnum.Engaged,
359
- ),
360
- )
361
-
362
- def unbrake(self):
363
- """Unbrake the robot
364
- """
365
- return self.set_brakes_state(
366
- models.BrakesState(
367
- state=models.BrakesStateEnum.Disengaged,
368
- ),
369
- )
370
-
371
-
372
- def set_brakes_state(
373
- self,
374
- body: models.BrakesState,
375
- ) -> Response[
376
- Union[
377
- models.BrakesState,
378
- models.ErrorResponse,
379
- None
380
- ],
381
- models.BrakesState
382
- ]:
383
- """
384
- Control Joint Brakes in the robot
385
-
386
- """
387
- path = "/api/v1/movement/brakes"
388
- response = self._request_manager.request(
389
- "POST",
390
- path,
391
- headers=self._request_manager.json_headers(),
392
- body=json.dumps(models.serialize_brakes_state(body)),
393
- )
394
- parsed = None
395
- if response.status == 200:
396
- parsed = models.parse_brakes_state(json.loads(response.data))
397
-
398
- is_user_error = response.status >= 400 and response.status < 500
399
- is_unavailable = response.status == 503
400
- if parsed is None and (is_user_error or is_unavailable):
401
- parsed = models.parse_error_response(json.loads(response.data))
402
-
403
- return Response(
404
- parsed,
405
- response.status,
406
- response
407
- )
408
-
409
- def get_brakes_state(
410
- self,
411
- ) -> Response[
412
- Union[
413
- models.BrakesState,
414
- models.ErrorResponse,
415
- None
416
- ],
417
- models.BrakesState
418
- ]:
419
- """
420
- Get the current state of the robot brakes
421
-
422
- """
423
- path = "/api/v1/movement/brakes"
424
- response = self._request_manager.request(
425
- "GET",
426
- path,
427
- headers=self._request_manager.json_headers(),
428
- )
429
- parsed = None
430
- if response.status == 200:
431
- parsed = models.parse_brakes_state(json.loads(response.data))
432
-
433
- is_user_error = response.status >= 400 and response.status < 500
434
- is_unavailable = response.status == 503
435
- if parsed is None and (is_user_error or is_unavailable):
436
- parsed = models.parse_error_response(json.loads(response.data))
437
-
438
- return Response(
439
- parsed,
440
- response.status,
441
- response
442
- )
443
-
444
- def engage_emergency_stop(
445
- self,
446
- body: models.EngageEmergencyStopRequest,
447
- ) -> Response[
448
- None,
449
- None
450
- ]:
451
- """
452
- Engage Emergency braking system.
394
+ _request_manager: RequestManager
395
+ class Brakes:
396
+ def __init__(self, request_manager: RequestManager):
397
+ self._request_manager = request_manager
398
+
399
+
400
+ def brake(self):
401
+ """Brake the robot
402
+ """
403
+ return self.set_brakes_state(
404
+ models.BrakesState(
405
+ state=models.BrakesStateEnum.Engaged,
406
+ ),
407
+ )
408
+
409
+ def unbrake(self):
410
+ """Unbrake the robot
411
+ """
412
+ return self.set_brakes_state(
413
+ models.BrakesState(
414
+ state=models.BrakesStateEnum.Disengaged,
415
+ ),
416
+ )
417
+
418
+
419
+ def set_brakes_state(
420
+ self,
421
+ body: models.BrakesState,
422
+ ) -> Response[
423
+ Union[
424
+ models.BrakesState,
425
+ models.ErrorResponse,
426
+ None
427
+ ],
428
+ models.BrakesState
429
+ ]:
430
+ """
431
+ Control Joint Brakes in the robot
432
+
433
+ """
434
+ path = "/api/v1/movement/brakes"
435
+ try:
436
+ response = self._request_manager.request(
437
+ "POST",
438
+ path,
439
+ headers=self._request_manager.json_headers(),
440
+ body=json.dumps(models.serialize_brakes_state(body)),
441
+ )
442
+ parsed = None
443
+ if response.status == 200:
444
+ parsed = models.parse_brakes_state(json.loads(response.data))
445
+
446
+ is_user_error = response.status >= 400 and response.status <= 500
447
+ is_unavailable = response.status == 503
448
+ if parsed is None and (is_user_error or is_unavailable):
449
+ parsed = models.parse_error_response(json.loads(response.data))
450
+
451
+ return Response(
452
+ parsed,
453
+ response.status,
454
+ response
455
+ )
456
+ except urllib3.exceptions.MaxRetryError:
457
+ return Response(
458
+ models.ErrorResponse(
459
+ error=models.ErrorEnum.InternalServerError,
460
+ message="Connection Refused"
461
+ ),
462
+ 503,
463
+ None
464
+ )
465
+ def get_brakes_state(
466
+ self,
467
+ ) -> Response[
468
+ Union[
469
+ models.BrakesState,
470
+ models.ErrorResponse,
471
+ None
472
+ ],
473
+ models.BrakesState
474
+ ]:
475
+ """
476
+ Get the current state of the robot brakes
477
+
478
+ """
479
+ path = "/api/v1/movement/brakes"
480
+ try:
481
+ response = self._request_manager.request(
482
+ "GET",
483
+ path,
484
+ headers=self._request_manager.json_headers(),
485
+ )
486
+ parsed = None
487
+ if response.status == 200:
488
+ parsed = models.parse_brakes_state(json.loads(response.data))
489
+
490
+ is_user_error = response.status >= 400 and response.status <= 500
491
+ is_unavailable = response.status == 503
492
+ if parsed is None and (is_user_error or is_unavailable):
493
+ parsed = models.parse_error_response(json.loads(response.data))
494
+
495
+ return Response(
496
+ parsed,
497
+ response.status,
498
+ response
499
+ )
500
+ except urllib3.exceptions.MaxRetryError:
501
+ return Response(
502
+ models.ErrorResponse(
503
+ error=models.ErrorEnum.InternalServerError,
504
+ message="Connection Refused"
505
+ ),
506
+ 503,
507
+ None
508
+ )
509
+ def engage_emergency_stop(
510
+ self,
511
+ body: models.EngageEmergencyStopRequest,
512
+ ) -> Response[
513
+ None,
514
+ None
515
+ ]:
516
+ """
517
+ Engage Emergency braking system.
453
518
  &gt; **⚠️ Warning:** This will immediately stop the robot and may cause damage to the robot or surrounding environment.
454
519
 
455
- """
456
- path = "/api/v1/movement/brakes/emergency-stop"
457
- response = self._request_manager.request(
458
- "POST",
459
- path,
460
- headers=self._request_manager.json_headers(),
461
- body=json.dumps(models.serialize_engage_emergency_stop_request(body)),
462
- )
463
- parsed = None
464
-
465
- is_user_error = response.status >= 400 and response.status < 500
466
- is_unavailable = response.status == 503
467
- if parsed is None and (is_user_error or is_unavailable):
468
- parsed = models.parse_error_response(json.loads(response.data))
469
-
470
- return Response(
471
- parsed,
472
- response.status,
473
- response
474
- )
475
-
476
- class Position:
520
+ """
521
+ path = "/api/v1/movement/brakes/emergency-stop"
522
+ try:
523
+ response = self._request_manager.request(
524
+ "POST",
525
+ path,
526
+ headers=self._request_manager.json_headers(),
527
+ body=json.dumps(models.serialize_engage_emergency_stop_request(body)),
528
+ )
529
+ parsed = None
530
+
531
+ is_user_error = response.status >= 400 and response.status <= 500
532
+ is_unavailable = response.status == 503
533
+ if parsed is None and (is_user_error or is_unavailable):
534
+ parsed = models.parse_error_response(json.loads(response.data))
535
+
536
+ return Response(
537
+ parsed,
538
+ response.status,
539
+ response
540
+ )
541
+ except urllib3.exceptions.MaxRetryError:
542
+ return Response(
543
+ models.ErrorResponse(
544
+ error=models.ErrorEnum.InternalServerError,
545
+ message="Connection Refused"
546
+ ),
547
+ 503,
548
+ None
549
+ )
550
+ class Position:
551
+ def __init__(self, request_manager: RequestManager):
552
+ self._request_manager = request_manager
553
+
554
+ def move(
555
+ self,
556
+ position: models.Position,
557
+ orientation: models.Orientation,
558
+ reference_frame: str = 'base',
559
+ axis_alignment: str = 'base',
560
+ local_accuracy_calibration: str | None = None,
561
+ movement_kind: models.MovementKindEnum | None = models.MovementKindEnum.Joint,
562
+ speed_profile: models.SpeedProfile | None = None,
563
+ ):
564
+ return self.move_tooltip(
565
+ position=position,
566
+ orientation=orientation,
567
+ reference_frame=reference_frame,
568
+ axis_alignment=axis_alignment,
569
+ local_accuracy_calibration=local_accuracy_calibration,
570
+ movement_kind=movement_kind,
571
+ speed_profile=speed_profile
572
+ )
573
+
574
+ def move_tooltip(
575
+ self,
576
+ position: models.Position,
577
+ orientation: models.Orientation,
578
+ reference_frame: str = 'base',
579
+ axis_alignment: str = 'base',
580
+ local_accuracy_calibration: str | None = None,
581
+ movement_kind: models.MovementKindEnum | None = models.MovementKindEnum.Joint,
582
+ speed_profile: models.SpeedProfile | None = None,
583
+ ):
584
+ """Move tooltip of robot to specified position
585
+ """
586
+ request = models.ArmPositionUpdateRequest(
587
+ kind=models.ArmPositionUpdateRequestKindEnum.TooltipPosition,
588
+ tooltip_position=models.PositionAndOrientation(
589
+ position=position,
590
+ orientation=orientation,
591
+ reference_frame=reference_frame,
592
+ local_accuracy_calibration=local_accuracy_calibration,
593
+ axis_alignment=axis_alignment,
594
+ ),
595
+ movement_kind=movement_kind,
596
+ speed_profile=speed_profile
597
+ )
598
+ return self.set_arm_position(request)
599
+
600
+
601
+ def get_arm_position(
602
+ self,
603
+ ) -> Response[
604
+ Union[
605
+ models.CombinedArmPosition,
606
+ models.ErrorResponse,
607
+ None
608
+ ],
609
+ models.CombinedArmPosition
610
+ ]:
611
+ """
612
+ Get the current position of the robot arm
613
+ """
614
+ path = "/api/v1/movement/position/arm"
615
+ try:
616
+ response = self._request_manager.request(
617
+ "GET",
618
+ path,
619
+ headers=self._request_manager.json_headers(),
620
+ )
621
+ parsed = None
622
+ if response.status == 200:
623
+ parsed = models.parse_combined_arm_position(json.loads(response.data))
624
+
625
+ is_user_error = response.status >= 400 and response.status <= 500
626
+ is_unavailable = response.status == 503
627
+ if parsed is None and (is_user_error or is_unavailable):
628
+ parsed = models.parse_error_response(json.loads(response.data))
629
+
630
+ return Response(
631
+ parsed,
632
+ response.status,
633
+ response
634
+ )
635
+ except urllib3.exceptions.MaxRetryError:
636
+ return Response(
637
+ models.ErrorResponse(
638
+ error=models.ErrorEnum.InternalServerError,
639
+ message="Connection Refused"
640
+ ),
641
+ 503,
642
+ None
643
+ )
644
+ def set_arm_position(
645
+ self,
646
+ body: models.ArmPositionUpdateRequest,
647
+ ) -> Response[
648
+ Union[
649
+ models.ArmPositionUpdateEvent,
650
+ models.ErrorResponse,
651
+ None
652
+ ],
653
+ models.ArmPositionUpdateEvent
654
+ ]:
655
+ """
656
+ Control the position of the RO1 Robot arm.
657
+
658
+ """
659
+ path = "/api/v1/movement/position/arm"
660
+ try:
661
+ response = self._request_manager.request(
662
+ "POST",
663
+ path,
664
+ headers=self._request_manager.json_headers(),
665
+ body=json.dumps(models.serialize_arm_position_update_request(body)),
666
+ )
667
+ parsed = None
668
+ if response.status == 200:
669
+ parsed = models.parse_arm_position_update_event(json.loads(response.data))
670
+
671
+ is_user_error = response.status >= 400 and response.status <= 500
672
+ is_unavailable = response.status == 503
673
+ if parsed is None and (is_user_error or is_unavailable):
674
+ parsed = models.parse_error_response(json.loads(response.data))
675
+
676
+ return Response(
677
+ parsed,
678
+ response.status,
679
+ response
680
+ )
681
+ except urllib3.exceptions.MaxRetryError:
682
+ return Response(
683
+ models.ErrorResponse(
684
+ error=models.ErrorEnum.InternalServerError,
685
+ message="Connection Refused"
686
+ ),
687
+ 503,
688
+ None
689
+ )
690
+
691
+ brakes: Brakes
692
+ position: Position
693
+
477
694
  def __init__(self, request_manager: RequestManager):
478
- self._request_manager = request_manager
479
-
480
- def move(
481
- self,
482
- position: models.Position,
483
- orientation: models.Orientation,
484
- reference_frame: str = 'base',
485
- axis_alignment: str = 'base',
486
- local_accuracy_calibration: str | None = None,
487
- movement_kind: models.MovementKindEnum | None = models.MovementKindEnum.Joint,
488
- ):
489
- return self.move_tooltip(
490
- position=position,
491
- orientation=orientation,
492
- reference_frame=reference_frame,
493
- axis_alignment=axis_alignment,
494
- local_accuracy_calibration=local_accuracy_calibration,
495
- movement_kind=movement_kind
496
- )
497
-
498
- def move_tooltip(
499
- self,
500
- position: models.Position,
501
- orientation: models.Orientation,
502
- reference_frame: str = 'base',
503
- axis_alignment: str = 'base',
504
- local_accuracy_calibration: str | None = None,
505
- movement_kind: models.MovementKindEnum | None = models.MovementKindEnum.Joint
506
- ):
507
- """Move tooltip of robot to specified position
508
- """
509
- request = models.ArmPositionUpdateRequest(
510
- kind=models.ArmPositionUpdateRequestKindEnum.TooltipPosition,
511
- tooltip_position=models.PositionAndOrientation(
512
- position=position,
513
- orientation=orientation,
514
- reference_frame=reference_frame,
515
- local_accuracy_calibration=local_accuracy_calibration,
516
- axis_alignment=axis_alignment,
517
- ),
518
- )
519
- return self.set_arm_position(request)
520
-
521
-
522
- def get_arm_position(
523
- self,
524
- ) -> Response[
525
- Union[
526
- models.CombinedArmPosition,
527
- models.ErrorResponse,
528
- None
529
- ],
530
- models.CombinedArmPosition
531
- ]:
532
- """
533
- Get the current position of the robot arm
534
- """
535
- path = "/api/v1/movement/position/arm"
536
- response = self._request_manager.request(
537
- "GET",
538
- path,
539
- headers=self._request_manager.json_headers(),
540
- )
541
- parsed = None
542
- if response.status == 200:
543
- parsed = models.parse_combined_arm_position(json.loads(response.data))
544
-
545
- is_user_error = response.status >= 400 and response.status < 500
546
- is_unavailable = response.status == 503
547
- if parsed is None and (is_user_error or is_unavailable):
548
- parsed = models.parse_error_response(json.loads(response.data))
549
-
550
- return Response(
551
- parsed,
552
- response.status,
553
- response
554
- )
555
-
556
- def set_arm_position(
557
- self,
558
- body: models.ArmPositionUpdateRequest,
559
- ) -> Response[
560
- Union[
561
- models.ArmPositionUpdateEvent,
562
- models.ErrorResponse,
563
- None
564
- ],
565
- models.ArmPositionUpdateEvent
566
- ]:
567
- """
568
- Control the position of the RO1 Robot arm.
569
-
570
- """
571
- path = "/api/v1/movement/position/arm"
572
- response = self._request_manager.request(
573
- "POST",
574
- path,
575
- headers=self._request_manager.json_headers(),
576
- body=json.dumps(models.serialize_arm_position_update_request(body)),
577
- )
578
- parsed = None
579
- if response.status == 200:
580
- parsed = models.parse_arm_position_update_event(json.loads(response.data))
581
-
582
- is_user_error = response.status >= 400 and response.status < 500
583
- is_unavailable = response.status == 503
584
- if parsed is None and (is_user_error or is_unavailable):
585
- parsed = models.parse_error_response(json.loads(response.data))
586
-
587
- return Response(
588
- parsed,
589
- response.status,
590
- response
591
- )
592
-
593
- brakes: Brakes
594
- position: Position
595
-
596
- def __init__(self, request_manager: RequestManager):
597
- self._request_manager = request_manager
598
- self.brakes = Movement.Brakes(request_manager)
599
- self.position = Movement.Position(request_manager)
695
+ self._request_manager = request_manager
696
+ self.brakes = Movement.Brakes(request_manager)
697
+ self.position = Movement.Position(request_manager)
600
698
 
601
699
  class Camera:
602
- _request_manager: RequestManager
603
- class Data:
604
- def __init__(self, request_manager: RequestManager):
605
- self._request_manager = request_manager
606
-
607
-
608
- def get_color_frame(
609
- self,
610
- body: models.CameraFrameRequest,
611
- ) -> Response[
612
- None,
613
- None
614
- ]:
615
- """
616
- Retrieve the latest RGB frame from the camera.
617
- """
618
- path = "/api/v1/camera/frame/rgb"
619
- response = self._request_manager.request(
620
- "GET",
621
- path,
622
- headers=self._request_manager.json_headers(),
623
- body=json.dumps(models.serialize_camera_frame_request(body)),
624
- )
625
- parsed = None
626
-
627
- is_user_error = response.status >= 400 and response.status < 500
628
- is_unavailable = response.status == 503
629
- if parsed is None and (is_user_error or is_unavailable):
630
- parsed = models.parse_error_response(json.loads(response.data))
631
-
632
- return Response(
633
- parsed,
634
- response.status,
635
- response
636
- )
637
-
638
- def get_camera_intrinsics_color(
639
- self,
640
- ) -> Response[
641
- None,
642
- None
643
- ]:
644
- """
645
- Retrieve the intrinsic parameters for the color camera.
646
- """
647
- path = "/api/v1/camera/intrinsics/rgb"
648
- response = self._request_manager.request(
649
- "GET",
650
- path,
651
- headers=self._request_manager.json_headers(),
652
- )
653
- parsed = None
654
-
655
- is_user_error = response.status >= 400 and response.status < 500
656
- is_unavailable = response.status == 503
657
- if parsed is None and (is_user_error or is_unavailable):
658
- parsed = models.parse_error_response(json.loads(response.data))
659
-
660
- return Response(
661
- parsed,
662
- response.status,
663
- response
664
- )
665
-
666
- def get_camera_stream(
667
- self,
668
- ) -> Response[
669
- None,
670
- None
671
- ]:
672
- """
673
- Retrieve the latest RGB frame from the camera.
674
- """
675
- path = "/api/v1/camera/stream/rgb"
676
- response = self._request_manager.request(
677
- "GET",
678
- path,
679
- headers=self._request_manager.json_headers(),
680
- preload_content=False,
681
- )
682
- parsed = None
683
-
684
- is_user_error = response.status >= 400 and response.status < 500
685
- is_unavailable = response.status == 503
686
- if parsed is None and (is_user_error or is_unavailable):
687
- parsed = models.parse_error_response(json.loads(response.data))
688
-
689
- return Response(
690
- parsed,
691
- response.status,
692
- response
693
- )
694
-
695
- class Settings:
700
+ _request_manager: RequestManager
701
+ class Data:
702
+ def __init__(self, request_manager: RequestManager):
703
+ self._request_manager = request_manager
704
+
705
+
706
+ def get_color_frame(
707
+ self,
708
+ body: models.CameraFrameRequest,
709
+ ) -> Response[
710
+ None,
711
+ None
712
+ ]:
713
+ """
714
+ Retrieve the latest RGB frame from the camera.
715
+ """
716
+ path = "/api/v1/camera/frame/rgb"
717
+ try:
718
+ response = self._request_manager.request(
719
+ "GET",
720
+ path,
721
+ headers=self._request_manager.json_headers(),
722
+ body=json.dumps(models.serialize_camera_frame_request(body)),
723
+ )
724
+ parsed = None
725
+
726
+ is_user_error = response.status >= 400 and response.status <= 500
727
+ is_unavailable = response.status == 503
728
+ if parsed is None and (is_user_error or is_unavailable):
729
+ parsed = models.parse_error_response(json.loads(response.data))
730
+
731
+ return Response(
732
+ parsed,
733
+ response.status,
734
+ response
735
+ )
736
+ except urllib3.exceptions.MaxRetryError:
737
+ return Response(
738
+ models.ErrorResponse(
739
+ error=models.ErrorEnum.InternalServerError,
740
+ message="Connection Refused"
741
+ ),
742
+ 503,
743
+ None
744
+ )
745
+ def get_camera_intrinsics_color(
746
+ self,
747
+ ) -> Response[
748
+ None,
749
+ None
750
+ ]:
751
+ """
752
+ Retrieve the intrinsic parameters for the color camera.
753
+ """
754
+ path = "/api/v1/camera/intrinsics/rgb"
755
+ try:
756
+ response = self._request_manager.request(
757
+ "GET",
758
+ path,
759
+ headers=self._request_manager.json_headers(),
760
+ )
761
+ parsed = None
762
+
763
+ is_user_error = response.status >= 400 and response.status <= 500
764
+ is_unavailable = response.status == 503
765
+ if parsed is None and (is_user_error or is_unavailable):
766
+ parsed = models.parse_error_response(json.loads(response.data))
767
+
768
+ return Response(
769
+ parsed,
770
+ response.status,
771
+ response
772
+ )
773
+ except urllib3.exceptions.MaxRetryError:
774
+ return Response(
775
+ models.ErrorResponse(
776
+ error=models.ErrorEnum.InternalServerError,
777
+ message="Connection Refused"
778
+ ),
779
+ 503,
780
+ None
781
+ )
782
+ def get_camera_stream(
783
+ self,
784
+ ) -> Response[
785
+ None,
786
+ None
787
+ ]:
788
+ """
789
+ Retrieve the latest RGB frame from the camera.
790
+ """
791
+ path = "/api/v1/camera/stream/rgb"
792
+ try:
793
+ response = self._request_manager.request(
794
+ "GET",
795
+ path,
796
+ headers=self._request_manager.json_headers(),
797
+ preload_content=False,
798
+ )
799
+ parsed = None
800
+
801
+ is_user_error = response.status >= 400 and response.status <= 500
802
+ is_unavailable = response.status == 503
803
+ if parsed is None and (is_user_error or is_unavailable):
804
+ parsed = models.parse_error_response(json.loads(response.data))
805
+
806
+ return Response(
807
+ parsed,
808
+ response.status,
809
+ response
810
+ )
811
+ except urllib3.exceptions.MaxRetryError:
812
+ return Response(
813
+ models.ErrorResponse(
814
+ error=models.ErrorEnum.InternalServerError,
815
+ message="Connection Refused"
816
+ ),
817
+ 503,
818
+ None
819
+ )
820
+ class Settings:
821
+ def __init__(self, request_manager: RequestManager):
822
+ self._request_manager = request_manager
823
+
824
+
825
+ def set_camera_settings(
826
+ self,
827
+ body: models.CameraSettings,
828
+ ) -> Response[
829
+ None,
830
+ None
831
+ ]:
832
+ """
833
+ Set the camera settings.
834
+ """
835
+ path = "/api/v1/camera/settings"
836
+ try:
837
+ response = self._request_manager.request(
838
+ "POST",
839
+ path,
840
+ headers=self._request_manager.json_headers(),
841
+ body=json.dumps(models.serialize_camera_settings(body)),
842
+ )
843
+ parsed = None
844
+
845
+ is_user_error = response.status >= 400 and response.status <= 500
846
+ is_unavailable = response.status == 503
847
+ if parsed is None and (is_user_error or is_unavailable):
848
+ parsed = models.parse_error_response(json.loads(response.data))
849
+
850
+ return Response(
851
+ parsed,
852
+ response.status,
853
+ response
854
+ )
855
+ except urllib3.exceptions.MaxRetryError:
856
+ return Response(
857
+ models.ErrorResponse(
858
+ error=models.ErrorEnum.InternalServerError,
859
+ message="Connection Refused"
860
+ ),
861
+ 503,
862
+ None
863
+ )
864
+
865
+ data: Data
866
+ settings: Settings
867
+
696
868
  def __init__(self, request_manager: RequestManager):
697
- self._request_manager = request_manager
698
-
699
-
700
- def set_camera_settings(
701
- self,
702
- body: models.CameraSettings,
703
- ) -> Response[
704
- None,
705
- None
706
- ]:
707
- """
708
- Set the camera settings.
709
- """
710
- path = "/api/v1/camera/settings"
711
- response = self._request_manager.request(
712
- "POST",
713
- path,
714
- headers=self._request_manager.json_headers(),
715
- body=json.dumps(models.serialize_camera_settings(body)),
716
- )
717
- parsed = None
718
-
719
- is_user_error = response.status >= 400 and response.status < 500
720
- is_unavailable = response.status == 503
721
- if parsed is None and (is_user_error or is_unavailable):
722
- parsed = models.parse_error_response(json.loads(response.data))
723
-
724
- return Response(
725
- parsed,
726
- response.status,
727
- response
728
- )
729
-
730
- data: Data
731
- settings: Settings
732
-
733
- def __init__(self, request_manager: RequestManager):
734
- self._request_manager = request_manager
735
- self.data = Camera.Data(request_manager)
736
- self.settings = Camera.Settings(request_manager)
869
+ self._request_manager = request_manager
870
+ self.data = Camera.Data(request_manager)
871
+ self.settings = Camera.Settings(request_manager)
737
872
 
738
873
  class Faults:
739
- _request_manager: RequestManager
740
- class UserFaults:
874
+ _request_manager: RequestManager
875
+ class UserFaults:
876
+ def __init__(self, request_manager: RequestManager):
877
+ self._request_manager = request_manager
878
+
879
+
880
+ def trigger_user_fault(
881
+ self,
882
+ body: models.TriggerFaultRequest,
883
+ ) -> Response[
884
+ Union[
885
+ models.ErrorResponse,
886
+ models.ErrorResponse,
887
+ None
888
+ ],
889
+ None
890
+ ]:
891
+ """
892
+ Trigger user faults for routine
893
+
894
+ """
895
+ path = "/api/v1/faults/user-fault"
896
+ try:
897
+ response = self._request_manager.request(
898
+ "POST",
899
+ path,
900
+ headers=self._request_manager.json_headers(),
901
+ body=json.dumps(models.serialize_trigger_fault_request(body)),
902
+ )
903
+ parsed = None
904
+ if response.status == 400:
905
+ parsed = models.parse_error_response(json.loads(response.data))
906
+
907
+ is_user_error = response.status >= 400 and response.status <= 500
908
+ is_unavailable = response.status == 503
909
+ if parsed is None and (is_user_error or is_unavailable):
910
+ parsed = models.parse_error_response(json.loads(response.data))
911
+
912
+ return Response(
913
+ parsed,
914
+ response.status,
915
+ response
916
+ )
917
+ except urllib3.exceptions.MaxRetryError:
918
+ return Response(
919
+ models.ErrorResponse(
920
+ error=models.ErrorEnum.InternalServerError,
921
+ message="Connection Refused"
922
+ ),
923
+ 503,
924
+ None
925
+ )
926
+
927
+ user_faults: UserFaults
928
+
741
929
  def __init__(self, request_manager: RequestManager):
742
- self._request_manager = request_manager
743
-
744
-
745
- def trigger_user_fault(
746
- self,
747
- body: models.TriggerFaultRequest,
748
- ) -> Response[
749
- Union[
750
- models.ErrorResponse,
751
- models.ErrorResponse,
752
- None
753
- ],
754
- None
755
- ]:
756
- """
757
- Trigger user faults for routine
758
-
759
- """
760
- path = "/api/v1/faults/user-fault"
761
- response = self._request_manager.request(
762
- "POST",
763
- path,
764
- headers=self._request_manager.json_headers(),
765
- body=json.dumps(models.serialize_trigger_fault_request(body)),
766
- )
767
- parsed = None
768
- if response.status == 400:
769
- parsed = models.parse_error_response(json.loads(response.data))
770
-
771
- is_user_error = response.status >= 400 and response.status < 500
772
- is_unavailable = response.status == 503
773
- if parsed is None and (is_user_error or is_unavailable):
774
- parsed = models.parse_error_response(json.loads(response.data))
775
-
776
- return Response(
777
- parsed,
778
- response.status,
779
- response
780
- )
781
-
782
- user_faults: UserFaults
783
-
784
- def __init__(self, request_manager: RequestManager):
785
- self._request_manager = request_manager
786
- self.user_faults = Faults.UserFaults(request_manager)
930
+ self._request_manager = request_manager
931
+ self.user_faults = Faults.UserFaults(request_manager)
787
932
 
788
933
  class ChatGPT:
789
- _request_manager: RequestManager
790
- class Data:
934
+ _request_manager: RequestManager
935
+ class Data:
936
+ def __init__(self, request_manager: RequestManager):
937
+ self._request_manager = request_manager
938
+
939
+
940
+ def speech_to_text(
941
+ self,
942
+ body: models.SpeechToTextRequest,
943
+ ) -> Response[
944
+ None,
945
+ None
946
+ ]:
947
+ """
948
+ Convert speech to text.
949
+ """
950
+ path = "/api/v1/internal-only/speech-to-text"
951
+ try:
952
+ response = self._request_manager.request(
953
+ "POST",
954
+ path,
955
+ headers=self._request_manager.json_headers(),
956
+ body=json.dumps(models.serialize_speech_to_text_request(body)),
957
+ )
958
+ parsed = None
959
+
960
+ is_user_error = response.status >= 400 and response.status <= 500
961
+ is_unavailable = response.status == 503
962
+ if parsed is None and (is_user_error or is_unavailable):
963
+ parsed = models.parse_error_response(json.loads(response.data))
964
+
965
+ return Response(
966
+ parsed,
967
+ response.status,
968
+ response
969
+ )
970
+ except urllib3.exceptions.MaxRetryError:
971
+ return Response(
972
+ models.ErrorResponse(
973
+ error=models.ErrorEnum.InternalServerError,
974
+ message="Connection Refused"
975
+ ),
976
+ 503,
977
+ None
978
+ )
979
+ def text_to_skill(
980
+ self,
981
+ body: models.TextToSkillRequest,
982
+ ) -> Response[
983
+ None,
984
+ None
985
+ ]:
986
+ """
987
+ Convert text to a skill.
988
+ """
989
+ path = "/api/v1/internal-only/text-to-skill"
990
+ try:
991
+ response = self._request_manager.request(
992
+ "POST",
993
+ path,
994
+ headers=self._request_manager.json_headers(),
995
+ body=json.dumps(models.serialize_text_to_skill_request(body)),
996
+ )
997
+ parsed = None
998
+
999
+ is_user_error = response.status >= 400 and response.status <= 500
1000
+ is_unavailable = response.status == 503
1001
+ if parsed is None and (is_user_error or is_unavailable):
1002
+ parsed = models.parse_error_response(json.loads(response.data))
1003
+
1004
+ return Response(
1005
+ parsed,
1006
+ response.status,
1007
+ response
1008
+ )
1009
+ except urllib3.exceptions.MaxRetryError:
1010
+ return Response(
1011
+ models.ErrorResponse(
1012
+ error=models.ErrorEnum.InternalServerError,
1013
+ message="Connection Refused"
1014
+ ),
1015
+ 503,
1016
+ None
1017
+ )
1018
+
1019
+ data: Data
1020
+
791
1021
  def __init__(self, request_manager: RequestManager):
792
- self._request_manager = request_manager
793
-
794
-
795
- def speech_to_text(
796
- self,
797
- body: models.SpeechToTextRequest,
798
- ) -> Response[
799
- None,
800
- None
801
- ]:
802
- """
803
- Convert speech to text.
804
- """
805
- path = "/api/v1/internal-only/speech-to-text"
806
- response = self._request_manager.request(
807
- "POST",
808
- path,
809
- headers=self._request_manager.json_headers(),
810
- body=json.dumps(models.serialize_speech_to_text_request(body)),
811
- )
812
- parsed = None
813
-
814
- is_user_error = response.status >= 400 and response.status < 500
815
- is_unavailable = response.status == 503
816
- if parsed is None and (is_user_error or is_unavailable):
817
- parsed = models.parse_error_response(json.loads(response.data))
818
-
819
- return Response(
820
- parsed,
821
- response.status,
822
- response
823
- )
824
-
825
- def text_to_skill(
826
- self,
827
- body: models.TextToSkillRequest,
828
- ) -> Response[
829
- None,
830
- None
831
- ]:
832
- """
833
- Convert text to a skill.
834
- """
835
- path = "/api/v1/internal-only/text-to-skill"
836
- response = self._request_manager.request(
837
- "POST",
838
- path,
839
- headers=self._request_manager.json_headers(),
840
- body=json.dumps(models.serialize_text_to_skill_request(body)),
841
- )
842
- parsed = None
843
-
844
- is_user_error = response.status >= 400 and response.status < 500
845
- is_unavailable = response.status == 503
846
- if parsed is None and (is_user_error or is_unavailable):
847
- parsed = models.parse_error_response(json.loads(response.data))
848
-
849
- return Response(
850
- parsed,
851
- response.status,
852
- response
853
- )
854
-
855
- data: Data
856
-
857
- def __init__(self, request_manager: RequestManager):
858
- self._request_manager = request_manager
859
- self.data = ChatGPT.Data(request_manager)
1022
+ self._request_manager = request_manager
1023
+ self.data = ChatGPT.Data(request_manager)
860
1024
 
861
1025
  class IO:
862
- _request_manager: RequestManager
863
- class Control:
864
- def __init__(self, request_manager: RequestManager):
865
- self._request_manager = request_manager
866
-
867
-
868
- def update_io_state(
869
- self,
870
- body: models.IOStateUpdateRequest,
871
- ) -> Response[
872
- Union[
873
- models.IOStateResponse,
874
- models.ErrorResponse,
875
- models.ErrorResponse,
876
- None
877
- ],
878
- models.IOStateResponse
879
- ]:
880
- """
881
- Updates the state of I/O based on the provided action (&#x27;high&#x27; or &#x27;low&#x27;).
882
- """
883
- path = "/api/v1/io"
884
- response = self._request_manager.request(
885
- "POST",
886
- path,
887
- headers=self._request_manager.json_headers(),
888
- body=json.dumps(models.serialize_io_state_update_request(body)),
889
- )
890
- parsed = None
891
- if response.status == 200:
892
- parsed = models.parse_io_state_response(json.loads(response.data))
893
- if response.status == 400:
894
- parsed = models.parse_error_response(json.loads(response.data))
895
-
896
- is_user_error = response.status >= 400 and response.status < 500
897
- is_unavailable = response.status == 503
898
- if parsed is None and (is_user_error or is_unavailable):
899
- parsed = models.parse_error_response(json.loads(response.data))
900
-
901
- return Response(
902
- parsed,
903
- response.status,
904
- response
905
- )
906
-
907
- class Status:
1026
+ _request_manager: RequestManager
1027
+ class Control:
1028
+ def __init__(self, request_manager: RequestManager):
1029
+ self._request_manager = request_manager
1030
+
1031
+
1032
+ def update_io_state(
1033
+ self,
1034
+ body: models.IOStateUpdateRequest,
1035
+ ) -> Response[
1036
+ Union[
1037
+ models.IOStateResponse,
1038
+ models.ErrorResponse,
1039
+ models.ErrorResponse,
1040
+ None
1041
+ ],
1042
+ models.IOStateResponse
1043
+ ]:
1044
+ """
1045
+ Updates the state of I/O based on the provided action (&#x27;high&#x27; or &#x27;low&#x27;).
1046
+ """
1047
+ path = "/api/v1/io"
1048
+ try:
1049
+ response = self._request_manager.request(
1050
+ "POST",
1051
+ path,
1052
+ headers=self._request_manager.json_headers(),
1053
+ body=json.dumps(models.serialize_io_state_update_request(body)),
1054
+ )
1055
+ parsed = None
1056
+ if response.status == 200:
1057
+ parsed = models.parse_io_state_response(json.loads(response.data))
1058
+ if response.status == 400:
1059
+ parsed = models.parse_error_response(json.loads(response.data))
1060
+
1061
+ is_user_error = response.status >= 400 and response.status <= 500
1062
+ is_unavailable = response.status == 503
1063
+ if parsed is None and (is_user_error or is_unavailable):
1064
+ parsed = models.parse_error_response(json.loads(response.data))
1065
+
1066
+ return Response(
1067
+ parsed,
1068
+ response.status,
1069
+ response
1070
+ )
1071
+ except urllib3.exceptions.MaxRetryError:
1072
+ return Response(
1073
+ models.ErrorResponse(
1074
+ error=models.ErrorEnum.InternalServerError,
1075
+ message="Connection Refused"
1076
+ ),
1077
+ 503,
1078
+ None
1079
+ )
1080
+ class Status:
1081
+ def __init__(self, request_manager: RequestManager):
1082
+ self._request_manager = request_manager
1083
+
1084
+
1085
+ def get_io_state(
1086
+ self,
1087
+ ) -> Response[
1088
+ Union[
1089
+ models.IOStateResponse,
1090
+ models.ErrorResponse,
1091
+ None
1092
+ ],
1093
+ models.IOStateResponse
1094
+ ]:
1095
+ """
1096
+ Retrieves the current state of I/O.
1097
+ """
1098
+ path = "/api/v1/io"
1099
+ try:
1100
+ response = self._request_manager.request(
1101
+ "GET",
1102
+ path,
1103
+ headers=self._request_manager.json_headers(),
1104
+ )
1105
+ parsed = None
1106
+ if response.status == 200:
1107
+ parsed = models.parse_io_state_response(json.loads(response.data))
1108
+
1109
+ is_user_error = response.status >= 400 and response.status <= 500
1110
+ is_unavailable = response.status == 503
1111
+ if parsed is None and (is_user_error or is_unavailable):
1112
+ parsed = models.parse_error_response(json.loads(response.data))
1113
+
1114
+ return Response(
1115
+ parsed,
1116
+ response.status,
1117
+ response
1118
+ )
1119
+ except urllib3.exceptions.MaxRetryError:
1120
+ return Response(
1121
+ models.ErrorResponse(
1122
+ error=models.ErrorEnum.InternalServerError,
1123
+ message="Connection Refused"
1124
+ ),
1125
+ 503,
1126
+ None
1127
+ )
1128
+
1129
+ control: Control
1130
+ status: Status
1131
+
908
1132
  def __init__(self, request_manager: RequestManager):
909
- self._request_manager = request_manager
910
-
911
-
912
- def get_io_state(
913
- self,
914
- ) -> Response[
915
- Union[
916
- models.IOStateResponse,
917
- models.ErrorResponse,
918
- None
919
- ],
920
- models.IOStateResponse
921
- ]:
922
- """
923
- Retrieves the current state of I/O.
924
- """
925
- path = "/api/v1/io"
926
- response = self._request_manager.request(
927
- "GET",
928
- path,
929
- headers=self._request_manager.json_headers(),
930
- )
931
- parsed = None
932
- if response.status == 200:
933
- parsed = models.parse_io_state_response(json.loads(response.data))
934
-
935
- is_user_error = response.status >= 400 and response.status < 500
936
- is_unavailable = response.status == 503
937
- if parsed is None and (is_user_error or is_unavailable):
938
- parsed = models.parse_error_response(json.loads(response.data))
939
-
940
- return Response(
941
- parsed,
942
- response.status,
943
- response
944
- )
945
-
946
- control: Control
947
- status: Status
948
-
949
- def __init__(self, request_manager: RequestManager):
950
- self._request_manager = request_manager
951
- self.control = IO.Control(request_manager)
952
- self.status = IO.Status(request_manager)
1133
+ self._request_manager = request_manager
1134
+ self.control = IO.Control(request_manager)
1135
+ self.status = IO.Status(request_manager)
953
1136
 
954
1137
  class General:
955
- _request_manager: RequestManager
956
- class Joints:
1138
+ _request_manager: RequestManager
1139
+ class Joints:
1140
+ def __init__(self, request_manager: RequestManager):
1141
+ self._request_manager = request_manager
1142
+
1143
+
1144
+ def get_joints_state(
1145
+ self,
1146
+ ) -> Response[
1147
+ Union[
1148
+ models.JointsStateResponse,
1149
+ models.ErrorResponse,
1150
+ None
1151
+ ],
1152
+ models.JointsStateResponse
1153
+ ]:
1154
+ """
1155
+ Retrieves information about the state of each joint
1156
+ """
1157
+ path = "/api/v1/joints"
1158
+ try:
1159
+ response = self._request_manager.request(
1160
+ "GET",
1161
+ path,
1162
+ headers=self._request_manager.json_headers(),
1163
+ )
1164
+ parsed = None
1165
+ if response.status == 200:
1166
+ parsed = models.parse_joints_state_response(json.loads(response.data))
1167
+
1168
+ is_user_error = response.status >= 400 and response.status <= 500
1169
+ is_unavailable = response.status == 503
1170
+ if parsed is None and (is_user_error or is_unavailable):
1171
+ parsed = models.parse_error_response(json.loads(response.data))
1172
+
1173
+ return Response(
1174
+ parsed,
1175
+ response.status,
1176
+ response
1177
+ )
1178
+ except urllib3.exceptions.MaxRetryError:
1179
+ return Response(
1180
+ models.ErrorResponse(
1181
+ error=models.ErrorEnum.InternalServerError,
1182
+ message="Connection Refused"
1183
+ ),
1184
+ 503,
1185
+ None
1186
+ )
1187
+
1188
+ joints: Joints
1189
+
1190
+ def __init__(self, request_manager: RequestManager):
1191
+ self._request_manager = request_manager
1192
+ self.joints = General.Joints(request_manager)
1193
+
1194
+ class Poses:
1195
+ _request_manager: RequestManager
1196
+ class ConstructPose:
1197
+ def __init__(self, request_manager: RequestManager):
1198
+ self._request_manager = request_manager
1199
+
1200
+
1201
+ def cartesian_pose(
1202
+ self,
1203
+ body: models.CartesianPoseRequest,
1204
+ ) -> Response[
1205
+ Union[
1206
+ models.CartesianPoseResponse,
1207
+ models.ErrorResponse,
1208
+ models.ErrorResponse,
1209
+ None
1210
+ ],
1211
+ models.CartesianPoseResponse
1212
+ ]:
1213
+ """
1214
+ Retrieve the cartesian pose based on euler angles
1215
+
1216
+ """
1217
+ path = "/api/v1/poses/cartesian-pose"
1218
+ try:
1219
+ response = self._request_manager.request(
1220
+ "POST",
1221
+ path,
1222
+ headers=self._request_manager.json_headers(),
1223
+ body=json.dumps(models.serialize_cartesian_pose_request(body)),
1224
+ )
1225
+ parsed = None
1226
+ if response.status == 200:
1227
+ parsed = models.parse_cartesian_pose_response(json.loads(response.data))
1228
+ if response.status == 400:
1229
+ parsed = models.parse_error_response(json.loads(response.data))
1230
+
1231
+ is_user_error = response.status >= 400 and response.status <= 500
1232
+ is_unavailable = response.status == 503
1233
+ if parsed is None and (is_user_error or is_unavailable):
1234
+ parsed = models.parse_error_response(json.loads(response.data))
1235
+
1236
+ return Response(
1237
+ parsed,
1238
+ response.status,
1239
+ response
1240
+ )
1241
+ except urllib3.exceptions.MaxRetryError:
1242
+ return Response(
1243
+ models.ErrorResponse(
1244
+ error=models.ErrorEnum.InternalServerError,
1245
+ message="Connection Refused"
1246
+ ),
1247
+ 503,
1248
+ None
1249
+ )
1250
+ def joint_pose(
1251
+ self,
1252
+ body: models.JointPoseRequest,
1253
+ ) -> Response[
1254
+ Union[
1255
+ models.JointPoseResponse,
1256
+ models.ErrorResponse,
1257
+ models.ErrorResponse,
1258
+ None
1259
+ ],
1260
+ models.JointPoseResponse
1261
+ ]:
1262
+ """
1263
+ Retrieve the cartesian pose based on joint angles
1264
+
1265
+ """
1266
+ path = "/api/v1/poses/joint-pose"
1267
+ try:
1268
+ response = self._request_manager.request(
1269
+ "POST",
1270
+ path,
1271
+ headers=self._request_manager.json_headers(),
1272
+ body=json.dumps(models.serialize_joint_pose_request(body)),
1273
+ )
1274
+ parsed = None
1275
+ if response.status == 200:
1276
+ parsed = models.parse_joint_pose_response(json.loads(response.data))
1277
+ if response.status == 400:
1278
+ parsed = models.parse_error_response(json.loads(response.data))
1279
+
1280
+ is_user_error = response.status >= 400 and response.status <= 500
1281
+ is_unavailable = response.status == 503
1282
+ if parsed is None and (is_user_error or is_unavailable):
1283
+ parsed = models.parse_error_response(json.loads(response.data))
1284
+
1285
+ return Response(
1286
+ parsed,
1287
+ response.status,
1288
+ response
1289
+ )
1290
+ except urllib3.exceptions.MaxRetryError:
1291
+ return Response(
1292
+ models.ErrorResponse(
1293
+ error=models.ErrorEnum.InternalServerError,
1294
+ message="Connection Refused"
1295
+ ),
1296
+ 503,
1297
+ None
1298
+ )
1299
+ class CartesianDistance:
1300
+ def __init__(self, request_manager: RequestManager):
1301
+ self._request_manager = request_manager
1302
+
1303
+
1304
+ def pose_distance(
1305
+ self,
1306
+ body: models.PoseDistanceRequest,
1307
+ ) -> Response[
1308
+ Union[
1309
+ models.PoseDistanceResponse,
1310
+ models.ErrorResponse,
1311
+ models.ErrorResponse,
1312
+ None
1313
+ ],
1314
+ models.PoseDistanceResponse
1315
+ ]:
1316
+ """
1317
+ Calculate the distance between two cartesian poses
1318
+
1319
+ """
1320
+ path = "/api/v1/poses/pose-distance"
1321
+ try:
1322
+ response = self._request_manager.request(
1323
+ "POST",
1324
+ path,
1325
+ headers=self._request_manager.json_headers(),
1326
+ body=json.dumps(models.serialize_pose_distance_request(body)),
1327
+ )
1328
+ parsed = None
1329
+ if response.status == 200:
1330
+ parsed = models.parse_pose_distance_response(json.loads(response.data))
1331
+ if response.status == 400:
1332
+ parsed = models.parse_error_response(json.loads(response.data))
1333
+
1334
+ is_user_error = response.status >= 400 and response.status <= 500
1335
+ is_unavailable = response.status == 503
1336
+ if parsed is None and (is_user_error or is_unavailable):
1337
+ parsed = models.parse_error_response(json.loads(response.data))
1338
+
1339
+ return Response(
1340
+ parsed,
1341
+ response.status,
1342
+ response
1343
+ )
1344
+ except urllib3.exceptions.MaxRetryError:
1345
+ return Response(
1346
+ models.ErrorResponse(
1347
+ error=models.ErrorEnum.InternalServerError,
1348
+ message="Connection Refused"
1349
+ ),
1350
+ 503,
1351
+ None
1352
+ )
1353
+ class PoseOperations:
1354
+ def __init__(self, request_manager: RequestManager):
1355
+ self._request_manager = request_manager
1356
+
1357
+
1358
+ def poses_addition(
1359
+ self,
1360
+ body: models.PoseOperationsRequest,
1361
+ ) -> Response[
1362
+ Union[
1363
+ models.PoseOperationsResponse,
1364
+ models.ErrorResponse,
1365
+ models.ErrorResponse,
1366
+ None
1367
+ ],
1368
+ models.PoseOperationsResponse
1369
+ ]:
1370
+ """
1371
+ Calculate the addition between two cartesian poses
1372
+
1373
+ """
1374
+ path = "/api/v1/poses/add"
1375
+ try:
1376
+ response = self._request_manager.request(
1377
+ "POST",
1378
+ path,
1379
+ headers=self._request_manager.json_headers(),
1380
+ body=json.dumps(models.serialize_pose_operations_request(body)),
1381
+ )
1382
+ parsed = None
1383
+ if response.status == 200:
1384
+ parsed = models.parse_pose_operations_response(json.loads(response.data))
1385
+ if response.status == 400:
1386
+ parsed = models.parse_error_response(json.loads(response.data))
1387
+
1388
+ is_user_error = response.status >= 400 and response.status <= 500
1389
+ is_unavailable = response.status == 503
1390
+ if parsed is None and (is_user_error or is_unavailable):
1391
+ parsed = models.parse_error_response(json.loads(response.data))
1392
+
1393
+ return Response(
1394
+ parsed,
1395
+ response.status,
1396
+ response
1397
+ )
1398
+ except urllib3.exceptions.MaxRetryError:
1399
+ return Response(
1400
+ models.ErrorResponse(
1401
+ error=models.ErrorEnum.InternalServerError,
1402
+ message="Connection Refused"
1403
+ ),
1404
+ 503,
1405
+ None
1406
+ )
1407
+ def poses_subtraction(
1408
+ self,
1409
+ body: models.PoseOperationsRequest,
1410
+ ) -> Response[
1411
+ Union[
1412
+ models.PoseOperationsResponse,
1413
+ models.ErrorResponse,
1414
+ models.ErrorResponse,
1415
+ None
1416
+ ],
1417
+ models.PoseOperationsResponse
1418
+ ]:
1419
+ """
1420
+ Calculate the subtraction between two cartesian poses
1421
+
1422
+ """
1423
+ path = "/api/v1/poses/subtract"
1424
+ try:
1425
+ response = self._request_manager.request(
1426
+ "POST",
1427
+ path,
1428
+ headers=self._request_manager.json_headers(),
1429
+ body=json.dumps(models.serialize_pose_operations_request(body)),
1430
+ )
1431
+ parsed = None
1432
+ if response.status == 200:
1433
+ parsed = models.parse_pose_operations_response(json.loads(response.data))
1434
+ if response.status == 400:
1435
+ parsed = models.parse_error_response(json.loads(response.data))
1436
+
1437
+ is_user_error = response.status >= 400 and response.status <= 500
1438
+ is_unavailable = response.status == 503
1439
+ if parsed is None and (is_user_error or is_unavailable):
1440
+ parsed = models.parse_error_response(json.loads(response.data))
1441
+
1442
+ return Response(
1443
+ parsed,
1444
+ response.status,
1445
+ response
1446
+ )
1447
+ except urllib3.exceptions.MaxRetryError:
1448
+ return Response(
1449
+ models.ErrorResponse(
1450
+ error=models.ErrorEnum.InternalServerError,
1451
+ message="Connection Refused"
1452
+ ),
1453
+ 503,
1454
+ None
1455
+ )
1456
+ def cartesian_offset(
1457
+ self,
1458
+ body: models.CartesianOffsetRequest,
1459
+ ) -> Response[
1460
+ Union[
1461
+ models.CartesianOffsetResponse,
1462
+ models.ErrorResponse,
1463
+ models.ErrorResponse,
1464
+ None
1465
+ ],
1466
+ models.CartesianOffsetResponse
1467
+ ]:
1468
+ """
1469
+ Determine the robot pose after applying the offset transformation
1470
+
1471
+ """
1472
+ path = "/api/v1/poses/cartesian-offset"
1473
+ try:
1474
+ response = self._request_manager.request(
1475
+ "POST",
1476
+ path,
1477
+ headers=self._request_manager.json_headers(),
1478
+ body=json.dumps(models.serialize_cartesian_offset_request(body)),
1479
+ )
1480
+ parsed = None
1481
+ if response.status == 200:
1482
+ parsed = models.parse_cartesian_offset_response(json.loads(response.data))
1483
+ if response.status == 400:
1484
+ parsed = models.parse_error_response(json.loads(response.data))
1485
+
1486
+ is_user_error = response.status >= 400 and response.status <= 500
1487
+ is_unavailable = response.status == 503
1488
+ if parsed is None and (is_user_error or is_unavailable):
1489
+ parsed = models.parse_error_response(json.loads(response.data))
1490
+
1491
+ return Response(
1492
+ parsed,
1493
+ response.status,
1494
+ response
1495
+ )
1496
+ except urllib3.exceptions.MaxRetryError:
1497
+ return Response(
1498
+ models.ErrorResponse(
1499
+ error=models.ErrorEnum.InternalServerError,
1500
+ message="Connection Refused"
1501
+ ),
1502
+ 503,
1503
+ None
1504
+ )
1505
+ class PoseRetrieval:
1506
+ def __init__(self, request_manager: RequestManager):
1507
+ self._request_manager = request_manager
1508
+
1509
+
1510
+ def get_joints_position(
1511
+ self,
1512
+ ) -> Response[
1513
+ Union[
1514
+ models.JointsPositionResponse,
1515
+ models.ErrorResponse,
1516
+ None
1517
+ ],
1518
+ models.JointsPositionResponse
1519
+ ]:
1520
+ """
1521
+ Get the joints position of the robot
1522
+ """
1523
+ path = "/api/v1/poses/joints-position"
1524
+ try:
1525
+ response = self._request_manager.request(
1526
+ "GET",
1527
+ path,
1528
+ headers=self._request_manager.json_headers(),
1529
+ )
1530
+ parsed = None
1531
+ if response.status == 200:
1532
+ parsed = models.parse_joints_position_response(json.loads(response.data))
1533
+
1534
+ is_user_error = response.status >= 400 and response.status <= 500
1535
+ is_unavailable = response.status == 503
1536
+ if parsed is None and (is_user_error or is_unavailable):
1537
+ parsed = models.parse_error_response(json.loads(response.data))
1538
+
1539
+ return Response(
1540
+ parsed,
1541
+ response.status,
1542
+ response
1543
+ )
1544
+ except urllib3.exceptions.MaxRetryError:
1545
+ return Response(
1546
+ models.ErrorResponse(
1547
+ error=models.ErrorEnum.InternalServerError,
1548
+ message="Connection Refused"
1549
+ ),
1550
+ 503,
1551
+ None
1552
+ )
1553
+ def get_tooltip_position(
1554
+ self,
1555
+ ) -> Response[
1556
+ Union[
1557
+ models.TooltipPositionResponse,
1558
+ models.ErrorResponse,
1559
+ None
1560
+ ],
1561
+ models.TooltipPositionResponse
1562
+ ]:
1563
+ """
1564
+ Get the tooltip position of the robot
1565
+ """
1566
+ path = "/api/v1/poses/tooltip-position"
1567
+ try:
1568
+ response = self._request_manager.request(
1569
+ "GET",
1570
+ path,
1571
+ headers=self._request_manager.json_headers(),
1572
+ )
1573
+ parsed = None
1574
+ if response.status == 200:
1575
+ parsed = models.parse_tooltip_position_response(json.loads(response.data))
1576
+
1577
+ is_user_error = response.status >= 400 and response.status <= 500
1578
+ is_unavailable = response.status == 503
1579
+ if parsed is None and (is_user_error or is_unavailable):
1580
+ parsed = models.parse_error_response(json.loads(response.data))
1581
+
1582
+ return Response(
1583
+ parsed,
1584
+ response.status,
1585
+ response
1586
+ )
1587
+ except urllib3.exceptions.MaxRetryError:
1588
+ return Response(
1589
+ models.ErrorResponse(
1590
+ error=models.ErrorEnum.InternalServerError,
1591
+ message="Connection Refused"
1592
+ ),
1593
+ 503,
1594
+ None
1595
+ )
1596
+ def get_flange_position(
1597
+ self,
1598
+ ) -> Response[
1599
+ Union[
1600
+ models.FlangePositionResponse,
1601
+ models.ErrorResponse,
1602
+ None
1603
+ ],
1604
+ models.FlangePositionResponse
1605
+ ]:
1606
+ """
1607
+ Get the flange position of the robot
1608
+ """
1609
+ path = "/api/v1/poses/flange-position"
1610
+ try:
1611
+ response = self._request_manager.request(
1612
+ "GET",
1613
+ path,
1614
+ headers=self._request_manager.json_headers(),
1615
+ )
1616
+ parsed = None
1617
+ if response.status == 200:
1618
+ parsed = models.parse_flange_position_response(json.loads(response.data))
1619
+
1620
+ is_user_error = response.status >= 400 and response.status <= 500
1621
+ is_unavailable = response.status == 503
1622
+ if parsed is None and (is_user_error or is_unavailable):
1623
+ parsed = models.parse_error_response(json.loads(response.data))
1624
+
1625
+ return Response(
1626
+ parsed,
1627
+ response.status,
1628
+ response
1629
+ )
1630
+ except urllib3.exceptions.MaxRetryError:
1631
+ return Response(
1632
+ models.ErrorResponse(
1633
+ error=models.ErrorEnum.InternalServerError,
1634
+ message="Connection Refused"
1635
+ ),
1636
+ 503,
1637
+ None
1638
+ )
1639
+
1640
+ construct_pose: ConstructPose
1641
+ cartesian_distance: CartesianDistance
1642
+ pose_operations: PoseOperations
1643
+ pose_retrieval: PoseRetrieval
1644
+
957
1645
  def __init__(self, request_manager: RequestManager):
958
- self._request_manager = request_manager
959
-
960
-
961
- def get_joints_state(
962
- self,
963
- ) -> Response[
964
- Union[
965
- models.JointsStateResponse,
966
- models.ErrorResponse,
967
- None
968
- ],
969
- models.JointsStateResponse
970
- ]:
971
- """
972
- Retrieves information about the state of each joint
973
- """
974
- path = "/api/v1/joints"
975
- response = self._request_manager.request(
976
- "GET",
977
- path,
978
- headers=self._request_manager.json_headers(),
979
- )
980
- parsed = None
981
- if response.status == 200:
982
- parsed = models.parse_joints_state_response(json.loads(response.data))
983
-
984
- is_user_error = response.status >= 400 and response.status < 500
985
- is_unavailable = response.status == 503
986
- if parsed is None and (is_user_error or is_unavailable):
987
- parsed = models.parse_error_response(json.loads(response.data))
988
-
989
- return Response(
990
- parsed,
991
- response.status,
992
- response
993
- )
994
-
995
- joints: Joints
996
-
997
- def __init__(self, request_manager: RequestManager):
998
- self._request_manager = request_manager
999
- self.joints = General.Joints(request_manager)
1646
+ self._request_manager = request_manager
1647
+ self.construct_pose = Poses.ConstructPose(request_manager)
1648
+ self.cartesian_distance = Poses.CartesianDistance(request_manager)
1649
+ self.pose_operations = Poses.PoseOperations(request_manager)
1650
+ self.pose_retrieval = Poses.PoseRetrieval(request_manager)
1000
1651
 
1001
1652
  class Recovery:
1002
- _request_manager: RequestManager
1003
- class Recover:
1653
+ _request_manager: RequestManager
1654
+ class Recover:
1655
+ def __init__(self, request_manager: RequestManager):
1656
+ self._request_manager = request_manager
1657
+
1658
+
1659
+ def recover(
1660
+ self,
1661
+ ) -> Response[
1662
+ Union[
1663
+ models.RecoveryStatusResponse,
1664
+ models.ErrorResponse,
1665
+ models.ErrorResponse,
1666
+ None
1667
+ ],
1668
+ models.RecoveryStatusResponse
1669
+ ]:
1670
+ """
1671
+ Recovers the robot from a fault state.
1672
+
1673
+ """
1674
+ path = "/api/v1/recovery/recover"
1675
+ try:
1676
+ response = self._request_manager.request(
1677
+ "POST",
1678
+ path,
1679
+ headers=self._request_manager.json_headers(),
1680
+ )
1681
+ parsed = None
1682
+ if response.status == 200:
1683
+ parsed = models.parse_recovery_status_response(json.loads(response.data))
1684
+ if response.status == 400:
1685
+ parsed = models.parse_error_response(json.loads(response.data))
1686
+
1687
+ is_user_error = response.status >= 400 and response.status <= 500
1688
+ is_unavailable = response.status == 503
1689
+ if parsed is None and (is_user_error or is_unavailable):
1690
+ parsed = models.parse_error_response(json.loads(response.data))
1691
+
1692
+ return Response(
1693
+ parsed,
1694
+ response.status,
1695
+ response
1696
+ )
1697
+ except urllib3.exceptions.MaxRetryError:
1698
+ return Response(
1699
+ models.ErrorResponse(
1700
+ error=models.ErrorEnum.InternalServerError,
1701
+ message="Connection Refused"
1702
+ ),
1703
+ 503,
1704
+ None
1705
+ )
1706
+ def get_status(
1707
+ self,
1708
+ ) -> Response[
1709
+ Union[
1710
+ models.FailureStateResponse,
1711
+ models.ErrorResponse,
1712
+ None
1713
+ ],
1714
+ models.FailureStateResponse
1715
+ ]:
1716
+ """
1717
+ Get the robot&#x27;s recovery status.
1718
+
1719
+ """
1720
+ path = "/api/v1/recovery/status"
1721
+ try:
1722
+ response = self._request_manager.request(
1723
+ "GET",
1724
+ path,
1725
+ headers=self._request_manager.json_headers(),
1726
+ )
1727
+ parsed = None
1728
+ if response.status == 200:
1729
+ parsed = models.parse_failure_state_response(json.loads(response.data))
1730
+
1731
+ is_user_error = response.status >= 400 and response.status <= 500
1732
+ is_unavailable = response.status == 503
1733
+ if parsed is None and (is_user_error or is_unavailable):
1734
+ parsed = models.parse_error_response(json.loads(response.data))
1735
+
1736
+ return Response(
1737
+ parsed,
1738
+ response.status,
1739
+ response
1740
+ )
1741
+ except urllib3.exceptions.MaxRetryError:
1742
+ return Response(
1743
+ models.ErrorResponse(
1744
+ error=models.ErrorEnum.InternalServerError,
1745
+ message="Connection Refused"
1746
+ ),
1747
+ 503,
1748
+ None
1749
+ )
1750
+
1751
+ recover: Recover
1752
+
1004
1753
  def __init__(self, request_manager: RequestManager):
1005
- self._request_manager = request_manager
1006
-
1007
-
1008
- def recover(
1009
- self,
1010
- ) -> Response[
1011
- Union[
1012
- models.FailureStateResponse,
1013
- models.ErrorResponse,
1014
- models.ErrorResponse,
1015
- None
1016
- ],
1017
- models.FailureStateResponse
1018
- ]:
1019
- """
1020
- Attempts to recover the robot from a fault state. Inspect the response to determine if additional recovery actions are required.
1021
-
1022
- """
1023
- path = "/api/v1/recovery/recover"
1024
- response = self._request_manager.request(
1025
- "POST",
1026
- path,
1027
- headers=self._request_manager.json_headers(),
1028
- )
1029
- parsed = None
1030
- if response.status == 200:
1031
- parsed = models.parse_failure_state_response(json.loads(response.data))
1032
- if response.status == 400:
1033
- parsed = models.parse_error_response(json.loads(response.data))
1034
-
1035
- is_user_error = response.status >= 400 and response.status < 500
1036
- is_unavailable = response.status == 503
1037
- if parsed is None and (is_user_error or is_unavailable):
1038
- parsed = models.parse_error_response(json.loads(response.data))
1039
-
1040
- return Response(
1041
- parsed,
1042
- response.status,
1043
- response
1044
- )
1045
-
1046
- def get_status(
1047
- self,
1048
- ) -> Response[
1049
- Union[
1050
- models.FailureStateResponse,
1051
- models.ErrorResponse,
1052
- None
1053
- ],
1054
- models.FailureStateResponse
1055
- ]:
1056
- """
1057
- Get the robot&#x27;s recovery status.
1058
-
1059
- """
1060
- path = "/api/v1/recovery/status"
1061
- response = self._request_manager.request(
1062
- "GET",
1063
- path,
1064
- headers=self._request_manager.json_headers(),
1065
- )
1066
- parsed = None
1067
- if response.status == 200:
1068
- parsed = models.parse_failure_state_response(json.loads(response.data))
1069
-
1070
- is_user_error = response.status >= 400 and response.status < 500
1071
- is_unavailable = response.status == 503
1072
- if parsed is None and (is_user_error or is_unavailable):
1073
- parsed = models.parse_error_response(json.loads(response.data))
1074
-
1075
- return Response(
1076
- parsed,
1077
- response.status,
1078
- response
1079
- )
1080
-
1081
- recover: Recover
1082
-
1083
- def __init__(self, request_manager: RequestManager):
1084
- self._request_manager = request_manager
1085
- self.recover = Recovery.Recover(request_manager)
1754
+ self._request_manager = request_manager
1755
+ self.recover = Recovery.Recover(request_manager)
1086
1756
 
1087
1757
  class ROS:
1088
- _request_manager: RequestManager
1089
- class Control:
1090
- def __init__(self, request_manager: RequestManager):
1091
- self._request_manager = request_manager
1092
-
1093
-
1094
- def update_ros_control_state(
1095
- self,
1096
- body: models.ROSControlUpdateRequest,
1097
- ) -> Response[
1098
- Union[
1099
- models.ROSControlStateResponse,
1100
- models.ErrorResponse,
1101
- None
1102
- ],
1103
- models.ROSControlStateResponse
1104
- ]:
1105
- """
1106
- Updates the state of ROS control based on the provided action (&#x27;enable&#x27; or &#x27;disable&#x27;).
1107
- """
1108
- path = "/api/v1/movement/ros/state"
1109
- response = self._request_manager.request(
1110
- "POST",
1111
- path,
1112
- headers=self._request_manager.json_headers(),
1113
- body=json.dumps(models.serialize_ros_control_update_request(body)),
1114
- )
1115
- parsed = None
1116
- if response.status == 200:
1117
- parsed = models.parse_ros_control_state_response(json.loads(response.data))
1118
-
1119
- is_user_error = response.status >= 400 and response.status < 500
1120
- is_unavailable = response.status == 503
1121
- if parsed is None and (is_user_error or is_unavailable):
1122
- parsed = models.parse_error_response(json.loads(response.data))
1123
-
1124
- return Response(
1125
- parsed,
1126
- response.status,
1127
- response
1128
- )
1129
-
1130
- class Status:
1758
+ _request_manager: RequestManager
1759
+ class Control:
1760
+ def __init__(self, request_manager: RequestManager):
1761
+ self._request_manager = request_manager
1762
+
1763
+
1764
+ def update_ros_control_state(
1765
+ self,
1766
+ body: models.ROSControlUpdateRequest,
1767
+ ) -> Response[
1768
+ Union[
1769
+ models.ROSControlStateResponse,
1770
+ models.ErrorResponse,
1771
+ None
1772
+ ],
1773
+ models.ROSControlStateResponse
1774
+ ]:
1775
+ """
1776
+ Updates the state of ROS control based on the provided action (&#x27;enable&#x27; or &#x27;disable&#x27;).
1777
+ """
1778
+ path = "/api/v1/movement/ros/state"
1779
+ try:
1780
+ response = self._request_manager.request(
1781
+ "POST",
1782
+ path,
1783
+ headers=self._request_manager.json_headers(),
1784
+ body=json.dumps(models.serialize_ros_control_update_request(body)),
1785
+ )
1786
+ parsed = None
1787
+ if response.status == 200:
1788
+ parsed = models.parse_ros_control_state_response(json.loads(response.data))
1789
+
1790
+ is_user_error = response.status >= 400 and response.status <= 500
1791
+ is_unavailable = response.status == 503
1792
+ if parsed is None and (is_user_error or is_unavailable):
1793
+ parsed = models.parse_error_response(json.loads(response.data))
1794
+
1795
+ return Response(
1796
+ parsed,
1797
+ response.status,
1798
+ response
1799
+ )
1800
+ except urllib3.exceptions.MaxRetryError:
1801
+ return Response(
1802
+ models.ErrorResponse(
1803
+ error=models.ErrorEnum.InternalServerError,
1804
+ message="Connection Refused"
1805
+ ),
1806
+ 503,
1807
+ None
1808
+ )
1809
+ class Status:
1810
+ def __init__(self, request_manager: RequestManager):
1811
+ self._request_manager = request_manager
1812
+
1813
+
1814
+ def get_ros_control_state(
1815
+ self,
1816
+ ) -> Response[
1817
+ Union[
1818
+ models.ROSControlStateResponse,
1819
+ models.ErrorResponse,
1820
+ None
1821
+ ],
1822
+ models.ROSControlStateResponse
1823
+ ]:
1824
+ """
1825
+ Retrieves the current state of ROS control.
1826
+ """
1827
+ path = "/api/v1/movement/ros/state"
1828
+ try:
1829
+ response = self._request_manager.request(
1830
+ "GET",
1831
+ path,
1832
+ headers=self._request_manager.json_headers(),
1833
+ )
1834
+ parsed = None
1835
+ if response.status == 200:
1836
+ parsed = models.parse_ros_control_state_response(json.loads(response.data))
1837
+
1838
+ is_user_error = response.status >= 400 and response.status <= 500
1839
+ is_unavailable = response.status == 503
1840
+ if parsed is None and (is_user_error or is_unavailable):
1841
+ parsed = models.parse_error_response(json.loads(response.data))
1842
+
1843
+ return Response(
1844
+ parsed,
1845
+ response.status,
1846
+ response
1847
+ )
1848
+ except urllib3.exceptions.MaxRetryError:
1849
+ return Response(
1850
+ models.ErrorResponse(
1851
+ error=models.ErrorEnum.InternalServerError,
1852
+ message="Connection Refused"
1853
+ ),
1854
+ 503,
1855
+ None
1856
+ )
1857
+
1858
+ control: Control
1859
+ status: Status
1860
+
1131
1861
  def __init__(self, request_manager: RequestManager):
1132
- self._request_manager = request_manager
1133
-
1134
-
1135
- def get_ros_control_state(
1136
- self,
1137
- ) -> Response[
1138
- Union[
1139
- models.ROSControlStateResponse,
1140
- models.ErrorResponse,
1141
- None
1142
- ],
1143
- models.ROSControlStateResponse
1144
- ]:
1145
- """
1146
- Retrieves the current state of ROS control.
1147
- """
1148
- path = "/api/v1/movement/ros/state"
1149
- response = self._request_manager.request(
1150
- "GET",
1151
- path,
1152
- headers=self._request_manager.json_headers(),
1153
- )
1154
- parsed = None
1155
- if response.status == 200:
1156
- parsed = models.parse_ros_control_state_response(json.loads(response.data))
1157
-
1158
- is_user_error = response.status >= 400 and response.status < 500
1159
- is_unavailable = response.status == 503
1160
- if parsed is None and (is_user_error or is_unavailable):
1161
- parsed = models.parse_error_response(json.loads(response.data))
1162
-
1163
- return Response(
1164
- parsed,
1165
- response.status,
1166
- response
1167
- )
1168
-
1169
- control: Control
1170
- status: Status
1171
-
1172
- def __init__(self, request_manager: RequestManager):
1173
- self._request_manager = request_manager
1174
- self.control = ROS.Control(request_manager)
1175
- self.status = ROS.Status(request_manager)
1862
+ self._request_manager = request_manager
1863
+ self.control = ROS.Control(request_manager)
1864
+ self.status = ROS.Status(request_manager)
1176
1865
 
1177
1866
  class RoutineEditor:
1178
- _request_manager: RequestManager
1179
- class Routines:
1180
- def __init__(self, request_manager: RequestManager):
1181
- self._request_manager = request_manager
1182
-
1183
-
1184
- def play(
1185
- self,
1186
- body: models.PlayRoutineRequest,
1187
- routine_id: str,
1188
- ) -> Response[
1189
- None,
1190
- None
1191
- ]:
1192
- """
1193
- Play a routine
1194
- """
1195
- path = "/api/v1/routine-editor/routines/{routine_id}/play"
1196
- path = path.replace("{routine_id}", str(routine_id))
1197
- response = self._request_manager.request(
1198
- "POST",
1199
- path,
1200
- headers=self._request_manager.json_headers(),
1201
- body=json.dumps(models.serialize_play_routine_request(body)),
1202
- )
1203
- parsed = None
1204
-
1205
- is_user_error = response.status >= 400 and response.status < 500
1206
- is_unavailable = response.status == 503
1207
- if parsed is None and (is_user_error or is_unavailable):
1208
- parsed = models.parse_error_response(json.loads(response.data))
1209
-
1210
- return Response(
1211
- parsed,
1212
- response.status,
1213
- response
1214
- )
1215
-
1216
- def pause(
1217
- self,
1218
- routine_id: str,
1219
- ) -> Response[
1220
- None,
1221
- None
1222
- ]:
1223
- """
1224
- Pause a routine
1225
- """
1226
- path = "/api/v1/routine-editor/routines/{routine_id}/pause"
1227
- path = path.replace("{routine_id}", str(routine_id))
1228
- response = self._request_manager.request(
1229
- "POST",
1230
- path,
1231
- headers=self._request_manager.json_headers(),
1232
- )
1233
- parsed = None
1234
-
1235
- is_user_error = response.status >= 400 and response.status < 500
1236
- is_unavailable = response.status == 503
1237
- if parsed is None and (is_user_error or is_unavailable):
1238
- parsed = models.parse_error_response(json.loads(response.data))
1239
-
1240
- return Response(
1241
- parsed,
1242
- response.status,
1243
- response
1244
- )
1245
-
1246
- def stop(
1247
- self,
1248
- ) -> Response[
1249
- None,
1250
- None
1251
- ]:
1252
- """
1253
- Stop running routine and all ongoing motions
1254
- """
1255
- path = "/api/v1/routine-editor/stop"
1256
- response = self._request_manager.request(
1257
- "POST",
1258
- path,
1259
- headers=self._request_manager.json_headers(),
1260
- )
1261
- parsed = None
1262
-
1263
- is_user_error = response.status >= 400 and response.status < 500
1264
- is_unavailable = response.status == 503
1265
- if parsed is None and (is_user_error or is_unavailable):
1266
- parsed = models.parse_error_response(json.loads(response.data))
1267
-
1268
- return Response(
1269
- parsed,
1270
- response.status,
1271
- response
1272
- )
1273
-
1274
- def list(
1275
- self,
1276
- limit: int,
1277
- offset: int,
1278
- ) -> Response[
1279
- Union[
1280
- models.RoutinesPaginatedResponse,
1281
- models.ErrorResponse,
1282
- None
1283
- ],
1284
- models.RoutinesPaginatedResponse
1285
- ]:
1286
- """
1287
- List routines defined in Routine Editor UI
1288
- """
1289
- path = "/api/v1/routine-editor/routines"
1290
- response = self._request_manager.request(
1291
- "GET",
1292
- path,
1293
- headers=self._request_manager.json_headers(),
1294
- fields={
1295
- "limit": models.serialize_i_64(limit),
1296
- "offset": models.serialize_i_64(offset),
1297
- }
1298
- )
1299
- parsed = None
1300
- if response.status == 200:
1301
- parsed = models.parse_routines_paginated_response(json.loads(response.data))
1302
-
1303
- is_user_error = response.status >= 400 and response.status < 500
1304
- is_unavailable = response.status == 503
1305
- if parsed is None and (is_user_error or is_unavailable):
1306
- parsed = models.parse_error_response(json.loads(response.data))
1307
-
1308
- return Response(
1309
- parsed,
1310
- response.status,
1311
- response
1312
- )
1313
-
1314
- def load(
1315
- self,
1316
- routine_id: str,
1317
- ) -> Response[
1318
- Union[
1319
- models.Routine,
1320
- models.ErrorResponse,
1321
- None
1322
- ],
1323
- models.Routine
1324
- ]:
1325
- """
1326
- Get routine data by ID
1327
- """
1328
- path = "/api/v1/routine-editor/routines/{routine_id}"
1329
- path = path.replace("{routine_id}", str(routine_id))
1330
- response = self._request_manager.request(
1331
- "GET",
1332
- path,
1333
- headers=self._request_manager.json_headers(),
1334
- )
1335
- parsed = None
1336
- if response.status == 200:
1337
- parsed = models.parse_routine(json.loads(response.data))
1338
-
1339
- is_user_error = response.status >= 400 and response.status < 500
1340
- is_unavailable = response.status == 503
1341
- if parsed is None and (is_user_error or is_unavailable):
1342
- parsed = models.parse_error_response(json.loads(response.data))
1343
-
1344
- return Response(
1345
- parsed,
1346
- response.status,
1347
- response
1348
- )
1349
-
1350
- class Variables:
1867
+ _request_manager: RequestManager
1868
+ class Routines:
1869
+ def __init__(self, request_manager: RequestManager):
1870
+ self._request_manager = request_manager
1871
+
1872
+
1873
+ def play(
1874
+ self,
1875
+ body: models.PlayRoutineRequest,
1876
+ routine_id: str,
1877
+ ) -> Response[
1878
+ None,
1879
+ None
1880
+ ]:
1881
+ """
1882
+ Play a routine
1883
+ """
1884
+ path = "/api/v1/routine-editor/routines/{routine_id}/play"
1885
+ path = path.replace("{routine_id}", str(routine_id))
1886
+ try:
1887
+ response = self._request_manager.request(
1888
+ "POST",
1889
+ path,
1890
+ headers=self._request_manager.json_headers(),
1891
+ body=json.dumps(models.serialize_play_routine_request(body)),
1892
+ )
1893
+ parsed = None
1894
+
1895
+ is_user_error = response.status >= 400 and response.status <= 500
1896
+ is_unavailable = response.status == 503
1897
+ if parsed is None and (is_user_error or is_unavailable):
1898
+ parsed = models.parse_error_response(json.loads(response.data))
1899
+
1900
+ return Response(
1901
+ parsed,
1902
+ response.status,
1903
+ response
1904
+ )
1905
+ except urllib3.exceptions.MaxRetryError:
1906
+ return Response(
1907
+ models.ErrorResponse(
1908
+ error=models.ErrorEnum.InternalServerError,
1909
+ message="Connection Refused"
1910
+ ),
1911
+ 503,
1912
+ None
1913
+ )
1914
+ def pause(
1915
+ self,
1916
+ routine_id: str,
1917
+ ) -> Response[
1918
+ None,
1919
+ None
1920
+ ]:
1921
+ """
1922
+ Pause a routine
1923
+ """
1924
+ path = "/api/v1/routine-editor/routines/{routine_id}/pause"
1925
+ path = path.replace("{routine_id}", str(routine_id))
1926
+ try:
1927
+ response = self._request_manager.request(
1928
+ "POST",
1929
+ path,
1930
+ headers=self._request_manager.json_headers(),
1931
+ )
1932
+ parsed = None
1933
+
1934
+ is_user_error = response.status >= 400 and response.status <= 500
1935
+ is_unavailable = response.status == 503
1936
+ if parsed is None and (is_user_error or is_unavailable):
1937
+ parsed = models.parse_error_response(json.loads(response.data))
1938
+
1939
+ return Response(
1940
+ parsed,
1941
+ response.status,
1942
+ response
1943
+ )
1944
+ except urllib3.exceptions.MaxRetryError:
1945
+ return Response(
1946
+ models.ErrorResponse(
1947
+ error=models.ErrorEnum.InternalServerError,
1948
+ message="Connection Refused"
1949
+ ),
1950
+ 503,
1951
+ None
1952
+ )
1953
+ def stop(
1954
+ self,
1955
+ ) -> Response[
1956
+ None,
1957
+ None
1958
+ ]:
1959
+ """
1960
+ Stop running routine and all ongoing motions
1961
+ """
1962
+ path = "/api/v1/routine-editor/stop"
1963
+ try:
1964
+ response = self._request_manager.request(
1965
+ "POST",
1966
+ path,
1967
+ headers=self._request_manager.json_headers(),
1968
+ )
1969
+ parsed = None
1970
+
1971
+ is_user_error = response.status >= 400 and response.status <= 500
1972
+ is_unavailable = response.status == 503
1973
+ if parsed is None and (is_user_error or is_unavailable):
1974
+ parsed = models.parse_error_response(json.loads(response.data))
1975
+
1976
+ return Response(
1977
+ parsed,
1978
+ response.status,
1979
+ response
1980
+ )
1981
+ except urllib3.exceptions.MaxRetryError:
1982
+ return Response(
1983
+ models.ErrorResponse(
1984
+ error=models.ErrorEnum.InternalServerError,
1985
+ message="Connection Refused"
1986
+ ),
1987
+ 503,
1988
+ None
1989
+ )
1990
+ def list(
1991
+ self,
1992
+ limit: int,
1993
+ offset: int,
1994
+ ) -> Response[
1995
+ Union[
1996
+ models.RoutinesPaginatedResponse,
1997
+ models.ErrorResponse,
1998
+ None
1999
+ ],
2000
+ models.RoutinesPaginatedResponse
2001
+ ]:
2002
+ """
2003
+ List routines defined in Routine Editor UI
2004
+ """
2005
+ path = "/api/v1/routine-editor/routines"
2006
+ try:
2007
+ response = self._request_manager.request(
2008
+ "GET",
2009
+ path,
2010
+ headers=self._request_manager.json_headers(),
2011
+ fields={
2012
+ "limit": models.serialize_i_64(limit),
2013
+ "offset": models.serialize_i_64(offset),
2014
+ }
2015
+ )
2016
+ parsed = None
2017
+ if response.status == 200:
2018
+ parsed = models.parse_routines_paginated_response(json.loads(response.data))
2019
+
2020
+ is_user_error = response.status >= 400 and response.status <= 500
2021
+ is_unavailable = response.status == 503
2022
+ if parsed is None and (is_user_error or is_unavailable):
2023
+ parsed = models.parse_error_response(json.loads(response.data))
2024
+
2025
+ return Response(
2026
+ parsed,
2027
+ response.status,
2028
+ response
2029
+ )
2030
+ except urllib3.exceptions.MaxRetryError:
2031
+ return Response(
2032
+ models.ErrorResponse(
2033
+ error=models.ErrorEnum.InternalServerError,
2034
+ message="Connection Refused"
2035
+ ),
2036
+ 503,
2037
+ None
2038
+ )
2039
+ def load(
2040
+ self,
2041
+ routine_id: str,
2042
+ ) -> Response[
2043
+ Union[
2044
+ models.Routine,
2045
+ models.ErrorResponse,
2046
+ None
2047
+ ],
2048
+ models.Routine
2049
+ ]:
2050
+ """
2051
+ Get routine data by ID
2052
+ """
2053
+ path = "/api/v1/routine-editor/routines/{routine_id}"
2054
+ path = path.replace("{routine_id}", str(routine_id))
2055
+ try:
2056
+ response = self._request_manager.request(
2057
+ "GET",
2058
+ path,
2059
+ headers=self._request_manager.json_headers(),
2060
+ )
2061
+ parsed = None
2062
+ if response.status == 200:
2063
+ parsed = models.parse_routine(json.loads(response.data))
2064
+
2065
+ is_user_error = response.status >= 400 and response.status <= 500
2066
+ is_unavailable = response.status == 503
2067
+ if parsed is None and (is_user_error or is_unavailable):
2068
+ parsed = models.parse_error_response(json.loads(response.data))
2069
+
2070
+ return Response(
2071
+ parsed,
2072
+ response.status,
2073
+ response
2074
+ )
2075
+ except urllib3.exceptions.MaxRetryError:
2076
+ return Response(
2077
+ models.ErrorResponse(
2078
+ error=models.ErrorEnum.InternalServerError,
2079
+ message="Connection Refused"
2080
+ ),
2081
+ 503,
2082
+ None
2083
+ )
2084
+ def list_spaces(
2085
+ self,
2086
+ routine_id: str,
2087
+ exclude_global_spaces: bool,
2088
+ ) -> Response[
2089
+ Union[
2090
+ models.SpacesPaginatedResponse,
2091
+ models.ErrorResponse,
2092
+ None
2093
+ ],
2094
+ models.SpacesPaginatedResponse
2095
+ ]:
2096
+ """
2097
+ List spaces from routine
2098
+ """
2099
+ path = "/api/v1/routine-editor/routines/{routine_id}/spaces"
2100
+ path = path.replace("{routine_id}", str(routine_id))
2101
+ try:
2102
+ response = self._request_manager.request(
2103
+ "GET",
2104
+ path,
2105
+ headers=self._request_manager.json_headers(),
2106
+ fields={
2107
+ "exclude_global_spaces": models.serialize_bool(exclude_global_spaces),
2108
+ }
2109
+ )
2110
+ parsed = None
2111
+ if response.status == 200:
2112
+ parsed = models.parse_spaces_paginated_response(json.loads(response.data))
2113
+
2114
+ is_user_error = response.status >= 400 and response.status <= 500
2115
+ is_unavailable = response.status == 503
2116
+ if parsed is None and (is_user_error or is_unavailable):
2117
+ parsed = models.parse_error_response(json.loads(response.data))
2118
+
2119
+ return Response(
2120
+ parsed,
2121
+ response.status,
2122
+ response
2123
+ )
2124
+ except urllib3.exceptions.MaxRetryError:
2125
+ return Response(
2126
+ models.ErrorResponse(
2127
+ error=models.ErrorEnum.InternalServerError,
2128
+ message="Connection Refused"
2129
+ ),
2130
+ 503,
2131
+ None
2132
+ )
2133
+ def get_step_variables(
2134
+ self,
2135
+ routine_id: str,
2136
+ step_id_map: bool,
2137
+ ) -> Response[
2138
+ Union[
2139
+ models.RoutineStepVariablesResponse,
2140
+ models.ErrorResponse,
2141
+ None
2142
+ ],
2143
+ models.RoutineStepVariablesResponse
2144
+ ]:
2145
+ """
2146
+ Get all step variables from a running routine.
2147
+ """
2148
+ path = "/api/v1/routine-editor/routines/{routine_id}/step-variables"
2149
+ path = path.replace("{routine_id}", str(routine_id))
2150
+ try:
2151
+ response = self._request_manager.request(
2152
+ "GET",
2153
+ path,
2154
+ headers=self._request_manager.json_headers(),
2155
+ fields={
2156
+ "step_id_map": models.serialize_bool(step_id_map),
2157
+ }
2158
+ )
2159
+ parsed = None
2160
+ if response.status == 200:
2161
+ parsed = models.parse_routine_step_variables_response(json.loads(response.data))
2162
+
2163
+ is_user_error = response.status >= 400 and response.status <= 500
2164
+ is_unavailable = response.status == 503
2165
+ if parsed is None and (is_user_error or is_unavailable):
2166
+ parsed = models.parse_error_response(json.loads(response.data))
2167
+
2168
+ return Response(
2169
+ parsed,
2170
+ response.status,
2171
+ response
2172
+ )
2173
+ except urllib3.exceptions.MaxRetryError:
2174
+ return Response(
2175
+ models.ErrorResponse(
2176
+ error=models.ErrorEnum.InternalServerError,
2177
+ message="Connection Refused"
2178
+ ),
2179
+ 503,
2180
+ None
2181
+ )
2182
+ def get_state(
2183
+ self,
2184
+ routine_id: str,
2185
+ ) -> Response[
2186
+ Union[
2187
+ models.RoutineStateResponse,
2188
+ models.ErrorResponse,
2189
+ None
2190
+ ],
2191
+ models.RoutineStateResponse
2192
+ ]:
2193
+ """
2194
+ Get the state from a running routine.
2195
+ """
2196
+ path = "/api/v1/routine-editor/routines/{routine_id}/state"
2197
+ path = path.replace("{routine_id}", str(routine_id))
2198
+ try:
2199
+ response = self._request_manager.request(
2200
+ "GET",
2201
+ path,
2202
+ headers=self._request_manager.json_headers(),
2203
+ )
2204
+ parsed = None
2205
+ if response.status == 200:
2206
+ parsed = models.parse_routine_state_response(json.loads(response.data))
2207
+
2208
+ is_user_error = response.status >= 400 and response.status <= 500
2209
+ is_unavailable = response.status == 503
2210
+ if parsed is None and (is_user_error or is_unavailable):
2211
+ parsed = models.parse_error_response(json.loads(response.data))
2212
+
2213
+ return Response(
2214
+ parsed,
2215
+ response.status,
2216
+ response
2217
+ )
2218
+ except urllib3.exceptions.MaxRetryError:
2219
+ return Response(
2220
+ models.ErrorResponse(
2221
+ error=models.ErrorEnum.InternalServerError,
2222
+ message="Connection Refused"
2223
+ ),
2224
+ 503,
2225
+ None
2226
+ )
2227
+ class Variables:
2228
+ def __init__(self, request_manager: RequestManager):
2229
+ self._request_manager = request_manager
2230
+
2231
+
2232
+ def load(
2233
+ self,
2234
+ variable_name: str,
2235
+ ) -> Response[
2236
+ Union[
2237
+ models.RuntimeVariable,
2238
+ models.ErrorResponse,
2239
+ None
2240
+ ],
2241
+ models.RuntimeVariable
2242
+ ]:
2243
+ """
2244
+ Returns current state of a variable
2245
+ """
2246
+ path = "/api/v1/routine-editor/variables/{variable_name}"
2247
+ path = path.replace("{variable_name}", str(variable_name))
2248
+ try:
2249
+ response = self._request_manager.request(
2250
+ "GET",
2251
+ path,
2252
+ headers=self._request_manager.json_headers(),
2253
+ )
2254
+ parsed = None
2255
+ if response.status == 200:
2256
+ parsed = models.parse_runtime_variable(json.loads(response.data))
2257
+
2258
+ is_user_error = response.status >= 400 and response.status <= 500
2259
+ is_unavailable = response.status == 503
2260
+ if parsed is None and (is_user_error or is_unavailable):
2261
+ parsed = models.parse_error_response(json.loads(response.data))
2262
+
2263
+ return Response(
2264
+ parsed,
2265
+ response.status,
2266
+ response
2267
+ )
2268
+ except urllib3.exceptions.MaxRetryError:
2269
+ return Response(
2270
+ models.ErrorResponse(
2271
+ error=models.ErrorEnum.InternalServerError,
2272
+ message="Connection Refused"
2273
+ ),
2274
+ 503,
2275
+ None
2276
+ )
2277
+ def update(
2278
+ self,
2279
+ body: models.RuntimeVariable,
2280
+ variable_name: str,
2281
+ ) -> Response[
2282
+ Union[
2283
+ models.RuntimeVariable,
2284
+ models.ErrorResponse,
2285
+ None
2286
+ ],
2287
+ models.RuntimeVariable
2288
+ ]:
2289
+ """
2290
+ Update the value of a variable
2291
+ """
2292
+ path = "/api/v1/routine-editor/variables/{variable_name}"
2293
+ path = path.replace("{variable_name}", str(variable_name))
2294
+ try:
2295
+ response = self._request_manager.request(
2296
+ "POST",
2297
+ path,
2298
+ headers=self._request_manager.json_headers(),
2299
+ body=json.dumps(models.serialize_runtime_variable(body)),
2300
+ )
2301
+ parsed = None
2302
+ if response.status == 200:
2303
+ parsed = models.parse_runtime_variable(json.loads(response.data))
2304
+
2305
+ is_user_error = response.status >= 400 and response.status <= 500
2306
+ is_unavailable = response.status == 503
2307
+ if parsed is None and (is_user_error or is_unavailable):
2308
+ parsed = models.parse_error_response(json.loads(response.data))
2309
+
2310
+ return Response(
2311
+ parsed,
2312
+ response.status,
2313
+ response
2314
+ )
2315
+ except urllib3.exceptions.MaxRetryError:
2316
+ return Response(
2317
+ models.ErrorResponse(
2318
+ error=models.ErrorEnum.InternalServerError,
2319
+ message="Connection Refused"
2320
+ ),
2321
+ 503,
2322
+ None
2323
+ )
2324
+
2325
+ routines: Routines
2326
+ variables: Variables
2327
+
1351
2328
  def __init__(self, request_manager: RequestManager):
1352
- self._request_manager = request_manager
1353
-
1354
-
1355
- def load(
1356
- self,
1357
- variable_name: str,
1358
- ) -> Response[
1359
- Union[
1360
- models.RuntimeVariable,
1361
- models.ErrorResponse,
1362
- None
1363
- ],
1364
- models.RuntimeVariable
1365
- ]:
1366
- """
1367
- Returns current state of a variable
1368
- """
1369
- path = "/api/v1/routine-editor/variables/{variable_name}"
1370
- path = path.replace("{variable_name}", str(variable_name))
1371
- response = self._request_manager.request(
1372
- "GET",
1373
- path,
1374
- headers=self._request_manager.json_headers(),
1375
- )
1376
- parsed = None
1377
- if response.status == 200:
1378
- parsed = models.parse_runtime_variable(json.loads(response.data))
1379
-
1380
- is_user_error = response.status >= 400 and response.status < 500
1381
- is_unavailable = response.status == 503
1382
- if parsed is None and (is_user_error or is_unavailable):
1383
- parsed = models.parse_error_response(json.loads(response.data))
1384
-
1385
- return Response(
1386
- parsed,
1387
- response.status,
1388
- response
1389
- )
1390
-
1391
- def update(
1392
- self,
1393
- body: models.RuntimeVariable,
1394
- variable_name: str,
1395
- ) -> Response[
1396
- Union[
1397
- models.RuntimeVariable,
1398
- models.ErrorResponse,
1399
- None
1400
- ],
1401
- models.RuntimeVariable
1402
- ]:
1403
- """
1404
- Update the value of a variable
1405
- """
1406
- path = "/api/v1/routine-editor/variables/{variable_name}"
1407
- path = path.replace("{variable_name}", str(variable_name))
1408
- response = self._request_manager.request(
1409
- "POST",
1410
- path,
1411
- headers=self._request_manager.json_headers(),
1412
- body=json.dumps(models.serialize_runtime_variable(body)),
1413
- )
1414
- parsed = None
1415
- if response.status == 200:
1416
- parsed = models.parse_runtime_variable(json.loads(response.data))
1417
-
1418
- is_user_error = response.status >= 400 and response.status < 500
1419
- is_unavailable = response.status == 503
1420
- if parsed is None and (is_user_error or is_unavailable):
1421
- parsed = models.parse_error_response(json.loads(response.data))
1422
-
1423
- return Response(
1424
- parsed,
1425
- response.status,
1426
- response
1427
- )
1428
-
1429
- routines: Routines
1430
- variables: Variables
1431
-
1432
- def __init__(self, request_manager: RequestManager):
1433
- self._request_manager = request_manager
1434
- self.routines = RoutineEditor.Routines(request_manager)
1435
- self.variables = RoutineEditor.Variables(request_manager)
2329
+ self._request_manager = request_manager
2330
+ self.routines = RoutineEditor.Routines(request_manager)
2331
+ self.variables = RoutineEditor.Variables(request_manager)
1436
2332
 
1437
2333
  class Status:
1438
- _request_manager: RequestManager
1439
- class Control:
1440
- def __init__(self, request_manager: RequestManager):
1441
- self._request_manager = request_manager
1442
-
1443
-
1444
- def set_configuration_control_state(
1445
- self,
1446
- body: models.RobotControlMode,
1447
- ) -> Response[
1448
- Union[
1449
- models.RobotControlMode,
1450
- models.ErrorResponse,
1451
- None
1452
- ],
1453
- models.RobotControlMode
1454
- ]:
1455
- """
1456
- Set the system which is controlling the robot
1457
- """
1458
- path = "/api/v1/status/control-mode"
1459
- response = self._request_manager.request(
1460
- "POST",
1461
- path,
1462
- headers=self._request_manager.json_headers(),
1463
- body=json.dumps(models.serialize_robot_control_mode(body)),
1464
- )
1465
- parsed = None
1466
- if response.status == 200:
1467
- parsed = models.parse_robot_control_mode(json.loads(response.data))
1468
-
1469
- is_user_error = response.status >= 400 and response.status < 500
1470
- is_unavailable = response.status == 503
1471
- if parsed is None and (is_user_error or is_unavailable):
1472
- parsed = models.parse_error_response(json.loads(response.data))
1473
-
1474
- return Response(
1475
- parsed,
1476
- response.status,
1477
- response
1478
- )
1479
-
1480
- def get_configuration_state_control(
1481
- self,
1482
- ) -> Response[
1483
- Union[
1484
- models.RobotControlMode,
1485
- models.ErrorResponse,
1486
- None
1487
- ],
1488
- models.RobotControlMode
1489
- ]:
1490
- """
1491
- Get the system which is controlling the robot
1492
- """
1493
- path = "/api/v1/status/control-mode"
1494
- response = self._request_manager.request(
1495
- "GET",
1496
- path,
1497
- headers=self._request_manager.json_headers(),
1498
- )
1499
- parsed = None
1500
- if response.status == 200:
1501
- parsed = models.parse_robot_control_mode(json.loads(response.data))
1502
-
1503
- is_user_error = response.status >= 400 and response.status < 500
1504
- is_unavailable = response.status == 503
1505
- if parsed is None and (is_user_error or is_unavailable):
1506
- parsed = models.parse_error_response(json.loads(response.data))
1507
-
1508
- return Response(
1509
- parsed,
1510
- response.status,
1511
- response
1512
- )
1513
-
1514
- class Health:
2334
+ _request_manager: RequestManager
2335
+ class Control:
2336
+ def __init__(self, request_manager: RequestManager):
2337
+ self._request_manager = request_manager
2338
+
2339
+
2340
+ def set_configuration_control_state(
2341
+ self,
2342
+ body: models.RobotControlMode,
2343
+ ) -> Response[
2344
+ Union[
2345
+ models.RobotControlMode,
2346
+ models.ErrorResponse,
2347
+ None
2348
+ ],
2349
+ models.RobotControlMode
2350
+ ]:
2351
+ """
2352
+ Set the system which is controlling the robot
2353
+ """
2354
+ path = "/api/v1/status/control-mode"
2355
+ try:
2356
+ response = self._request_manager.request(
2357
+ "POST",
2358
+ path,
2359
+ headers=self._request_manager.json_headers(),
2360
+ body=json.dumps(models.serialize_robot_control_mode(body)),
2361
+ )
2362
+ parsed = None
2363
+ if response.status == 200:
2364
+ parsed = models.parse_robot_control_mode(json.loads(response.data))
2365
+
2366
+ is_user_error = response.status >= 400 and response.status <= 500
2367
+ is_unavailable = response.status == 503
2368
+ if parsed is None and (is_user_error or is_unavailable):
2369
+ parsed = models.parse_error_response(json.loads(response.data))
2370
+
2371
+ return Response(
2372
+ parsed,
2373
+ response.status,
2374
+ response
2375
+ )
2376
+ except urllib3.exceptions.MaxRetryError:
2377
+ return Response(
2378
+ models.ErrorResponse(
2379
+ error=models.ErrorEnum.InternalServerError,
2380
+ message="Connection Refused"
2381
+ ),
2382
+ 503,
2383
+ None
2384
+ )
2385
+ def get_configuration_state_control(
2386
+ self,
2387
+ ) -> Response[
2388
+ Union[
2389
+ models.RobotControlMode,
2390
+ models.ErrorResponse,
2391
+ None
2392
+ ],
2393
+ models.RobotControlMode
2394
+ ]:
2395
+ """
2396
+ Get the system which is controlling the robot
2397
+ """
2398
+ path = "/api/v1/status/control-mode"
2399
+ try:
2400
+ response = self._request_manager.request(
2401
+ "GET",
2402
+ path,
2403
+ headers=self._request_manager.json_headers(),
2404
+ )
2405
+ parsed = None
2406
+ if response.status == 200:
2407
+ parsed = models.parse_robot_control_mode(json.loads(response.data))
2408
+
2409
+ is_user_error = response.status >= 400 and response.status <= 500
2410
+ is_unavailable = response.status == 503
2411
+ if parsed is None and (is_user_error or is_unavailable):
2412
+ parsed = models.parse_error_response(json.loads(response.data))
2413
+
2414
+ return Response(
2415
+ parsed,
2416
+ response.status,
2417
+ response
2418
+ )
2419
+ except urllib3.exceptions.MaxRetryError:
2420
+ return Response(
2421
+ models.ErrorResponse(
2422
+ error=models.ErrorEnum.InternalServerError,
2423
+ message="Connection Refused"
2424
+ ),
2425
+ 503,
2426
+ None
2427
+ )
2428
+ class Health:
2429
+ def __init__(self, request_manager: RequestManager):
2430
+ self._request_manager = request_manager
2431
+
2432
+
2433
+ def get_health(
2434
+ self,
2435
+ ) -> Response[
2436
+ Union[
2437
+ models.StatusHealthResponse,
2438
+ models.ErrorResponse,
2439
+ None
2440
+ ],
2441
+ models.StatusHealthResponse
2442
+ ]:
2443
+ """
2444
+ Get the current health of the robot
2445
+ """
2446
+ path = "/api/v1/status/health"
2447
+ try:
2448
+ response = self._request_manager.request(
2449
+ "GET",
2450
+ path,
2451
+ headers=self._request_manager.json_headers(),
2452
+ )
2453
+ parsed = None
2454
+ if response.status == 200:
2455
+ parsed = models.parse_status_health_response(json.loads(response.data))
2456
+
2457
+ is_user_error = response.status >= 400 and response.status <= 500
2458
+ is_unavailable = response.status == 503
2459
+ if parsed is None and (is_user_error or is_unavailable):
2460
+ parsed = models.parse_error_response(json.loads(response.data))
2461
+
2462
+ return Response(
2463
+ parsed,
2464
+ response.status,
2465
+ response
2466
+ )
2467
+ except urllib3.exceptions.MaxRetryError:
2468
+ return Response(
2469
+ models.ErrorResponse(
2470
+ error=models.ErrorEnum.InternalServerError,
2471
+ message="Connection Refused"
2472
+ ),
2473
+ 503,
2474
+ None
2475
+ )
2476
+
2477
+ control: Control
2478
+ health: Health
2479
+
1515
2480
  def __init__(self, request_manager: RequestManager):
1516
- self._request_manager = request_manager
1517
-
1518
-
1519
- def get_health(
1520
- self,
1521
- ) -> Response[
1522
- Union[
1523
- models.StatusHealthResponse,
1524
- models.ErrorResponse,
1525
- None
1526
- ],
1527
- models.StatusHealthResponse
1528
- ]:
1529
- """
1530
- Get the current health of the robot
1531
- """
1532
- path = "/api/v1/status/health"
1533
- response = self._request_manager.request(
1534
- "GET",
1535
- path,
1536
- headers=self._request_manager.json_headers(),
1537
- )
1538
- parsed = None
1539
- if response.status == 200:
1540
- parsed = models.parse_status_health_response(json.loads(response.data))
1541
-
1542
- is_user_error = response.status >= 400 and response.status < 500
1543
- is_unavailable = response.status == 503
1544
- if parsed is None and (is_user_error or is_unavailable):
1545
- parsed = models.parse_error_response(json.loads(response.data))
1546
-
1547
- return Response(
1548
- parsed,
1549
- response.status,
1550
- response
1551
- )
1552
-
1553
- control: Control
1554
- health: Health
1555
-
1556
- def __init__(self, request_manager: RequestManager):
1557
- self._request_manager = request_manager
1558
- self.control = Status.Control(request_manager)
1559
- self.health = Status.Health(request_manager)
2481
+ self._request_manager = request_manager
2482
+ self.control = Status.Control(request_manager)
2483
+ self.health = Status.Health(request_manager)
1560
2484
 
1561
2485
 
1562
2486
 
1563
2487
 
1564
2488
  class StandardBotsRobot(Default):
1565
- RobotKind = RobotKind
1566
-
1567
- movement: Movement
1568
- camera: Camera
1569
- faults: Faults
1570
- chat_gpt: ChatGPT
1571
- io: IO
1572
- general: General
1573
- recovery: Recovery
1574
- ros: ROS
1575
- routine_editor: RoutineEditor
1576
- status: Status
1577
- def __init__(
1578
- self,
1579
- url: str,
1580
- token: str,
1581
- robot_kind: Union[RobotKind, str] = RobotKind.Live,
1582
- pools: int = 10
1583
- ):
1584
- super().__init__(RequestManager(
1585
- urllib3.PoolManager(num_pools=2),
1586
- token=token,
1587
- host=url,
1588
- robot_kind=RobotKind(robot_kind),
1589
- ))
1590
- self.movement = Movement(self._request_manager)
1591
- self.camera = Camera(self._request_manager)
1592
- self.faults = Faults(self._request_manager)
1593
- self.chat_gpt = ChatGPT(self._request_manager)
1594
- self.io = IO(self._request_manager)
1595
- self.general = General(self._request_manager)
1596
- self.recovery = Recovery(self._request_manager)
1597
- self.ros = ROS(self._request_manager)
1598
- self.routine_editor = RoutineEditor(self._request_manager)
1599
- self.status = Status(self._request_manager)
1600
-
1601
- @contextmanager
1602
- def connection(self):
1603
- yield
1604
- self._request_manager.close()
1605
-
2489
+ RobotKind = RobotKind
2490
+
2491
+ movement: Movement
2492
+ camera: Camera
2493
+ faults: Faults
2494
+ chat_gpt: ChatGPT
2495
+ io: IO
2496
+ general: General
2497
+ poses: Poses
2498
+ recovery: Recovery
2499
+ ros: ROS
2500
+ routine_editor: RoutineEditor
2501
+ status: Status
2502
+ def __init__(
2503
+ self,
2504
+ url: str,
2505
+ token: str,
2506
+ robot_kind: Union[RobotKind, str] = RobotKind.Live,
2507
+ pools: int = 10
2508
+ ):
2509
+ super().__init__(RequestManager(
2510
+ urllib3.PoolManager(num_pools=2),
2511
+ token=token,
2512
+ host=url,
2513
+ robot_kind=RobotKind(robot_kind),
2514
+ ))
2515
+ self.movement = Movement(self._request_manager)
2516
+ self.camera = Camera(self._request_manager)
2517
+ self.faults = Faults(self._request_manager)
2518
+ self.chat_gpt = ChatGPT(self._request_manager)
2519
+ self.io = IO(self._request_manager)
2520
+ self.general = General(self._request_manager)
2521
+ self.poses = Poses(self._request_manager)
2522
+ self.recovery = Recovery(self._request_manager)
2523
+ self.ros = ROS(self._request_manager)
2524
+ self.routine_editor = RoutineEditor(self._request_manager)
2525
+ self.status = Status(self._request_manager)
2526
+
2527
+ @contextmanager
2528
+ def connection(self):
2529
+ yield
2530
+ self._request_manager.close()