standardbots 2.20240401.10__py3-none-any.whl → 2.20240614.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.

@@ -138,6 +138,48 @@ class Default:
138
138
  ),
139
139
  ),
140
140
  )
141
+ def dh_pgc_grip(
142
+ self,
143
+ target_diameter: float,
144
+ target_force: float | None,
145
+ target_speed: float | None,
146
+ ):
147
+ """
148
+ Control the DH PGC gripper.
149
+ Args:
150
+ - target_diameter: 0.0 - 1.0
151
+ - target_force: 0.2 - 1.0
152
+ - target_speed: 0.01 - 1.0
153
+ """
154
+ return self.control_gripper(
155
+ body=models.GripperCommandRequest(
156
+ kind=models.GripperKindEnum.DhPgc,
157
+ dh_pgc=models.DHPGCGripperCommandRequest(
158
+ target_diameter, target_force, target_speed
159
+ ),
160
+ ),
161
+ )
162
+ def dh_cgi_grip(
163
+ self,
164
+ target_diameter: float,
165
+ target_force: float | None,
166
+ target_speed: float | None,
167
+ ):
168
+ """
169
+ Control the DH CGI gripper.
170
+ Args:
171
+ - target_diameter: 0.0 - 1.0
172
+ - target_force: 0.2 - 1.0
173
+ - target_speed: 0.01 - 1.0
174
+ """
175
+ return self.control_gripper(
176
+ body=models.GripperCommandRequest(
177
+ kind=models.GripperKindEnum.DhCgi,
178
+ dh_pgc=models.DHCGIGripperCommandRequest(
179
+ target_diameter, target_force, target_speed
180
+ ),
181
+ ),
182
+ )
141
183
 
142
184
 
