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