standardbots 2.0.0.dev1790353717__tar.gz → 2.0.0.dev1790701403__tar.gz
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.
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/PKG-INFO +1 -1
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/setup.py +1 -1
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots/auto_generated/apis.py +3 -175
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots/auto_generated/models.py +99 -705
- standardbots-2.0.0.dev1790701403/standardbots/realtime/__init__.py +4 -0
- standardbots-2.0.0.dev1790701403/standardbots/realtime/_proto/external_control_pb2.py +63 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots/realtime/protocol.py +19 -94
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots/realtime/robot_stream.py +13 -223
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots/realtime/types.py +0 -15
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots.egg-info/PKG-INFO +1 -1
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots.egg-info/SOURCES.txt +0 -2
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/tests/test_robot_stream.py +11 -100
- standardbots-2.0.0.dev1790353717/standardbots/realtime/__init__.py +0 -19
- standardbots-2.0.0.dev1790353717/standardbots/realtime/_proto/external_control_pb2.py +0 -81
- standardbots-2.0.0.dev1790353717/tests/test_robot_stream_records.py +0 -381
- standardbots-2.0.0.dev1790353717/tests/test_vendored_proto.py +0 -54
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/README.md +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/setup.cfg +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots/__init__.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots/auto_generated/__init__.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots/realtime/_proto/__init__.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots.egg-info/dependency_links.txt +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots.egg-info/requires.txt +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/standardbots.egg-info/top_level.txt +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/tests/fixtures/__init__.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/tests/fixtures/client_fixt.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/tests/fixtures/robot_fixt.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/tests/fixtures/routines_fixt.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/tests/test_apis.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/tests/test_robot_stream_loopback.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/tests/test_robot_stream_reseed.py +0 -0
- {standardbots-2.0.0.dev1790353717 → standardbots-2.0.0.dev1790701403}/tests/test_robot_stream_take_control.py +0 -0
|
@@ -717,10 +717,6 @@ anything else is rejected. Pass `equipment_id` alongside it to say whi
|
|
|
717
717
|
equipment the tooltip belongs to — required only when more than one
|
|
718
718
|
piece of equipment offers the same option.
|
|
719
719
|
|
|
720
|
-
The robot must not be running a routine, paused runs included. The
|
|
721
|
-
Active Tooltip repoints the frame a running routine's steps do their
|
|
722
|
-
motion math against, so it is only settable between runs.
|
|
723
|
-
|
|
724
720
|
"""
|
|
725
721
|
path = "/api/v1/equipment/tooltips/active"
|
|
726
722
|
try:
|
|
@@ -734,51 +730,6 @@ motion math against, so it is only settable between runs.
|
|
|
734
730
|
if response.status == 200:
|
|
735
731
|
parsed = models.parse_active_tooltip_response(json.loads(response.data))
|
|
736
732
|
|
|
737
|
-
is_user_error = response.status >= 400 and response.status <= 500
|
|
738
|
-
is_unavailable = response.status == 503
|
|
739
|
-
if parsed is None and (is_user_error or is_unavailable):
|
|
740
|
-
parsed = models.parse_error_response(json.loads(response.data))
|
|
741
|
-
|
|
742
|
-
return Response(
|
|
743
|
-
parsed,
|
|
744
|
-
response.status,
|
|
745
|
-
response
|
|
746
|
-
)
|
|
747
|
-
except urllib3.exceptions.MaxRetryError:
|
|
748
|
-
return Response(
|
|
749
|
-
models.ErrorResponse(
|
|
750
|
-
error=models.ErrorEnum.InternalServerError,
|
|
751
|
-
message="Connection Refused"
|
|
752
|
-
),
|
|
753
|
-
503,
|
|
754
|
-
None
|
|
755
|
-
)
|
|
756
|
-
def tare_tactile_sensor(
|
|
757
|
-
self,
|
|
758
|
-
body: models.TactileSensorTareRequest,
|
|
759
|
-
) -> Response[
|
|
760
|
-
None,
|
|
761
|
-
None
|
|
762
|
-
]:
|
|
763
|
-
"""
|
|
764
|
-
Zeroes the tactile sensor fingertips against their current unloaded
|
|
765
|
-
state, so subsequent taxel and force readings are relative to it. A taxel
|
|
766
|
-
at rest sits at a large offset, so readings are meaningless until a
|
|
767
|
-
baseline has been captured.
|
|
768
|
-
|
|
769
|
-
Succeeds while the robot is braked.
|
|
770
|
-
|
|
771
|
-
"""
|
|
772
|
-
path = "/api/v1/equipment/tactile-sensor/tare"
|
|
773
|
-
try:
|
|
774
|
-
response = self._request_manager.request(
|
|
775
|
-
"POST",
|
|
776
|
-
path,
|
|
777
|
-
headers=self._request_manager.json_headers(),
|
|
778
|
-
body=json.dumps(models.serialize_tactile_sensor_tare_request(body)),
|
|
779
|
-
)
|
|
780
|
-
parsed = None
|
|
781
|
-
|
|
782
733
|
is_user_error = response.status >= 400 and response.status <= 500
|
|
783
734
|
is_unavailable = response.status == 503
|
|
784
735
|
if parsed is None and (is_user_error or is_unavailable):
|
|
@@ -1337,96 +1288,6 @@ external-control session started through this API; a no-op otherwise.
|
|
|
1337
1288
|
if parsed is None and (is_user_error or is_unavailable):
|
|
1338
1289
|
parsed = models.parse_error_response(json.loads(response.data))
|
|
1339
1290
|
|
|
1340
|
-
return Response(
|
|
1341
|
-
parsed,
|
|
1342
|
-
response.status,
|
|
1343
|
-
response
|
|
1344
|
-
)
|
|
1345
|
-
except urllib3.exceptions.MaxRetryError:
|
|
1346
|
-
return Response(
|
|
1347
|
-
models.ErrorResponse(
|
|
1348
|
-
error=models.ErrorEnum.InternalServerError,
|
|
1349
|
-
message="Connection Refused"
|
|
1350
|
-
),
|
|
1351
|
-
503,
|
|
1352
|
-
None
|
|
1353
|
-
)
|
|
1354
|
-
def get_map_artifact_url(
|
|
1355
|
-
self,
|
|
1356
|
-
body: models.MapArtifactUrlRequest,
|
|
1357
|
-
) -> Response[
|
|
1358
|
-
Union[
|
|
1359
|
-
models.MapArtifactUrlResponse,
|
|
1360
|
-
models.ErrorResponse,
|
|
1361
|
-
None
|
|
1362
|
-
],
|
|
1363
|
-
models.MapArtifactUrlResponse
|
|
1364
|
-
]:
|
|
1365
|
-
"""
|
|
1366
|
-
Mint a presigned download URL for one file inside a skills artifact, via echo-bot's configured api-srv endpoint
|
|
1367
|
-
"""
|
|
1368
|
-
path = "/api/v1/recorder/map-artifact-url"
|
|
1369
|
-
try:
|
|
1370
|
-
response = self._request_manager.request(
|
|
1371
|
-
"POST",
|
|
1372
|
-
path,
|
|
1373
|
-
headers=self._request_manager.json_headers(),
|
|
1374
|
-
body=json.dumps(models.serialize_map_artifact_url_request(body)),
|
|
1375
|
-
)
|
|
1376
|
-
parsed = None
|
|
1377
|
-
if response.status == 200:
|
|
1378
|
-
parsed = models.parse_map_artifact_url_response(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
|
-
except urllib3.exceptions.MaxRetryError:
|
|
1391
|
-
return Response(
|
|
1392
|
-
models.ErrorResponse(
|
|
1393
|
-
error=models.ErrorEnum.InternalServerError,
|
|
1394
|
-
message="Connection Refused"
|
|
1395
|
-
),
|
|
1396
|
-
503,
|
|
1397
|
-
None
|
|
1398
|
-
)
|
|
1399
|
-
def check_camera_calibration(
|
|
1400
|
-
self,
|
|
1401
|
-
body: models.CameraCalibrationCheckRequest,
|
|
1402
|
-
) -> Response[
|
|
1403
|
-
Union[
|
|
1404
|
-
models.CameraCalibrationCheckResponse,
|
|
1405
|
-
models.ErrorResponse,
|
|
1406
|
-
None
|
|
1407
|
-
],
|
|
1408
|
-
models.CameraCalibrationCheckResponse
|
|
1409
|
-
]:
|
|
1410
|
-
"""
|
|
1411
|
-
Report whether a handheld-camera calibration exists for a serial, via echo-bot's configured api-srv endpoint
|
|
1412
|
-
"""
|
|
1413
|
-
path = "/api/v1/recorder/camera-calibration"
|
|
1414
|
-
try:
|
|
1415
|
-
response = self._request_manager.request(
|
|
1416
|
-
"POST",
|
|
1417
|
-
path,
|
|
1418
|
-
headers=self._request_manager.json_headers(),
|
|
1419
|
-
body=json.dumps(models.serialize_camera_calibration_check_request(body)),
|
|
1420
|
-
)
|
|
1421
|
-
parsed = None
|
|
1422
|
-
if response.status == 200:
|
|
1423
|
-
parsed = models.parse_camera_calibration_check_response(json.loads(response.data))
|
|
1424
|
-
|
|
1425
|
-
is_user_error = response.status >= 400 and response.status <= 500
|
|
1426
|
-
is_unavailable = response.status == 503
|
|
1427
|
-
if parsed is None and (is_user_error or is_unavailable):
|
|
1428
|
-
parsed = models.parse_error_response(json.loads(response.data))
|
|
1429
|
-
|
|
1430
1291
|
return Response(
|
|
1431
1292
|
parsed,
|
|
1432
1293
|
response.status,
|
|
@@ -4196,16 +4057,7 @@ class ROS:
|
|
|
4196
4057
|
models.ROSControlStateResponse
|
|
4197
4058
|
]:
|
|
4198
4059
|
"""
|
|
4199
|
-
|
|
4200
|
-
action ('enable' or 'disable').
|
|
4201
|
-
|
|
4202
|
-
Superseded by the external-control API: start a streaming session with
|
|
4203
|
-
POST /api/v1/external-control/start (streamType 'pose', 'joints' or
|
|
4204
|
-
'jointTrajectory') and end it with POST /api/v1/external-control/stop.
|
|
4205
|
-
Every successful response carries a `deprecationWarning`. On robots where
|
|
4206
|
-
the deprecated ROS2 API has been turned off (Settings → External control →
|
|
4207
|
-
Developer API) this endpoint returns 410 `ros_control_deprecated`.
|
|
4208
|
-
|
|
4060
|
+
Updates the state of ROS control based on the provided action ('enable' or 'disable').
|
|
4209
4061
|
"""
|
|
4210
4062
|
path = "/api/v1/movement/ros/state"
|
|
4211
4063
|
try:
|
|
@@ -4254,13 +4106,7 @@ Developer API) this endpoint returns 410 `ros_control_deprecated`.
|
|
|
4254
4106
|
models.ROSControlStateResponse
|
|
4255
4107
|
]:
|
|
4256
4108
|
"""
|
|
4257
|
-
|
|
4258
|
-
|
|
4259
|
-
Superseded by the external-control API (POST
|
|
4260
|
-
/api/v1/external-control/start). Every successful response carries a
|
|
4261
|
-
`deprecationWarning`. On robots where the deprecated ROS2 API has been
|
|
4262
|
-
turned off this endpoint returns 410 `ros_control_deprecated`.
|
|
4263
|
-
|
|
4109
|
+
Retrieves the current state of ROS control.
|
|
4264
4110
|
"""
|
|
4265
4111
|
path = "/api/v1/movement/ros/state"
|
|
4266
4112
|
try:
|
|
@@ -5062,25 +4908,7 @@ class StandardBotsRobot(Default):
|
|
|
5062
4908
|
pools: int = 10
|
|
5063
4909
|
):
|
|
5064
4910
|
super().__init__(RequestManager(
|
|
5065
|
-
urllib3.PoolManager(
|
|
5066
|
-
num_pools=2,
|
|
5067
|
-
# A cold robot answers 503 with a Retry-After header while
|
|
5068
|
-
# its tunnel wakes (worst case about 30s). Honoring it makes
|
|
5069
|
-
# the first call against a cold robot run slower instead of
|
|
5070
|
-
# failing. The 503 means the request never reached the
|
|
5071
|
-
# robot, so retrying non-idempotent methods is safe here
|
|
5072
|
-
# (allowed_methods=None retries every method).
|
|
5073
|
-
retries=urllib3.util.Retry(
|
|
5074
|
-
connect=3,
|
|
5075
|
-
read=3,
|
|
5076
|
-
status=4,
|
|
5077
|
-
other=0,
|
|
5078
|
-
status_forcelist=[503],
|
|
5079
|
-
allowed_methods=None,
|
|
5080
|
-
respect_retry_after_header=True,
|
|
5081
|
-
backoff_factor=0.5,
|
|
5082
|
-
),
|
|
5083
|
-
),
|
|
4911
|
+
urllib3.PoolManager(num_pools=2),
|
|
5084
4912
|
token=token,
|
|
5085
4913
|
host=url,
|
|
5086
4914
|
robot_kind=RobotKind(robot_kind),
|