143
185
  def control_gripper(
@@ -683,7 +725,7 @@ class Camera:
683
725
  self.data = Camera.Data(request_manager)
684
726
  self.settings = Camera.Settings(request_manager)
685
727
 
686
- class ChatGpt:
728
+ class ChatGPT:
687
729
  _request_manager: RequestManager
688
730
  class Data:
689
731
  def __init__(self, request_manager: RequestManager):
@@ -754,7 +796,285 @@ class ChatGpt:
754
796
 
755
797
  def __init__(self, request_manager: RequestManager):
756
798
  self._request_manager = request_manager
757
- self.data = ChatGpt.Data(request_manager)
799
+ self.data = ChatGPT.Data(request_manager)
800
+
801
+ class IO:
802
+ _request_manager: RequestManager
803
+ class Control:
804
+ def __init__(self, request_manager: RequestManager):
805
+ self._request_manager = request_manager
806
+
807
+
808
+ def update_io_state(
809
+ self,
810
+ body: models.IOStateUpdateRequest,
811
+ ) -> Response[
812
+ Union[
813
+ models.IOStateResponse,
814
+ models.ErrorResponse,
815
+ models.ErrorResponse,
816
+ None
817
+ ],
818
+ models.IOStateResponse
819
+ ]:
820
+ """
821
+ Updates the state of I/O based on the provided action ('high' or 'low').
822
+ """
823
+ path = "/api/v1/io"
824
+ response = self._request_manager.request(
825
+ "POST",
826
+ path,
827
+ headers=self._request_manager.json_headers(),
828
+ body=json.dumps(models.serialize_io_state_update_request(body)),
829
+ )
830
+ parsed = None
831
+ if response.status == 200:
832
+ parsed = models.parse_io_state_response(json.loads(response.data))
833
+ if response.status == 400:
834
+ parsed = models.parse_error_response(json.loads(response.data))
835
+
836
+ is_user_error = response.status >= 400 and response.status < 500
837
+ is_unavailable = response.status == 503
838
+ if parsed is None and (is_user_error or is_unavailable):
839
+ parsed = models.parse_error_response(json.loads(response.data))
840
+
841
+ return Response(
842
+ parsed,
843
+ response.status,
844
+ response
845
+ )
846
+
847
+ class Status:
848
+ def __init__(self, request_manager: RequestManager):
849
+ self._request_manager = request_manager
850
+
851
+
852
+ def get_io_state(
853
+ self,
854
+ ) -> Response[
855
+ Union[
856
+ models.IOStateResponse,
857
+ models.ErrorResponse,
858
+ None
859
+ ],
860
+ models.IOStateResponse
861
+ ]:
862
+ """
863
+ Retrieves the current state of I/O.
864
+ """
865
+ path = "/api/v1/io"
866
+ response = self._request_manager.request(
867
+ "GET",
868
+ path,
869
+ headers=self._request_manager.json_headers(),
870
+ )
871
+ parsed = None
872
+ if response.status == 200:
873
+ parsed = models.parse_io_state_response(json.loads(response.data))
874
+
875
+ is_user_error = response.status >= 400 and response.status < 500
876
+ is_unavailable = response.status == 503
877
+ if parsed is None and (is_user_error or is_unavailable):
878
+ parsed = models.parse_error_response(json.loads(response.data))
879
+
880
+ return Response(
881
+ parsed,
882
+ response.status,
883
+ response
884
+ )
885
+
886
+ control: Control
887
+ status: Status
888
+
889
+ def __init__(self, request_manager: RequestManager):
890
+ self._request_manager = request_manager
891
+ self.control = IO.Control(request_manager)
892
+ self.status = IO.Status(request_manager)
893
+
894
+ class General:
895
+ _request_manager: RequestManager
896
+ class Joints:
897
+ def __init__(self, request_manager: RequestManager):
898
+ self._request_manager = request_manager
899
+
900
+
901
+ def get_joints_state(
902
+ self,
903
+ ) -> Response[
904
+ Union[
905
+ models.JointsStateResponse,
906
+ models.ErrorResponse,
907
+ None
908
+ ],
909
+ models.JointsStateResponse
910
+ ]:
911
+ """
912
+ Retrieves information about the state of each joint
913
+ """
914
+ path = "/api/v1/joints"
915
+ response = self._request_manager.request(
916
+ "GET",
917
+ path,
918
+ headers=self._request_manager.json_headers(),
919
+ )
920
+ parsed = None
921
+ if response.status == 200:
922
+ parsed = models.parse_joints_state_response(json.loads(response.data))
923
+
924
+ is_user_error = response.status >= 400 and response.status < 500
925
+ is_unavailable = response.status == 503
926
+ if parsed is None and (is_user_error or is_unavailable):
927
+ parsed = models.parse_error_response(json.loads(response.data))
928
+
929
+ return Response(
930
+ parsed,
931
+ response.status,
932
+ response
933
+ )
934
+
935
+ joints: Joints
936
+
937
+ def __init__(self, request_manager: RequestManager):
938
+ self._request_manager = request_manager
939
+ self.joints = General.Joints(request_manager)
940
+
941
+ class Recovery:
942
+ _request_manager: RequestManager
943
+ class Recover:
944
+ def __init__(self, request_manager: RequestManager):
945
+ self._request_manager = request_manager
946
+
947
+
948
+ def recover(
949
+ self,
950
+ ) -> Response[
951
+ Union[
952
+ models.ErrorResponse,
953
+ models.ErrorResponse,
954
+ None
955
+ ],
956
+ None
957
+ ]:
958
+ """
959
+ Recovers the robot from a fault state.
960
+
961
+ """
962
+ path = "/api/v1/recovery/recover"
963
+ response = self._request_manager.request(
964
+ "POST",
965
+ path,
966
+ headers=self._request_manager.json_headers(),
967
+ )
968
+ parsed = None
969
+ if response.status == 400:
970
+ parsed = models.parse_error_response(json.loads(response.data))
971
+
972
+ is_user_error = response.status >= 400 and response.status < 500
973
+ is_unavailable = response.status == 503
974
+ if parsed is None and (is_user_error or is_unavailable):
975
+ parsed = models.parse_error_response(json.loads(response.data))
976
+
977
+ return Response(
978
+ parsed,
979
+ response.status,
980
+ response
981
+ )
982
+
983
+ recover: Recover
984
+
985
+ def __init__(self, request_manager: RequestManager):
986
+ self._request_manager = request_manager
987
+ self.recover = Recovery.Recover(request_manager)
988
+
989
+ class ROS:
990
+ _request_manager: RequestManager
991
+ class Control:
992
+ def __init__(self, request_manager: RequestManager):
993
+ self._request_manager = request_manager
994
+
995
+
996
+ def update_ros_control_state(
997
+ self,
998
+ body: models.ROSControlUpdateRequest,
999
+ ) -> Response[
1000
+ Union[
1001
+ models.ROSControlStateResponse,
1002
+ models.ErrorResponse,
1003
+ None
1004
+ ],
1005
+ models.ROSControlStateResponse
1006
+ ]:
1007
+ """
1008
+ Updates the state of ROS control based on the provided action (&#x27;enable&#x27; or &#x27;disable&#x27;).
1009
+ """
1010
+ path = "/api/v1/movement/ros/state"
1011
+ response = self._request_manager.request(
1012
+ "POST",
1013
+ path,
1014
+ headers=self._request_manager.json_headers(),
1015
+ body=json.dumps(models.serialize_ros_control_update_request(body)),
1016
+ )
1017
+ parsed = None
1018
+ if response.status == 200:
1019
+ parsed = models.parse_ros_control_state_response(json.loads(response.data))
1020
+
1021
+ is_user_error = response.status >= 400 and response.status < 500
1022
+ is_unavailable = response.status == 503
1023
+ if parsed is None and (is_user_error or is_unavailable):
1024
+ parsed = models.parse_error_response(json.loads(response.data))
1025
+
1026
+ return Response(
1027
+ parsed,
1028
+ response.status,
1029
+ response
1030
+ )
1031
+
1032
+ class Status:
1033
+ def __init__(self, request_manager: RequestManager):
1034
+ self._request_manager = request_manager
1035
+
1036
+
1037
+ def get_ros_control_state(
1038
+ self,
1039
+ ) -> Response[
1040
+ Union[
1041
+ models.ROSControlStateResponse,
1042
+ models.ErrorResponse,
1043
+ None
1044
+ ],
1045
+ models.ROSControlStateResponse
1046
+ ]:
1047
+ """
1048
+ Retrieves the current state of ROS control.
1049
+ """
1050
+ path = "/api/v1/movement/ros/state"
1051
+ response = self._request_manager.request(
1052
+ "GET",
1053
+ path,
1054
+ headers=self._request_manager.json_headers(),
1055
+ )
1056
+ parsed = None
1057
+ if response.status == 200:
1058
+ parsed = models.parse_ros_control_state_response(json.loads(response.data))
1059
+
1060
+ is_user_error = response.status >= 400 and response.status < 500
1061
+ is_unavailable = response.status == 503
1062
+ if parsed is None and (is_user_error or is_unavailable):
1063
+ parsed = models.parse_error_response(json.loads(response.data))
1064
+
1065
+ return Response(
1066
+ parsed,
1067
+ response.status,
1068
+ response
1069
+ )
1070
+
1071
+ control: Control
1072
+ status: Status
1073
+
1074
+ def __init__(self, request_manager: RequestManager):
1075
+ self._request_manager = request_manager
1076
+ self.control = ROS.Control(request_manager)
1077
+ self.status = ROS.Status(request_manager)
758
1078
 
759
1079
  class RoutineEditor:
760
1080
  _request_manager: RequestManager
@@ -1232,7 +1552,11 @@ class StandardBotsRobot(Default):
1232
1552
 
1233
1553
  movement: Movement
1234
1554
  camera: Camera
1235
- chat_gpt: ChatGpt
1555
+ chat_gpt: ChatGPT
1556
+ io: IO
1557
+ general: General
1558
+ recovery: Recovery
1559
+ ros: ROS
1236
1560
  routine_editor: RoutineEditor
1237
1561
  status: Status
1238
1562
  teleoperation: Teleoperation
@@ -1251,7 +1575,11 @@ class StandardBotsRobot(Default):
1251
1575
  ))
1252
1576
  self.movement = Movement(self._request_manager)
1253
1577
  self.camera = Camera(self._request_manager)
1254
- self.chat_gpt = ChatGpt(self._request_manager)
1578
+ self.chat_gpt = ChatGPT(self._request_manager)
1579
+ self.io = IO(self._request_manager)
1580
+ self.general = General(self._request_manager)
1581
+ self.recovery = Recovery(self._request_manager)
1582
+ self.ros = ROS(self._request_manager)
1255
1583
  self.routine_editor = RoutineEditor(self._request_manager)
1256
1584
  self.status = Status(self._request_manager)
1257
1585
  self.teleoperation = Teleoperation(self._request_manager)
@@ -476,6 +476,20 @@ def serialize_camera_settings(data: CameraSettings) -> object:
476
476
  "autoWhiteBalance": None if data.autoWhiteBalance is None else serialize_bool(data.autoWhiteBalance),
477
477
  }
478
478
 
479
+ class ConnectionStatus(Enum):
480
+ Connected = "connected"
481
+ """Enum Connected = `connected`"""
482
+ Disconnected = "disconnected"
483
+ """Enum Disconnected = `disconnected`"""
484
+ Ready = "ready"
485
+ """Enum Ready = `ready`"""
486
+
487
+ def parse_connection_status(data: object) -> ConnectionStatus:
488
+ return ConnectionStatus(data)
489
+
490
+ def serialize_connection_status(data: Union[ConnectionStatus, str]) -> object:
491
+ return ConnectionStatus(data).value
492
+
479
493
  @dataclass
