standardbots 2.20250512.49__py3-none-any.whl → 2.20250801.2__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 +297 -0
- standardbots/auto_generated/models.py +1237 -138
- {standardbots-2.20250512.49.dist-info → standardbots-2.20250801.2.dist-info}/METADATA +1 -1
- standardbots-2.20250801.2.dist-info/RECORD +12 -0
- standardbots-2.20250512.49.dist-info/RECORD +0 -12
- {standardbots-2.20250512.49.dist-info → standardbots-2.20250801.2.dist-info}/WHEEL +0 -0
- {standardbots-2.20250512.49.dist-info → standardbots-2.20250801.2.dist-info}/top_level.txt +0 -0
|
@@ -327,6 +327,66 @@ def parse_brakes_state_enum(data: object) -> BrakesStateEnum:
|
|
|
327
327
|
def serialize_brakes_state_enum(data: Union[BrakesStateEnum, str]) -> object:
|
|
328
328
|
return BrakesStateEnum(data).value
|
|
329
329
|
|
|
330
|
+
@dataclass
|
|
331
|
+
class CameraConfiguration:
|
|
332
|
+
"""Configuration settings for a camera."""
|
|
333
|
+
fps: Union[int, None] = None
|
|
334
|
+
width: Union[int, None] = None
|
|
335
|
+
height: Union[int, None] = None
|
|
336
|
+
|
|
337
|
+
def validate_fps(self, value: int) -> Tuple[bool, str]:
|
|
338
|
+
if value is None:
|
|
339
|
+
return [True, ""]
|
|
340
|
+
|
|
341
|
+
if not isinstance(value, int):
|
|
342
|
+
return [False, "fps must be of type int for CameraConfiguration, got " + type(value).__name__]
|
|
343
|
+
|
|
344
|
+
return [True, ""]
|
|
345
|
+
|
|
346
|
+
def validate_width(self, value: int) -> Tuple[bool, str]:
|
|
347
|
+
if value is None:
|
|
348
|
+
return [True, ""]
|
|
349
|
+
|
|
350
|
+
if not isinstance(value, int):
|
|
351
|
+
return [False, "width must be of type int for CameraConfiguration, got " + type(value).__name__]
|
|
352
|
+
|
|
353
|
+
return [True, ""]
|
|
354
|
+
|
|
355
|
+
def validate_height(self, value: int) -> Tuple[bool, str]:
|
|
356
|
+
if value is None:
|
|
357
|
+
return [True, ""]
|
|
358
|
+
|
|
359
|
+
if not isinstance(value, int):
|
|
360
|
+
return [False, "height must be of type int for CameraConfiguration, got " + type(value).__name__]
|
|
361
|
+
|
|
362
|
+
return [True, ""]
|
|
363
|
+
|
|
364
|
+
def __post_init__(self):
|
|
365
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
366
|
+
is_valid, error_str = self.validate_fps(self.fps)
|
|
367
|
+
if not is_valid:
|
|
368
|
+
raise TypeError(error_str)
|
|
369
|
+
is_valid, error_str = self.validate_width(self.width)
|
|
370
|
+
if not is_valid:
|
|
371
|
+
raise TypeError(error_str)
|
|
372
|
+
is_valid, error_str = self.validate_height(self.height)
|
|
373
|
+
if not is_valid:
|
|
374
|
+
raise TypeError(error_str)
|
|
375
|
+
|
|
376
|
+
def parse_camera_configuration(data: object):
|
|
377
|
+
return CameraConfiguration(
|
|
378
|
+
fps=parse_u_32(data["fps"]) if "fps" in data and data.get("fps") is not None else None,
|
|
379
|
+
width=parse_u_32(data["width"]) if "width" in data and data.get("width") is not None else None,
|
|
380
|
+
height=parse_u_32(data["height"]) if "height" in data and data.get("height") is not None else None,
|
|
381
|
+
)
|
|
382
|
+
|
|
383
|
+
def serialize_camera_configuration(data: CameraConfiguration) -> object:
|
|
384
|
+
return {
|
|
385
|
+
"fps": None if data.fps is None else serialize_u_32(data.fps),
|
|
386
|
+
"width": None if data.width is None else serialize_u_32(data.width),
|
|
387
|
+
"height": None if data.height is None else serialize_u_32(data.height),
|
|
388
|
+
}
|
|
389
|
+
|
|
330
390
|
@dataclass
|
|
331
391
|
class CameraIntrinsics:
|
|
332
392
|
"""Intrinsic parameters of the camera."""
|
|
@@ -612,6 +672,20 @@ def serialize_camera_status(data: CameraStatus) -> object:
|
|
|
612
672
|
"message": None if data.message is None else serialize_str(data.message),
|
|
613
673
|
}
|
|
614
674
|
|
|
675
|
+
class CameraType(Enum):
|
|
676
|
+
UNKOWN = "UNKOWN"
|
|
677
|
+
"""Enum UNKOWN = `UNKOWN`"""
|
|
678
|
+
REALSENSE = "REALSENSE"
|
|
679
|
+
"""Enum REALSENSE = `REALSENSE`"""
|
|
680
|
+
LUXONIS = "LUXONIS"
|
|
681
|
+
"""Enum LUXONIS = `LUXONIS`"""
|
|
682
|
+
|
|
683
|
+
def parse_camera_type(data: object) -> CameraType:
|
|
684
|
+
return CameraType(data)
|
|
685
|
+
|
|
686
|
+
def serialize_camera_type(data: Union[CameraType, str]) -> object:
|
|
687
|
+
return CameraType(data).value
|
|
688
|
+
|
|
615
689
|
@dataclass
|
|
616
690
|
class CartesianPose:
|
|
617
691
|
"""Cartesian pose
|
|
@@ -1111,6 +1185,109 @@ def serialize_environment_variable(data: EnvironmentVariable) -> object:
|
|
|
1111
1185
|
"value": None if data.value is None else serialize_str(data.value),
|
|
1112
1186
|
}
|
|
1113
1187
|
|
|
1188
|
+
@dataclass
|
|
1189
|
+
class EquipmentConfig:
|
|
1190
|
+
"""Equipment configuration
|
|
1191
|
+
"""
|
|
1192
|
+
id: Union[str, None] = None
|
|
1193
|
+
name: Union[str, None] = None
|
|
1194
|
+
kind: Union[str, None] = None
|
|
1195
|
+
is_enabled: Union[bool, None] = None
|
|
1196
|
+
config: Union[str, None] = None
|
|
1197
|
+
|
|
1198
|
+
def validate_id(self, value: str) -> Tuple[bool, str]:
|
|
1199
|
+
if value is None:
|
|
1200
|
+
return [False, "id is required for EquipmentConfig"]
|
|
1201
|
+
|
|
1202
|
+
if not isinstance(value, str):
|
|
1203
|
+
return [False, "id must be of type str for EquipmentConfig, got " + type(value).__name__]
|
|
1204
|
+
|
|
1205
|
+
return [True, ""]
|
|
1206
|
+
|
|
1207
|
+
def validate_name(self, value: str) -> Tuple[bool, str]:
|
|
1208
|
+
if value is None:
|
|
1209
|
+
return [True, ""]
|
|
1210
|
+
|
|
1211
|
+
if not isinstance(value, str):
|
|
1212
|
+
return [False, "name must be of type str for EquipmentConfig, got " + type(value).__name__]
|
|
1213
|
+
|
|
1214
|
+
return [True, ""]
|
|
1215
|
+
|
|
1216
|
+
def validate_kind(self, value: str) -> Tuple[bool, str]:
|
|
1217
|
+
if value is None:
|
|
1218
|
+
return [False, "kind is required for EquipmentConfig"]
|
|
1219
|
+
|
|
1220
|
+
if not isinstance(value, str):
|
|
1221
|
+
return [False, "kind must be of type str for EquipmentConfig, got " + type(value).__name__]
|
|
1222
|
+
|
|
1223
|
+
return [True, ""]
|
|
1224
|
+
|
|
1225
|
+
def validate_is_enabled(self, value: bool) -> Tuple[bool, str]:
|
|
1226
|
+
if value is None:
|
|
1227
|
+
return [False, "is_enabled is required for EquipmentConfig"]
|
|
1228
|
+
|
|
1229
|
+
if not isinstance(value, bool):
|
|
1230
|
+
return [False, "is_enabled must be of type bool for EquipmentConfig, got " + type(value).__name__]
|
|
1231
|
+
|
|
1232
|
+
return [True, ""]
|
|
1233
|
+
|
|
1234
|
+
def validate_config(self, value: str) -> Tuple[bool, str]:
|
|
1235
|
+
if value is None:
|
|
1236
|
+
return [False, "config is required for EquipmentConfig"]
|
|
1237
|
+
|
|
1238
|
+
if not isinstance(value, str):
|
|
1239
|
+
return [False, "config must be of type str for EquipmentConfig, got " + type(value).__name__]
|
|
1240
|
+
|
|
1241
|
+
return [True, ""]
|
|
1242
|
+
|
|
1243
|
+
def __post_init__(self):
|
|
1244
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
1245
|
+
is_valid, error_str = self.validate_id(self.id)
|
|
1246
|
+
if not is_valid:
|
|
1247
|
+
raise TypeError(error_str)
|
|
1248
|
+
is_valid, error_str = self.validate_name(self.name)
|
|
1249
|
+
if not is_valid:
|
|
1250
|
+
raise TypeError(error_str)
|
|
1251
|
+
is_valid, error_str = self.validate_kind(self.kind)
|
|
1252
|
+
if not is_valid:
|
|
1253
|
+
raise TypeError(error_str)
|
|
1254
|
+
is_valid, error_str = self.validate_is_enabled(self.is_enabled)
|
|
1255
|
+
if not is_valid:
|
|
1256
|
+
raise TypeError(error_str)
|
|
1257
|
+
is_valid, error_str = self.validate_config(self.config)
|
|
1258
|
+
if not is_valid:
|
|
1259
|
+
raise TypeError(error_str)
|
|
1260
|
+
|
|
1261
|
+
def parse_equipment_config(data: object):
|
|
1262
|
+
return EquipmentConfig(
|
|
1263
|
+
id=parse_str(data["id"]) if "id" in data and data.get("id") is not None else None,
|
|
1264
|
+
name=parse_str(data["name"]) if "name" in data and data.get("name") is not None else None,
|
|
1265
|
+
kind=parse_str(data["kind"]) if "kind" in data and data.get("kind") is not None else None,
|
|
1266
|
+
is_enabled=parse_bool(data["is_enabled"]) if "is_enabled" in data and data.get("is_enabled") is not None else None,
|
|
1267
|
+
config=parse_str(data["config"]) if "config" in data and data.get("config") is not None else None,
|
|
1268
|
+
)
|
|
1269
|
+
|
|
1270
|
+
def serialize_equipment_config(data: EquipmentConfig) -> object:
|
|
1271
|
+
return {
|
|
1272
|
+
"id": serialize_str(data.id),
|
|
1273
|
+
"name": None if data.name is None else serialize_str(data.name),
|
|
1274
|
+
"kind": serialize_str(data.kind),
|
|
1275
|
+
"is_enabled": serialize_bool(data.is_enabled),
|
|
1276
|
+
"config": serialize_str(data.config),
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
EquipmentKeyAssignments = Dict[str, str]
|
|
1280
|
+
|
|
1281
|
+
def parse_equipment_key_assignments(data: object) -> EquipmentKeyAssignments:
|
|
1282
|
+
return {
|
|
1283
|
+
parse_str(key): parse_str(value) for key, value in data.items()
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
def serialize_equipment_key_assignments(data: EquipmentKeyAssignments) -> object:
|
|
1287
|
+
return {
|
|
1288
|
+
serialize_str(key): serialize_str(value) for key, value in data.items()
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1114
1291
|
class ErrorEnum(Enum):
|
|
1115
1292
|
AuthorizationRequired = "authorization_required"
|
|
1116
1293
|
"""Authorization required to access this resource"""
|
|
@@ -1946,6 +2123,81 @@ def serialize_payload_state_response(data: PayloadStateResponse) -> object:
|
|
|
1946
2123
|
"mass": None if data.mass is None else serialize_f_64(data.mass),
|
|
1947
2124
|
}
|
|
1948
2125
|
|
|
2126
|
+
@dataclass
|
|
2127
|
+
class Peer:
|
|
2128
|
+
"""Information about a registered messenger peer"""
|
|
2129
|
+
id: Union[str, None] = None
|
|
2130
|
+
host: Union[str, None] = None
|
|
2131
|
+
requestPort: Union[int, None] = None
|
|
2132
|
+
topicPort: Union[int, None] = None
|
|
2133
|
+
|
|
2134
|
+
def validate_id(self, value: str) -> Tuple[bool, str]:
|
|
2135
|
+
if value is None:
|
|
2136
|
+
return [False, "id is required for Peer"]
|
|
2137
|
+
|
|
2138
|
+
if not isinstance(value, str):
|
|
2139
|
+
return [False, "id must be of type str for Peer, got " + type(value).__name__]
|
|
2140
|
+
|
|
2141
|
+
return [True, ""]
|
|
2142
|
+
|
|
2143
|
+
def validate_host(self, value: str) -> Tuple[bool, str]:
|
|
2144
|
+
if value is None:
|
|
2145
|
+
return [False, "host is required for Peer"]
|
|
2146
|
+
|
|
2147
|
+
if not isinstance(value, str):
|
|
2148
|
+
return [False, "host must be of type str for Peer, got " + type(value).__name__]
|
|
2149
|
+
|
|
2150
|
+
return [True, ""]
|
|
2151
|
+
|
|
2152
|
+
def validate_requestPort(self, value: int) -> Tuple[bool, str]:
|
|
2153
|
+
if value is None:
|
|
2154
|
+
return [False, "requestPort is required for Peer"]
|
|
2155
|
+
|
|
2156
|
+
if not isinstance(value, int):
|
|
2157
|
+
return [False, "requestPort must be of type int for Peer, got " + type(value).__name__]
|
|
2158
|
+
|
|
2159
|
+
return [True, ""]
|
|
2160
|
+
|
|
2161
|
+
def validate_topicPort(self, value: int) -> Tuple[bool, str]:
|
|
2162
|
+
if value is None:
|
|
2163
|
+
return [False, "topicPort is required for Peer"]
|
|
2164
|
+
|
|
2165
|
+
if not isinstance(value, int):
|
|
2166
|
+
return [False, "topicPort must be of type int for Peer, got " + type(value).__name__]
|
|
2167
|
+
|
|
2168
|
+
return [True, ""]
|
|
2169
|
+
|
|
2170
|
+
def __post_init__(self):
|
|
2171
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
2172
|
+
is_valid, error_str = self.validate_id(self.id)
|
|
2173
|
+
if not is_valid:
|
|
2174
|
+
raise TypeError(error_str)
|
|
2175
|
+
is_valid, error_str = self.validate_host(self.host)
|
|
2176
|
+
if not is_valid:
|
|
2177
|
+
raise TypeError(error_str)
|
|
2178
|
+
is_valid, error_str = self.validate_requestPort(self.requestPort)
|
|
2179
|
+
if not is_valid:
|
|
2180
|
+
raise TypeError(error_str)
|
|
2181
|
+
is_valid, error_str = self.validate_topicPort(self.topicPort)
|
|
2182
|
+
if not is_valid:
|
|
2183
|
+
raise TypeError(error_str)
|
|
2184
|
+
|
|
2185
|
+
def parse_peer(data: object):
|
|
2186
|
+
return Peer(
|
|
2187
|
+
id=parse_str(data["id"]) if "id" in data and data.get("id") is not None else None,
|
|
2188
|
+
host=parse_str(data["host"]) if "host" in data and data.get("host") is not None else None,
|
|
2189
|
+
requestPort=parse_i_32(data["requestPort"]) if "requestPort" in data and data.get("requestPort") is not None else None,
|
|
2190
|
+
topicPort=parse_i_32(data["topicPort"]) if "topicPort" in data and data.get("topicPort") is not None else None,
|
|
2191
|
+
)
|
|
2192
|
+
|
|
2193
|
+
def serialize_peer(data: Peer) -> object:
|
|
2194
|
+
return {
|
|
2195
|
+
"id": serialize_str(data.id),
|
|
2196
|
+
"host": serialize_str(data.host),
|
|
2197
|
+
"requestPort": serialize_i_32(data.requestPort),
|
|
2198
|
+
"topicPort": serialize_i_32(data.topicPort),
|
|
2199
|
+
}
|
|
2200
|
+
|
|
1949
2201
|
@dataclass
|
|
1950
2202
|
class Plane:
|
|
1951
2203
|
"""Plane in 3D space"""
|
|
@@ -2226,6 +2478,8 @@ class RecorderStatus(Enum):
|
|
|
2226
2478
|
"""Enum Error = `error`"""
|
|
2227
2479
|
Complete = "complete"
|
|
2228
2480
|
"""Enum Complete = `complete`"""
|
|
2481
|
+
Initializing = "initializing"
|
|
2482
|
+
"""Enum Initializing = `initializing`"""
|
|
2229
2483
|
|
|
2230
2484
|
def parse_recorder_status(data: object) -> RecorderStatus:
|
|
2231
2485
|
return RecorderStatus(data)
|
|
@@ -2251,6 +2505,141 @@ def parse_recovery_type_enum(data: object) -> RecoveryTypeEnum:
|
|
|
2251
2505
|
def serialize_recovery_type_enum(data: Union[RecoveryTypeEnum, str]) -> object:
|
|
2252
2506
|
return RecoveryTypeEnum(data).value
|
|
2253
2507
|
|
|
2508
|
+
@dataclass
|
|
2509
|
+
class RegisterPeerRequest:
|
|
2510
|
+
"""Request to register a new peer with the messenger system"""
|
|
2511
|
+
targetId: Union[str, None] = None
|
|
2512
|
+
senderId: Union[str, None] = None
|
|
2513
|
+
host: Union[str, None] = None
|
|
2514
|
+
requestPort: Union[int, None] = None
|
|
2515
|
+
topicPort: Union[int, None] = None
|
|
2516
|
+
|
|
2517
|
+
def validate_targetId(self, value: str) -> Tuple[bool, str]:
|
|
2518
|
+
if value is None:
|
|
2519
|
+
return [False, "targetId is required for RegisterPeerRequest"]
|
|
2520
|
+
|
|
2521
|
+
if not isinstance(value, str):
|
|
2522
|
+
return [False, "targetId must be of type str for RegisterPeerRequest, got " + type(value).__name__]
|
|
2523
|
+
|
|
2524
|
+
return [True, ""]
|
|
2525
|
+
|
|
2526
|
+
def validate_senderId(self, value: str) -> Tuple[bool, str]:
|
|
2527
|
+
if value is None:
|
|
2528
|
+
return [False, "senderId is required for RegisterPeerRequest"]
|
|
2529
|
+
|
|
2530
|
+
if not isinstance(value, str):
|
|
2531
|
+
return [False, "senderId must be of type str for RegisterPeerRequest, got " + type(value).__name__]
|
|
2532
|
+
|
|
2533
|
+
return [True, ""]
|
|
2534
|
+
|
|
2535
|
+
def validate_host(self, value: str) -> Tuple[bool, str]:
|
|
2536
|
+
if value is None:
|
|
2537
|
+
return [False, "host is required for RegisterPeerRequest"]
|
|
2538
|
+
|
|
2539
|
+
if not isinstance(value, str):
|
|
2540
|
+
return [False, "host must be of type str for RegisterPeerRequest, got " + type(value).__name__]
|
|
2541
|
+
|
|
2542
|
+
return [True, ""]
|
|
2543
|
+
|
|
2544
|
+
def validate_requestPort(self, value: int) -> Tuple[bool, str]:
|
|
2545
|
+
if value is None:
|
|
2546
|
+
return [False, "requestPort is required for RegisterPeerRequest"]
|
|
2547
|
+
|
|
2548
|
+
if not isinstance(value, int):
|
|
2549
|
+
return [False, "requestPort must be of type int for RegisterPeerRequest, got " + type(value).__name__]
|
|
2550
|
+
|
|
2551
|
+
return [True, ""]
|
|
2552
|
+
|
|
2553
|
+
def validate_topicPort(self, value: int) -> Tuple[bool, str]:
|
|
2554
|
+
if value is None:
|
|
2555
|
+
return [False, "topicPort is required for RegisterPeerRequest"]
|
|
2556
|
+
|
|
2557
|
+
if not isinstance(value, int):
|
|
2558
|
+
return [False, "topicPort must be of type int for RegisterPeerRequest, got " + type(value).__name__]
|
|
2559
|
+
|
|
2560
|
+
return [True, ""]
|
|
2561
|
+
|
|
2562
|
+
def __post_init__(self):
|
|
2563
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
2564
|
+
is_valid, error_str = self.validate_targetId(self.targetId)
|
|
2565
|
+
if not is_valid:
|
|
2566
|
+
raise TypeError(error_str)
|
|
2567
|
+
is_valid, error_str = self.validate_senderId(self.senderId)
|
|
2568
|
+
if not is_valid:
|
|
2569
|
+
raise TypeError(error_str)
|
|
2570
|
+
is_valid, error_str = self.validate_host(self.host)
|
|
2571
|
+
if not is_valid:
|
|
2572
|
+
raise TypeError(error_str)
|
|
2573
|
+
is_valid, error_str = self.validate_requestPort(self.requestPort)
|
|
2574
|
+
if not is_valid:
|
|
2575
|
+
raise TypeError(error_str)
|
|
2576
|
+
is_valid, error_str = self.validate_topicPort(self.topicPort)
|
|
2577
|
+
if not is_valid:
|
|
2578
|
+
raise TypeError(error_str)
|
|
2579
|
+
|
|
2580
|
+
def parse_register_peer_request(data: object):
|
|
2581
|
+
return RegisterPeerRequest(
|
|
2582
|
+
targetId=parse_str(data["targetId"]) if "targetId" in data and data.get("targetId") is not None else None,
|
|
2583
|
+
senderId=parse_str(data["senderId"]) if "senderId" in data and data.get("senderId") is not None else None,
|
|
2584
|
+
host=parse_str(data["host"]) if "host" in data and data.get("host") is not None else None,
|
|
2585
|
+
requestPort=parse_i_32(data["requestPort"]) if "requestPort" in data and data.get("requestPort") is not None else None,
|
|
2586
|
+
topicPort=parse_i_32(data["topicPort"]) if "topicPort" in data and data.get("topicPort") is not None else None,
|
|
2587
|
+
)
|
|
2588
|
+
|
|
2589
|
+
def serialize_register_peer_request(data: RegisterPeerRequest) -> object:
|
|
2590
|
+
return {
|
|
2591
|
+
"targetId": serialize_str(data.targetId),
|
|
2592
|
+
"senderId": serialize_str(data.senderId),
|
|
2593
|
+
"host": serialize_str(data.host),
|
|
2594
|
+
"requestPort": serialize_i_32(data.requestPort),
|
|
2595
|
+
"topicPort": serialize_i_32(data.topicPort),
|
|
2596
|
+
}
|
|
2597
|
+
|
|
2598
|
+
@dataclass
|
|
2599
|
+
class RegisterPeerResponse:
|
|
2600
|
+
"""Response after attempting to register a peer"""
|
|
2601
|
+
success: Union[bool, None] = None
|
|
2602
|
+
message: Union[str, None] = None
|
|
2603
|
+
|
|
2604
|
+
def validate_success(self, value: bool) -> Tuple[bool, str]:
|
|
2605
|
+
if value is None:
|
|
2606
|
+
return [False, "success is required for RegisterPeerResponse"]
|
|
2607
|
+
|
|
2608
|
+
if not isinstance(value, bool):
|
|
2609
|
+
return [False, "success must be of type bool for RegisterPeerResponse, got " + type(value).__name__]
|
|
2610
|
+
|
|
2611
|
+
return [True, ""]
|
|
2612
|
+
|
|
2613
|
+
def validate_message(self, value: str) -> Tuple[bool, str]:
|
|
2614
|
+
if value is None:
|
|
2615
|
+
return [True, ""]
|
|
2616
|
+
|
|
2617
|
+
if not isinstance(value, str):
|
|
2618
|
+
return [False, "message must be of type str for RegisterPeerResponse, got " + type(value).__name__]
|
|
2619
|
+
|
|
2620
|
+
return [True, ""]
|
|
2621
|
+
|
|
2622
|
+
def __post_init__(self):
|
|
2623
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
2624
|
+
is_valid, error_str = self.validate_success(self.success)
|
|
2625
|
+
if not is_valid:
|
|
2626
|
+
raise TypeError(error_str)
|
|
2627
|
+
is_valid, error_str = self.validate_message(self.message)
|
|
2628
|
+
if not is_valid:
|
|
2629
|
+
raise TypeError(error_str)
|
|
2630
|
+
|
|
2631
|
+
def parse_register_peer_response(data: object):
|
|
2632
|
+
return RegisterPeerResponse(
|
|
2633
|
+
success=parse_bool(data["success"]) if "success" in data and data.get("success") is not None else None,
|
|
2634
|
+
message=parse_str(data["message"]) if "message" in data and data.get("message") is not None else None,
|
|
2635
|
+
)
|
|
2636
|
+
|
|
2637
|
+
def serialize_register_peer_response(data: RegisterPeerResponse) -> object:
|
|
2638
|
+
return {
|
|
2639
|
+
"success": serialize_bool(data.success),
|
|
2640
|
+
"message": None if data.message is None else serialize_str(data.message),
|
|
2641
|
+
}
|
|
2642
|
+
|
|
2254
2643
|
class RobotControlModeEnum(Enum):
|
|
2255
2644
|
Api = "api"
|
|
2256
2645
|
"""The robot is controlled via the Standard Bots Robot API (this API)"""
|
|
@@ -2659,11 +3048,116 @@ def serialize_sensor(data: Sensor) -> object:
|
|
|
2659
3048
|
}
|
|
2660
3049
|
|
|
2661
3050
|
@dataclass
|
|
2662
|
-
class
|
|
2663
|
-
"""
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
3051
|
+
class SensorConfig:
|
|
3052
|
+
"""Config of the sensor"""
|
|
3053
|
+
id: Union[str, None] = None
|
|
3054
|
+
equipmentName: Union[str, None] = None
|
|
3055
|
+
sensorType: Union[str, None] = None
|
|
3056
|
+
dataType: Union[str, None] = None
|
|
3057
|
+
isSecondary: Union[bool, None] = None
|
|
3058
|
+
metadata: Union[str, None] = None
|
|
3059
|
+
|
|
3060
|
+
def validate_id(self, value: str) -> Tuple[bool, str]:
|
|
3061
|
+
if value is None:
|
|
3062
|
+
return [True, ""]
|
|
3063
|
+
|
|
3064
|
+
if not isinstance(value, str):
|
|
3065
|
+
return [False, "id must be of type str for SensorConfig, got " + type(value).__name__]
|
|
3066
|
+
|
|
3067
|
+
return [True, ""]
|
|
3068
|
+
|
|
3069
|
+
def validate_equipmentName(self, value: str) -> Tuple[bool, str]:
|
|
3070
|
+
if value is None:
|
|
3071
|
+
return [True, ""]
|
|
3072
|
+
|
|
3073
|
+
if not isinstance(value, str):
|
|
3074
|
+
return [False, "equipmentName must be of type str for SensorConfig, got " + type(value).__name__]
|
|
3075
|
+
|
|
3076
|
+
return [True, ""]
|
|
3077
|
+
|
|
3078
|
+
def validate_sensorType(self, value: str) -> Tuple[bool, str]:
|
|
3079
|
+
if value is None:
|
|
3080
|
+
return [True, ""]
|
|
3081
|
+
|
|
3082
|
+
if not isinstance(value, str):
|
|
3083
|
+
return [False, "sensorType must be of type str for SensorConfig, got " + type(value).__name__]
|
|
3084
|
+
|
|
3085
|
+
return [True, ""]
|
|
3086
|
+
|
|
3087
|
+
def validate_dataType(self, value: str) -> Tuple[bool, str]:
|
|
3088
|
+
if value is None:
|
|
3089
|
+
return [True, ""]
|
|
3090
|
+
|
|
3091
|
+
if not isinstance(value, str):
|
|
3092
|
+
return [False, "dataType must be of type str for SensorConfig, got " + type(value).__name__]
|
|
3093
|
+
|
|
3094
|
+
return [True, ""]
|
|
3095
|
+
|
|
3096
|
+
def validate_isSecondary(self, value: bool) -> Tuple[bool, str]:
|
|
3097
|
+
if value is None:
|
|
3098
|
+
return [True, ""]
|
|
3099
|
+
|
|
3100
|
+
if not isinstance(value, bool):
|
|
3101
|
+
return [False, "isSecondary must be of type bool for SensorConfig, got " + type(value).__name__]
|
|
3102
|
+
|
|
3103
|
+
return [True, ""]
|
|
3104
|
+
|
|
3105
|
+
def validate_metadata(self, value: str) -> Tuple[bool, str]:
|
|
3106
|
+
if value is None:
|
|
3107
|
+
return [True, ""]
|
|
3108
|
+
|
|
3109
|
+
if not isinstance(value, str):
|
|
3110
|
+
return [False, "metadata must be of type str for SensorConfig, got " + type(value).__name__]
|
|
3111
|
+
|
|
3112
|
+
return [True, ""]
|
|
3113
|
+
|
|
3114
|
+
def __post_init__(self):
|
|
3115
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
3116
|
+
is_valid, error_str = self.validate_id(self.id)
|
|
3117
|
+
if not is_valid:
|
|
3118
|
+
raise TypeError(error_str)
|
|
3119
|
+
is_valid, error_str = self.validate_equipmentName(self.equipmentName)
|
|
3120
|
+
if not is_valid:
|
|
3121
|
+
raise TypeError(error_str)
|
|
3122
|
+
is_valid, error_str = self.validate_sensorType(self.sensorType)
|
|
3123
|
+
if not is_valid:
|
|
3124
|
+
raise TypeError(error_str)
|
|
3125
|
+
is_valid, error_str = self.validate_dataType(self.dataType)
|
|
3126
|
+
if not is_valid:
|
|
3127
|
+
raise TypeError(error_str)
|
|
3128
|
+
is_valid, error_str = self.validate_isSecondary(self.isSecondary)
|
|
3129
|
+
if not is_valid:
|
|
3130
|
+
raise TypeError(error_str)
|
|
3131
|
+
is_valid, error_str = self.validate_metadata(self.metadata)
|
|
3132
|
+
if not is_valid:
|
|
3133
|
+
raise TypeError(error_str)
|
|
3134
|
+
|
|
3135
|
+
def parse_sensor_config(data: object):
|
|
3136
|
+
return SensorConfig(
|
|
3137
|
+
id=parse_str(data["id"]) if "id" in data and data.get("id") is not None else None,
|
|
3138
|
+
equipmentName=parse_str(data["equipmentName"]) if "equipmentName" in data and data.get("equipmentName") is not None else None,
|
|
3139
|
+
sensorType=parse_str(data["sensorType"]) if "sensorType" in data and data.get("sensorType") is not None else None,
|
|
3140
|
+
dataType=parse_str(data["dataType"]) if "dataType" in data and data.get("dataType") is not None else None,
|
|
3141
|
+
isSecondary=parse_bool(data["isSecondary"]) if "isSecondary" in data and data.get("isSecondary") is not None else None,
|
|
3142
|
+
metadata=parse_str(data["metadata"]) if "metadata" in data and data.get("metadata") is not None else None,
|
|
3143
|
+
)
|
|
3144
|
+
|
|
3145
|
+
def serialize_sensor_config(data: SensorConfig) -> object:
|
|
3146
|
+
return {
|
|
3147
|
+
"id": None if data.id is None else serialize_str(data.id),
|
|
3148
|
+
"equipmentName": None if data.equipmentName is None else serialize_str(data.equipmentName),
|
|
3149
|
+
"sensorType": None if data.sensorType is None else serialize_str(data.sensorType),
|
|
3150
|
+
"dataType": None if data.dataType is None else serialize_str(data.dataType),
|
|
3151
|
+
"isSecondary": None if data.isSecondary is None else serialize_bool(data.isSecondary),
|
|
3152
|
+
"metadata": None if data.metadata is None else serialize_str(data.metadata),
|
|
3153
|
+
}
|
|
3154
|
+
|
|
3155
|
+
@dataclass
|
|
3156
|
+
class SetRatioControlRequest:
|
|
3157
|
+
"""Request to set ratio control parameters"""
|
|
3158
|
+
enabled: Union[bool, None] = None
|
|
3159
|
+
value: Union[float, None] = None
|
|
3160
|
+
|
|
2667
3161
|
def validate_enabled(self, value: bool) -> Tuple[bool, str]:
|
|
2668
3162
|
if value is None:
|
|
2669
3163
|
return [True, ""]
|
|
@@ -2703,6 +3197,30 @@ def serialize_set_ratio_control_request(data: SetRatioControlRequest) -> object:
|
|
|
2703
3197
|
"value": None if data.value is None else serialize_f_64(data.value),
|
|
2704
3198
|
}
|
|
2705
3199
|
|
|
3200
|
+
class SignalMessageType(Enum):
|
|
3201
|
+
JoinRoom = "join-room"
|
|
3202
|
+
"""Enum JoinRoom = `join-room`"""
|
|
3203
|
+
Connect = "connect"
|
|
3204
|
+
"""Enum Connect = `connect`"""
|
|
3205
|
+
Join = "join"
|
|
3206
|
+
"""Enum Join = `join`"""
|
|
3207
|
+
Leave = "leave"
|
|
3208
|
+
"""Enum Leave = `leave`"""
|
|
3209
|
+
Offer = "offer"
|
|
3210
|
+
"""Enum Offer = `offer`"""
|
|
3211
|
+
Answer = "answer"
|
|
3212
|
+
"""Enum Answer = `answer`"""
|
|
3213
|
+
IceCandidate = "ice-candidate"
|
|
3214
|
+
"""Enum IceCandidate = `ice-candidate`"""
|
|
3215
|
+
Heartbeat = "heartbeat"
|
|
3216
|
+
"""Enum Heartbeat = `heartbeat`"""
|
|
3217
|
+
|
|
3218
|
+
def parse_signal_message_type(data: object) -> SignalMessageType:
|
|
3219
|
+
return SignalMessageType(data)
|
|
3220
|
+
|
|
3221
|
+
def serialize_signal_message_type(data: Union[SignalMessageType, str]) -> object:
|
|
3222
|
+
return SignalMessageType(data).value
|
|
3223
|
+
|
|
2706
3224
|
SkillsList = List[str]
|
|
2707
3225
|
|
|
2708
3226
|
def parse_skills_list(data: object) -> SkillsList:
|
|
@@ -2741,36 +3259,6 @@ def serialize_speech_to_text_request(data: SpeechToTextRequest) -> object:
|
|
|
2741
3259
|
"encoded_audio_data": None if data.encoded_audio_data is None else serialize_str(data.encoded_audio_data),
|
|
2742
3260
|
}
|
|
2743
3261
|
|
|
2744
|
-
@dataclass
|
|
2745
|
-
class StartRecordingRequest:
|
|
2746
|
-
"""Request to start recording movement and camera data"""
|
|
2747
|
-
startTime: Union[str, None] = None
|
|
2748
|
-
|
|
2749
|
-
def validate_startTime(self, value: str) -> Tuple[bool, str]:
|
|
2750
|
-
if value is None:
|
|
2751
|
-
return [True, ""]
|
|
2752
|
-
|
|
2753
|
-
if not isinstance(value, str):
|
|
2754
|
-
return [False, "startTime must be of type str for StartRecordingRequest, got " + type(value).__name__]
|
|
2755
|
-
|
|
2756
|
-
return [True, ""]
|
|
2757
|
-
|
|
2758
|
-
def __post_init__(self):
|
|
2759
|
-
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
2760
|
-
is_valid, error_str = self.validate_startTime(self.startTime)
|
|
2761
|
-
if not is_valid:
|
|
2762
|
-
raise TypeError(error_str)
|
|
2763
|
-
|
|
2764
|
-
def parse_start_recording_request(data: object):
|
|
2765
|
-
return StartRecordingRequest(
|
|
2766
|
-
startTime=parse_str(data["startTime"]) if "startTime" in data and data.get("startTime") is not None else None,
|
|
2767
|
-
)
|
|
2768
|
-
|
|
2769
|
-
def serialize_start_recording_request(data: StartRecordingRequest) -> object:
|
|
2770
|
-
return {
|
|
2771
|
-
"startTime": None if data.startTime is None else serialize_str(data.startTime),
|
|
2772
|
-
}
|
|
2773
|
-
|
|
2774
3262
|
class StatusHealthEnum(Enum):
|
|
2775
3263
|
Ok = "ok"
|
|
2776
3264
|
"""Enum Ok = `ok`"""
|
|
@@ -3022,6 +3510,96 @@ def serialize_trigger_fault_request(data: TriggerFaultRequest) -> object:
|
|
|
3022
3510
|
"isRecoverable": None if data.isRecoverable is None else serialize_bool(data.isRecoverable),
|
|
3023
3511
|
}
|
|
3024
3512
|
|
|
3513
|
+
@dataclass
|
|
3514
|
+
class UnregisterPeerRequest:
|
|
3515
|
+
"""Request to unregister an existing peer from the messenger system"""
|
|
3516
|
+
targetId: Union[str, None] = None
|
|
3517
|
+
senderId: Union[str, None] = None
|
|
3518
|
+
|
|
3519
|
+
def validate_targetId(self, value: str) -> Tuple[bool, str]:
|
|
3520
|
+
if value is None:
|
|
3521
|
+
return [False, "targetId is required for UnregisterPeerRequest"]
|
|
3522
|
+
|
|
3523
|
+
if not isinstance(value, str):
|
|
3524
|
+
return [False, "targetId must be of type str for UnregisterPeerRequest, got " + type(value).__name__]
|
|
3525
|
+
|
|
3526
|
+
return [True, ""]
|
|
3527
|
+
|
|
3528
|
+
def validate_senderId(self, value: str) -> Tuple[bool, str]:
|
|
3529
|
+
if value is None:
|
|
3530
|
+
return [False, "senderId is required for UnregisterPeerRequest"]
|
|
3531
|
+
|
|
3532
|
+
if not isinstance(value, str):
|
|
3533
|
+
return [False, "senderId must be of type str for UnregisterPeerRequest, got " + type(value).__name__]
|
|
3534
|
+
|
|
3535
|
+
return [True, ""]
|
|
3536
|
+
|
|
3537
|
+
def __post_init__(self):
|
|
3538
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
3539
|
+
is_valid, error_str = self.validate_targetId(self.targetId)
|
|
3540
|
+
if not is_valid:
|
|
3541
|
+
raise TypeError(error_str)
|
|
3542
|
+
is_valid, error_str = self.validate_senderId(self.senderId)
|
|
3543
|
+
if not is_valid:
|
|
3544
|
+
raise TypeError(error_str)
|
|
3545
|
+
|
|
3546
|
+
def parse_unregister_peer_request(data: object):
|
|
3547
|
+
return UnregisterPeerRequest(
|
|
3548
|
+
targetId=parse_str(data["targetId"]) if "targetId" in data and data.get("targetId") is not None else None,
|
|
3549
|
+
senderId=parse_str(data["senderId"]) if "senderId" in data and data.get("senderId") is not None else None,
|
|
3550
|
+
)
|
|
3551
|
+
|
|
3552
|
+
def serialize_unregister_peer_request(data: UnregisterPeerRequest) -> object:
|
|
3553
|
+
return {
|
|
3554
|
+
"targetId": serialize_str(data.targetId),
|
|
3555
|
+
"senderId": serialize_str(data.senderId),
|
|
3556
|
+
}
|
|
3557
|
+
|
|
3558
|
+
@dataclass
|
|
3559
|
+
class UnregisterPeerResponse:
|
|
3560
|
+
"""Response after attempting to unregister a peer"""
|
|
3561
|
+
success: Union[bool, None] = None
|
|
3562
|
+
message: Union[str, None] = None
|
|
3563
|
+
|
|
3564
|
+
def validate_success(self, value: bool) -> Tuple[bool, str]:
|
|
3565
|
+
if value is None:
|
|
3566
|
+
return [False, "success is required for UnregisterPeerResponse"]
|
|
3567
|
+
|
|
3568
|
+
if not isinstance(value, bool):
|
|
3569
|
+
return [False, "success must be of type bool for UnregisterPeerResponse, got " + type(value).__name__]
|
|
3570
|
+
|
|
3571
|
+
return [True, ""]
|
|
3572
|
+
|
|
3573
|
+
def validate_message(self, value: str) -> Tuple[bool, str]:
|
|
3574
|
+
if value is None:
|
|
3575
|
+
return [True, ""]
|
|
3576
|
+
|
|
3577
|
+
if not isinstance(value, str):
|
|
3578
|
+
return [False, "message must be of type str for UnregisterPeerResponse, got " + type(value).__name__]
|
|
3579
|
+
|
|
3580
|
+
return [True, ""]
|
|
3581
|
+
|
|
3582
|
+
def __post_init__(self):
|
|
3583
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
3584
|
+
is_valid, error_str = self.validate_success(self.success)
|
|
3585
|
+
if not is_valid:
|
|
3586
|
+
raise TypeError(error_str)
|
|
3587
|
+
is_valid, error_str = self.validate_message(self.message)
|
|
3588
|
+
if not is_valid:
|
|
3589
|
+
raise TypeError(error_str)
|
|
3590
|
+
|
|
3591
|
+
def parse_unregister_peer_response(data: object):
|
|
3592
|
+
return UnregisterPeerResponse(
|
|
3593
|
+
success=parse_bool(data["success"]) if "success" in data and data.get("success") is not None else None,
|
|
3594
|
+
message=parse_str(data["message"]) if "message" in data and data.get("message") is not None else None,
|
|
3595
|
+
)
|
|
3596
|
+
|
|
3597
|
+
def serialize_unregister_peer_response(data: UnregisterPeerResponse) -> object:
|
|
3598
|
+
return {
|
|
3599
|
+
"success": serialize_bool(data.success),
|
|
3600
|
+
"message": None if data.message is None else serialize_str(data.message),
|
|
3601
|
+
}
|
|
3602
|
+
|
|
3025
3603
|
@dataclass
|
|
3026
3604
|
class ArmPositionUpdateFailureEvent:
|
|
3027
3605
|
"""Move robot event when movement failed"""
|
|
@@ -3151,6 +3729,141 @@ def serialize_camera_frame_request(data: CameraFrameRequest) -> object:
|
|
|
3151
3729
|
"camera_settings": None if data.camera_settings is None else serialize_camera_settings(data.camera_settings),
|
|
3152
3730
|
}
|
|
3153
3731
|
|
|
3732
|
+
@dataclass
|
|
3733
|
+
class CameraDevice:
|
|
3734
|
+
"""Information about a camera device."""
|
|
3735
|
+
id: Union[str, None] = None
|
|
3736
|
+
name: Union[str, None] = None
|
|
3737
|
+
label: Union[str, None] = None
|
|
3738
|
+
type: Union[CameraType, None] = None
|
|
3739
|
+
model_name: Union[str, None] = None
|
|
3740
|
+
enabled: Union[bool, None] = None
|
|
3741
|
+
ip_address: Union[str, None] = None
|
|
3742
|
+
config: Union[CameraConfiguration, None] = None
|
|
3743
|
+
|
|
3744
|
+
def validate_id(self, value: str) -> Tuple[bool, str]:
|
|
3745
|
+
if value is None:
|
|
3746
|
+
return [True, ""]
|
|
3747
|
+
|
|
3748
|
+
if not isinstance(value, str):
|
|
3749
|
+
return [False, "id must be of type str for CameraDevice, got " + type(value).__name__]
|
|
3750
|
+
|
|
3751
|
+
return [True, ""]
|
|
3752
|
+
|
|
3753
|
+
def validate_name(self, value: str) -> Tuple[bool, str]:
|
|
3754
|
+
if value is None:
|
|
3755
|
+
return [True, ""]
|
|
3756
|
+
|
|
3757
|
+
if not isinstance(value, str):
|
|
3758
|
+
return [False, "name must be of type str for CameraDevice, got " + type(value).__name__]
|
|
3759
|
+
|
|
3760
|
+
return [True, ""]
|
|
3761
|
+
|
|
3762
|
+
def validate_label(self, value: str) -> Tuple[bool, str]:
|
|
3763
|
+
if value is None:
|
|
3764
|
+
return [True, ""]
|
|
3765
|
+
|
|
3766
|
+
if not isinstance(value, str):
|
|
3767
|
+
return [False, "label must be of type str for CameraDevice, got " + type(value).__name__]
|
|
3768
|
+
|
|
3769
|
+
return [True, ""]
|
|
3770
|
+
|
|
3771
|
+
def validate_type(self, value: CameraType) -> Tuple[bool, str]:
|
|
3772
|
+
if value is None:
|
|
3773
|
+
return [True, ""]
|
|
3774
|
+
|
|
3775
|
+
if not ((isinstance(value, str) and CameraType in ['UNKOWN', 'REALSENSE', 'LUXONIS']) or isinstance(value, CameraType)):
|
|
3776
|
+
return [False, "type must be of type CameraType for CameraDevice, got " + type(value).__name__]
|
|
3777
|
+
|
|
3778
|
+
return [True, ""]
|
|
3779
|
+
|
|
3780
|
+
def validate_model_name(self, value: str) -> Tuple[bool, str]:
|
|
3781
|
+
if value is None:
|
|
3782
|
+
return [True, ""]
|
|
3783
|
+
|
|
3784
|
+
if not isinstance(value, str):
|
|
3785
|
+
return [False, "model_name must be of type str for CameraDevice, got " + type(value).__name__]
|
|
3786
|
+
|
|
3787
|
+
return [True, ""]
|
|
3788
|
+
|
|
3789
|
+
def validate_enabled(self, value: bool) -> Tuple[bool, str]:
|
|
3790
|
+
if value is None:
|
|
3791
|
+
return [True, ""]
|
|
3792
|
+
|
|
3793
|
+
if not isinstance(value, bool):
|
|
3794
|
+
return [False, "enabled must be of type bool for CameraDevice, got " + type(value).__name__]
|
|
3795
|
+
|
|
3796
|
+
return [True, ""]
|
|
3797
|
+
|
|
3798
|
+
def validate_ip_address(self, value: str) -> Tuple[bool, str]:
|
|
3799
|
+
if value is None:
|
|
3800
|
+
return [True, ""]
|
|
3801
|
+
|
|
3802
|
+
if not isinstance(value, str):
|
|
3803
|
+
return [False, "ip_address must be of type str for CameraDevice, got " + type(value).__name__]
|
|
3804
|
+
|
|
3805
|
+
return [True, ""]
|
|
3806
|
+
|
|
3807
|
+
def validate_config(self, value: CameraConfiguration) -> Tuple[bool, str]:
|
|
3808
|
+
if value is None:
|
|
3809
|
+
return [True, ""]
|
|
3810
|
+
|
|
3811
|
+
if not isinstance(value, CameraConfiguration):
|
|
3812
|
+
return [False, "config must be of type CameraConfiguration for CameraDevice, got " + type(value).__name__]
|
|
3813
|
+
|
|
3814
|
+
return [True, ""]
|
|
3815
|
+
|
|
3816
|
+
def __post_init__(self):
|
|
3817
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
3818
|
+
is_valid, error_str = self.validate_id(self.id)
|
|
3819
|
+
if not is_valid:
|
|
3820
|
+
raise TypeError(error_str)
|
|
3821
|
+
is_valid, error_str = self.validate_name(self.name)
|
|
3822
|
+
if not is_valid:
|
|
3823
|
+
raise TypeError(error_str)
|
|
3824
|
+
is_valid, error_str = self.validate_label(self.label)
|
|
3825
|
+
if not is_valid:
|
|
3826
|
+
raise TypeError(error_str)
|
|
3827
|
+
is_valid, error_str = self.validate_type(self.type)
|
|
3828
|
+
if not is_valid:
|
|
3829
|
+
raise TypeError(error_str)
|
|
3830
|
+
is_valid, error_str = self.validate_model_name(self.model_name)
|
|
3831
|
+
if not is_valid:
|
|
3832
|
+
raise TypeError(error_str)
|
|
3833
|
+
is_valid, error_str = self.validate_enabled(self.enabled)
|
|
3834
|
+
if not is_valid:
|
|
3835
|
+
raise TypeError(error_str)
|
|
3836
|
+
is_valid, error_str = self.validate_ip_address(self.ip_address)
|
|
3837
|
+
if not is_valid:
|
|
3838
|
+
raise TypeError(error_str)
|
|
3839
|
+
is_valid, error_str = self.validate_config(self.config)
|
|
3840
|
+
if not is_valid:
|
|
3841
|
+
raise TypeError(error_str)
|
|
3842
|
+
|
|
3843
|
+
def parse_camera_device(data: object):
|
|
3844
|
+
return CameraDevice(
|
|
3845
|
+
id=parse_str(data["id"]) if "id" in data and data.get("id") is not None else None,
|
|
3846
|
+
name=parse_str(data["name"]) if "name" in data and data.get("name") is not None else None,
|
|
3847
|
+
label=parse_str(data["label"]) if "label" in data and data.get("label") is not None else None,
|
|
3848
|
+
type=parse_camera_type(data["type"]) if "type" in data and data.get("type") is not None else None,
|
|
3849
|
+
model_name=parse_str(data["model_name"]) if "model_name" in data and data.get("model_name") is not None else None,
|
|
3850
|
+
enabled=parse_bool(data["enabled"]) if "enabled" in data and data.get("enabled") is not None else None,
|
|
3851
|
+
ip_address=parse_str(data["ip_address"]) if "ip_address" in data and data.get("ip_address") is not None else None,
|
|
3852
|
+
config=parse_camera_configuration(data["config"]) if "config" in data and data.get("config") is not None else None,
|
|
3853
|
+
)
|
|
3854
|
+
|
|
3855
|
+
def serialize_camera_device(data: CameraDevice) -> object:
|
|
3856
|
+
return {
|
|
3857
|
+
"id": None if data.id is None else serialize_str(data.id),
|
|
3858
|
+
"name": None if data.name is None else serialize_str(data.name),
|
|
3859
|
+
"label": None if data.label is None else serialize_str(data.label),
|
|
3860
|
+
"type": None if data.type is None else serialize_camera_type(data.type),
|
|
3861
|
+
"model_name": None if data.model_name is None else serialize_str(data.model_name),
|
|
3862
|
+
"enabled": None if data.enabled is None else serialize_bool(data.enabled),
|
|
3863
|
+
"ip_address": None if data.ip_address is None else serialize_str(data.ip_address),
|
|
3864
|
+
"config": None if data.config is None else serialize_camera_configuration(data.config),
|
|
3865
|
+
}
|
|
3866
|
+
|
|
3154
3867
|
@dataclass
|
|
3155
3868
|
class CartesianOffsetResponse:
|
|
3156
3869
|
"""Response with the cartesian offset value
|
|
@@ -3435,6 +4148,59 @@ def parse_environment_variables_list(data: object) -> EnvironmentVariablesList:
|
|
|
3435
4148
|
def serialize_environment_variables_list(data: EnvironmentVariablesList) -> List[object]:
|
|
3436
4149
|
return [serialize_environment_variable(item) for item in data]
|
|
3437
4150
|
|
|
4151
|
+
EquipmentConfigList = List[EquipmentConfig]
|
|
4152
|
+
|
|
4153
|
+
def parse_equipment_config_list(data: object) -> EquipmentConfigList:
|
|
4154
|
+
return [parse_equipment_config(item) for item in data]
|
|
4155
|
+
|
|
4156
|
+
def serialize_equipment_config_list(data: EquipmentConfigList) -> List[object]:
|
|
4157
|
+
return [serialize_equipment_config(item) for item in data]
|
|
4158
|
+
|
|
4159
|
+
@dataclass
|
|
4160
|
+
class StartRecordingRequest:
|
|
4161
|
+
"""Request to start recording movement and camera data"""
|
|
4162
|
+
startTime: Union[str, None] = None
|
|
4163
|
+
equipmentKeyAssignments: Union[EquipmentKeyAssignments, None] = None
|
|
4164
|
+
|
|
4165
|
+
def validate_startTime(self, value: str) -> Tuple[bool, str]:
|
|
4166
|
+
if value is None:
|
|
4167
|
+
return [True, ""]
|
|
4168
|
+
|
|
4169
|
+
if not isinstance(value, str):
|
|
4170
|
+
return [False, "startTime must be of type str for StartRecordingRequest, got " + type(value).__name__]
|
|
4171
|
+
|
|
4172
|
+
return [True, ""]
|
|
4173
|
+
|
|
4174
|
+
def validate_equipmentKeyAssignments(self, value: EquipmentKeyAssignments) -> Tuple[bool, str]:
|
|
4175
|
+
if value is None:
|
|
4176
|
+
return [True, ""]
|
|
4177
|
+
|
|
4178
|
+
if not (isinstance(value, dict) and all((isinstance(k, str) and isinstance(val, str)) for k, val in value.items())):
|
|
4179
|
+
return [False, "equipmentKeyAssignments must be of type EquipmentKeyAssignments for StartRecordingRequest, got " + type(value).__name__]
|
|
4180
|
+
|
|
4181
|
+
return [True, ""]
|
|
4182
|
+
|
|
4183
|
+
def __post_init__(self):
|
|
4184
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
4185
|
+
is_valid, error_str = self.validate_startTime(self.startTime)
|
|
4186
|
+
if not is_valid:
|
|
4187
|
+
raise TypeError(error_str)
|
|
4188
|
+
is_valid, error_str = self.validate_equipmentKeyAssignments(self.equipmentKeyAssignments)
|
|
4189
|
+
if not is_valid:
|
|
4190
|
+
raise TypeError(error_str)
|
|
4191
|
+
|
|
4192
|
+
def parse_start_recording_request(data: object):
|
|
4193
|
+
return StartRecordingRequest(
|
|
4194
|
+
startTime=parse_str(data["startTime"]) if "startTime" in data and data.get("startTime") is not None else None,
|
|
4195
|
+
equipmentKeyAssignments=parse_equipment_key_assignments(data["equipmentKeyAssignments"]) if "equipmentKeyAssignments" in data and data.get("equipmentKeyAssignments") is not None else None,
|
|
4196
|
+
)
|
|
4197
|
+
|
|
4198
|
+
def serialize_start_recording_request(data: StartRecordingRequest) -> object:
|
|
4199
|
+
return {
|
|
4200
|
+
"startTime": None if data.startTime is None else serialize_str(data.startTime),
|
|
4201
|
+
"equipmentKeyAssignments": None if data.equipmentKeyAssignments is None else serialize_equipment_key_assignments(data.equipmentKeyAssignments),
|
|
4202
|
+
}
|
|
4203
|
+
|
|
3438
4204
|
@dataclass
|
|
3439
4205
|
class ErrorResponse:
|
|
3440
4206
|
"""Error Response"""
|
|
@@ -5029,6 +5795,14 @@ def serialize_on_robot_3_fg_15_gripper_configuration(data: OnRobot3FG15GripperCo
|
|
|
5029
5795
|
"finger_offset": None if data.finger_offset is None else serialize_f_64(data.finger_offset),
|
|
5030
5796
|
}
|
|
5031
5797
|
|
|
5798
|
+
PeerList = List[Peer]
|
|
5799
|
+
|
|
5800
|
+
def parse_peer_list(data: object) -> PeerList:
|
|
5801
|
+
return [parse_peer(item) for item in data]
|
|
5802
|
+
|
|
5803
|
+
def serialize_peer_list(data: PeerList) -> List[object]:
|
|
5804
|
+
return [serialize_peer(item) for item in data]
|
|
5805
|
+
|
|
5032
5806
|
PlanesList = List[Plane]
|
|
5033
5807
|
|
|
5034
5808
|
def parse_planes_list(data: object) -> PlanesList:
|
|
@@ -5127,96 +5901,6 @@ def serialize_orientation(data: Orientation) -> object:
|
|
|
5127
5901
|
"quaternion": None if data.quaternion is None else serialize_quaternion(data.quaternion),
|
|
5128
5902
|
}
|
|
5129
5903
|
|
|
5130
|
-
@dataclass
|
|
5131
|
-
class RecorderBotDetails:
|
|
5132
|
-
"""Details of the bot"""
|
|
5133
|
-
botId: Union[str, None] = None
|
|
5134
|
-
alias: Union[str, None] = None
|
|
5135
|
-
isSecondary: Union[bool, None] = None
|
|
5136
|
-
isEnabled: Union[bool, None] = None
|
|
5137
|
-
status: Union[RecorderStatus, None] = None
|
|
5138
|
-
|
|
5139
|
-
def validate_botId(self, value: str) -> Tuple[bool, str]:
|
|
5140
|
-
if value is None:
|
|
5141
|
-
return [True, ""]
|
|
5142
|
-
|
|
5143
|
-
if not isinstance(value, str):
|
|
5144
|
-
return [False, "botId must be of type str for RecorderBotDetails, got " + type(value).__name__]
|
|
5145
|
-
|
|
5146
|
-
return [True, ""]
|
|
5147
|
-
|
|
5148
|
-
def validate_alias(self, value: str) -> Tuple[bool, str]:
|
|
5149
|
-
if value is None:
|
|
5150
|
-
return [True, ""]
|
|
5151
|
-
|
|
5152
|
-
if not isinstance(value, str):
|
|
5153
|
-
return [False, "alias must be of type str for RecorderBotDetails, got " + type(value).__name__]
|
|
5154
|
-
|
|
5155
|
-
return [True, ""]
|
|
5156
|
-
|
|
5157
|
-
def validate_isSecondary(self, value: bool) -> Tuple[bool, str]:
|
|
5158
|
-
if value is None:
|
|
5159
|
-
return [True, ""]
|
|
5160
|
-
|
|
5161
|
-
if not isinstance(value, bool):
|
|
5162
|
-
return [False, "isSecondary must be of type bool for RecorderBotDetails, got " + type(value).__name__]
|
|
5163
|
-
|
|
5164
|
-
return [True, ""]
|
|
5165
|
-
|
|
5166
|
-
def validate_isEnabled(self, value: bool) -> Tuple[bool, str]:
|
|
5167
|
-
if value is None:
|
|
5168
|
-
return [True, ""]
|
|
5169
|
-
|
|
5170
|
-
if not isinstance(value, bool):
|
|
5171
|
-
return [False, "isEnabled must be of type bool for RecorderBotDetails, got " + type(value).__name__]
|
|
5172
|
-
|
|
5173
|
-
return [True, ""]
|
|
5174
|
-
|
|
5175
|
-
def validate_status(self, value: RecorderStatus) -> Tuple[bool, str]:
|
|
5176
|
-
if value is None:
|
|
5177
|
-
return [True, ""]
|
|
5178
|
-
|
|
5179
|
-
if not ((isinstance(value, str) and RecorderStatus in ['not_recording', 'recording', 'error', 'complete']) or isinstance(value, RecorderStatus)):
|
|
5180
|
-
return [False, "status must be of type RecorderStatus for RecorderBotDetails, got " + type(value).__name__]
|
|
5181
|
-
|
|
5182
|
-
return [True, ""]
|
|
5183
|
-
|
|
5184
|
-
def __post_init__(self):
|
|
5185
|
-
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
5186
|
-
is_valid, error_str = self.validate_botId(self.botId)
|
|
5187
|
-
if not is_valid:
|
|
5188
|
-
raise TypeError(error_str)
|
|
5189
|
-
is_valid, error_str = self.validate_alias(self.alias)
|
|
5190
|
-
if not is_valid:
|
|
5191
|
-
raise TypeError(error_str)
|
|
5192
|
-
is_valid, error_str = self.validate_isSecondary(self.isSecondary)
|
|
5193
|
-
if not is_valid:
|
|
5194
|
-
raise TypeError(error_str)
|
|
5195
|
-
is_valid, error_str = self.validate_isEnabled(self.isEnabled)
|
|
5196
|
-
if not is_valid:
|
|
5197
|
-
raise TypeError(error_str)
|
|
5198
|
-
is_valid, error_str = self.validate_status(self.status)
|
|
5199
|
-
if not is_valid:
|
|
5200
|
-
raise TypeError(error_str)
|
|
5201
|
-
|
|
5202
|
-
def parse_recorder_bot_details(data: object):
|
|
5203
|
-
return RecorderBotDetails(
|
|
5204
|
-
botId=parse_str(data["botId"]) if "botId" in data and data.get("botId") is not None else None,
|
|
5205
|
-
alias=parse_str(data["alias"]) if "alias" in data and data.get("alias") is not None else None,
|
|
5206
|
-
isSecondary=parse_bool(data["isSecondary"]) if "isSecondary" in data and data.get("isSecondary") is not None else None,
|
|
5207
|
-
isEnabled=parse_bool(data["isEnabled"]) if "isEnabled" in data and data.get("isEnabled") is not None else None,
|
|
5208
|
-
status=parse_recorder_status(data["status"]) if "status" in data and data.get("status") is not None else None,
|
|
5209
|
-
)
|
|
5210
|
-
|
|
5211
|
-
def serialize_recorder_bot_details(data: RecorderBotDetails) -> object:
|
|
5212
|
-
return {
|
|
5213
|
-
"botId": None if data.botId is None else serialize_str(data.botId),
|
|
5214
|
-
"alias": None if data.alias is None else serialize_str(data.alias),
|
|
5215
|
-
"isSecondary": None if data.isSecondary is None else serialize_bool(data.isSecondary),
|
|
5216
|
-
"isEnabled": None if data.isEnabled is None else serialize_bool(data.isEnabled),
|
|
5217
|
-
"status": None if data.status is None else serialize_recorder_status(data.status),
|
|
5218
|
-
}
|
|
5219
|
-
|
|
5220
5904
|
@dataclass
|
|
5221
5905
|
class FailureStateDetails:
|
|
5222
5906
|
"""Failure state details."""
|
|
@@ -5519,11 +6203,109 @@ def serialize_play_routine_request(data: PlayRoutineRequest) -> object:
|
|
|
5519
6203
|
|
|
5520
6204
|
SensorsList = List[Sensor]
|
|
5521
6205
|
|
|
5522
|
-
def parse_sensors_list(data: object) -> SensorsList:
|
|
5523
|
-
return [parse_sensor(item) for item in data]
|
|
6206
|
+
def parse_sensors_list(data: object) -> SensorsList:
|
|
6207
|
+
return [parse_sensor(item) for item in data]
|
|
6208
|
+
|
|
6209
|
+
def serialize_sensors_list(data: SensorsList) -> List[object]:
|
|
6210
|
+
return [serialize_sensor(item) for item in data]
|
|
6211
|
+
|
|
6212
|
+
SensorConfigList = List[SensorConfig]
|
|
6213
|
+
|
|
6214
|
+
def parse_sensor_config_list(data: object) -> SensorConfigList:
|
|
6215
|
+
return [parse_sensor_config(item) for item in data]
|
|
6216
|
+
|
|
6217
|
+
def serialize_sensor_config_list(data: SensorConfigList) -> List[object]:
|
|
6218
|
+
return [serialize_sensor_config(item) for item in data]
|
|
6219
|
+
|
|
6220
|
+
@dataclass
|
|
6221
|
+
class SignalMessage:
|
|
6222
|
+
"""WebRTC signaling message"""
|
|
6223
|
+
type: Union[SignalMessageType, None] = None
|
|
6224
|
+
senderId: Union[str, None] = None
|
|
6225
|
+
receiverId: Union[str, None] = None
|
|
6226
|
+
roomId: Union[str, None] = None
|
|
6227
|
+
data: Union[str, None] = None
|
|
6228
|
+
|
|
6229
|
+
def validate_type(self, value: SignalMessageType) -> Tuple[bool, str]:
|
|
6230
|
+
if value is None:
|
|
6231
|
+
return [True, ""]
|
|
6232
|
+
|
|
6233
|
+
if not ((isinstance(value, str) and SignalMessageType in ['join-room', 'connect', 'join', 'leave', 'offer', 'answer', 'ice-candidate', 'heartbeat']) or isinstance(value, SignalMessageType)):
|
|
6234
|
+
return [False, "type must be of type SignalMessageType for SignalMessage, got " + type(value).__name__]
|
|
6235
|
+
|
|
6236
|
+
return [True, ""]
|
|
6237
|
+
|
|
6238
|
+
def validate_senderId(self, value: str) -> Tuple[bool, str]:
|
|
6239
|
+
if value is None:
|
|
6240
|
+
return [True, ""]
|
|
6241
|
+
|
|
6242
|
+
if not isinstance(value, str):
|
|
6243
|
+
return [False, "senderId must be of type str for SignalMessage, got " + type(value).__name__]
|
|
6244
|
+
|
|
6245
|
+
return [True, ""]
|
|
6246
|
+
|
|
6247
|
+
def validate_receiverId(self, value: str) -> Tuple[bool, str]:
|
|
6248
|
+
if value is None:
|
|
6249
|
+
return [True, ""]
|
|
6250
|
+
|
|
6251
|
+
if not isinstance(value, str):
|
|
6252
|
+
return [False, "receiverId must be of type str for SignalMessage, got " + type(value).__name__]
|
|
6253
|
+
|
|
6254
|
+
return [True, ""]
|
|
6255
|
+
|
|
6256
|
+
def validate_roomId(self, value: str) -> Tuple[bool, str]:
|
|
6257
|
+
if value is None:
|
|
6258
|
+
return [True, ""]
|
|
6259
|
+
|
|
6260
|
+
if not isinstance(value, str):
|
|
6261
|
+
return [False, "roomId must be of type str for SignalMessage, got " + type(value).__name__]
|
|
6262
|
+
|
|
6263
|
+
return [True, ""]
|
|
6264
|
+
|
|
6265
|
+
def validate_data(self, value: str) -> Tuple[bool, str]:
|
|
6266
|
+
if value is None:
|
|
6267
|
+
return [True, ""]
|
|
6268
|
+
|
|
6269
|
+
if not isinstance(value, str):
|
|
6270
|
+
return [False, "data must be of type str for SignalMessage, got " + type(value).__name__]
|
|
6271
|
+
|
|
6272
|
+
return [True, ""]
|
|
6273
|
+
|
|
6274
|
+
def __post_init__(self):
|
|
6275
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
6276
|
+
is_valid, error_str = self.validate_type(self.type)
|
|
6277
|
+
if not is_valid:
|
|
6278
|
+
raise TypeError(error_str)
|
|
6279
|
+
is_valid, error_str = self.validate_senderId(self.senderId)
|
|
6280
|
+
if not is_valid:
|
|
6281
|
+
raise TypeError(error_str)
|
|
6282
|
+
is_valid, error_str = self.validate_receiverId(self.receiverId)
|
|
6283
|
+
if not is_valid:
|
|
6284
|
+
raise TypeError(error_str)
|
|
6285
|
+
is_valid, error_str = self.validate_roomId(self.roomId)
|
|
6286
|
+
if not is_valid:
|
|
6287
|
+
raise TypeError(error_str)
|
|
6288
|
+
is_valid, error_str = self.validate_data(self.data)
|
|
6289
|
+
if not is_valid:
|
|
6290
|
+
raise TypeError(error_str)
|
|
6291
|
+
|
|
6292
|
+
def parse_signal_message(data: object):
|
|
6293
|
+
return SignalMessage(
|
|
6294
|
+
type=parse_signal_message_type(data["type"]) if "type" in data and data.get("type") is not None else None,
|
|
6295
|
+
senderId=parse_str(data["senderId"]) if "senderId" in data and data.get("senderId") is not None else None,
|
|
6296
|
+
receiverId=parse_str(data["receiverId"]) if "receiverId" in data and data.get("receiverId") is not None else None,
|
|
6297
|
+
roomId=parse_str(data["roomId"]) if "roomId" in data and data.get("roomId") is not None else None,
|
|
6298
|
+
data=parse_str(data["data"]) if "data" in data and data.get("data") is not None else None,
|
|
6299
|
+
)
|
|
5524
6300
|
|
|
5525
|
-
def
|
|
5526
|
-
return
|
|
6301
|
+
def serialize_signal_message(data: SignalMessage) -> object:
|
|
6302
|
+
return {
|
|
6303
|
+
"type": None if data.type is None else serialize_signal_message_type(data.type),
|
|
6304
|
+
"senderId": None if data.senderId is None else serialize_str(data.senderId),
|
|
6305
|
+
"receiverId": None if data.receiverId is None else serialize_str(data.receiverId),
|
|
6306
|
+
"roomId": None if data.roomId is None else serialize_str(data.roomId),
|
|
6307
|
+
"data": None if data.data is None else serialize_str(data.data),
|
|
6308
|
+
}
|
|
5527
6309
|
|
|
5528
6310
|
@dataclass
|
|
5529
6311
|
class TextToSkillRequest:
|
|
@@ -5615,6 +6397,111 @@ def serialize_status_health_response(data: StatusHealthResponse) -> object:
|
|
|
5615
6397
|
"build": None if data.build is None else serialize_status_version_data(data.build),
|
|
5616
6398
|
}
|
|
5617
6399
|
|
|
6400
|
+
@dataclass
|
|
6401
|
+
class RecorderBotDetails:
|
|
6402
|
+
"""Details of the bot"""
|
|
6403
|
+
botId: Union[str, None] = None
|
|
6404
|
+
alias: Union[str, None] = None
|
|
6405
|
+
isSecondary: Union[bool, None] = None
|
|
6406
|
+
isEnabled: Union[bool, None] = None
|
|
6407
|
+
status: Union[RecorderStatus, None] = None
|
|
6408
|
+
errors: Union[StringArray, None] = None
|
|
6409
|
+
|
|
6410
|
+
def validate_botId(self, value: str) -> Tuple[bool, str]:
|
|
6411
|
+
if value is None:
|
|
6412
|
+
return [True, ""]
|
|
6413
|
+
|
|
6414
|
+
if not isinstance(value, str):
|
|
6415
|
+
return [False, "botId must be of type str for RecorderBotDetails, got " + type(value).__name__]
|
|
6416
|
+
|
|
6417
|
+
return [True, ""]
|
|
6418
|
+
|
|
6419
|
+
def validate_alias(self, value: str) -> Tuple[bool, str]:
|
|
6420
|
+
if value is None:
|
|
6421
|
+
return [True, ""]
|
|
6422
|
+
|
|
6423
|
+
if not isinstance(value, str):
|
|
6424
|
+
return [False, "alias must be of type str for RecorderBotDetails, got " + type(value).__name__]
|
|
6425
|
+
|
|
6426
|
+
return [True, ""]
|
|
6427
|
+
|
|
6428
|
+
def validate_isSecondary(self, value: bool) -> Tuple[bool, str]:
|
|
6429
|
+
if value is None:
|
|
6430
|
+
return [True, ""]
|
|
6431
|
+
|
|
6432
|
+
if not isinstance(value, bool):
|
|
6433
|
+
return [False, "isSecondary must be of type bool for RecorderBotDetails, got " + type(value).__name__]
|
|
6434
|
+
|
|
6435
|
+
return [True, ""]
|
|
6436
|
+
|
|
6437
|
+
def validate_isEnabled(self, value: bool) -> Tuple[bool, str]:
|
|
6438
|
+
if value is None:
|
|
6439
|
+
return [True, ""]
|
|
6440
|
+
|
|
6441
|
+
if not isinstance(value, bool):
|
|
6442
|
+
return [False, "isEnabled must be of type bool for RecorderBotDetails, got " + type(value).__name__]
|
|
6443
|
+
|
|
6444
|
+
return [True, ""]
|
|
6445
|
+
|
|
6446
|
+
def validate_status(self, value: RecorderStatus) -> Tuple[bool, str]:
|
|
6447
|
+
if value is None:
|
|
6448
|
+
return [True, ""]
|
|
6449
|
+
|
|
6450
|
+
if not ((isinstance(value, str) and RecorderStatus in ['not_recording', 'recording', 'error', 'complete', 'initializing']) or isinstance(value, RecorderStatus)):
|
|
6451
|
+
return [False, "status must be of type RecorderStatus for RecorderBotDetails, got " + type(value).__name__]
|
|
6452
|
+
|
|
6453
|
+
return [True, ""]
|
|
6454
|
+
|
|
6455
|
+
def validate_errors(self, value: StringArray) -> Tuple[bool, str]:
|
|
6456
|
+
if value is None:
|
|
6457
|
+
return [True, ""]
|
|
6458
|
+
|
|
6459
|
+
if not (isinstance(value, list) and all(isinstance(x, str) for x in value)):
|
|
6460
|
+
return [False, "errors must be of type StringArray for RecorderBotDetails, got " + type(value).__name__]
|
|
6461
|
+
|
|
6462
|
+
return [True, ""]
|
|
6463
|
+
|
|
6464
|
+
def __post_init__(self):
|
|
6465
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
6466
|
+
is_valid, error_str = self.validate_botId(self.botId)
|
|
6467
|
+
if not is_valid:
|
|
6468
|
+
raise TypeError(error_str)
|
|
6469
|
+
is_valid, error_str = self.validate_alias(self.alias)
|
|
6470
|
+
if not is_valid:
|
|
6471
|
+
raise TypeError(error_str)
|
|
6472
|
+
is_valid, error_str = self.validate_isSecondary(self.isSecondary)
|
|
6473
|
+
if not is_valid:
|
|
6474
|
+
raise TypeError(error_str)
|
|
6475
|
+
is_valid, error_str = self.validate_isEnabled(self.isEnabled)
|
|
6476
|
+
if not is_valid:
|
|
6477
|
+
raise TypeError(error_str)
|
|
6478
|
+
is_valid, error_str = self.validate_status(self.status)
|
|
6479
|
+
if not is_valid:
|
|
6480
|
+
raise TypeError(error_str)
|
|
6481
|
+
is_valid, error_str = self.validate_errors(self.errors)
|
|
6482
|
+
if not is_valid:
|
|
6483
|
+
raise TypeError(error_str)
|
|
6484
|
+
|
|
6485
|
+
def parse_recorder_bot_details(data: object):
|
|
6486
|
+
return RecorderBotDetails(
|
|
6487
|
+
botId=parse_str(data["botId"]) if "botId" in data and data.get("botId") is not None else None,
|
|
6488
|
+
alias=parse_str(data["alias"]) if "alias" in data and data.get("alias") is not None else None,
|
|
6489
|
+
isSecondary=parse_bool(data["isSecondary"]) if "isSecondary" in data and data.get("isSecondary") is not None else None,
|
|
6490
|
+
isEnabled=parse_bool(data["isEnabled"]) if "isEnabled" in data and data.get("isEnabled") is not None else None,
|
|
6491
|
+
status=parse_recorder_status(data["status"]) if "status" in data and data.get("status") is not None else None,
|
|
6492
|
+
errors=parse_string_array(data["errors"]) if "errors" in data and data.get("errors") is not None else None,
|
|
6493
|
+
)
|
|
6494
|
+
|
|
6495
|
+
def serialize_recorder_bot_details(data: RecorderBotDetails) -> object:
|
|
6496
|
+
return {
|
|
6497
|
+
"botId": None if data.botId is None else serialize_str(data.botId),
|
|
6498
|
+
"alias": None if data.alias is None else serialize_str(data.alias),
|
|
6499
|
+
"isSecondary": None if data.isSecondary is None else serialize_bool(data.isSecondary),
|
|
6500
|
+
"isEnabled": None if data.isEnabled is None else serialize_bool(data.isEnabled),
|
|
6501
|
+
"status": None if data.status is None else serialize_recorder_status(data.status),
|
|
6502
|
+
"errors": None if data.errors is None else serialize_string_array(data.errors),
|
|
6503
|
+
}
|
|
6504
|
+
|
|
5618
6505
|
@dataclass
|
|
5619
6506
|
class SaveRecordingResponse:
|
|
5620
6507
|
"""Response to save recording to marvin app"""
|
|
@@ -5811,6 +6698,14 @@ def serialize_arm_position_update_request_response_event_stream_details(data: Ar
|
|
|
5811
6698
|
"subscriptions": serialize_arm_position_update_request_response_event_stream_subscriptions_list(data.subscriptions),
|
|
5812
6699
|
}
|
|
5813
6700
|
|
|
6701
|
+
CameraDeviceArray = List[CameraDevice]
|
|
6702
|
+
|
|
6703
|
+
def parse_camera_device_array(data: object) -> CameraDeviceArray:
|
|
6704
|
+
return [parse_camera_device(item) for item in data]
|
|
6705
|
+
|
|
6706
|
+
def serialize_camera_device_array(data: CameraDeviceArray) -> List[object]:
|
|
6707
|
+
return [serialize_camera_device(item) for item in data]
|
|
6708
|
+
|
|
5814
6709
|
@dataclass
|
|
5815
6710
|
class Routine:
|
|
5816
6711
|
"""Robot Routine containing steps to automate robot movement and operations"""
|
|
@@ -5871,6 +6766,37 @@ def serialize_routine(data: Routine) -> object:
|
|
|
5871
6766
|
"environment_variables": None if data.environment_variables is None else serialize_environment_variables_list(data.environment_variables),
|
|
5872
6767
|
}
|
|
5873
6768
|
|
|
6769
|
+
@dataclass
|
|
6770
|
+
class GetEquipmentConfigResponse:
|
|
6771
|
+
"""Response to get the currently-configured equipment
|
|
6772
|
+
"""
|
|
6773
|
+
equipment: Union[EquipmentConfigList, None] = None
|
|
6774
|
+
|
|
6775
|
+
def validate_equipment(self, value: EquipmentConfigList) -> Tuple[bool, str]:
|
|
6776
|
+
if value is None:
|
|
6777
|
+
return [True, ""]
|
|
6778
|
+
|
|
6779
|
+
if not (isinstance(value, list) and all(isinstance(x, EquipmentConfig) for x in value)):
|
|
6780
|
+
return [False, "equipment must be of type EquipmentConfigList for GetEquipmentConfigResponse, got " + type(value).__name__]
|
|
6781
|
+
|
|
6782
|
+
return [True, ""]
|
|
6783
|
+
|
|
6784
|
+
def __post_init__(self):
|
|
6785
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
6786
|
+
is_valid, error_str = self.validate_equipment(self.equipment)
|
|
6787
|
+
if not is_valid:
|
|
6788
|
+
raise TypeError(error_str)
|
|
6789
|
+
|
|
6790
|
+
def parse_get_equipment_config_response(data: object):
|
|
6791
|
+
return GetEquipmentConfigResponse(
|
|
6792
|
+
equipment=parse_equipment_config_list(data["equipment"]) if "equipment" in data and data.get("equipment") is not None else None,
|
|
6793
|
+
)
|
|
6794
|
+
|
|
6795
|
+
def serialize_get_equipment_config_response(data: GetEquipmentConfigResponse) -> object:
|
|
6796
|
+
return {
|
|
6797
|
+
"equipment": None if data.equipment is None else serialize_equipment_config_list(data.equipment),
|
|
6798
|
+
}
|
|
6799
|
+
|
|
5874
6800
|
@dataclass
|
|
5875
6801
|
class CalibrationData:
|
|
5876
6802
|
"""The result of a calibration"""
|
|
@@ -6641,14 +7567,6 @@ def serialize_position_and_orientation(data: PositionAndOrientation) -> object:
|
|
|
6641
7567
|
"orientation": serialize_orientation(data.orientation),
|
|
6642
7568
|
}
|
|
6643
7569
|
|
|
6644
|
-
RecorderBotDetailsList = List[RecorderBotDetails]
|
|
6645
|
-
|
|
6646
|
-
def parse_recorder_bot_details_list(data: object) -> RecorderBotDetailsList:
|
|
6647
|
-
return [parse_recorder_bot_details(item) for item in data]
|
|
6648
|
-
|
|
6649
|
-
def serialize_recorder_bot_details_list(data: RecorderBotDetailsList) -> List[object]:
|
|
6650
|
-
return [serialize_recorder_bot_details(item) for item in data]
|
|
6651
|
-
|
|
6652
7570
|
@dataclass
|
|
6653
7571
|
class FailureStateResponse:
|
|
6654
7572
|
"""Failure state response informs user of how and whether the robot may be recovered."""
|
|
@@ -6739,6 +7657,82 @@ def serialize_sensors_configuration(data: SensorsConfiguration) -> object:
|
|
|
6739
7657
|
"sensors": None if data.sensors is None else serialize_sensors_list(data.sensors),
|
|
6740
7658
|
}
|
|
6741
7659
|
|
|
7660
|
+
@dataclass
|
|
7661
|
+
class SendMessageRequest:
|
|
7662
|
+
"""Request to send a WebRTC signaling message"""
|
|
7663
|
+
baseUrl: Union[str, None] = None
|
|
7664
|
+
clientId: Union[str, None] = None
|
|
7665
|
+
message: Union[SignalMessage, None] = None
|
|
7666
|
+
|
|
7667
|
+
def validate_baseUrl(self, value: str) -> Tuple[bool, str]:
|
|
7668
|
+
if value is None:
|
|
7669
|
+
return [True, ""]
|
|
7670
|
+
|
|
7671
|
+
if not isinstance(value, str):
|
|
7672
|
+
return [False, "baseUrl must be of type str for SendMessageRequest, got " + type(value).__name__]
|
|
7673
|
+
|
|
7674
|
+
return [True, ""]
|
|
7675
|
+
|
|
7676
|
+
def validate_clientId(self, value: str) -> Tuple[bool, str]:
|
|
7677
|
+
if value is None:
|
|
7678
|
+
return [True, ""]
|
|
7679
|
+
|
|
7680
|
+
if not isinstance(value, str):
|
|
7681
|
+
return [False, "clientId must be of type str for SendMessageRequest, got " + type(value).__name__]
|
|
7682
|
+
|
|
7683
|
+
return [True, ""]
|
|
7684
|
+
|
|
7685
|
+
def validate_message(self, value: SignalMessage) -> Tuple[bool, str]:
|
|
7686
|
+
if value is None:
|
|
7687
|
+
return [True, ""]
|
|
7688
|
+
|
|
7689
|
+
if not isinstance(value, SignalMessage):
|
|
7690
|
+
return [False, "message must be of type SignalMessage for SendMessageRequest, got " + type(value).__name__]
|
|
7691
|
+
|
|
7692
|
+
return [True, ""]
|
|
7693
|
+
|
|
7694
|
+
def __post_init__(self):
|
|
7695
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7696
|
+
is_valid, error_str = self.validate_baseUrl(self.baseUrl)
|
|
7697
|
+
if not is_valid:
|
|
7698
|
+
raise TypeError(error_str)
|
|
7699
|
+
is_valid, error_str = self.validate_clientId(self.clientId)
|
|
7700
|
+
if not is_valid:
|
|
7701
|
+
raise TypeError(error_str)
|
|
7702
|
+
is_valid, error_str = self.validate_message(self.message)
|
|
7703
|
+
if not is_valid:
|
|
7704
|
+
raise TypeError(error_str)
|
|
7705
|
+
|
|
7706
|
+
def parse_send_message_request(data: object):
|
|
7707
|
+
return SendMessageRequest(
|
|
7708
|
+
baseUrl=parse_str(data["baseUrl"]) if "baseUrl" in data and data.get("baseUrl") is not None else None,
|
|
7709
|
+
clientId=parse_str(data["clientId"]) if "clientId" in data and data.get("clientId") is not None else None,
|
|
7710
|
+
message=parse_signal_message(data["message"]) if "message" in data and data.get("message") is not None else None,
|
|
7711
|
+
)
|
|
7712
|
+
|
|
7713
|
+
def serialize_send_message_request(data: SendMessageRequest) -> object:
|
|
7714
|
+
return {
|
|
7715
|
+
"baseUrl": None if data.baseUrl is None else serialize_str(data.baseUrl),
|
|
7716
|
+
"clientId": None if data.clientId is None else serialize_str(data.clientId),
|
|
7717
|
+
"message": None if data.message is None else serialize_signal_message(data.message),
|
|
7718
|
+
}
|
|
7719
|
+
|
|
7720
|
+
SignalMessageList = List[SignalMessage]
|
|
7721
|
+
|
|
7722
|
+
def parse_signal_message_list(data: object) -> SignalMessageList:
|
|
7723
|
+
return [parse_signal_message(item) for item in data]
|
|
7724
|
+
|
|
7725
|
+
def serialize_signal_message_list(data: SignalMessageList) -> List[object]:
|
|
7726
|
+
return [serialize_signal_message(item) for item in data]
|
|
7727
|
+
|
|
7728
|
+
RecorderBotDetailsList = List[RecorderBotDetails]
|
|
7729
|
+
|
|
7730
|
+
def parse_recorder_bot_details_list(data: object) -> RecorderBotDetailsList:
|
|
7731
|
+
return [parse_recorder_bot_details(item) for item in data]
|
|
7732
|
+
|
|
7733
|
+
def serialize_recorder_bot_details_list(data: RecorderBotDetailsList) -> List[object]:
|
|
7734
|
+
return [serialize_recorder_bot_details(item) for item in data]
|
|
7735
|
+
|
|
6742
7736
|
BotTeleopDetailsList = List[BotTeleopDetails]
|
|
6743
7737
|
|
|
6744
7738
|
def parse_bot_teleop_details_list(data: object) -> BotTeleopDetailsList:
|
|
@@ -6793,6 +7787,36 @@ def serialize_arm_position_update_request_response_format(data: ArmPositionUpdat
|
|
|
6793
7787
|
"event_stream": None if data.event_stream is None else serialize_arm_position_update_request_response_event_stream_details(data.event_stream),
|
|
6794
7788
|
}
|
|
6795
7789
|
|
|
7790
|
+
@dataclass
|
|
7791
|
+
class CameraDeviceList:
|
|
7792
|
+
"""Object containing list of available cameras."""
|
|
7793
|
+
cameras: Union[CameraDeviceArray, None] = None
|
|
7794
|
+
|
|
7795
|
+
def validate_cameras(self, value: CameraDeviceArray) -> Tuple[bool, str]:
|
|
7796
|
+
if value is None:
|
|
7797
|
+
return [True, ""]
|
|
7798
|
+
|
|
7799
|
+
if not (isinstance(value, list) and all(isinstance(x, CameraDevice) for x in value)):
|
|
7800
|
+
return [False, "cameras must be of type CameraDeviceArray for CameraDeviceList, got " + type(value).__name__]
|
|
7801
|
+
|
|
7802
|
+
return [True, ""]
|
|
7803
|
+
|
|
7804
|
+
def __post_init__(self):
|
|
7805
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7806
|
+
is_valid, error_str = self.validate_cameras(self.cameras)
|
|
7807
|
+
if not is_valid:
|
|
7808
|
+
raise TypeError(error_str)
|
|
7809
|
+
|
|
7810
|
+
def parse_camera_device_list(data: object):
|
|
7811
|
+
return CameraDeviceList(
|
|
7812
|
+
cameras=parse_camera_device_array(data["cameras"]) if "cameras" in data and data.get("cameras") is not None else None,
|
|
7813
|
+
)
|
|
7814
|
+
|
|
7815
|
+
def serialize_camera_device_list(data: CameraDeviceList) -> object:
|
|
7816
|
+
return {
|
|
7817
|
+
"cameras": None if data.cameras is None else serialize_camera_device_array(data.cameras),
|
|
7818
|
+
}
|
|
7819
|
+
|
|
6796
7820
|
RoutinesList = List[Routine]
|
|
6797
7821
|
|
|
6798
7822
|
def parse_routines_list(data: object) -> RoutinesList:
|
|
@@ -7125,6 +8149,36 @@ def parse_position_and_orientation_list(data: object) -> PositionAndOrientationL
|
|
|
7125
8149
|
def serialize_position_and_orientation_list(data: PositionAndOrientationList) -> List[object]:
|
|
7126
8150
|
return [serialize_position_and_orientation(item) for item in data]
|
|
7127
8151
|
|
|
8152
|
+
@dataclass
|
|
8153
|
+
class GetMessagesResponse:
|
|
8154
|
+
"""Response containing pending messages for a client"""
|
|
8155
|
+
messages: Union[SignalMessageList, None] = None
|
|
8156
|
+
|
|
8157
|
+
def validate_messages(self, value: SignalMessageList) -> Tuple[bool, str]:
|
|
8158
|
+
if value is None:
|
|
8159
|
+
return [True, ""]
|
|
8160
|
+
|
|
8161
|
+
if not (isinstance(value, list) and all(isinstance(x, SignalMessage) for x in value)):
|
|
8162
|
+
return [False, "messages must be of type SignalMessageList for GetMessagesResponse, got " + type(value).__name__]
|
|
8163
|
+
|
|
8164
|
+
return [True, ""]
|
|
8165
|
+
|
|
8166
|
+
def __post_init__(self):
|
|
8167
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
8168
|
+
is_valid, error_str = self.validate_messages(self.messages)
|
|
8169
|
+
if not is_valid:
|
|
8170
|
+
raise TypeError(error_str)
|
|
8171
|
+
|
|
8172
|
+
def parse_get_messages_response(data: object):
|
|
8173
|
+
return GetMessagesResponse(
|
|
8174
|
+
messages=parse_signal_message_list(data["messages"]) if "messages" in data and data.get("messages") is not None else None,
|
|
8175
|
+
)
|
|
8176
|
+
|
|
8177
|
+
def serialize_get_messages_response(data: GetMessagesResponse) -> object:
|
|
8178
|
+
return {
|
|
8179
|
+
"messages": None if data.messages is None else serialize_signal_message_list(data.messages),
|
|
8180
|
+
}
|
|
8181
|
+
|
|
7128
8182
|
@dataclass
|
|
7129
8183
|
class RecorderConfig:
|
|
7130
8184
|
"""Config of the recorder"""
|
|
@@ -7133,6 +8187,8 @@ class RecorderConfig:
|
|
|
7133
8187
|
taskId: Union[str, None] = None
|
|
7134
8188
|
bots: Union[RecorderBotDetailsList, None] = None
|
|
7135
8189
|
offset: Union[OffsetConfig, None] = None
|
|
8190
|
+
sensors: Union[SensorConfigList, None] = None
|
|
8191
|
+
equipmentKeyAssignments: Union[EquipmentKeyAssignments, None] = None
|
|
7136
8192
|
|
|
7137
8193
|
def validate_isSecondary(self, value: bool) -> Tuple[bool, str]:
|
|
7138
8194
|
if value is None:
|
|
@@ -7179,6 +8235,24 @@ class RecorderConfig:
|
|
|
7179
8235
|
|
|
7180
8236
|
return [True, ""]
|
|
7181
8237
|
|
|
8238
|
+
def validate_sensors(self, value: SensorConfigList) -> Tuple[bool, str]:
|
|
8239
|
+
if value is None:
|
|
8240
|
+
return [True, ""]
|
|
8241
|
+
|
|
8242
|
+
if not (isinstance(value, list) and all(isinstance(x, SensorConfig) for x in value)):
|
|
8243
|
+
return [False, "sensors must be of type SensorConfigList for RecorderConfig, got " + type(value).__name__]
|
|
8244
|
+
|
|
8245
|
+
return [True, ""]
|
|
8246
|
+
|
|
8247
|
+
def validate_equipmentKeyAssignments(self, value: EquipmentKeyAssignments) -> Tuple[bool, str]:
|
|
8248
|
+
if value is None:
|
|
8249
|
+
return [True, ""]
|
|
8250
|
+
|
|
8251
|
+
if not (isinstance(value, dict) and all((isinstance(k, str) and isinstance(val, str)) for k, val in value.items())):
|
|
8252
|
+
return [False, "equipmentKeyAssignments must be of type EquipmentKeyAssignments for RecorderConfig, got " + type(value).__name__]
|
|
8253
|
+
|
|
8254
|
+
return [True, ""]
|
|
8255
|
+
|
|
7182
8256
|
def __post_init__(self):
|
|
7183
8257
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7184
8258
|
is_valid, error_str = self.validate_isSecondary(self.isSecondary)
|
|
@@ -7196,6 +8270,12 @@ class RecorderConfig:
|
|
|
7196
8270
|
is_valid, error_str = self.validate_offset(self.offset)
|
|
7197
8271
|
if not is_valid:
|
|
7198
8272
|
raise TypeError(error_str)
|
|
8273
|
+
is_valid, error_str = self.validate_sensors(self.sensors)
|
|
8274
|
+
if not is_valid:
|
|
8275
|
+
raise TypeError(error_str)
|
|
8276
|
+
is_valid, error_str = self.validate_equipmentKeyAssignments(self.equipmentKeyAssignments)
|
|
8277
|
+
if not is_valid:
|
|
8278
|
+
raise TypeError(error_str)
|
|
7199
8279
|
|
|
7200
8280
|
def parse_recorder_config(data: object):
|
|
7201
8281
|
return RecorderConfig(
|
|
@@ -7204,6 +8284,8 @@ def parse_recorder_config(data: object):
|
|
|
7204
8284
|
taskId=parse_str(data["taskId"]) if "taskId" in data and data.get("taskId") is not None else None,
|
|
7205
8285
|
bots=parse_recorder_bot_details_list(data["bots"]) if "bots" in data and data.get("bots") is not None else None,
|
|
7206
8286
|
offset=parse_offset_config(data["offset"]) if "offset" in data and data.get("offset") is not None else None,
|
|
8287
|
+
sensors=parse_sensor_config_list(data["sensors"]) if "sensors" in data and data.get("sensors") is not None else None,
|
|
8288
|
+
equipmentKeyAssignments=parse_equipment_key_assignments(data["equipmentKeyAssignments"]) if "equipmentKeyAssignments" in data and data.get("equipmentKeyAssignments") is not None else None,
|
|
7207
8289
|
)
|
|
7208
8290
|
|
|
7209
8291
|
def serialize_recorder_config(data: RecorderConfig) -> object:
|
|
@@ -7213,6 +8295,8 @@ def serialize_recorder_config(data: RecorderConfig) -> object:
|
|
|
7213
8295
|
"taskId": None if data.taskId is None else serialize_str(data.taskId),
|
|
7214
8296
|
"bots": None if data.bots is None else serialize_recorder_bot_details_list(data.bots),
|
|
7215
8297
|
"offset": None if data.offset is None else serialize_offset_config(data.offset),
|
|
8298
|
+
"sensors": None if data.sensors is None else serialize_sensor_config_list(data.sensors),
|
|
8299
|
+
"equipmentKeyAssignments": None if data.equipmentKeyAssignments is None else serialize_equipment_key_assignments(data.equipmentKeyAssignments),
|
|
7216
8300
|
}
|
|
7217
8301
|
|
|
7218
8302
|
@dataclass
|
|
@@ -7665,6 +8749,7 @@ class RecorderState:
|
|
|
7665
8749
|
startTime: Union[str, None] = None
|
|
7666
8750
|
recordingTime: Union[int, None] = None
|
|
7667
8751
|
status: Union[RecorderStatus, None] = None
|
|
8752
|
+
errors: Union[StringArray, None] = None
|
|
7668
8753
|
|
|
7669
8754
|
def validate_config(self, value: RecorderConfig) -> Tuple[bool, str]:
|
|
7670
8755
|
if value is None:
|
|
@@ -7697,11 +8782,20 @@ class RecorderState:
|
|
|
7697
8782
|
if value is None:
|
|
7698
8783
|
return [True, ""]
|
|
7699
8784
|
|
|
7700
|
-
if not ((isinstance(value, str) and RecorderStatus in ['not_recording', 'recording', 'error', 'complete']) or isinstance(value, RecorderStatus)):
|
|
8785
|
+
if not ((isinstance(value, str) and RecorderStatus in ['not_recording', 'recording', 'error', 'complete', 'initializing']) or isinstance(value, RecorderStatus)):
|
|
7701
8786
|
return [False, "status must be of type RecorderStatus for RecorderState, got " + type(value).__name__]
|
|
7702
8787
|
|
|
7703
8788
|
return [True, ""]
|
|
7704
8789
|
|
|
8790
|
+
def validate_errors(self, value: StringArray) -> Tuple[bool, str]:
|
|
8791
|
+
if value is None:
|
|
8792
|
+
return [True, ""]
|
|
8793
|
+
|
|
8794
|
+
if not (isinstance(value, list) and all(isinstance(x, str) for x in value)):
|
|
8795
|
+
return [False, "errors must be of type StringArray for RecorderState, got " + type(value).__name__]
|
|
8796
|
+
|
|
8797
|
+
return [True, ""]
|
|
8798
|
+
|
|
7705
8799
|
def __post_init__(self):
|
|
7706
8800
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7707
8801
|
is_valid, error_str = self.validate_config(self.config)
|
|
@@ -7716,6 +8810,9 @@ class RecorderState:
|
|
|
7716
8810
|
is_valid, error_str = self.validate_status(self.status)
|
|
7717
8811
|
if not is_valid:
|
|
7718
8812
|
raise TypeError(error_str)
|
|
8813
|
+
is_valid, error_str = self.validate_errors(self.errors)
|
|
8814
|
+
if not is_valid:
|
|
8815
|
+
raise TypeError(error_str)
|
|
7719
8816
|
|
|
7720
8817
|
def parse_recorder_state(data: object):
|
|
7721
8818
|
return RecorderState(
|
|
@@ -7723,6 +8820,7 @@ def parse_recorder_state(data: object):
|
|
|
7723
8820
|
startTime=parse_str(data["startTime"]) if "startTime" in data and data.get("startTime") is not None else None,
|
|
7724
8821
|
recordingTime=parse_u_64(data["recordingTime"]) if "recordingTime" in data and data.get("recordingTime") is not None else None,
|
|
7725
8822
|
status=parse_recorder_status(data["status"]) if "status" in data and data.get("status") is not None else None,
|
|
8823
|
+
errors=parse_string_array(data["errors"]) if "errors" in data and data.get("errors") is not None else None,
|
|
7726
8824
|
)
|
|
7727
8825
|
|
|
7728
8826
|
def serialize_recorder_state(data: RecorderState) -> object:
|
|
@@ -7731,6 +8829,7 @@ def serialize_recorder_state(data: RecorderState) -> object:
|
|
|
7731
8829
|
"startTime": None if data.startTime is None else serialize_str(data.startTime),
|
|
7732
8830
|
"recordingTime": None if data.recordingTime is None else serialize_u_64(data.recordingTime),
|
|
7733
8831
|
"status": None if data.status is None else serialize_recorder_status(data.status),
|
|
8832
|
+
"errors": None if data.errors is None else serialize_string_array(data.errors),
|
|
7734
8833
|
}
|
|
7735
8834
|
|
|
7736
8835
|
@dataclass
|