standardbots 2.0.0.dev1745455051__py3-none-any.whl → 2.0.0.dev1750459189__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.
- standardbots/auto_generated/apis.py +1022 -27
- standardbots/auto_generated/models.py +4733 -2324
- {standardbots-2.0.0.dev1745455051.dist-info → standardbots-2.0.0.dev1750459189.dist-info}/METADATA +1 -1
- standardbots-2.0.0.dev1750459189.dist-info/RECORD +12 -0
- {standardbots-2.0.0.dev1745455051.dist-info → standardbots-2.0.0.dev1750459189.dist-info}/WHEEL +1 -1
- tests/fixtures/client_fixt.py +0 -2
- tests/fixtures/robot_fixt.py +49 -0
- tests/fixtures/routines_fixt.py +23 -0
- standardbots-2.0.0.dev1745455051.dist-info/RECORD +0 -11
- {standardbots-2.0.0.dev1745455051.dist-info → standardbots-2.0.0.dev1750459189.dist-info}/top_level.txt +0 -0
|
@@ -354,6 +354,374 @@ class Default:
|
|
|
354
354
|
if parsed is None and (is_user_error or is_unavailable):
|
|
355
355
|
parsed = models.parse_error_response(json.loads(response.data))
|
|
356
356
|
|
|
357
|
+
return Response(
|
|
358
|
+
parsed,
|
|
359
|
+
response.status,
|
|
360
|
+
response
|
|
361
|
+
)
|
|
362
|
+
except urllib3.exceptions.MaxRetryError:
|
|
363
|
+
return Response(
|
|
364
|
+
models.ErrorResponse(
|
|
365
|
+
error=models.ErrorEnum.InternalServerError,
|
|
366
|
+
message="Connection Refused"
|
|
367
|
+
),
|
|
368
|
+
503,
|
|
369
|
+
None
|
|
370
|
+
)
|
|
371
|
+
class Payload:
|
|
372
|
+
def __init__(self, request_manager: RequestManager):
|
|
373
|
+
self._request_manager = request_manager
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
def set_payload(
|
|
377
|
+
self,
|
|
378
|
+
body: models.PayloadStateRequest,
|
|
379
|
+
) -> Response[
|
|
380
|
+
Union[
|
|
381
|
+
models.ErrorResponse,
|
|
382
|
+
models.ErrorResponse,
|
|
383
|
+
None
|
|
384
|
+
],
|
|
385
|
+
None
|
|
386
|
+
]:
|
|
387
|
+
"""
|
|
388
|
+
Set a value for the mass being carried by the robot's end-effector.
|
|
389
|
+
|
|
390
|
+
"""
|
|
391
|
+
path = "/api/v1/payload"
|
|
392
|
+
try:
|
|
393
|
+
response = self._request_manager.request(
|
|
394
|
+
"POST",
|
|
395
|
+
path,
|
|
396
|
+
headers=self._request_manager.json_headers(),
|
|
397
|
+
body=json.dumps(models.serialize_payload_state_request(body)),
|
|
398
|
+
)
|
|
399
|
+
parsed = None
|
|
400
|
+
if response.status == 400:
|
|
401
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
402
|
+
|
|
403
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
404
|
+
is_unavailable = response.status == 503
|
|
405
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
406
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
407
|
+
|
|
408
|
+
return Response(
|
|
409
|
+
parsed,
|
|
410
|
+
response.status,
|
|
411
|
+
response
|
|
412
|
+
)
|
|
413
|
+
except urllib3.exceptions.MaxRetryError:
|
|
414
|
+
return Response(
|
|
415
|
+
models.ErrorResponse(
|
|
416
|
+
error=models.ErrorEnum.InternalServerError,
|
|
417
|
+
message="Connection Refused"
|
|
418
|
+
),
|
|
419
|
+
503,
|
|
420
|
+
None
|
|
421
|
+
)
|
|
422
|
+
def get_payload(
|
|
423
|
+
self,
|
|
424
|
+
) -> Response[
|
|
425
|
+
Union[
|
|
426
|
+
models.PayloadStateResponse,
|
|
427
|
+
models.ErrorResponse,
|
|
428
|
+
None
|
|
429
|
+
],
|
|
430
|
+
models.PayloadStateResponse
|
|
431
|
+
]:
|
|
432
|
+
"""
|
|
433
|
+
Get the current mass value being carried by the robot's end-effector.
|
|
434
|
+
|
|
435
|
+
"""
|
|
436
|
+
path = "/api/v1/payload"
|
|
437
|
+
try:
|
|
438
|
+
response = self._request_manager.request(
|
|
439
|
+
"GET",
|
|
440
|
+
path,
|
|
441
|
+
headers=self._request_manager.json_headers(),
|
|
442
|
+
)
|
|
443
|
+
parsed = None
|
|
444
|
+
if response.status == 200:
|
|
445
|
+
parsed = models.parse_payload_state_response(json.loads(response.data))
|
|
446
|
+
|
|
447
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
448
|
+
is_unavailable = response.status == 503
|
|
449
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
450
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
451
|
+
|
|
452
|
+
return Response(
|
|
453
|
+
parsed,
|
|
454
|
+
response.status,
|
|
455
|
+
response
|
|
456
|
+
)
|
|
457
|
+
except urllib3.exceptions.MaxRetryError:
|
|
458
|
+
return Response(
|
|
459
|
+
models.ErrorResponse(
|
|
460
|
+
error=models.ErrorEnum.InternalServerError,
|
|
461
|
+
message="Connection Refused"
|
|
462
|
+
),
|
|
463
|
+
503,
|
|
464
|
+
None
|
|
465
|
+
)
|
|
466
|
+
class Recorder:
|
|
467
|
+
def __init__(self, request_manager: RequestManager):
|
|
468
|
+
self._request_manager = request_manager
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
def get_recorder_state(
|
|
472
|
+
self,
|
|
473
|
+
) -> Response[
|
|
474
|
+
Union[
|
|
475
|
+
models.RecorderState,
|
|
476
|
+
models.ErrorResponse,
|
|
477
|
+
None
|
|
478
|
+
],
|
|
479
|
+
models.RecorderState
|
|
480
|
+
]:
|
|
481
|
+
"""
|
|
482
|
+
Get the state of the recorder
|
|
483
|
+
"""
|
|
484
|
+
path = "/api/v1/recorder/state"
|
|
485
|
+
try:
|
|
486
|
+
response = self._request_manager.request(
|
|
487
|
+
"GET",
|
|
488
|
+
path,
|
|
489
|
+
headers=self._request_manager.json_headers(),
|
|
490
|
+
)
|
|
491
|
+
parsed = None
|
|
492
|
+
if response.status == 200:
|
|
493
|
+
parsed = models.parse_recorder_state(json.loads(response.data))
|
|
494
|
+
|
|
495
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
496
|
+
is_unavailable = response.status == 503
|
|
497
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
498
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
499
|
+
|
|
500
|
+
return Response(
|
|
501
|
+
parsed,
|
|
502
|
+
response.status,
|
|
503
|
+
response
|
|
504
|
+
)
|
|
505
|
+
except urllib3.exceptions.MaxRetryError:
|
|
506
|
+
return Response(
|
|
507
|
+
models.ErrorResponse(
|
|
508
|
+
error=models.ErrorEnum.InternalServerError,
|
|
509
|
+
message="Connection Refused"
|
|
510
|
+
),
|
|
511
|
+
503,
|
|
512
|
+
None
|
|
513
|
+
)
|
|
514
|
+
def update_recording(
|
|
515
|
+
self,
|
|
516
|
+
body: models.RecorderConfig,
|
|
517
|
+
) -> Response[
|
|
518
|
+
Union[
|
|
519
|
+
models.UpdateRecordingResponse,
|
|
520
|
+
models.ErrorResponse,
|
|
521
|
+
None
|
|
522
|
+
],
|
|
523
|
+
models.UpdateRecordingResponse
|
|
524
|
+
]:
|
|
525
|
+
"""
|
|
526
|
+
Update recording configuration
|
|
527
|
+
"""
|
|
528
|
+
path = "/api/v1/recorder/update"
|
|
529
|
+
try:
|
|
530
|
+
response = self._request_manager.request(
|
|
531
|
+
"POST",
|
|
532
|
+
path,
|
|
533
|
+
headers=self._request_manager.json_headers(),
|
|
534
|
+
body=json.dumps(models.serialize_recorder_config(body)),
|
|
535
|
+
)
|
|
536
|
+
parsed = None
|
|
537
|
+
if response.status == 200:
|
|
538
|
+
parsed = models.parse_update_recording_response(json.loads(response.data))
|
|
539
|
+
|
|
540
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
541
|
+
is_unavailable = response.status == 503
|
|
542
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
543
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
544
|
+
|
|
545
|
+
return Response(
|
|
546
|
+
parsed,
|
|
547
|
+
response.status,
|
|
548
|
+
response
|
|
549
|
+
)
|
|
550
|
+
except urllib3.exceptions.MaxRetryError:
|
|
551
|
+
return Response(
|
|
552
|
+
models.ErrorResponse(
|
|
553
|
+
error=models.ErrorEnum.InternalServerError,
|
|
554
|
+
message="Connection Refused"
|
|
555
|
+
),
|
|
556
|
+
503,
|
|
557
|
+
None
|
|
558
|
+
)
|
|
559
|
+
def enable_recorder_bot(
|
|
560
|
+
self,
|
|
561
|
+
body: models.ToggleRecorderBotRequest,
|
|
562
|
+
) -> Response[
|
|
563
|
+
Union[
|
|
564
|
+
models.UpdateRecordingResponse,
|
|
565
|
+
models.ErrorResponse,
|
|
566
|
+
None
|
|
567
|
+
],
|
|
568
|
+
models.UpdateRecordingResponse
|
|
569
|
+
]:
|
|
570
|
+
"""
|
|
571
|
+
Enable or disable a secondary bot
|
|
572
|
+
"""
|
|
573
|
+
path = "/api/v1/recorder/set-bot-enabled"
|
|
574
|
+
try:
|
|
575
|
+
response = self._request_manager.request(
|
|
576
|
+
"POST",
|
|
577
|
+
path,
|
|
578
|
+
headers=self._request_manager.json_headers(),
|
|
579
|
+
body=json.dumps(models.serialize_toggle_recorder_bot_request(body)),
|
|
580
|
+
)
|
|
581
|
+
parsed = None
|
|
582
|
+
if response.status == 200:
|
|
583
|
+
parsed = models.parse_update_recording_response(json.loads(response.data))
|
|
584
|
+
|
|
585
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
586
|
+
is_unavailable = response.status == 503
|
|
587
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
588
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
589
|
+
|
|
590
|
+
return Response(
|
|
591
|
+
parsed,
|
|
592
|
+
response.status,
|
|
593
|
+
response
|
|
594
|
+
)
|
|
595
|
+
except urllib3.exceptions.MaxRetryError:
|
|
596
|
+
return Response(
|
|
597
|
+
models.ErrorResponse(
|
|
598
|
+
error=models.ErrorEnum.InternalServerError,
|
|
599
|
+
message="Connection Refused"
|
|
600
|
+
),
|
|
601
|
+
503,
|
|
602
|
+
None
|
|
603
|
+
)
|
|
604
|
+
def start_recording(
|
|
605
|
+
self,
|
|
606
|
+
body: models.StartRecordingRequest,
|
|
607
|
+
) -> Response[
|
|
608
|
+
Union[
|
|
609
|
+
models.StartRecordingResponse,
|
|
610
|
+
models.ErrorResponse,
|
|
611
|
+
None
|
|
612
|
+
],
|
|
613
|
+
models.StartRecordingResponse
|
|
614
|
+
]:
|
|
615
|
+
"""
|
|
616
|
+
Start recording movement and camera data
|
|
617
|
+
"""
|
|
618
|
+
path = "/api/v1/recorder/start"
|
|
619
|
+
try:
|
|
620
|
+
response = self._request_manager.request(
|
|
621
|
+
"POST",
|
|
622
|
+
path,
|
|
623
|
+
headers=self._request_manager.json_headers(),
|
|
624
|
+
body=json.dumps(models.serialize_start_recording_request(body)),
|
|
625
|
+
)
|
|
626
|
+
parsed = None
|
|
627
|
+
if response.status == 200:
|
|
628
|
+
parsed = models.parse_start_recording_response(json.loads(response.data))
|
|
629
|
+
|
|
630
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
631
|
+
is_unavailable = response.status == 503
|
|
632
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
633
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
634
|
+
|
|
635
|
+
return Response(
|
|
636
|
+
parsed,
|
|
637
|
+
response.status,
|
|
638
|
+
response
|
|
639
|
+
)
|
|
640
|
+
except urllib3.exceptions.MaxRetryError:
|
|
641
|
+
return Response(
|
|
642
|
+
models.ErrorResponse(
|
|
643
|
+
error=models.ErrorEnum.InternalServerError,
|
|
644
|
+
message="Connection Refused"
|
|
645
|
+
),
|
|
646
|
+
503,
|
|
647
|
+
None
|
|
648
|
+
)
|
|
649
|
+
def stop_recording(
|
|
650
|
+
self,
|
|
651
|
+
body: models.StopRecordingRequest,
|
|
652
|
+
) -> Response[
|
|
653
|
+
Union[
|
|
654
|
+
models.StopRecordingResponse,
|
|
655
|
+
models.ErrorResponse,
|
|
656
|
+
None
|
|
657
|
+
],
|
|
658
|
+
models.StopRecordingResponse
|
|
659
|
+
]:
|
|
660
|
+
"""
|
|
661
|
+
Stop recording movement and camera data
|
|
662
|
+
"""
|
|
663
|
+
path = "/api/v1/recorder/stop"
|
|
664
|
+
try:
|
|
665
|
+
response = self._request_manager.request(
|
|
666
|
+
"POST",
|
|
667
|
+
path,
|
|
668
|
+
headers=self._request_manager.json_headers(),
|
|
669
|
+
body=json.dumps(models.serialize_stop_recording_request(body)),
|
|
670
|
+
)
|
|
671
|
+
parsed = None
|
|
672
|
+
if response.status == 200:
|
|
673
|
+
parsed = models.parse_stop_recording_response(json.loads(response.data))
|
|
674
|
+
|
|
675
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
676
|
+
is_unavailable = response.status == 503
|
|
677
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
678
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
679
|
+
|
|
680
|
+
return Response(
|
|
681
|
+
parsed,
|
|
682
|
+
response.status,
|
|
683
|
+
response
|
|
684
|
+
)
|
|
685
|
+
except urllib3.exceptions.MaxRetryError:
|
|
686
|
+
return Response(
|
|
687
|
+
models.ErrorResponse(
|
|
688
|
+
error=models.ErrorEnum.InternalServerError,
|
|
689
|
+
message="Connection Refused"
|
|
690
|
+
),
|
|
691
|
+
503,
|
|
692
|
+
None
|
|
693
|
+
)
|
|
694
|
+
def save_recording(
|
|
695
|
+
self,
|
|
696
|
+
body: models.SaveRecordingRequest,
|
|
697
|
+
) -> Response[
|
|
698
|
+
Union[
|
|
699
|
+
models.SaveRecordingResponse,
|
|
700
|
+
models.ErrorResponse,
|
|
701
|
+
None
|
|
702
|
+
],
|
|
703
|
+
models.SaveRecordingResponse
|
|
704
|
+
]:
|
|
705
|
+
"""
|
|
706
|
+
Save recording to marvin app
|
|
707
|
+
"""
|
|
708
|
+
path = "/api/v1/recorder/save"
|
|
709
|
+
try:
|
|
710
|
+
response = self._request_manager.request(
|
|
711
|
+
"POST",
|
|
712
|
+
path,
|
|
713
|
+
headers=self._request_manager.json_headers(),
|
|
714
|
+
body=json.dumps(models.serialize_save_recording_request(body)),
|
|
715
|
+
)
|
|
716
|
+
parsed = None
|
|
717
|
+
if response.status == 200:
|
|
718
|
+
parsed = models.parse_save_recording_response(json.loads(response.data))
|
|
719
|
+
|
|
720
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
721
|
+
is_unavailable = response.status == 503
|
|
722
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
723
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
724
|
+
|
|
357
725
|
return Response(
|
|
358
726
|
parsed,
|
|
359
727
|
response.status,
|
|
@@ -373,29 +741,396 @@ class Default:
|
|
|
373
741
|
self._request_manager = request_manager
|
|
374
742
|
|
|
375
743
|
|
|
376
|
-
def get_sensors(
|
|
744
|
+
def get_sensors(
|
|
745
|
+
self,
|
|
746
|
+
) -> Response[
|
|
747
|
+
Union[
|
|
748
|
+
models.SensorsConfiguration,
|
|
749
|
+
models.ErrorResponse,
|
|
750
|
+
None
|
|
751
|
+
],
|
|
752
|
+
models.SensorsConfiguration
|
|
753
|
+
]:
|
|
754
|
+
"""
|
|
755
|
+
Get the current state of all sensors
|
|
756
|
+
"""
|
|
757
|
+
path = "/api/v1/equipment/custom/sensors"
|
|
758
|
+
try:
|
|
759
|
+
response = self._request_manager.request(
|
|
760
|
+
"GET",
|
|
761
|
+
path,
|
|
762
|
+
headers=self._request_manager.json_headers(),
|
|
763
|
+
)
|
|
764
|
+
parsed = None
|
|
765
|
+
if response.status == 200:
|
|
766
|
+
parsed = models.parse_sensors_configuration(json.loads(response.data))
|
|
767
|
+
|
|
768
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
769
|
+
is_unavailable = response.status == 503
|
|
770
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
771
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
772
|
+
|
|
773
|
+
return Response(
|
|
774
|
+
parsed,
|
|
775
|
+
response.status,
|
|
776
|
+
response
|
|
777
|
+
)
|
|
778
|
+
except urllib3.exceptions.MaxRetryError:
|
|
779
|
+
return Response(
|
|
780
|
+
models.ErrorResponse(
|
|
781
|
+
error=models.ErrorEnum.InternalServerError,
|
|
782
|
+
message="Connection Refused"
|
|
783
|
+
),
|
|
784
|
+
503,
|
|
785
|
+
None
|
|
786
|
+
)
|
|
787
|
+
class Space:
|
|
788
|
+
def __init__(self, request_manager: RequestManager):
|
|
789
|
+
self._request_manager = request_manager
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
def list_planes(
|
|
793
|
+
self,
|
|
794
|
+
limit: int,
|
|
795
|
+
offset: int,
|
|
796
|
+
) -> Response[
|
|
797
|
+
Union[
|
|
798
|
+
models.PlanesPaginatedResponse,
|
|
799
|
+
models.ErrorResponse,
|
|
800
|
+
None
|
|
801
|
+
],
|
|
802
|
+
models.PlanesPaginatedResponse
|
|
803
|
+
]:
|
|
804
|
+
"""
|
|
805
|
+
List Planes
|
|
806
|
+
"""
|
|
807
|
+
path = "/api/v1/space/planes"
|
|
808
|
+
try:
|
|
809
|
+
response = self._request_manager.request(
|
|
810
|
+
"GET",
|
|
811
|
+
path,
|
|
812
|
+
headers=self._request_manager.json_headers(),
|
|
813
|
+
fields={
|
|
814
|
+
"limit": models.serialize_i_64(limit),
|
|
815
|
+
"offset": models.serialize_i_64(offset),
|
|
816
|
+
}
|
|
817
|
+
)
|
|
818
|
+
parsed = None
|
|
819
|
+
if response.status == 200:
|
|
820
|
+
parsed = models.parse_planes_paginated_response(json.loads(response.data))
|
|
821
|
+
|
|
822
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
823
|
+
is_unavailable = response.status == 503
|
|
824
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
825
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
826
|
+
|
|
827
|
+
return Response(
|
|
828
|
+
parsed,
|
|
829
|
+
response.status,
|
|
830
|
+
response
|
|
831
|
+
)
|
|
832
|
+
except urllib3.exceptions.MaxRetryError:
|
|
833
|
+
return Response(
|
|
834
|
+
models.ErrorResponse(
|
|
835
|
+
error=models.ErrorEnum.InternalServerError,
|
|
836
|
+
message="Connection Refused"
|
|
837
|
+
),
|
|
838
|
+
503,
|
|
839
|
+
None
|
|
840
|
+
)
|
|
841
|
+
class Teleop:
|
|
842
|
+
def __init__(self, request_manager: RequestManager):
|
|
843
|
+
self._request_manager = request_manager
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
def get_state(
|
|
847
|
+
self,
|
|
848
|
+
) -> Response[
|
|
849
|
+
Union[
|
|
850
|
+
models.TeleopState,
|
|
851
|
+
models.ErrorResponse,
|
|
852
|
+
None
|
|
853
|
+
],
|
|
854
|
+
models.TeleopState
|
|
855
|
+
]:
|
|
856
|
+
"""
|
|
857
|
+
Get the state of the teleop
|
|
858
|
+
"""
|
|
859
|
+
path = "/api/v1/teleop/state"
|
|
860
|
+
try:
|
|
861
|
+
response = self._request_manager.request(
|
|
862
|
+
"GET",
|
|
863
|
+
path,
|
|
864
|
+
headers=self._request_manager.json_headers(),
|
|
865
|
+
)
|
|
866
|
+
parsed = None
|
|
867
|
+
if response.status == 200:
|
|
868
|
+
parsed = models.parse_teleop_state(json.loads(response.data))
|
|
869
|
+
|
|
870
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
871
|
+
is_unavailable = response.status == 503
|
|
872
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
873
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
874
|
+
|
|
875
|
+
return Response(
|
|
876
|
+
parsed,
|
|
877
|
+
response.status,
|
|
878
|
+
response
|
|
879
|
+
)
|
|
880
|
+
except urllib3.exceptions.MaxRetryError:
|
|
881
|
+
return Response(
|
|
882
|
+
models.ErrorResponse(
|
|
883
|
+
error=models.ErrorEnum.InternalServerError,
|
|
884
|
+
message="Connection Refused"
|
|
885
|
+
),
|
|
886
|
+
503,
|
|
887
|
+
None
|
|
888
|
+
)
|
|
889
|
+
def enable_bot(
|
|
890
|
+
self,
|
|
891
|
+
body: models.ToggleTeleopBotRequest,
|
|
892
|
+
) -> Response[
|
|
893
|
+
Union[
|
|
894
|
+
models.TeleopState,
|
|
895
|
+
models.ErrorResponse,
|
|
896
|
+
None
|
|
897
|
+
],
|
|
898
|
+
models.TeleopState
|
|
899
|
+
]:
|
|
900
|
+
"""
|
|
901
|
+
Enable or disable a secondary bot
|
|
902
|
+
"""
|
|
903
|
+
path = "/api/v1/teleop/set-bot-enabled"
|
|
904
|
+
try:
|
|
905
|
+
response = self._request_manager.request(
|
|
906
|
+
"POST",
|
|
907
|
+
path,
|
|
908
|
+
headers=self._request_manager.json_headers(),
|
|
909
|
+
body=json.dumps(models.serialize_toggle_teleop_bot_request(body)),
|
|
910
|
+
)
|
|
911
|
+
parsed = None
|
|
912
|
+
if response.status == 200:
|
|
913
|
+
parsed = models.parse_teleop_state(json.loads(response.data))
|
|
914
|
+
|
|
915
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
916
|
+
is_unavailable = response.status == 503
|
|
917
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
918
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
919
|
+
|
|
920
|
+
return Response(
|
|
921
|
+
parsed,
|
|
922
|
+
response.status,
|
|
923
|
+
response
|
|
924
|
+
)
|
|
925
|
+
except urllib3.exceptions.MaxRetryError:
|
|
926
|
+
return Response(
|
|
927
|
+
models.ErrorResponse(
|
|
928
|
+
error=models.ErrorEnum.InternalServerError,
|
|
929
|
+
message="Connection Refused"
|
|
930
|
+
),
|
|
931
|
+
503,
|
|
932
|
+
None
|
|
933
|
+
)
|
|
934
|
+
def set_teleop_config(
|
|
935
|
+
self,
|
|
936
|
+
body: models.TeleopConfig,
|
|
937
|
+
) -> Response[
|
|
938
|
+
Union[
|
|
939
|
+
models.TeleopState,
|
|
940
|
+
models.ErrorResponse,
|
|
941
|
+
None
|
|
942
|
+
],
|
|
943
|
+
models.TeleopState
|
|
944
|
+
]:
|
|
945
|
+
"""
|
|
946
|
+
Set teleop config parameters
|
|
947
|
+
"""
|
|
948
|
+
path = "/api/v1/teleop/set-config"
|
|
949
|
+
try:
|
|
950
|
+
response = self._request_manager.request(
|
|
951
|
+
"POST",
|
|
952
|
+
path,
|
|
953
|
+
headers=self._request_manager.json_headers(),
|
|
954
|
+
body=json.dumps(models.serialize_teleop_config(body)),
|
|
955
|
+
)
|
|
956
|
+
parsed = None
|
|
957
|
+
if response.status == 200:
|
|
958
|
+
parsed = models.parse_teleop_state(json.loads(response.data))
|
|
959
|
+
|
|
960
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
961
|
+
is_unavailable = response.status == 503
|
|
962
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
963
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
964
|
+
|
|
965
|
+
return Response(
|
|
966
|
+
parsed,
|
|
967
|
+
response.status,
|
|
968
|
+
response
|
|
969
|
+
)
|
|
970
|
+
except urllib3.exceptions.MaxRetryError:
|
|
971
|
+
return Response(
|
|
972
|
+
models.ErrorResponse(
|
|
973
|
+
error=models.ErrorEnum.InternalServerError,
|
|
974
|
+
message="Connection Refused"
|
|
975
|
+
),
|
|
976
|
+
503,
|
|
977
|
+
None
|
|
978
|
+
)
|
|
979
|
+
def start_teleop(
|
|
980
|
+
self,
|
|
981
|
+
) -> Response[
|
|
982
|
+
Union[
|
|
983
|
+
models.StartTeleopResponse,
|
|
984
|
+
models.ErrorResponse,
|
|
985
|
+
None
|
|
986
|
+
],
|
|
987
|
+
models.StartTeleopResponse
|
|
988
|
+
]:
|
|
989
|
+
"""
|
|
990
|
+
Start teleoperation
|
|
991
|
+
"""
|
|
992
|
+
path = "/api/v1/teleop/start"
|
|
993
|
+
try:
|
|
994
|
+
response = self._request_manager.request(
|
|
995
|
+
"POST",
|
|
996
|
+
path,
|
|
997
|
+
headers=self._request_manager.json_headers(),
|
|
998
|
+
)
|
|
999
|
+
parsed = None
|
|
1000
|
+
if response.status == 200:
|
|
1001
|
+
parsed = models.parse_start_teleop_response(json.loads(response.data))
|
|
1002
|
+
|
|
1003
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
1004
|
+
is_unavailable = response.status == 503
|
|
1005
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
1006
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
1007
|
+
|
|
1008
|
+
return Response(
|
|
1009
|
+
parsed,
|
|
1010
|
+
response.status,
|
|
1011
|
+
response
|
|
1012
|
+
)
|
|
1013
|
+
except urllib3.exceptions.MaxRetryError:
|
|
1014
|
+
return Response(
|
|
1015
|
+
models.ErrorResponse(
|
|
1016
|
+
error=models.ErrorEnum.InternalServerError,
|
|
1017
|
+
message="Connection Refused"
|
|
1018
|
+
),
|
|
1019
|
+
503,
|
|
1020
|
+
None
|
|
1021
|
+
)
|
|
1022
|
+
def stop_teleop(
|
|
1023
|
+
self,
|
|
1024
|
+
) -> Response[
|
|
1025
|
+
Union[
|
|
1026
|
+
models.StopTeleopResponse,
|
|
1027
|
+
models.ErrorResponse,
|
|
1028
|
+
None
|
|
1029
|
+
],
|
|
1030
|
+
models.StopTeleopResponse
|
|
1031
|
+
]:
|
|
1032
|
+
"""
|
|
1033
|
+
Stop recording movement and camera data
|
|
1034
|
+
"""
|
|
1035
|
+
path = "/api/v1/teleop/stop"
|
|
1036
|
+
try:
|
|
1037
|
+
response = self._request_manager.request(
|
|
1038
|
+
"POST",
|
|
1039
|
+
path,
|
|
1040
|
+
headers=self._request_manager.json_headers(),
|
|
1041
|
+
)
|
|
1042
|
+
parsed = None
|
|
1043
|
+
if response.status == 200:
|
|
1044
|
+
parsed = models.parse_stop_teleop_response(json.loads(response.data))
|
|
1045
|
+
|
|
1046
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
1047
|
+
is_unavailable = response.status == 503
|
|
1048
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
1049
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
1050
|
+
|
|
1051
|
+
return Response(
|
|
1052
|
+
parsed,
|
|
1053
|
+
response.status,
|
|
1054
|
+
response
|
|
1055
|
+
)
|
|
1056
|
+
except urllib3.exceptions.MaxRetryError:
|
|
1057
|
+
return Response(
|
|
1058
|
+
models.ErrorResponse(
|
|
1059
|
+
error=models.ErrorEnum.InternalServerError,
|
|
1060
|
+
message="Connection Refused"
|
|
1061
|
+
),
|
|
1062
|
+
503,
|
|
1063
|
+
None
|
|
1064
|
+
)
|
|
1065
|
+
def set_ratio_control(
|
|
1066
|
+
self,
|
|
1067
|
+
body: models.SetRatioControlRequest,
|
|
1068
|
+
) -> Response[
|
|
1069
|
+
Union[
|
|
1070
|
+
models.TeleopState,
|
|
1071
|
+
models.ErrorResponse,
|
|
1072
|
+
None
|
|
1073
|
+
],
|
|
1074
|
+
models.TeleopState
|
|
1075
|
+
]:
|
|
1076
|
+
"""
|
|
1077
|
+
Set ratio control parameters
|
|
1078
|
+
"""
|
|
1079
|
+
path = "/api/v1/teleop/set-ratio-control"
|
|
1080
|
+
try:
|
|
1081
|
+
response = self._request_manager.request(
|
|
1082
|
+
"POST",
|
|
1083
|
+
path,
|
|
1084
|
+
headers=self._request_manager.json_headers(),
|
|
1085
|
+
body=json.dumps(models.serialize_set_ratio_control_request(body)),
|
|
1086
|
+
)
|
|
1087
|
+
parsed = None
|
|
1088
|
+
if response.status == 200:
|
|
1089
|
+
parsed = models.parse_teleop_state(json.loads(response.data))
|
|
1090
|
+
|
|
1091
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
1092
|
+
is_unavailable = response.status == 503
|
|
1093
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
1094
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
1095
|
+
|
|
1096
|
+
return Response(
|
|
1097
|
+
parsed,
|
|
1098
|
+
response.status,
|
|
1099
|
+
response
|
|
1100
|
+
)
|
|
1101
|
+
except urllib3.exceptions.MaxRetryError:
|
|
1102
|
+
return Response(
|
|
1103
|
+
models.ErrorResponse(
|
|
1104
|
+
error=models.ErrorEnum.InternalServerError,
|
|
1105
|
+
message="Connection Refused"
|
|
1106
|
+
),
|
|
1107
|
+
503,
|
|
1108
|
+
None
|
|
1109
|
+
)
|
|
1110
|
+
class Webrtc:
|
|
1111
|
+
def __init__(self, request_manager: RequestManager):
|
|
1112
|
+
self._request_manager = request_manager
|
|
1113
|
+
|
|
1114
|
+
|
|
1115
|
+
def send_message(
|
|
377
1116
|
self,
|
|
1117
|
+
body: models.SendMessageRequest,
|
|
378
1118
|
) -> Response[
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
models.ErrorResponse,
|
|
382
|
-
None
|
|
383
|
-
],
|
|
384
|
-
models.SensorsConfiguration
|
|
1119
|
+
None,
|
|
1120
|
+
None
|
|
385
1121
|
]:
|
|
386
1122
|
"""
|
|
387
|
-
|
|
1123
|
+
Send a WebRTC signaling message
|
|
388
1124
|
"""
|
|
389
|
-
path = "/api/v1/
|
|
1125
|
+
path = "/api/v1/webrtc/message"
|
|
390
1126
|
try:
|
|
391
1127
|
response = self._request_manager.request(
|
|
392
|
-
"
|
|
1128
|
+
"POST",
|
|
393
1129
|
path,
|
|
394
1130
|
headers=self._request_manager.json_headers(),
|
|
1131
|
+
body=json.dumps(models.serialize_send_message_request(body)),
|
|
395
1132
|
)
|
|
396
1133
|
parsed = None
|
|
397
|
-
if response.status == 200:
|
|
398
|
-
parsed = models.parse_sensors_configuration(json.loads(response.data))
|
|
399
1134
|
|
|
400
1135
|
is_user_error = response.status >= 400 and response.status <= 500
|
|
401
1136
|
is_unavailable = response.status == 503
|
|
@@ -416,40 +1151,35 @@ class Default:
|
|
|
416
1151
|
503,
|
|
417
1152
|
None
|
|
418
1153
|
)
|
|
419
|
-
|
|
420
|
-
def __init__(self, request_manager: RequestManager):
|
|
421
|
-
self._request_manager = request_manager
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
def list_planes(
|
|
1154
|
+
def get_messages(
|
|
425
1155
|
self,
|
|
426
|
-
|
|
427
|
-
|
|
1156
|
+
base_url: str,
|
|
1157
|
+
client_id: str,
|
|
428
1158
|
) -> Response[
|
|
429
1159
|
Union[
|
|
430
|
-
models.
|
|
1160
|
+
models.GetMessagesResponse,
|
|
431
1161
|
models.ErrorResponse,
|
|
432
1162
|
None
|
|
433
1163
|
],
|
|
434
|
-
models.
|
|
1164
|
+
models.GetMessagesResponse
|
|
435
1165
|
]:
|
|
436
1166
|
"""
|
|
437
|
-
|
|
1167
|
+
Get pending WebRTC signaling messages
|
|
438
1168
|
"""
|
|
439
|
-
path = "/api/v1/
|
|
1169
|
+
path = "/api/v1/webrtc/messages"
|
|
440
1170
|
try:
|
|
441
1171
|
response = self._request_manager.request(
|
|
442
1172
|
"GET",
|
|
443
1173
|
path,
|
|
444
1174
|
headers=self._request_manager.json_headers(),
|
|
445
1175
|
fields={
|
|
446
|
-
"
|
|
447
|
-
"
|
|
1176
|
+
"baseUrl": models.serialize_str(base_url),
|
|
1177
|
+
"clientId": models.serialize_str(client_id),
|
|
448
1178
|
}
|
|
449
1179
|
)
|
|
450
1180
|
parsed = None
|
|
451
1181
|
if response.status == 200:
|
|
452
|
-
parsed = models.
|
|
1182
|
+
parsed = models.parse_get_messages_response(json.loads(response.data))
|
|
453
1183
|
|
|
454
1184
|
is_user_error = response.status >= 400 and response.status <= 500
|
|
455
1185
|
is_unavailable = response.status == 503
|
|
@@ -473,15 +1203,23 @@ class Default:
|
|
|
473
1203
|
|
|
474
1204
|
calibration: Calibration
|
|
475
1205
|
equipment: Equipment
|
|
1206
|
+
payload: Payload
|
|
1207
|
+
recorder: Recorder
|
|
476
1208
|
sensors: Sensors
|
|
477
1209
|
space: Space
|
|
1210
|
+
teleop: Teleop
|
|
1211
|
+
webrtc: Webrtc
|
|
478
1212
|
|
|
479
1213
|
def __init__(self, request_manager: RequestManager):
|
|
480
1214
|
self._request_manager = request_manager
|
|
481
1215
|
self.calibration = Default.Calibration(request_manager)
|
|
482
1216
|
self.equipment = Default.Equipment(request_manager)
|
|
1217
|
+
self.payload = Default.Payload(request_manager)
|
|
1218
|
+
self.recorder = Default.Recorder(request_manager)
|
|
483
1219
|
self.sensors = Default.Sensors(request_manager)
|
|
484
1220
|
self.space = Default.Space(request_manager)
|
|
1221
|
+
self.teleop = Default.Teleop(request_manager)
|
|
1222
|
+
self.webrtc = Default.Webrtc(request_manager)
|
|
485
1223
|
|
|
486
1224
|
class Movement:
|
|
487
1225
|
_request_manager: RequestManager
|
|
@@ -783,14 +1521,113 @@ class Movement:
|
|
|
783
1521
|
503,
|
|
784
1522
|
None
|
|
785
1523
|
)
|
|
1524
|
+
class PositionControlled:
|
|
1525
|
+
def __init__(self, request_manager: RequestManager):
|
|
1526
|
+
self._request_manager = request_manager
|
|
1527
|
+
|
|
1528
|
+
|
|
1529
|
+
def set_arm_position_controlled(
|
|
1530
|
+
self,
|
|
1531
|
+
body: models.ArmPositionUpdateControlledRequest,
|
|
1532
|
+
) -> Response[
|
|
1533
|
+
Union[
|
|
1534
|
+
models.SetArmPositionControlledResponse,
|
|
1535
|
+
models.ErrorResponse,
|
|
1536
|
+
None
|
|
1537
|
+
],
|
|
1538
|
+
models.SetArmPositionControlledResponse
|
|
1539
|
+
]:
|
|
1540
|
+
"""
|
|
1541
|
+
Control the position of the RO1 Robot arm in a controlled manner. This endpoint will return once the movement is initiated. The client should then call the heartbeat endpoint every 300ms to continue the movement and get its status. The robot should be idle before calling this endpoint.
|
|
1542
|
+
|
|
1543
|
+
"""
|
|
1544
|
+
path = "/api/v1/movement/position/arm/controlled"
|
|
1545
|
+
try:
|
|
1546
|
+
response = self._request_manager.request(
|
|
1547
|
+
"POST",
|
|
1548
|
+
path,
|
|
1549
|
+
headers=self._request_manager.json_headers(),
|
|
1550
|
+
body=json.dumps(models.serialize_arm_position_update_controlled_request(body)),
|
|
1551
|
+
)
|
|
1552
|
+
parsed = None
|
|
1553
|
+
if response.status == 200:
|
|
1554
|
+
parsed = models.parse_set_arm_position_controlled_response(json.loads(response.data))
|
|
1555
|
+
|
|
1556
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
1557
|
+
is_unavailable = response.status == 503
|
|
1558
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
1559
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
1560
|
+
|
|
1561
|
+
return Response(
|
|
1562
|
+
parsed,
|
|
1563
|
+
response.status,
|
|
1564
|
+
response
|
|
1565
|
+
)
|
|
1566
|
+
except urllib3.exceptions.MaxRetryError:
|
|
1567
|
+
return Response(
|
|
1568
|
+
models.ErrorResponse(
|
|
1569
|
+
error=models.ErrorEnum.InternalServerError,
|
|
1570
|
+
message="Connection Refused"
|
|
1571
|
+
),
|
|
1572
|
+
503,
|
|
1573
|
+
None
|
|
1574
|
+
)
|
|
1575
|
+
def send_heartbeat(
|
|
1576
|
+
self,
|
|
1577
|
+
command_id: str,
|
|
1578
|
+
) -> Response[
|
|
1579
|
+
Union[
|
|
1580
|
+
models.SetArmPositionControlledResponse,
|
|
1581
|
+
models.ErrorResponse,
|
|
1582
|
+
None
|
|
1583
|
+
],
|
|
1584
|
+
models.SetArmPositionControlledResponse
|
|
1585
|
+
]:
|
|
1586
|
+
"""
|
|
1587
|
+
Use this endpoint to send a heartbeat for the current movement. This assumes that the client has already called the "Set Arm Position With Heartbeat" endpoint and that the movement is in progress. This heartbeat should be sent every 300ms. The robot should be executing a movement when calling this endpoint.
|
|
1588
|
+
|
|
1589
|
+
"""
|
|
1590
|
+
path = "/api/v1/movement/position/arm/controlled/{command_id}/heartbeat"
|
|
1591
|
+
path = path.replace("{command_id}", str(command_id))
|
|
1592
|
+
try:
|
|
1593
|
+
response = self._request_manager.request(
|
|
1594
|
+
"POST",
|
|
1595
|
+
path,
|
|
1596
|
+
headers=self._request_manager.json_headers(),
|
|
1597
|
+
)
|
|
1598
|
+
parsed = None
|
|
1599
|
+
if response.status == 200:
|
|
1600
|
+
parsed = models.parse_set_arm_position_controlled_response(json.loads(response.data))
|
|
1601
|
+
|
|
1602
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
1603
|
+
is_unavailable = response.status == 503
|
|
1604
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
1605
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
1606
|
+
|
|
1607
|
+
return Response(
|
|
1608
|
+
parsed,
|
|
1609
|
+
response.status,
|
|
1610
|
+
response
|
|
1611
|
+
)
|
|
1612
|
+
except urllib3.exceptions.MaxRetryError:
|
|
1613
|
+
return Response(
|
|
1614
|
+
models.ErrorResponse(
|
|
1615
|
+
error=models.ErrorEnum.InternalServerError,
|
|
1616
|
+
message="Connection Refused"
|
|
1617
|
+
),
|
|
1618
|
+
503,
|
|
1619
|
+
None
|
|
1620
|
+
)
|
|
786
1621
|
|
|
787
1622
|
brakes: Brakes
|
|
788
1623
|
position: Position
|
|
1624
|
+
position_controlled: PositionControlled
|
|
789
1625
|
|
|
790
1626
|
def __init__(self, request_manager: RequestManager):
|
|
791
1627
|
self._request_manager = request_manager
|
|
792
1628
|
self.brakes = Movement.Brakes(request_manager)
|
|
793
1629
|
self.position = Movement.Position(request_manager)
|
|
1630
|
+
self.position_controlled = Movement.PositionControlled(request_manager)
|
|
794
1631
|
|
|
795
1632
|
class Camera:
|
|
796
1633
|
_request_manager: RequestManager
|
|
@@ -1011,16 +1848,66 @@ class Camera:
|
|
|
1011
1848
|
503,
|
|
1012
1849
|
None
|
|
1013
1850
|
)
|
|
1851
|
+
class Bot:
|
|
1852
|
+
def __init__(self, request_manager: RequestManager):
|
|
1853
|
+
self._request_manager = request_manager
|
|
1854
|
+
|
|
1855
|
+
|
|
1856
|
+
def get_connected_cameras(
|
|
1857
|
+
self,
|
|
1858
|
+
) -> Response[
|
|
1859
|
+
Union[
|
|
1860
|
+
models.CameraDeviceList,
|
|
1861
|
+
models.ErrorResponse,
|
|
1862
|
+
None
|
|
1863
|
+
],
|
|
1864
|
+
models.CameraDeviceList
|
|
1865
|
+
]:
|
|
1866
|
+
"""
|
|
1867
|
+
Retrieve the list of connected camera devices from camera bot.
|
|
1868
|
+
"""
|
|
1869
|
+
path = "/api/v1/cameras/connected"
|
|
1870
|
+
try:
|
|
1871
|
+
response = self._request_manager.request(
|
|
1872
|
+
"GET",
|
|
1873
|
+
path,
|
|
1874
|
+
headers=self._request_manager.json_headers(),
|
|
1875
|
+
)
|
|
1876
|
+
parsed = None
|
|
1877
|
+
if response.status == 200:
|
|
1878
|
+
parsed = models.parse_camera_device_list(json.loads(response.data))
|
|
1879
|
+
|
|
1880
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
1881
|
+
is_unavailable = response.status == 503
|
|
1882
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
1883
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
1884
|
+
|
|
1885
|
+
return Response(
|
|
1886
|
+
parsed,
|
|
1887
|
+
response.status,
|
|
1888
|
+
response
|
|
1889
|
+
)
|
|
1890
|
+
except urllib3.exceptions.MaxRetryError:
|
|
1891
|
+
return Response(
|
|
1892
|
+
models.ErrorResponse(
|
|
1893
|
+
error=models.ErrorEnum.InternalServerError,
|
|
1894
|
+
message="Connection Refused"
|
|
1895
|
+
),
|
|
1896
|
+
503,
|
|
1897
|
+
None
|
|
1898
|
+
)
|
|
1014
1899
|
|
|
1015
1900
|
data: Data
|
|
1016
1901
|
settings: Settings
|
|
1017
1902
|
status: Status
|
|
1903
|
+
bot: Bot
|
|
1018
1904
|
|
|
1019
1905
|
def __init__(self, request_manager: RequestManager):
|
|
1020
1906
|
self._request_manager = request_manager
|
|
1021
1907
|
self.data = Camera.Data(request_manager)
|
|
1022
1908
|
self.settings = Camera.Settings(request_manager)
|
|
1023
1909
|
self.status = Camera.Status(request_manager)
|
|
1910
|
+
self.bot = Camera.Bot(request_manager)
|
|
1024
1911
|
|
|
1025
1912
|
class Faults:
|
|
1026
1913
|
_request_manager: RequestManager
|
|
@@ -1393,6 +2280,112 @@ class IO:
|
|
|
1393
2280
|
self.control = IO.Control(request_manager)
|
|
1394
2281
|
self.status = IO.Status(request_manager)
|
|
1395
2282
|
|
|
2283
|
+
class Messenger:
|
|
2284
|
+
_request_manager: RequestManager
|
|
2285
|
+
class Peers:
|
|
2286
|
+
def __init__(self, request_manager: RequestManager):
|
|
2287
|
+
self._request_manager = request_manager
|
|
2288
|
+
|
|
2289
|
+
|
|
2290
|
+
def register_peer(
|
|
2291
|
+
self,
|
|
2292
|
+
body: models.RegisterPeerRequest,
|
|
2293
|
+
) -> Response[
|
|
2294
|
+
Union[
|
|
2295
|
+
models.RegisterPeerResponse,
|
|
2296
|
+
models.ErrorResponse,
|
|
2297
|
+
None
|
|
2298
|
+
],
|
|
2299
|
+
models.RegisterPeerResponse
|
|
2300
|
+
]:
|
|
2301
|
+
"""
|
|
2302
|
+
Register a new peer with the messenger system.
|
|
2303
|
+
|
|
2304
|
+
"""
|
|
2305
|
+
path = "/api/v1/messenger/peers"
|
|
2306
|
+
try:
|
|
2307
|
+
response = self._request_manager.request(
|
|
2308
|
+
"POST",
|
|
2309
|
+
path,
|
|
2310
|
+
headers=self._request_manager.json_headers(),
|
|
2311
|
+
body=json.dumps(models.serialize_register_peer_request(body)),
|
|
2312
|
+
)
|
|
2313
|
+
parsed = None
|
|
2314
|
+
if response.status == 200:
|
|
2315
|
+
parsed = models.parse_register_peer_response(json.loads(response.data))
|
|
2316
|
+
|
|
2317
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
2318
|
+
is_unavailable = response.status == 503
|
|
2319
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
2320
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
2321
|
+
|
|
2322
|
+
return Response(
|
|
2323
|
+
parsed,
|
|
2324
|
+
response.status,
|
|
2325
|
+
response
|
|
2326
|
+
)
|
|
2327
|
+
except urllib3.exceptions.MaxRetryError:
|
|
2328
|
+
return Response(
|
|
2329
|
+
models.ErrorResponse(
|
|
2330
|
+
error=models.ErrorEnum.InternalServerError,
|
|
2331
|
+
message="Connection Refused"
|
|
2332
|
+
),
|
|
2333
|
+
503,
|
|
2334
|
+
None
|
|
2335
|
+
)
|
|
2336
|
+
def unregister_peer(
|
|
2337
|
+
self,
|
|
2338
|
+
body: models.UnregisterPeerRequest,
|
|
2339
|
+
) -> Response[
|
|
2340
|
+
Union[
|
|
2341
|
+
models.UnregisterPeerResponse,
|
|
2342
|
+
models.ErrorResponse,
|
|
2343
|
+
None
|
|
2344
|
+
],
|
|
2345
|
+
models.UnregisterPeerResponse
|
|
2346
|
+
]:
|
|
2347
|
+
"""
|
|
2348
|
+
Unregister an existing peer from the messenger system.
|
|
2349
|
+
|
|
2350
|
+
"""
|
|
2351
|
+
path = "/api/v1/messenger/peers"
|
|
2352
|
+
try:
|
|
2353
|
+
response = self._request_manager.request(
|
|
2354
|
+
"DELETE",
|
|
2355
|
+
path,
|
|
2356
|
+
headers=self._request_manager.json_headers(),
|
|
2357
|
+
body=json.dumps(models.serialize_unregister_peer_request(body)),
|
|
2358
|
+
)
|
|
2359
|
+
parsed = None
|
|
2360
|
+
if response.status == 200:
|
|
2361
|
+
parsed = models.parse_unregister_peer_response(json.loads(response.data))
|
|
2362
|
+
|
|
2363
|
+
is_user_error = response.status >= 400 and response.status <= 500
|
|
2364
|
+
is_unavailable = response.status == 503
|
|
2365
|
+
if parsed is None and (is_user_error or is_unavailable):
|
|
2366
|
+
parsed = models.parse_error_response(json.loads(response.data))
|
|
2367
|
+
|
|
2368
|
+
return Response(
|
|
2369
|
+
parsed,
|
|
2370
|
+
response.status,
|
|
2371
|
+
response
|
|
2372
|
+
)
|
|
2373
|
+
except urllib3.exceptions.MaxRetryError:
|
|
2374
|
+
return Response(
|
|
2375
|
+
models.ErrorResponse(
|
|
2376
|
+
error=models.ErrorEnum.InternalServerError,
|
|
2377
|
+
message="Connection Refused"
|
|
2378
|
+
),
|
|
2379
|
+
503,
|
|
2380
|
+
None
|
|
2381
|
+
)
|
|
2382
|
+
|
|
2383
|
+
peers: Peers
|
|
2384
|
+
|
|
2385
|
+
def __init__(self, request_manager: RequestManager):
|
|
2386
|
+
self._request_manager = request_manager
|
|
2387
|
+
self.peers = Messenger.Peers(request_manager)
|
|
2388
|
+
|
|
1396
2389
|
class Poses:
|
|
1397
2390
|
_request_manager: RequestManager
|
|
1398
2391
|
class ConstructPose:
|
|
@@ -2717,6 +3710,7 @@ class StandardBotsRobot(Default):
|
|
|
2717
3710
|
general: General
|
|
2718
3711
|
chat_gpt: ChatGPT
|
|
2719
3712
|
io: IO
|
|
3713
|
+
messenger: Messenger
|
|
2720
3714
|
poses: Poses
|
|
2721
3715
|
recovery: Recovery
|
|
2722
3716
|
ros: ROS
|
|
@@ -2741,6 +3735,7 @@ class StandardBotsRobot(Default):
|
|
|
2741
3735
|
self.general = General(self._request_manager)
|
|
2742
3736
|
self.chat_gpt = ChatGPT(self._request_manager)
|
|
2743
3737
|
self.io = IO(self._request_manager)
|
|
3738
|
+
self.messenger = Messenger(self._request_manager)
|
|
2744
3739
|
self.poses = Poses(self._request_manager)
|
|
2745
3740
|
self.recovery = Recovery(self._request_manager)
|
|
2746
3741
|
self.ros = ROS(self._request_manager)
|