480
494
  class DHAGGripperCommandRequest:
481
495
  """Control the DH AG gripper (end effector) of the robot
@@ -567,6 +581,188 @@ def serialize_dhag_gripper_configuration(data: DHAGGripperConfiguration) -> obje
567
581
  "diameter": serialize_f_64(data.diameter),
568
582
  }
569
583
 
584
+ @dataclass
585
+ class DHCGIGripperCommandRequest:
586
+ """Control the DH CGI gripper (end effector) of the robot
587
+ """
588
+ target_diameter: Union[float, None] = None
589
+ target_force: Union[float, None] = None
590
+ target_speed: Union[float, None] = None
591
+
592
+ def validate_target_diameter(self, value: float) -> Tuple[bool, str]:
593
+ if value is None:
594
+ return [False, "target_diameter is required for DHCGIGripperCommandRequest"]
595
+
596
+ if not isinstance(value, float):
597
+ return [False, "target_diameter must be of type float for DHCGIGripperCommandRequest, got " + type(value).__name__]
598
+
599
+ return [True, ""]
600
+
601
+ def validate_target_force(self, value: float) -> Tuple[bool, str]:
602
+ if value is None:
603
+ return [True, ""]
604
+
605
+ if not isinstance(value, float):
606
+ return [False, "target_force must be of type float for DHCGIGripperCommandRequest, got " + type(value).__name__]
607
+
608
+ return [True, ""]
609
+
610
+ def validate_target_speed(self, value: float) -> Tuple[bool, str]:
611
+ if value is None:
612
+ return [True, ""]
613
+
614
+ if not isinstance(value, float):
615
+ return [False, "target_speed must be of type float for DHCGIGripperCommandRequest, got " + type(value).__name__]
616
+
617
+ return [True, ""]
618
+
619
+ def __post_init__(self):
620
+ # Type check incoming model - raise error if invalid (required or wrong type)
621
+ is_valid, error_str = self.validate_target_diameter(self.target_diameter)
622
+ if not is_valid:
623
+ raise TypeError(error_str)
624
+ is_valid, error_str = self.validate_target_force(self.target_force)
625
+ if not is_valid:
626
+ raise TypeError(error_str)
627
+ is_valid, error_str = self.validate_target_speed(self.target_speed)
628
+ if not is_valid:
629
+ raise TypeError(error_str)
630
+
631
+ def parse_dhcgi_gripper_command_request(data: object):
632
+ return DHCGIGripperCommandRequest(
633
+ target_diameter=parse_f_64(data["target_diameter"]) if "target_diameter" in data else None,
634
+ target_force=parse_f_64(data["target_force"]) if "target_force" in data else None,
635
+ target_speed=parse_f_64(data["target_speed"]) if "target_speed" in data else None,
636
+ )
637
+
638
+ def serialize_dhcgi_gripper_command_request(data: DHCGIGripperCommandRequest) -> object:
639
+ return {
640
+ "target_diameter": serialize_f_64(data.target_diameter),
641
+ "target_force": None if data.target_force is None else serialize_f_64(data.target_force),
642
+ "target_speed": None if data.target_speed is None else serialize_f_64(data.target_speed),
643
+ }
644
+
645
+ @dataclass
646
+ class DHCGIGripperConfiguration:
647
+ """Configuration for DH CGI Gripper"""
648
+ diameter: Union[float, None] = None
649
+
650
+ def validate_diameter(self, value: float) -> Tuple[bool, str]:
651
+ if value is None:
652
+ return [False, "diameter is required for DHCGIGripperConfiguration"]
653
+
654
+ if not isinstance(value, float):
655
+ return [False, "diameter must be of type float for DHCGIGripperConfiguration, got " + type(value).__name__]
656
+
657
+ return [True, ""]
658
+
659
+ def __post_init__(self):
660
+ # Type check incoming model - raise error if invalid (required or wrong type)
661
+ is_valid, error_str = self.validate_diameter(self.diameter)
662
+ if not is_valid:
663
+ raise TypeError(error_str)
664
+
665
+ def parse_dhcgi_gripper_configuration(data: object):
666
+ return DHCGIGripperConfiguration(
667
+ diameter=parse_f_64(data["diameter"]) if "diameter" in data else None,
668
+ )
669
+
670
+ def serialize_dhcgi_gripper_configuration(data: DHCGIGripperConfiguration) -> object:
671
+ return {
672
+ "diameter": serialize_f_64(data.diameter),
673
+ }
674
+
675
+ @dataclass
676
+ class DHPGCGripperCommandRequest:
677
+ """Control the DH PGC gripper (end effector) of the robot
678
+ """
679
+ target_diameter: Union[float, None] = None
680
+ target_force: Union[float, None] = None
681
+ target_speed: Union[float, None] = None
682
+
683
+ def validate_target_diameter(self, value: float) -> Tuple[bool, str]:
684
+ if value is None:
685
+ return [False, "target_diameter is required for DHPGCGripperCommandRequest"]
686
+
687
+ if not isinstance(value, float):
688
+ return [False, "target_diameter must be of type float for DHPGCGripperCommandRequest, got " + type(value).__name__]
689
+
690
+ return [True, ""]
691
+
692
+ def validate_target_force(self, value: float) -> Tuple[bool, str]:
693
+ if value is None:
694
+ return [True, ""]
695
+
696
+ if not isinstance(value, float):
697
+ return [False, "target_force must be of type float for DHPGCGripperCommandRequest, got " + type(value).__name__]
698
+
699
+ return [True, ""]
700
+
701
+ def validate_target_speed(self, value: float) -> Tuple[bool, str]:
702
+ if value is None:
703
+ return [True, ""]
704
+
705
+ if not isinstance(value, float):
706
+ return [False, "target_speed must be of type float for DHPGCGripperCommandRequest, got " + type(value).__name__]
707
+
708
+ return [True, ""]
709
+
710
+ def __post_init__(self):
711
+ # Type check incoming model - raise error if invalid (required or wrong type)
712
+ is_valid, error_str = self.validate_target_diameter(self.target_diameter)
713
+ if not is_valid:
714
+ raise TypeError(error_str)
715
+ is_valid, error_str = self.validate_target_force(self.target_force)
716
+ if not is_valid:
717
+ raise TypeError(error_str)
718
+ is_valid, error_str = self.validate_target_speed(self.target_speed)
719
+ if not is_valid:
720
+ raise TypeError(error_str)
721
+
722
+ def parse_dhpgc_gripper_command_request(data: object):
723
+ return DHPGCGripperCommandRequest(
724
+ target_diameter=parse_f_64(data["target_diameter"]) if "target_diameter" in data else None,
725
+ target_force=parse_f_64(data["target_force"]) if "target_force" in data else None,
726
+ target_speed=parse_f_64(data["target_speed"]) if "target_speed" in data else None,
727
+ )
728
+
729
+ def serialize_dhpgc_gripper_command_request(data: DHPGCGripperCommandRequest) -> object:
730
+ return {
731
+ "target_diameter": serialize_f_64(data.target_diameter),
732
+ "target_force": None if data.target_force is None else serialize_f_64(data.target_force),
733
+ "target_speed": None if data.target_speed is None else serialize_f_64(data.target_speed),
734
+ }
735
+
736
+ @dataclass
737
+ class DHPGCGripperConfiguration:
738
+ """Configuration for DH PGC Gripper"""
739
+ diameter: Union[float, None] = None
740
+
741
+ def validate_diameter(self, value: float) -> Tuple[bool, str]:
742
+ if value is None:
743
+ return [False, "diameter is required for DHPGCGripperConfiguration"]
744
+
745
+ if not isinstance(value, float):
746
+ return [False, "diameter must be of type float for DHPGCGripperConfiguration, got " + type(value).__name__]
747
+
748
+ return [True, ""]
749
+
750
+ def __post_init__(self):
751
+ # Type check incoming model - raise error if invalid (required or wrong type)
752
+ is_valid, error_str = self.validate_diameter(self.diameter)
753
+ if not is_valid:
754
+ raise TypeError(error_str)
755
+
756
+ def parse_dhpgc_gripper_configuration(data: object):
757
+ return DHPGCGripperConfiguration(
758
+ diameter=parse_f_64(data["diameter"]) if "diameter" in data else None,
759
+ )
760
+
761
+ def serialize_dhpgc_gripper_configuration(data: DHPGCGripperConfiguration) -> object:
762
+ return {
763
+ "diameter": serialize_f_64(data.diameter),
764
+ }
765
+
570
766
  @dataclass
571
767
  class EngageEmergencyStopRequest:
572
768
  """Engage Emergency Stop. This will immediately stop the robot and prevent it from moving until the robot is unbraked.
@@ -671,6 +867,8 @@ class ErrorEnum(Enum):
671
867
  """Robot brakes engage failed"""
672
868
  RequestFailedValidation = "request_failed_validation"
673
869
  """Request failed validation"""
870
+ RobotNotIdle = "robot_not_idle"
871
+ """Robot must be idle"""
674
872
  BrakesMustBeEngaged = "brakes_must_be_engaged"
675
873
  """Brakes must be_engaged"""
676
874
  BrakesMustBeDisengaged = "brakes_must_be_disengaged"
@@ -687,6 +885,8 @@ class ErrorEnum(Enum):
687
885
  """Camera settings timed out"""
688
886
  InternalServerError = "internal_server_error"
689
887
  """Internal server error occurred"""
888
+ RecoveryError = "recovery_error"
889
+ """Recovery error occurred"""
690
890
  NotFound = "not_found"
691
891
  """Requested resource not found"""
692
892
 
@@ -715,6 +915,10 @@ class GripperKindEnum(Enum):
715
915
  """An OnRobot 3FG15 Gripper is connected"""
716
916
  DhAg = "dh_ag"
717
917
  """A DH AG Gripper is connected"""
918
+ DhPgc = "dh_pgc"
919
+ """A DH PGC Gripper is connected"""
920
+ DhCgi = "dh_cgi"
921
+ """A DH CGI Gripper is connected"""
718
922
  NoneConnected = "none_connected"
719
923
  """No gripper is connected"""
720
924
 
@@ -724,6 +928,66 @@ def parse_gripper_kind_enum(data: object) -> GripperKindEnum:
724
928
  def serialize_gripper_kind_enum(data: Union[GripperKindEnum, str]) -> object:
725
929
  return GripperKindEnum(data).value
726
930
 
931
+ @dataclass
932
+ class IOStateResponse:
933
+ """Response to a query for the current state of I/O."""
934
+ state: Union[str, None] = None
935
+
936
+ def validate_state(self, value: str) -> Tuple[bool, str]:
937
+ if value is None:
938
+ return [True, ""]
939
+
940
+ if not isinstance(value, str):
941
+ return [False, "state must be of type str for IOStateResponse, got " + type(value).__name__]
942
+
943
+ return [True, ""]
944
+
945
+ def __post_init__(self):
946
+ # Type check incoming model - raise error if invalid (required or wrong type)
947
+ is_valid, error_str = self.validate_state(self.state)
948
+ if not is_valid:
949
+ raise TypeError(error_str)
950
+
951
+ def parse_io_state_response(data: object):
952
+ return IOStateResponse(
953
+ state=parse_str(data["state"]) if "state" in data else None,
954
+ )
955
+
956
+ def serialize_io_state_response(data: IOStateResponse) -> object:
957
+ return {
958
+ "state": None if data.state is None else serialize_str(data.state),
959
+ }
960
+
961
+ @dataclass
962
+ class IOStateUpdateRequest:
963
+ """Request to update the state of I/O to either start or stop."""
964
+ state: Union[str, None] = None
965
+
966
+ def validate_state(self, value: str) -> Tuple[bool, str]:
967
+ if value is None:
968
+ return [True, ""]
969
+
970
+ if not isinstance(value, str):
971
+ return [False, "state must be of type str for IOStateUpdateRequest, got " + type(value).__name__]
972
+
973
+ return [True, ""]
974
+
975
+ def __post_init__(self):
976
+ # Type check incoming model - raise error if invalid (required or wrong type)
977
+ is_valid, error_str = self.validate_state(self.state)
978
+ if not is_valid:
979
+ raise TypeError(error_str)
980
+
981
+ def parse_io_state_update_request(data: object):
982
+ return IOStateUpdateRequest(
983
+ state=parse_str(data["state"]) if "state" in data else None,
984
+ )
985
+
986
+ def serialize_io_state_update_request(data: IOStateUpdateRequest) -> object:
987
+ return {
988
+ "state": None if data.state is None else serialize_str(data.state),
989
+ }
990
+
727
991
  JointRotations = Tuple[float,float,float,float,float,float,]
728
992
 
729
993
  def parse_joint_rotations(data: object) -> JointRotations:
@@ -990,6 +1254,18 @@ def parse_robot_control_mode_enum(data: object) -> RobotControlModeEnum:
990
1254
  def serialize_robot_control_mode_enum(data: Union[RobotControlModeEnum, str]) -> object:
991
1255
  return RobotControlModeEnum(data).value
992
1256
 
1257
+ class ROSControlStateEnum(Enum):
1258
+ Enabled = "enabled"
1259
+ """ROS control is enabled."""
1260
+ Disabled = "disabled"
1261
+ """ROS control is disabled."""
1262
+
1263
+ def parse_ros_control_state_enum(data: object) -> ROSControlStateEnum:
1264
+ return ROSControlStateEnum(data)
1265
+
1266
+ def serialize_ros_control_state_enum(data: Union[ROSControlStateEnum, str]) -> object:
1267
+ return ROSControlStateEnum(data).value
1268
+
993
1269
  RoutineVariablesStateMap = Dict[str, str]
994
1270
 
995
1271
  def parse_routine_variables_state_map(data: object) -> RoutineVariablesStateMap:
@@ -1338,6 +1614,81 @@ def serialize_camera_frame_request(data: CameraFrameRequest) -> object:
1338
1614
  "camera_settings": None if data.camera_settings is None else serialize_camera_settings(data.camera_settings),
1339
1615
  }
1340
1616
 
1617
+ @dataclass
1618
+ class JointState:
1619
+ """State of a joint"""
1620
+ braked: Union[bool, None] = None
1621
+ connectionStatus: Union[ConnectionStatus, None] = None
1622
+ inCollision: Union[bool, None] = None
1623
+ disturbance: Union[float, None] = None
1624
+
1625
+ def validate_braked(self, value: bool) -> Tuple[bool, str]:
1626
+ if value is None:
1627
+ return [True, ""]
1628
+
1629
+ if not isinstance(value, bool):
1630
+ return [False, "braked must be of type bool for JointState, got " + type(value).__name__]
1631
+
1632
+ return [True, ""]
1633
+
1634
+ def validate_connectionStatus(self, value: ConnectionStatus) -> Tuple[bool, str]:
1635
+ if value is None:
1636
+ return [True, ""]
1637
+
1638
+ if not ((isinstance(value, str) and ConnectionStatus in ['connected', 'disconnected', 'ready']) or isinstance(value, ConnectionStatus)):
1639
+ return [False, "connectionStatus must be of type ConnectionStatus for JointState, got " + type(value).__name__]
1640
+
1641
+ return [True, ""]
1642
+
1643
+ def validate_inCollision(self, value: bool) -> Tuple[bool, str]:
1644
+ if value is None:
1645
+ return [True, ""]
1646
+
1647
+ if not isinstance(value, bool):
1648
+ return [False, "inCollision must be of type bool for JointState, got " + type(value).__name__]
1649
+
1650
+ return [True, ""]
1651
+
1652
+ def validate_disturbance(self, value: float) -> Tuple[bool, str]:
1653
+ if value is None:
1654
+ return [True, ""]
1655
+
1656
+ if not isinstance(value, float):
1657
+ return [False, "disturbance must be of type float for JointState, got " + type(value).__name__]
1658
+
1659
+ return [True, ""]
1660
+
1661
+ def __post_init__(self):
1662
+ # Type check incoming model - raise error if invalid (required or wrong type)
1663
+ is_valid, error_str = self.validate_braked(self.braked)
1664
+ if not is_valid:
1665
+ raise TypeError(error_str)
1666
+ is_valid, error_str = self.validate_connectionStatus(self.connectionStatus)
1667
+ if not is_valid:
1668
+ raise TypeError(error_str)
1669
+ is_valid, error_str = self.validate_inCollision(self.inCollision)
1670
+ if not is_valid:
1671
+ raise TypeError(error_str)
1672
+ is_valid, error_str = self.validate_disturbance(self.disturbance)
1673
+ if not is_valid:
1674
+ raise TypeError(error_str)
1675
+
1676
+ def parse_joint_state(data: object):
1677
+ return JointState(
1678
+ braked=parse_bool(data["braked"]) if "braked" in data else None,
1679
+ connectionStatus=parse_connection_status(data["connectionStatus"]) if "connectionStatus" in data else None,
1680
+ inCollision=parse_bool(data["inCollision"]) if "inCollision" in data else None,
1681
+ disturbance=parse_f_64(data["disturbance"]) if "disturbance" in data else None,
1682
+ )
1683
+
1684
+ def serialize_joint_state(data: JointState) -> object:
1685
+ return {
1686
+ "braked": None if data.braked is None else serialize_bool(data.braked),
1687
+ "connectionStatus": None if data.connectionStatus is None else serialize_connection_status(data.connectionStatus),
1688
+ "inCollision": None if data.inCollision is None else serialize_bool(data.inCollision),
1689
+ "disturbance": None if data.disturbance is None else serialize_f_64(data.disturbance),
1690
+ }
1691
+
1341
1692
  EnvironmentVariablesList = List[EnvironmentVariable]
1342
1693
 
1343
1694
  def parse_environment_variables_list(data: object) -> EnvironmentVariablesList:
@@ -1356,7 +1707,7 @@ class ErrorResponse:
1356
1707
  if value is None:
1357
1708
  return [False, "error is required for ErrorResponse"]
1358
1709
 
1359
- if not ((isinstance(value, str) and ErrorEnum in ['authorization_required', 'routine_must_be_running', 'api_control_required', 'robot_brakes_disengage_failed', 'robot_brakes_engage_failed', 'request_failed_validation', 'brakes_must_be_engaged', 'brakes_must_be_disengaged', 'equipment_no_matching', 'service_initializing', 'camera_disconnected', 'settings_validation_error', 'settings_timeout', 'internal_server_error', 'not_found']) or isinstance(value, ErrorEnum)):
1710
+ if not ((isinstance(value, str) and ErrorEnum in ['authorization_required', 'routine_must_be_running', 'api_control_required', 'robot_brakes_disengage_failed', 'robot_brakes_engage_failed', 'request_failed_validation', 'robot_not_idle', 'brakes_must_be_engaged', 'brakes_must_be_disengaged', 'equipment_no_matching', 'service_initializing', 'camera_disconnected', 'settings_validation_error', 'settings_timeout', 'internal_server_error', 'recovery_error', 'not_found']) or isinstance(value, ErrorEnum)):
1360
1711
  return [False, "error must be of type ErrorEnum for ErrorResponse, got " + type(value).__name__]
1361
1712
 
1362
1713
  return [True, ""]
@@ -1442,12 +1793,14 @@ class GripperConfiguration:
1442
1793
  """Configuration of gripper, also known as End Effector"""
1443
1794
  kind: Union[GripperKindEnum, None] = None
1444
1795
  dh_ag: Union[DHAGGripperConfiguration, None] = None
1796
+ dh_pgc: Union[DHPGCGripperConfiguration, None] = None
1797
+ dh_cgi: Union[DHCGIGripperConfiguration, None] = None
1445
1798
 
1446
1799
  def validate_kind(self, value: GripperKindEnum) -> Tuple[bool, str]:
1447
1800
  if value is None:
1448
1801
  return [False, "kind is required for GripperConfiguration"]
1449
1802
 
1450
- if not ((isinstance(value, str) and GripperKindEnum in ['onrobot_2fg7', 'onrobot_3fg15', 'dh_ag', 'none_connected']) or isinstance(value, GripperKindEnum)):
1803
+ if not ((isinstance(value, str) and GripperKindEnum in ['onrobot_2fg7', 'onrobot_3fg15', 'dh_ag', 'dh_pgc', 'dh_cgi', 'none_connected']) or isinstance(value, GripperKindEnum)):
1451
1804
  return [False, "kind must be of type GripperKindEnum for GripperConfiguration, got " + type(value).__name__]
1452
1805
 
1453
1806
  return [True, ""]
@@ -1461,6 +1814,24 @@ class GripperConfiguration:
1461
1814
 
1462
1815
  return [True, ""]
1463
1816
 
1817
+ def validate_dh_pgc(self, value: DHPGCGripperConfiguration) -> Tuple[bool, str]:
1818
+ if value is None:
1819
+ return [True, ""]
1820
+
1821
+ if not isinstance(value, DHPGCGripperConfiguration):
1822
+ return [False, "dh_pgc must be of type DHPGCGripperConfiguration for GripperConfiguration, got " + type(value).__name__]
1823
+
1824
+ return [True, ""]
1825
+
1826
+ def validate_dh_cgi(self, value: DHCGIGripperConfiguration) -> Tuple[bool, str]:
1827
+ if value is None:
1828
+ return [True, ""]
1829
+
1830
+ if not isinstance(value, DHCGIGripperConfiguration):
1831
+ return [False, "dh_cgi must be of type DHCGIGripperConfiguration for GripperConfiguration, got " + type(value).__name__]
1832
+
1833
+ return [True, ""]
1834
+
1464
1835
  def __post_init__(self):
1465
1836
  # Type check incoming model - raise error if invalid (required or wrong type)
1466
1837
  is_valid, error_str = self.validate_kind(self.kind)
@@ -1469,17 +1840,27 @@ class GripperConfiguration:
1469
1840
  is_valid, error_str = self.validate_dh_ag(self.dh_ag)
1470
1841
  if not is_valid:
1471
1842
  raise TypeError(error_str)
1843
+ is_valid, error_str = self.validate_dh_pgc(self.dh_pgc)
1844
+ if not is_valid:
1845
+ raise TypeError(error_str)
1846
+ is_valid, error_str = self.validate_dh_cgi(self.dh_cgi)
1847
+ if not is_valid:
1848
+ raise TypeError(error_str)
1472
1849
 
1473
1850
  def parse_gripper_configuration(data: object):
1474
1851
  return GripperConfiguration(
1475
1852
  kind=parse_gripper_kind_enum(data["kind"]) if "kind" in data else None,
1476
1853
  dh_ag=parse_dhag_gripper_configuration(data["dh_ag"]) if "dh_ag" in data else None,
1854
+ dh_pgc=parse_dhpgc_gripper_configuration(data["dh_pgc"]) if "dh_pgc" in data else None,
1855
+ dh_cgi=parse_dhcgi_gripper_configuration(data["dh_cgi"]) if "dh_cgi" in data else None,
1477
1856
  )
1478
1857
 
1479
1858
  def serialize_gripper_configuration(data: GripperConfiguration) -> object:
1480
1859
  return {
1481
1860
  "kind": serialize_gripper_kind_enum(data.kind),
1482
1861
  "dh_ag": None if data.dh_ag is None else serialize_dhag_gripper_configuration(data.dh_ag),
1862
+ "dh_pgc": None if data.dh_pgc is None else serialize_dhpgc_gripper_configuration(data.dh_pgc),
1863
+ "dh_cgi": None if data.dh_cgi is None else serialize_dhcgi_gripper_configuration(data.dh_cgi),
1483
1864
  }
1484
1865
 
1485
1866
  @dataclass
@@ -1716,6 +2097,66 @@ def serialize_robot_control_mode(data: RobotControlMode) -> object:
1716
2097
  "kind": None if data.kind is None else serialize_robot_control_mode_enum(data.kind),
1717
2098
  }
1718
2099
 
2100
+ @dataclass
2101
+ class ROSControlStateResponse:
2102
+ """Response to a query for the current state of ROS control."""
2103
+ state: Union[ROSControlStateEnum, None] = None
2104
+
2105
+ def validate_state(self, value: ROSControlStateEnum) -> Tuple[bool, str]:
2106
+ if value is None:
2107
+ return [True, ""]
2108
+
2109
+ if not ((isinstance(value, str) and ROSControlStateEnum in ['enabled', 'disabled']) or isinstance(value, ROSControlStateEnum)):
2110
+ return [False, "state must be of type ROSControlStateEnum for ROSControlStateResponse, got " + type(value).__name__]
2111
+
2112
+ return [True, ""]
2113
+
2114
+ def __post_init__(self):
2115
+ # Type check incoming model - raise error if invalid (required or wrong type)
2116
+ is_valid, error_str = self.validate_state(self.state)
2117
+ if not is_valid:
2118
+ raise TypeError(error_str)
2119
+
2120
+ def parse_ros_control_state_response(data: object):
2121
+ return ROSControlStateResponse(
2122
+ state=parse_ros_control_state_enum(data["state"]) if "state" in data else None,
2123
+ )
2124
+
2125
+ def serialize_ros_control_state_response(data: ROSControlStateResponse) -> object:
2126
+ return {
2127
+ "state": None if data.state is None else serialize_ros_control_state_enum(data.state),
2128
+ }
2129
+
2130
+ @dataclass
2131
+ class ROSControlUpdateRequest:
2132
+ """Request to update the state of direct ROS control."""
2133
+ action: Union[ROSControlStateEnum, None] = None
2134
+
2135
+ def validate_action(self, value: ROSControlStateEnum) -> Tuple[bool, str]:
2136
+ if value is None:
2137
+ return [True, ""]
2138
+
2139
+ if not ((isinstance(value, str) and ROSControlStateEnum in ['enabled', 'disabled']) or isinstance(value, ROSControlStateEnum)):
2140
+ return [False, "action must be of type ROSControlStateEnum for ROSControlUpdateRequest, got " + type(value).__name__]
2141
+
2142
+ return [True, ""]
2143
+
2144
+ def __post_init__(self):
2145
+ # Type check incoming model - raise error if invalid (required or wrong type)
2146
+ is_valid, error_str = self.validate_action(self.action)
2147
+ if not is_valid:
2148
+ raise TypeError(error_str)
2149
+
2150
+ def parse_ros_control_update_request(data: object):
2151
+ return ROSControlUpdateRequest(
2152
+ action=parse_ros_control_state_enum(data["action"]) if "action" in data else None,
2153
+ )
2154
+
2155
+ def serialize_ros_control_update_request(data: ROSControlUpdateRequest) -> object:
2156
+ return {
2157
+ "action": None if data.action is None else serialize_ros_control_state_enum(data.action),
2158
+ }
2159
+
1719
2160
  @dataclass
1720
2161
  class PlayRoutineRequest:
1721
2162
  """Request to play a routine"""
@@ -1897,6 +2338,111 @@ def serialize_arm_position_update_request_response_event_stream_details(data: Ar
1897
2338
  "subscriptions": serialize_arm_position_update_request_response_event_stream_subscriptions_list(data.subscriptions),
1898
2339
  }
1899
2340
 
2341
+ @dataclass
2342
+ class JointsStateResponse:
2343
+ """Response to a query for the current state of the joints"""
2344
+ J0: Union[JointState, None] = None
2345
+ J1: Union[JointState, None] = None
2346
+ J2: Union[JointState, None] = None
2347
+ J3: Union[JointState, None] = None
2348
+ J4: Union[JointState, None] = None
2349
+ J5: Union[JointState, None] = None
2350
+
2351
+ def validate_J0(self, value: JointState) -> Tuple[bool, str]:
2352
+ if value is None:
2353
+ return [True, ""]
2354
+
2355
+ if not isinstance(value, JointState):
2356
+ return [False, "J0 must be of type JointState for JointsStateResponse, got " + type(value).__name__]
2357
+
2358
+ return [True, ""]
2359
+
2360
+ def validate_J1(self, value: JointState) -> Tuple[bool, str]:
2361
+ if value is None:
2362
+ return [True, ""]
2363
+
2364
+ if not isinstance(value, JointState):
2365
+ return [False, "J1 must be of type JointState for JointsStateResponse, got " + type(value).__name__]
2366
+
2367
+ return [True, ""]
2368
+
2369
+ def validate_J2(self, value: JointState) -> Tuple[bool, str]:
2370
+ if value is None:
2371
+ return [True, ""]
2372
+
2373
+ if not isinstance(value, JointState):
2374
+ return [False, "J2 must be of type JointState for JointsStateResponse, got " + type(value).__name__]
2375
+
2376
+ return [True, ""]
2377
+
2378
+ def validate_J3(self, value: JointState) -> Tuple[bool, str]:
2379
+ if value is None:
2380
+ return [True, ""]
2381
+
2382
+ if not isinstance(value, JointState):
2383
+ return [False, "J3 must be of type JointState for JointsStateResponse, got " + type(value).__name__]
2384
+
2385
+ return [True, ""]
2386
+
2387
+ def validate_J4(self, value: JointState) -> Tuple[bool, str]:
2388
+ if value is None:
2389
+ return [True, ""]
2390
+
2391
+ if not isinstance(value, JointState):
2392
+ return [False, "J4 must be of type JointState for JointsStateResponse, got " + type(value).__name__]
2393
+
2394
+ return [True, ""]
2395
+
2396
+ def validate_J5(self, value: JointState) -> Tuple[bool, str]:
2397
+ if value is None:
2398
+ return [True, ""]
2399
+
2400
+ if not isinstance(value, JointState):
2401
+ return [False, "J5 must be of type JointState for JointsStateResponse, got " + type(value).__name__]
2402
+
2403
+ return [True, ""]
2404
+
2405
+ def __post_init__(self):
2406
+ # Type check incoming model - raise error if invalid (required or wrong type)
2407
+ is_valid, error_str = self.validate_J0(self.J0)
2408
+ if not is_valid:
2409
+ raise TypeError(error_str)
2410
+ is_valid, error_str = self.validate_J1(self.J1)
2411
+ if not is_valid:
2412
+ raise TypeError(error_str)
2413
+ is_valid, error_str = self.validate_J2(self.J2)
2414
+ if not is_valid:
2415
+ raise TypeError(error_str)
2416
+ is_valid, error_str = self.validate_J3(self.J3)
2417
+ if not is_valid:
2418
+ raise TypeError(error_str)
2419
+ is_valid, error_str = self.validate_J4(self.J4)
2420
+ if not is_valid:
2421
+ raise TypeError(error_str)
2422
+ is_valid, error_str = self.validate_J5(self.J5)
2423
+ if not is_valid:
2424
+ raise TypeError(error_str)
2425
+
2426
+ def parse_joints_state_response(data: object):
2427
+ return JointsStateResponse(
2428
+ J0=parse_joint_state(data["J0"]) if "J0" in data else None,
2429
+ J1=parse_joint_state(data["J1"]) if "J1" in data else None,
2430
+ J2=parse_joint_state(data["J2"]) if "J2" in data else None,
2431
+ J3=parse_joint_state(data["J3"]) if "J3" in data else None,
2432
+ J4=parse_joint_state(data["J4"]) if "J4" in data else None,
2433
+ J5=parse_joint_state(data["J5"]) if "J5" in data else None,
2434
+ )
2435
+
2436
+ def serialize_joints_state_response(data: JointsStateResponse) -> object:
2437
+ return {
2438
+ "J0": None if data.J0 is None else serialize_joint_state(data.J0),
2439
+ "J1": None if data.J1 is None else serialize_joint_state(data.J1),
2440
+ "J2": None if data.J2 is None else serialize_joint_state(data.J2),
2441
+ "J3": None if data.J3 is None else serialize_joint_state(data.J3),
2442
+ "J4": None if data.J4 is None else serialize_joint_state(data.J4),
2443
+ "J5": None if data.J5 is None else serialize_joint_state(data.J5),
2444
+ }
2445
+
1900
2446
  @dataclass
1901
2447
  class Routine:
1902
2448
  """Robot Routine containing steps to automate robot movement and operations"""
@@ -2299,12 +2845,14 @@ class GripperCommandRequest:
2299
2845
  onrobot_2fg7: Union[OnRobot2FG7GripperCommandRequest, None] = None
2300
2846
  onrobot_3fg15: Union[OnRobot3FG15GripperCommandRequest, None] = None
2301
2847
  dh_ag: Union[DHAGGripperCommandRequest, None] = None
2848
+ dh_pgc: Union[DHPGCGripperCommandRequest, None] = None
2849
+ dh_cgi: Union[DHCGIGripperCommandRequest, None] = None
2302
2850
 
2303
2851
  def validate_kind(self, value: GripperKindEnum) -> Tuple[bool, str]:
2304
2852
  if value is None:
2305
2853
  return [False, "kind is required for GripperCommandRequest"]
2306
2854
 
2307
- if not ((isinstance(value, str) and GripperKindEnum in ['onrobot_2fg7', 'onrobot_3fg15', 'dh_ag', 'none_connected']) or isinstance(value, GripperKindEnum)):
2855
+ if not ((isinstance(value, str) and GripperKindEnum in ['onrobot_2fg7', 'onrobot_3fg15', 'dh_ag', 'dh_pgc', 'dh_cgi', 'none_connected']) or isinstance(value, GripperKindEnum)):
2308
2856
  return [False, "kind must be of type GripperKindEnum for GripperCommandRequest, got " + type(value).__name__]
2309
2857
 
2310
2858
  return [True, ""]
@@ -2336,6 +2884,24 @@ class GripperCommandRequest:
2336
2884
 
2337
2885
  return [True, ""]
2338
2886
 
2887
+ def validate_dh_pgc(self, value: DHPGCGripperCommandRequest) -> Tuple[bool, str]:
2888
+ if value is None:
2889
+ return [True, ""]
2890
+
2891
+ if not isinstance(value, DHPGCGripperCommandRequest):
2892
+ return [False, "dh_pgc must be of type DHPGCGripperCommandRequest for GripperCommandRequest, got " + type(value).__name__]
2893
+
2894
+ return [True, ""]
2895
+
2896
+ def validate_dh_cgi(self, value: DHCGIGripperCommandRequest) -> Tuple[bool, str]:
2897
+ if value is None:
2898
+ return [True, ""]
2899
+
2900
+ if not isinstance(value, DHCGIGripperCommandRequest):
2901
+ return [False, "dh_cgi must be of type DHCGIGripperCommandRequest for GripperCommandRequest, got " + type(value).__name__]
2902
+
2903
+ return [True, ""]
2904
+
2339
2905
  def __post_init__(self):
2340
2906
  # Type check incoming model - raise error if invalid (required or wrong type)
2341
2907
  is_valid, error_str = self.validate_kind(self.kind)
@@ -2350,6 +2916,12 @@ class GripperCommandRequest:
2350
2916
  is_valid, error_str = self.validate_dh_ag(self.dh_ag)
2351
2917
  if not is_valid:
2352
2918
  raise TypeError(error_str)
2919
+ is_valid, error_str = self.validate_dh_pgc(self.dh_pgc)
2920
+ if not is_valid:
2921
+ raise TypeError(error_str)
2922
+ is_valid, error_str = self.validate_dh_cgi(self.dh_cgi)
2923
+ if not is_valid:
2924
+ raise TypeError(error_str)
2353
2925
 
2354
2926
  def parse_gripper_command_request(data: object):
2355
2927
  return GripperCommandRequest(
@@ -2357,6 +2929,8 @@ def parse_gripper_command_request(data: object):
2357
2929
  onrobot_2fg7=parse_on_robot_2_fg_7_gripper_command_request(data["onrobot_2fg7"]) if "onrobot_2fg7" in data else None,
2358
2930
  onrobot_3fg15=parse_on_robot_3_fg_15_gripper_command_request(data["onrobot_3fg15"]) if "onrobot_3fg15" in data else None,
2359
2931
  dh_ag=parse_dhag_gripper_command_request(data["dh_ag"]) if "dh_ag" in data else None,
2932
+ dh_pgc=parse_dhpgc_gripper_command_request(data["dh_pgc"]) if "dh_pgc" in data else None,
2933
+ dh_cgi=parse_dhcgi_gripper_command_request(data["dh_cgi"]) if "dh_cgi" in data else None,
2360
2934
  )
2361
2935
 
2362
2936
  def serialize_gripper_command_request(data: GripperCommandRequest) -> object:
@@ -2365,6 +2939,8 @@ def serialize_gripper_command_request(data: GripperCommandRequest) -> object:
2365
2939
  "onrobot_2fg7": None if data.onrobot_2fg7 is None else serialize_on_robot_2_fg_7_gripper_command_request(data.onrobot_2fg7),
2366
2940
  "onrobot_3fg15": None if data.onrobot_3fg15 is None else serialize_on_robot_3_fg_15_gripper_command_request(data.onrobot_3fg15),
2367
2941
  "dh_ag": None if data.dh_ag is None else serialize_dhag_gripper_command_request(data.dh_ag),
2942
+ "dh_pgc": None if data.dh_pgc is None else serialize_dhpgc_gripper_command_request(data.dh_pgc),
2943
+ "dh_cgi": None if data.dh_cgi is None else serialize_dhcgi_gripper_command_request(data.dh_cgi),
2368
2944
  }
2369
2945
 
2370
2946
  @dataclass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: standardbots
3
- Version: 2.20240401.10
3
+ Version: 2.20240614.1
4
4
  Summary: Standard Bots RO1 Robotics API
5
5
  Home-page:
6
6
  Author: Standard Bots Support
@@ -0,0 +1,8 @@
1
+ standardbots/__init__.py,sha256=PT6Z2HPama2fb6SaNhF3J1skpYABQWGgDzKEtQY6BDM,29
2
+ standardbots/auto_generated/__init__.py,sha256=VAagcHj0dIrqiorgYQuKWE9d1VCbXiPdHwmRfXBP11Q,76
3
+ standardbots/auto_generated/apis.py,sha256=CVvWWCL76fQuIlI2VWsZJxQh3X8aRg21mZe1gQDNhS8,43961
4
+ standardbots/auto_generated/models.py,sha256=Qwujg2IBGYOGstWp5V-AWT93I_6k2GyGk88AxS4gmIM,123444
5
+ standardbots-2.20240614.1.dist-info/METADATA,sha256=Kptu9YHe7HN0FiFgKeJ28AK65BanYPLQtSoIPtgCGrY,412
6
+ standardbots-2.20240614.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
7
+ standardbots-2.20240614.1.dist-info/top_level.txt,sha256=8Cb2uu5PLn7ayueFHSdWnFlKJzvSezDEKTHiup_bxH0,13
8
+ standardbots-2.20240614.1.dist-info/RECORD,,
@@ -1,8 +0,0 @@
1
- standardbots/__init__.py,sha256=PT6Z2HPama2fb6SaNhF3J1skpYABQWGgDzKEtQY6BDM,29
2
- standardbots/auto_generated/__init__.py,sha256=VAagcHj0dIrqiorgYQuKWE9d1VCbXiPdHwmRfXBP11Q,76
3
- standardbots/auto_generated/apis.py,sha256=HCuY6q3omR0UCeT0zYdGoFbccEYq_nutNFdYs8SfEQU,34791
4
- standardbots/auto_generated/models.py,sha256=9d-fCGApp7LUyDWiJ14QmCZjcf730gQmUYPcewG6W60,101836
5
- standardbots-2.20240401.10.dist-info/METADATA,sha256=bg8QuYnazrO8P8ezyBclZssBZKgb9LHBYMvdMfBZe0U,413
6
- standardbots-2.20240401.10.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
7
- standardbots-2.20240401.10.dist-info/top_level.txt,sha256=8Cb2uu5PLn7ayueFHSdWnFlKJzvSezDEKTHiup_bxH0,13
8
- standardbots-2.20240401.10.dist-info/RECORD,,