nominal-api 0.620.0__py3-none-any.whl → 0.622.0__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 nominal-api might be problematic. Click here for more details.

nominal_api/_impl.py CHANGED
@@ -2433,6 +2433,83 @@ authorization_AuthorizationService.__qualname__ = "AuthorizationService"
2433
2433
  authorization_AuthorizationService.__module__ = "nominal_api.authorization"
2434
2434
 
2435
2435
 
2436
+ class authorization_Claim(ConjureUnionType):
2437
+ _string: Optional[str] = None
2438
+ _string_list: Optional[List[str]] = None
2439
+
2440
+ @builtins.classmethod
2441
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
2442
+ return {
2443
+ 'string': ConjureFieldDefinition('string', str),
2444
+ 'string_list': ConjureFieldDefinition('stringList', List[str])
2445
+ }
2446
+
2447
+ def __init__(
2448
+ self,
2449
+ string: Optional[str] = None,
2450
+ string_list: Optional[List[str]] = None,
2451
+ type_of_union: Optional[str] = None
2452
+ ) -> None:
2453
+ if type_of_union is None:
2454
+ if (string is not None) + (string_list is not None) != 1:
2455
+ raise ValueError('a union must contain a single member')
2456
+
2457
+ if string is not None:
2458
+ self._string = string
2459
+ self._type = 'string'
2460
+ if string_list is not None:
2461
+ self._string_list = string_list
2462
+ self._type = 'stringList'
2463
+
2464
+ elif type_of_union == 'string':
2465
+ if string is None:
2466
+ raise ValueError('a union value must not be None')
2467
+ self._string = string
2468
+ self._type = 'string'
2469
+ elif type_of_union == 'stringList':
2470
+ if string_list is None:
2471
+ raise ValueError('a union value must not be None')
2472
+ self._string_list = string_list
2473
+ self._type = 'stringList'
2474
+
2475
+ @builtins.property
2476
+ def string(self) -> Optional[str]:
2477
+ return self._string
2478
+
2479
+ @builtins.property
2480
+ def string_list(self) -> Optional[List[str]]:
2481
+ return self._string_list
2482
+
2483
+ def accept(self, visitor) -> Any:
2484
+ if not isinstance(visitor, authorization_ClaimVisitor):
2485
+ raise ValueError('{} is not an instance of authorization_ClaimVisitor'.format(visitor.__class__.__name__))
2486
+ if self._type == 'string' and self.string is not None:
2487
+ return visitor._string(self.string)
2488
+ if self._type == 'stringList' and self.string_list is not None:
2489
+ return visitor._string_list(self.string_list)
2490
+
2491
+
2492
+ authorization_Claim.__name__ = "Claim"
2493
+ authorization_Claim.__qualname__ = "Claim"
2494
+ authorization_Claim.__module__ = "nominal_api.authorization"
2495
+
2496
+
2497
+ class authorization_ClaimVisitor:
2498
+
2499
+ @abstractmethod
2500
+ def _string(self, string: str) -> Any:
2501
+ pass
2502
+
2503
+ @abstractmethod
2504
+ def _string_list(self, string_list: List[str]) -> Any:
2505
+ pass
2506
+
2507
+
2508
+ authorization_ClaimVisitor.__name__ = "ClaimVisitor"
2509
+ authorization_ClaimVisitor.__qualname__ = "ClaimVisitor"
2510
+ authorization_ClaimVisitor.__module__ = "nominal_api.authorization"
2511
+
2512
+
2436
2513
  class authorization_CreateApiKeyRequest(ConjureBeanType):
2437
2514
 
2438
2515
  @builtins.classmethod
@@ -6952,8 +7029,8 @@ class ingest_api_ContainerizedOpts(ConjureBeanType):
6952
7029
  @builtins.classmethod
6953
7030
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
6954
7031
  return {
6955
- 'sources': ConjureFieldDefinition('sources', Dict[ingest_api_ExtractorInputName, ingest_api_IngestSource]),
6956
- 'extractor': ConjureFieldDefinition('extractor', str),
7032
+ 'sources': ConjureFieldDefinition('sources', Dict[ingest_api_EnvironmentVariable, ingest_api_IngestSource]),
7033
+ 'extractor': ConjureFieldDefinition('extractor', ingest_api_ContainerizedExtractorRid),
6957
7034
  'timestamp_metadata': ConjureFieldDefinition('timestampMetadata', OptionalTypeWrapper[ingest_api_TimestampMetadata]),
6958
7035
  'target': ConjureFieldDefinition('target', ingest_api_DatasetIngestTarget)
6959
7036
  }
@@ -7001,17 +7078,19 @@ class ingest_api_CsvOpts(ConjureBeanType):
7001
7078
  'timestamp_metadata': ConjureFieldDefinition('timestampMetadata', ingest_api_TimestampMetadata),
7002
7079
  'channel_prefix': ConjureFieldDefinition('channelPrefix', ingest_api_ChannelPrefix),
7003
7080
  'tag_keys_from_columns': ConjureFieldDefinition('tagKeysFromColumns', OptionalTypeWrapper[List[api_TagName]]),
7081
+ 'tag_columns': ConjureFieldDefinition('tagColumns', OptionalTypeWrapper[Dict[api_TagName, api_ColumnName]]),
7004
7082
  'additional_file_tags': ConjureFieldDefinition('additionalFileTags', OptionalTypeWrapper[Dict[api_TagName, api_TagValue]])
7005
7083
  }
7006
7084
 
7007
- __slots__: List[str] = ['_source', '_target', '_timestamp_metadata', '_channel_prefix', '_tag_keys_from_columns', '_additional_file_tags']
7085
+ __slots__: List[str] = ['_source', '_target', '_timestamp_metadata', '_channel_prefix', '_tag_keys_from_columns', '_tag_columns', '_additional_file_tags']
7008
7086
 
7009
- def __init__(self, source: "ingest_api_IngestSource", target: "ingest_api_DatasetIngestTarget", timestamp_metadata: "ingest_api_TimestampMetadata", additional_file_tags: Optional[Dict[str, str]] = None, channel_prefix: Optional[str] = None, tag_keys_from_columns: Optional[List[str]] = None) -> None:
7087
+ def __init__(self, source: "ingest_api_IngestSource", target: "ingest_api_DatasetIngestTarget", timestamp_metadata: "ingest_api_TimestampMetadata", additional_file_tags: Optional[Dict[str, str]] = None, channel_prefix: Optional[str] = None, tag_columns: Optional[Dict[str, str]] = None, tag_keys_from_columns: Optional[List[str]] = None) -> None:
7010
7088
  self._source = source
7011
7089
  self._target = target
7012
7090
  self._timestamp_metadata = timestamp_metadata
7013
7091
  self._channel_prefix = channel_prefix
7014
7092
  self._tag_keys_from_columns = tag_keys_from_columns
7093
+ self._tag_columns = tag_columns
7015
7094
  self._additional_file_tags = additional_file_tags
7016
7095
 
7017
7096
  @builtins.property
@@ -7034,6 +7113,13 @@ class ingest_api_CsvOpts(ConjureBeanType):
7034
7113
  def tag_keys_from_columns(self) -> Optional[List[str]]:
7035
7114
  return self._tag_keys_from_columns
7036
7115
 
7116
+ @builtins.property
7117
+ def tag_columns(self) -> Optional[Dict[str, str]]:
7118
+ """
7119
+ A map of tag names to column names to derive the tag values from.
7120
+ """
7121
+ return self._tag_columns
7122
+
7037
7123
  @builtins.property
7038
7124
  def additional_file_tags(self) -> Optional[Dict[str, str]]:
7039
7125
  return self._additional_file_tags
@@ -9866,18 +9952,20 @@ and archives such as .tar, .tar.gz, and .zip (must set the isArchive flag).
9866
9952
  'timestamp_metadata': ConjureFieldDefinition('timestampMetadata', ingest_api_TimestampMetadata),
9867
9953
  'channel_prefix': ConjureFieldDefinition('channelPrefix', ingest_api_ChannelPrefix),
9868
9954
  'tag_keys_from_columns': ConjureFieldDefinition('tagKeysFromColumns', OptionalTypeWrapper[List[api_TagName]]),
9955
+ 'tag_columns': ConjureFieldDefinition('tagColumns', OptionalTypeWrapper[Dict[api_TagName, api_ColumnName]]),
9869
9956
  'additional_file_tags': ConjureFieldDefinition('additionalFileTags', OptionalTypeWrapper[Dict[api_TagName, api_TagValue]]),
9870
9957
  'is_archive': ConjureFieldDefinition('isArchive', OptionalTypeWrapper[bool])
9871
9958
  }
9872
9959
 
9873
- __slots__: List[str] = ['_source', '_target', '_timestamp_metadata', '_channel_prefix', '_tag_keys_from_columns', '_additional_file_tags', '_is_archive']
9960
+ __slots__: List[str] = ['_source', '_target', '_timestamp_metadata', '_channel_prefix', '_tag_keys_from_columns', '_tag_columns', '_additional_file_tags', '_is_archive']
9874
9961
 
9875
- def __init__(self, source: "ingest_api_IngestSource", target: "ingest_api_DatasetIngestTarget", timestamp_metadata: "ingest_api_TimestampMetadata", additional_file_tags: Optional[Dict[str, str]] = None, channel_prefix: Optional[str] = None, is_archive: Optional[bool] = None, tag_keys_from_columns: Optional[List[str]] = None) -> None:
9962
+ def __init__(self, source: "ingest_api_IngestSource", target: "ingest_api_DatasetIngestTarget", timestamp_metadata: "ingest_api_TimestampMetadata", additional_file_tags: Optional[Dict[str, str]] = None, channel_prefix: Optional[str] = None, is_archive: Optional[bool] = None, tag_columns: Optional[Dict[str, str]] = None, tag_keys_from_columns: Optional[List[str]] = None) -> None:
9876
9963
  self._source = source
9877
9964
  self._target = target
9878
9965
  self._timestamp_metadata = timestamp_metadata
9879
9966
  self._channel_prefix = channel_prefix
9880
9967
  self._tag_keys_from_columns = tag_keys_from_columns
9968
+ self._tag_columns = tag_columns
9881
9969
  self._additional_file_tags = additional_file_tags
9882
9970
  self._is_archive = is_archive
9883
9971
 
@@ -9901,6 +9989,13 @@ and archives such as .tar, .tar.gz, and .zip (must set the isArchive flag).
9901
9989
  def tag_keys_from_columns(self) -> Optional[List[str]]:
9902
9990
  return self._tag_keys_from_columns
9903
9991
 
9992
+ @builtins.property
9993
+ def tag_columns(self) -> Optional[Dict[str, str]]:
9994
+ """
9995
+ A map of tag names to column names to derive the tag values from.
9996
+ """
9997
+ return self._tag_columns
9998
+
9904
9999
  @builtins.property
9905
10000
  def additional_file_tags(self) -> Optional[Dict[str, str]]:
9906
10001
  return self._additional_file_tags
@@ -11158,6 +11253,547 @@ ingest_api_VideoTimestampManifestVisitor.__qualname__ = "VideoTimestampManifestV
11158
11253
  ingest_api_VideoTimestampManifestVisitor.__module__ = "nominal_api.ingest_api"
11159
11254
 
11160
11255
 
11256
+ class ingest_workflow_api_Empty(ConjureBeanType):
11257
+
11258
+ @builtins.classmethod
11259
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11260
+ return {
11261
+ }
11262
+
11263
+ __slots__: List[str] = []
11264
+
11265
+
11266
+
11267
+ ingest_workflow_api_Empty.__name__ = "Empty"
11268
+ ingest_workflow_api_Empty.__qualname__ = "Empty"
11269
+ ingest_workflow_api_Empty.__module__ = "nominal_api.ingest_workflow_api"
11270
+
11271
+
11272
+ class ingest_workflow_api_EnsureExtractorJobCreatedRequest(ConjureBeanType):
11273
+ """
11274
+ Ensure that the extractor job exists in the control plane. Runs in the namespace given by workspaceRid.
11275
+ """
11276
+
11277
+ @builtins.classmethod
11278
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11279
+ return {
11280
+ 'workspace_rid': ConjureFieldDefinition('workspaceRid', api_rids_WorkspaceRid),
11281
+ 'ingest_job_uuid': ConjureFieldDefinition('ingestJobUuid', str),
11282
+ 'containerized_extractor': ConjureFieldDefinition('containerizedExtractor', ingest_api_ContainerizedExtractor),
11283
+ 'source_handles': ConjureFieldDefinition('sourceHandles', Dict[str, scout_catalog_S3Handle])
11284
+ }
11285
+
11286
+ __slots__: List[str] = ['_workspace_rid', '_ingest_job_uuid', '_containerized_extractor', '_source_handles']
11287
+
11288
+ def __init__(self, containerized_extractor: "ingest_api_ContainerizedExtractor", ingest_job_uuid: str, source_handles: Dict[str, "scout_catalog_S3Handle"], workspace_rid: str) -> None:
11289
+ self._workspace_rid = workspace_rid
11290
+ self._ingest_job_uuid = ingest_job_uuid
11291
+ self._containerized_extractor = containerized_extractor
11292
+ self._source_handles = source_handles
11293
+
11294
+ @builtins.property
11295
+ def workspace_rid(self) -> str:
11296
+ return self._workspace_rid
11297
+
11298
+ @builtins.property
11299
+ def ingest_job_uuid(self) -> str:
11300
+ return self._ingest_job_uuid
11301
+
11302
+ @builtins.property
11303
+ def containerized_extractor(self) -> "ingest_api_ContainerizedExtractor":
11304
+ return self._containerized_extractor
11305
+
11306
+ @builtins.property
11307
+ def source_handles(self) -> Dict[str, "scout_catalog_S3Handle"]:
11308
+ return self._source_handles
11309
+
11310
+
11311
+ ingest_workflow_api_EnsureExtractorJobCreatedRequest.__name__ = "EnsureExtractorJobCreatedRequest"
11312
+ ingest_workflow_api_EnsureExtractorJobCreatedRequest.__qualname__ = "EnsureExtractorJobCreatedRequest"
11313
+ ingest_workflow_api_EnsureExtractorJobCreatedRequest.__module__ = "nominal_api.ingest_workflow_api"
11314
+
11315
+
11316
+ class ingest_workflow_api_EnsureExtractorJobCreatedResponse(ConjureBeanType):
11317
+
11318
+ @builtins.classmethod
11319
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11320
+ return {
11321
+ }
11322
+
11323
+ __slots__: List[str] = []
11324
+
11325
+
11326
+
11327
+ ingest_workflow_api_EnsureExtractorJobCreatedResponse.__name__ = "EnsureExtractorJobCreatedResponse"
11328
+ ingest_workflow_api_EnsureExtractorJobCreatedResponse.__qualname__ = "EnsureExtractorJobCreatedResponse"
11329
+ ingest_workflow_api_EnsureExtractorJobCreatedResponse.__module__ = "nominal_api.ingest_workflow_api"
11330
+
11331
+
11332
+ class ingest_workflow_api_EnsureWorkspaceNamespaceCreatedRequest(ConjureBeanType):
11333
+ """
11334
+ For a given workspace rid, ensures that there is a corresponding K8s namespace created.
11335
+ """
11336
+
11337
+ @builtins.classmethod
11338
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11339
+ return {
11340
+ 'workspace_rid': ConjureFieldDefinition('workspaceRid', api_rids_WorkspaceRid)
11341
+ }
11342
+
11343
+ __slots__: List[str] = ['_workspace_rid']
11344
+
11345
+ def __init__(self, workspace_rid: str) -> None:
11346
+ self._workspace_rid = workspace_rid
11347
+
11348
+ @builtins.property
11349
+ def workspace_rid(self) -> str:
11350
+ return self._workspace_rid
11351
+
11352
+
11353
+ ingest_workflow_api_EnsureWorkspaceNamespaceCreatedRequest.__name__ = "EnsureWorkspaceNamespaceCreatedRequest"
11354
+ ingest_workflow_api_EnsureWorkspaceNamespaceCreatedRequest.__qualname__ = "EnsureWorkspaceNamespaceCreatedRequest"
11355
+ ingest_workflow_api_EnsureWorkspaceNamespaceCreatedRequest.__module__ = "nominal_api.ingest_workflow_api"
11356
+
11357
+
11358
+ class ingest_workflow_api_EnsureWorkspaceServiceAccountCreatedRequest(ConjureBeanType):
11359
+ """
11360
+ For a given workspace rid, ensures that there is a service account in the proper K8s Namespace.
11361
+ """
11362
+
11363
+ @builtins.classmethod
11364
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11365
+ return {
11366
+ 'workspace_rid': ConjureFieldDefinition('workspaceRid', api_rids_WorkspaceRid)
11367
+ }
11368
+
11369
+ __slots__: List[str] = ['_workspace_rid']
11370
+
11371
+ def __init__(self, workspace_rid: str) -> None:
11372
+ self._workspace_rid = workspace_rid
11373
+
11374
+ @builtins.property
11375
+ def workspace_rid(self) -> str:
11376
+ return self._workspace_rid
11377
+
11378
+
11379
+ ingest_workflow_api_EnsureWorkspaceServiceAccountCreatedRequest.__name__ = "EnsureWorkspaceServiceAccountCreatedRequest"
11380
+ ingest_workflow_api_EnsureWorkspaceServiceAccountCreatedRequest.__qualname__ = "EnsureWorkspaceServiceAccountCreatedRequest"
11381
+ ingest_workflow_api_EnsureWorkspaceServiceAccountCreatedRequest.__module__ = "nominal_api.ingest_workflow_api"
11382
+
11383
+
11384
+ class ingest_workflow_api_ExtractorJobState(ConjureEnumType):
11385
+
11386
+ PENDING = 'PENDING'
11387
+ '''PENDING'''
11388
+ RUNNING = 'RUNNING'
11389
+ '''RUNNING'''
11390
+ FAILED = 'FAILED'
11391
+ '''FAILED'''
11392
+ SUCCEEDED = 'SUCCEEDED'
11393
+ '''SUCCEEDED'''
11394
+ UNKNOWN = 'UNKNOWN'
11395
+ '''UNKNOWN'''
11396
+
11397
+ def __reduce_ex__(self, proto):
11398
+ return self.__class__, (self.name,)
11399
+
11400
+
11401
+ ingest_workflow_api_ExtractorJobState.__name__ = "ExtractorJobState"
11402
+ ingest_workflow_api_ExtractorJobState.__qualname__ = "ExtractorJobState"
11403
+ ingest_workflow_api_ExtractorJobState.__module__ = "nominal_api.ingest_workflow_api"
11404
+
11405
+
11406
+ class ingest_workflow_api_GetExtractorJobStateRequest(ConjureBeanType):
11407
+
11408
+ @builtins.classmethod
11409
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11410
+ return {
11411
+ 'workspace_rid': ConjureFieldDefinition('workspaceRid', api_rids_WorkspaceRid),
11412
+ 'ingest_job_uuid': ConjureFieldDefinition('ingestJobUuid', str)
11413
+ }
11414
+
11415
+ __slots__: List[str] = ['_workspace_rid', '_ingest_job_uuid']
11416
+
11417
+ def __init__(self, ingest_job_uuid: str, workspace_rid: str) -> None:
11418
+ self._workspace_rid = workspace_rid
11419
+ self._ingest_job_uuid = ingest_job_uuid
11420
+
11421
+ @builtins.property
11422
+ def workspace_rid(self) -> str:
11423
+ return self._workspace_rid
11424
+
11425
+ @builtins.property
11426
+ def ingest_job_uuid(self) -> str:
11427
+ return self._ingest_job_uuid
11428
+
11429
+
11430
+ ingest_workflow_api_GetExtractorJobStateRequest.__name__ = "GetExtractorJobStateRequest"
11431
+ ingest_workflow_api_GetExtractorJobStateRequest.__qualname__ = "GetExtractorJobStateRequest"
11432
+ ingest_workflow_api_GetExtractorJobStateRequest.__module__ = "nominal_api.ingest_workflow_api"
11433
+
11434
+
11435
+ class ingest_workflow_api_GetExtractorJobStateResponse(ConjureBeanType):
11436
+
11437
+ @builtins.classmethod
11438
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11439
+ return {
11440
+ 'state': ConjureFieldDefinition('state', ingest_workflow_api_ExtractorJobState)
11441
+ }
11442
+
11443
+ __slots__: List[str] = ['_state']
11444
+
11445
+ def __init__(self, state: "ingest_workflow_api_ExtractorJobState") -> None:
11446
+ self._state = state
11447
+
11448
+ @builtins.property
11449
+ def state(self) -> "ingest_workflow_api_ExtractorJobState":
11450
+ return self._state
11451
+
11452
+
11453
+ ingest_workflow_api_GetExtractorJobStateResponse.__name__ = "GetExtractorJobStateResponse"
11454
+ ingest_workflow_api_GetExtractorJobStateResponse.__qualname__ = "GetExtractorJobStateResponse"
11455
+ ingest_workflow_api_GetExtractorJobStateResponse.__module__ = "nominal_api.ingest_workflow_api"
11456
+
11457
+
11458
+ class ingest_workflow_api_IngestDataflashRequest(ConjureBeanType):
11459
+
11460
+ @builtins.classmethod
11461
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11462
+ return {
11463
+ 'locator': ConjureFieldDefinition('locator', ingest_workflow_api_ObjectLocator)
11464
+ }
11465
+
11466
+ __slots__: List[str] = ['_locator']
11467
+
11468
+ def __init__(self, locator: "ingest_workflow_api_ObjectLocator") -> None:
11469
+ self._locator = locator
11470
+
11471
+ @builtins.property
11472
+ def locator(self) -> "ingest_workflow_api_ObjectLocator":
11473
+ return self._locator
11474
+
11475
+
11476
+ ingest_workflow_api_IngestDataflashRequest.__name__ = "IngestDataflashRequest"
11477
+ ingest_workflow_api_IngestDataflashRequest.__qualname__ = "IngestDataflashRequest"
11478
+ ingest_workflow_api_IngestDataflashRequest.__module__ = "nominal_api.ingest_workflow_api"
11479
+
11480
+
11481
+ class ingest_workflow_api_IngestDataflashResponse(ConjureBeanType):
11482
+
11483
+ @builtins.classmethod
11484
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11485
+ return {
11486
+ 'units': ConjureFieldDefinition('units', Dict[str, str]),
11487
+ 'parquet_object_locators': ConjureFieldDefinition('parquetObjectLocators', List[ingest_workflow_api_ObjectLocator]),
11488
+ 'timestamp_series_name': ConjureFieldDefinition('timestampSeriesName', str),
11489
+ 'time_unit': ConjureFieldDefinition('timeUnit', ingest_workflow_api_TimeUnitSeconds)
11490
+ }
11491
+
11492
+ __slots__: List[str] = ['_units', '_parquet_object_locators', '_timestamp_series_name', '_time_unit']
11493
+
11494
+ def __init__(self, parquet_object_locators: List["ingest_workflow_api_ObjectLocator"], time_unit: "ingest_workflow_api_TimeUnitSeconds", timestamp_series_name: str, units: Dict[str, str]) -> None:
11495
+ self._units = units
11496
+ self._parquet_object_locators = parquet_object_locators
11497
+ self._timestamp_series_name = timestamp_series_name
11498
+ self._time_unit = time_unit
11499
+
11500
+ @builtins.property
11501
+ def units(self) -> Dict[str, str]:
11502
+ return self._units
11503
+
11504
+ @builtins.property
11505
+ def parquet_object_locators(self) -> List["ingest_workflow_api_ObjectLocator"]:
11506
+ """
11507
+ Azure or S3-style blob locators of parquet files. Currently
11508
+ only a single file is supported, the list type is used for future compatibility.
11509
+ """
11510
+ return self._parquet_object_locators
11511
+
11512
+ @builtins.property
11513
+ def timestamp_series_name(self) -> str:
11514
+ """
11515
+ The name of the column in the generated parquet file that contains the timestamp.
11516
+ """
11517
+ return self._timestamp_series_name
11518
+
11519
+ @builtins.property
11520
+ def time_unit(self) -> "ingest_workflow_api_TimeUnitSeconds":
11521
+ """
11522
+ The unit of time for the timestamp column. Can only be seconds.
11523
+ """
11524
+ return self._time_unit
11525
+
11526
+
11527
+ ingest_workflow_api_IngestDataflashResponse.__name__ = "IngestDataflashResponse"
11528
+ ingest_workflow_api_IngestDataflashResponse.__qualname__ = "IngestDataflashResponse"
11529
+ ingest_workflow_api_IngestDataflashResponse.__module__ = "nominal_api.ingest_workflow_api"
11530
+
11531
+
11532
+ class ingest_workflow_api_IngestMcapProtobufRequest(ConjureBeanType):
11533
+
11534
+ @builtins.classmethod
11535
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11536
+ return {
11537
+ 'locator': ConjureFieldDefinition('locator', ingest_workflow_api_ObjectLocator),
11538
+ 'channels': ConjureFieldDefinition('channels', ingest_workflow_api_McapProtoChannels)
11539
+ }
11540
+
11541
+ __slots__: List[str] = ['_locator', '_channels']
11542
+
11543
+ def __init__(self, channels: "ingest_workflow_api_McapProtoChannels", locator: "ingest_workflow_api_ObjectLocator") -> None:
11544
+ self._locator = locator
11545
+ self._channels = channels
11546
+
11547
+ @builtins.property
11548
+ def locator(self) -> "ingest_workflow_api_ObjectLocator":
11549
+ return self._locator
11550
+
11551
+ @builtins.property
11552
+ def channels(self) -> "ingest_workflow_api_McapProtoChannels":
11553
+ return self._channels
11554
+
11555
+
11556
+ ingest_workflow_api_IngestMcapProtobufRequest.__name__ = "IngestMcapProtobufRequest"
11557
+ ingest_workflow_api_IngestMcapProtobufRequest.__qualname__ = "IngestMcapProtobufRequest"
11558
+ ingest_workflow_api_IngestMcapProtobufRequest.__module__ = "nominal_api.ingest_workflow_api"
11559
+
11560
+
11561
+ class ingest_workflow_api_IngestMcapProtobufResponse(ConjureBeanType):
11562
+
11563
+ @builtins.classmethod
11564
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11565
+ return {
11566
+ 'timestamp_column_name': ConjureFieldDefinition('timestampColumnName', str),
11567
+ 'parquet_object_locators': ConjureFieldDefinition('parquetObjectLocators', List[ingest_workflow_api_ObjectLocator])
11568
+ }
11569
+
11570
+ __slots__: List[str] = ['_timestamp_column_name', '_parquet_object_locators']
11571
+
11572
+ def __init__(self, parquet_object_locators: List["ingest_workflow_api_ObjectLocator"], timestamp_column_name: str) -> None:
11573
+ self._timestamp_column_name = timestamp_column_name
11574
+ self._parquet_object_locators = parquet_object_locators
11575
+
11576
+ @builtins.property
11577
+ def timestamp_column_name(self) -> str:
11578
+ return self._timestamp_column_name
11579
+
11580
+ @builtins.property
11581
+ def parquet_object_locators(self) -> List["ingest_workflow_api_ObjectLocator"]:
11582
+ """
11583
+ Azure or S3-style blob locators of parquet files. Currently
11584
+ only a single file is supported, the list type is used for future compatibility.
11585
+ """
11586
+ return self._parquet_object_locators
11587
+
11588
+
11589
+ ingest_workflow_api_IngestMcapProtobufResponse.__name__ = "IngestMcapProtobufResponse"
11590
+ ingest_workflow_api_IngestMcapProtobufResponse.__qualname__ = "IngestMcapProtobufResponse"
11591
+ ingest_workflow_api_IngestMcapProtobufResponse.__module__ = "nominal_api.ingest_workflow_api"
11592
+
11593
+
11594
+ class ingest_workflow_api_McapProtoChannels(ConjureUnionType):
11595
+ _all: Optional["ingest_workflow_api_Empty"] = None
11596
+ _include_topics: Optional[List[str]] = None
11597
+ _exclude_topics: Optional[List[str]] = None
11598
+
11599
+ @builtins.classmethod
11600
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
11601
+ return {
11602
+ 'all': ConjureFieldDefinition('all', ingest_workflow_api_Empty),
11603
+ 'include_topics': ConjureFieldDefinition('includeTopics', List[ingest_workflow_api_McapTopicName]),
11604
+ 'exclude_topics': ConjureFieldDefinition('excludeTopics', List[ingest_workflow_api_McapTopicName])
11605
+ }
11606
+
11607
+ def __init__(
11608
+ self,
11609
+ all: Optional["ingest_workflow_api_Empty"] = None,
11610
+ include_topics: Optional[List[str]] = None,
11611
+ exclude_topics: Optional[List[str]] = None,
11612
+ type_of_union: Optional[str] = None
11613
+ ) -> None:
11614
+ if type_of_union is None:
11615
+ if (all is not None) + (include_topics is not None) + (exclude_topics is not None) != 1:
11616
+ raise ValueError('a union must contain a single member')
11617
+
11618
+ if all is not None:
11619
+ self._all = all
11620
+ self._type = 'all'
11621
+ if include_topics is not None:
11622
+ self._include_topics = include_topics
11623
+ self._type = 'includeTopics'
11624
+ if exclude_topics is not None:
11625
+ self._exclude_topics = exclude_topics
11626
+ self._type = 'excludeTopics'
11627
+
11628
+ elif type_of_union == 'all':
11629
+ if all is None:
11630
+ raise ValueError('a union value must not be None')
11631
+ self._all = all
11632
+ self._type = 'all'
11633
+ elif type_of_union == 'includeTopics':
11634
+ if include_topics is None:
11635
+ raise ValueError('a union value must not be None')
11636
+ self._include_topics = include_topics
11637
+ self._type = 'includeTopics'
11638
+ elif type_of_union == 'excludeTopics':
11639
+ if exclude_topics is None:
11640
+ raise ValueError('a union value must not be None')
11641
+ self._exclude_topics = exclude_topics
11642
+ self._type = 'excludeTopics'
11643
+
11644
+ @builtins.property
11645
+ def all(self) -> Optional["ingest_workflow_api_Empty"]:
11646
+ return self._all
11647
+
11648
+ @builtins.property
11649
+ def include_topics(self) -> Optional[List[str]]:
11650
+ return self._include_topics
11651
+
11652
+ @builtins.property
11653
+ def exclude_topics(self) -> Optional[List[str]]:
11654
+ return self._exclude_topics
11655
+
11656
+ def accept(self, visitor) -> Any:
11657
+ if not isinstance(visitor, ingest_workflow_api_McapProtoChannelsVisitor):
11658
+ raise ValueError('{} is not an instance of ingest_workflow_api_McapProtoChannelsVisitor'.format(visitor.__class__.__name__))
11659
+ if self._type == 'all' and self.all is not None:
11660
+ return visitor._all(self.all)
11661
+ if self._type == 'includeTopics' and self.include_topics is not None:
11662
+ return visitor._include_topics(self.include_topics)
11663
+ if self._type == 'excludeTopics' and self.exclude_topics is not None:
11664
+ return visitor._exclude_topics(self.exclude_topics)
11665
+
11666
+
11667
+ ingest_workflow_api_McapProtoChannels.__name__ = "McapProtoChannels"
11668
+ ingest_workflow_api_McapProtoChannels.__qualname__ = "McapProtoChannels"
11669
+ ingest_workflow_api_McapProtoChannels.__module__ = "nominal_api.ingest_workflow_api"
11670
+
11671
+
11672
+ class ingest_workflow_api_McapProtoChannelsVisitor:
11673
+
11674
+ @abstractmethod
11675
+ def _all(self, all: "ingest_workflow_api_Empty") -> Any:
11676
+ pass
11677
+
11678
+ @abstractmethod
11679
+ def _include_topics(self, include_topics: List[str]) -> Any:
11680
+ pass
11681
+
11682
+ @abstractmethod
11683
+ def _exclude_topics(self, exclude_topics: List[str]) -> Any:
11684
+ pass
11685
+
11686
+
11687
+ ingest_workflow_api_McapProtoChannelsVisitor.__name__ = "McapProtoChannelsVisitor"
11688
+ ingest_workflow_api_McapProtoChannelsVisitor.__qualname__ = "McapProtoChannelsVisitor"
11689
+ ingest_workflow_api_McapProtoChannelsVisitor.__module__ = "nominal_api.ingest_workflow_api"
11690
+
11691
+
11692
+ class ingest_workflow_api_ObjectLocator(ConjureBeanType):
11693
+ """
11694
+ Locator for files in an object store.
11695
+ Clients are expected to have auth and origin/region configured independently.
11696
+ """
11697
+
11698
+ @builtins.classmethod
11699
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11700
+ return {
11701
+ 'bucket': ConjureFieldDefinition('bucket', str),
11702
+ 'object_name': ConjureFieldDefinition('objectName', str)
11703
+ }
11704
+
11705
+ __slots__: List[str] = ['_bucket', '_object_name']
11706
+
11707
+ def __init__(self, bucket: str, object_name: str) -> None:
11708
+ self._bucket = bucket
11709
+ self._object_name = object_name
11710
+
11711
+ @builtins.property
11712
+ def bucket(self) -> str:
11713
+ return self._bucket
11714
+
11715
+ @builtins.property
11716
+ def object_name(self) -> str:
11717
+ return self._object_name
11718
+
11719
+
11720
+ ingest_workflow_api_ObjectLocator.__name__ = "ObjectLocator"
11721
+ ingest_workflow_api_ObjectLocator.__qualname__ = "ObjectLocator"
11722
+ ingest_workflow_api_ObjectLocator.__module__ = "nominal_api.ingest_workflow_api"
11723
+
11724
+
11725
+ class ingest_workflow_api_TimeUnitSeconds(ConjureEnumType):
11726
+
11727
+ SECONDS = 'SECONDS'
11728
+ '''SECONDS'''
11729
+ UNKNOWN = 'UNKNOWN'
11730
+ '''UNKNOWN'''
11731
+
11732
+ def __reduce_ex__(self, proto):
11733
+ return self.__class__, (self.name,)
11734
+
11735
+
11736
+ ingest_workflow_api_TimeUnitSeconds.__name__ = "TimeUnitSeconds"
11737
+ ingest_workflow_api_TimeUnitSeconds.__qualname__ = "TimeUnitSeconds"
11738
+ ingest_workflow_api_TimeUnitSeconds.__module__ = "nominal_api.ingest_workflow_api"
11739
+
11740
+
11741
+ class persistent_compute_api_AppendResult(ConjureBeanType):
11742
+ """
11743
+ An append result won't cover the full `StreamingComputeNodeRequest#windowWidth` but rather just a smaller
11744
+ window. The end of the window that the append covers is guaranteed to be later than previously sent results.
11745
+ The start, however, can and most likely will overlap with previous results. That allows us to support
11746
+ out-of-order points. The client will have to merge this new `AppendResult` with previous results.
11747
+ Example of time windows that might be covered by results for a subscription:
11748
+ We send a full result for window [0s, 120s] followed by an append result for [116s, 121s] and another
11749
+ append result for [117s, 122s].
11750
+ """
11751
+
11752
+ @builtins.classmethod
11753
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11754
+ return {
11755
+ 'subscription_id': ConjureFieldDefinition('subscriptionId', persistent_compute_api_SubscriptionId),
11756
+ 'start': ConjureFieldDefinition('start', api_Timestamp),
11757
+ 'end': ConjureFieldDefinition('end', api_Timestamp),
11758
+ 'result': ConjureFieldDefinition('result', persistent_compute_api_ComputeNodeAppendResponse)
11759
+ }
11760
+
11761
+ __slots__: List[str] = ['_subscription_id', '_start', '_end', '_result']
11762
+
11763
+ def __init__(self, end: "api_Timestamp", result: "persistent_compute_api_ComputeNodeAppendResponse", start: "api_Timestamp", subscription_id: str) -> None:
11764
+ self._subscription_id = subscription_id
11765
+ self._start = start
11766
+ self._end = end
11767
+ self._result = result
11768
+
11769
+ @builtins.property
11770
+ def subscription_id(self) -> str:
11771
+ return self._subscription_id
11772
+
11773
+ @builtins.property
11774
+ def start(self) -> "api_Timestamp":
11775
+ """
11776
+ The start of the time range that the append result covers
11777
+ """
11778
+ return self._start
11779
+
11780
+ @builtins.property
11781
+ def end(self) -> "api_Timestamp":
11782
+ """
11783
+ The end of the time range that the append result covers
11784
+ """
11785
+ return self._end
11786
+
11787
+ @builtins.property
11788
+ def result(self) -> "persistent_compute_api_ComputeNodeAppendResponse":
11789
+ return self._result
11790
+
11791
+
11792
+ persistent_compute_api_AppendResult.__name__ = "AppendResult"
11793
+ persistent_compute_api_AppendResult.__qualname__ = "AppendResult"
11794
+ persistent_compute_api_AppendResult.__module__ = "nominal_api.persistent_compute_api"
11795
+
11796
+
11161
11797
  class persistent_compute_api_ClientMessage(ConjureUnionType):
11162
11798
  _subscribe: Optional[Dict[str, "persistent_compute_api_StreamingComputeNodeSubscription"]] = None
11163
11799
  _unsubscribe: Optional[List[str]] = None
@@ -11284,6 +11920,217 @@ persistent_compute_api_ClientMessageVisitor.__qualname__ = "ClientMessageVisitor
11284
11920
  persistent_compute_api_ClientMessageVisitor.__module__ = "nominal_api.persistent_compute_api"
11285
11921
 
11286
11922
 
11923
+ class persistent_compute_api_ComputeNodeAppendResponse(ConjureUnionType):
11924
+ """These cover the subset of the union type in `ComputeWithUnitsResponse` for which we support append result.
11925
+ Append results will have the same subtype as the previous full result for the same `SubscriptionId`.
11926
+ If the subtype were to change (e.g., we start doing bucketing because data frequency increased) we will send
11927
+ a new full result with that new type. The results will also have the same units as the previous `FullResult`.
11928
+ Notably, we currently don't support appends for bucketed results as merging buckets is not trivial, especially
11929
+ when accounting for out-of-order points."""
11930
+ _range: Optional[List["scout_compute_api_Range"]] = None
11931
+ _enum_point: Optional[Optional["scout_compute_api_EnumPoint"]] = None
11932
+ _numeric_point: Optional[Optional["scout_compute_api_NumericPoint"]] = None
11933
+ _log_point: Optional[Optional["scout_compute_api_LogPoint"]] = None
11934
+ _range_value: Optional[Optional["scout_compute_api_Range"]] = None
11935
+ _numeric: Optional["scout_compute_api_NumericPlot"] = None
11936
+ _enum: Optional["scout_compute_api_EnumPlot"] = None
11937
+
11938
+ @builtins.classmethod
11939
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
11940
+ return {
11941
+ 'range': ConjureFieldDefinition('range', List[scout_compute_api_Range]),
11942
+ 'enum_point': ConjureFieldDefinition('enumPoint', OptionalTypeWrapper[scout_compute_api_EnumPoint]),
11943
+ 'numeric_point': ConjureFieldDefinition('numericPoint', OptionalTypeWrapper[scout_compute_api_NumericPoint]),
11944
+ 'log_point': ConjureFieldDefinition('logPoint', OptionalTypeWrapper[scout_compute_api_LogPoint]),
11945
+ 'range_value': ConjureFieldDefinition('rangeValue', OptionalTypeWrapper[scout_compute_api_Range]),
11946
+ 'numeric': ConjureFieldDefinition('numeric', scout_compute_api_NumericPlot),
11947
+ 'enum': ConjureFieldDefinition('enum', scout_compute_api_EnumPlot)
11948
+ }
11949
+
11950
+ def __init__(
11951
+ self,
11952
+ range: Optional[List["scout_compute_api_Range"]] = None,
11953
+ enum_point: Optional[Optional["scout_compute_api_EnumPoint"]] = None,
11954
+ numeric_point: Optional[Optional["scout_compute_api_NumericPoint"]] = None,
11955
+ log_point: Optional[Optional["scout_compute_api_LogPoint"]] = None,
11956
+ range_value: Optional[Optional["scout_compute_api_Range"]] = None,
11957
+ numeric: Optional["scout_compute_api_NumericPlot"] = None,
11958
+ enum: Optional["scout_compute_api_EnumPlot"] = None,
11959
+ type_of_union: Optional[str] = None
11960
+ ) -> None:
11961
+ if type_of_union is None:
11962
+ if (range is not None) + (enum_point is not None) + (numeric_point is not None) + (log_point is not None) + (range_value is not None) + (numeric is not None) + (enum is not None) != 1:
11963
+ raise ValueError('a union must contain a single member')
11964
+
11965
+ if range is not None:
11966
+ self._range = range
11967
+ self._type = 'range'
11968
+ if enum_point is not None:
11969
+ self._enum_point = enum_point
11970
+ self._type = 'enumPoint'
11971
+ if numeric_point is not None:
11972
+ self._numeric_point = numeric_point
11973
+ self._type = 'numericPoint'
11974
+ if log_point is not None:
11975
+ self._log_point = log_point
11976
+ self._type = 'logPoint'
11977
+ if range_value is not None:
11978
+ self._range_value = range_value
11979
+ self._type = 'rangeValue'
11980
+ if numeric is not None:
11981
+ self._numeric = numeric
11982
+ self._type = 'numeric'
11983
+ if enum is not None:
11984
+ self._enum = enum
11985
+ self._type = 'enum'
11986
+
11987
+ elif type_of_union == 'range':
11988
+ if range is None:
11989
+ raise ValueError('a union value must not be None')
11990
+ self._range = range
11991
+ self._type = 'range'
11992
+ elif type_of_union == 'enumPoint':
11993
+ if enum_point is None:
11994
+ raise ValueError('a union value must not be None')
11995
+ self._enum_point = enum_point
11996
+ self._type = 'enumPoint'
11997
+ elif type_of_union == 'numericPoint':
11998
+ if numeric_point is None:
11999
+ raise ValueError('a union value must not be None')
12000
+ self._numeric_point = numeric_point
12001
+ self._type = 'numericPoint'
12002
+ elif type_of_union == 'logPoint':
12003
+ if log_point is None:
12004
+ raise ValueError('a union value must not be None')
12005
+ self._log_point = log_point
12006
+ self._type = 'logPoint'
12007
+ elif type_of_union == 'rangeValue':
12008
+ if range_value is None:
12009
+ raise ValueError('a union value must not be None')
12010
+ self._range_value = range_value
12011
+ self._type = 'rangeValue'
12012
+ elif type_of_union == 'numeric':
12013
+ if numeric is None:
12014
+ raise ValueError('a union value must not be None')
12015
+ self._numeric = numeric
12016
+ self._type = 'numeric'
12017
+ elif type_of_union == 'enum':
12018
+ if enum is None:
12019
+ raise ValueError('a union value must not be None')
12020
+ self._enum = enum
12021
+ self._type = 'enum'
12022
+
12023
+ @builtins.property
12024
+ def range(self) -> Optional[List["scout_compute_api_Range"]]:
12025
+ """
12026
+ Merging can be done via dropping any old ranges (possibly truncating the last one) and adding these new
12027
+ ranges, possibly merging them if they overlap or are adjacent.
12028
+ """
12029
+ return self._range
12030
+
12031
+ @builtins.property
12032
+ def enum_point(self) -> Optional[Optional["scout_compute_api_EnumPoint"]]:
12033
+ """
12034
+ Merging can be done by keeping track of the applicable point present within the current window
12035
+ """
12036
+ return self._enum_point
12037
+
12038
+ @builtins.property
12039
+ def numeric_point(self) -> Optional[Optional["scout_compute_api_NumericPoint"]]:
12040
+ """
12041
+ Merging can be done by keeping track of the applicable point present within the current window
12042
+ """
12043
+ return self._numeric_point
12044
+
12045
+ @builtins.property
12046
+ def log_point(self) -> Optional[Optional["scout_compute_api_LogPoint"]]:
12047
+ """
12048
+ Merging can be done by keeping track of the applicable point present within the current window
12049
+ """
12050
+ return self._log_point
12051
+
12052
+ @builtins.property
12053
+ def range_value(self) -> Optional[Optional["scout_compute_api_Range"]]:
12054
+ """
12055
+ Merging can be done by keeping track of the applicable range present within the current window, possibly
12056
+ merging ranges if they are overlap or are adjacent
12057
+ """
12058
+ return self._range_value
12059
+
12060
+ @builtins.property
12061
+ def numeric(self) -> Optional["scout_compute_api_NumericPlot"]:
12062
+ """
12063
+ Merging be be done by dropping any old points and adding the new ones, accounting for overlaps
12064
+ """
12065
+ return self._numeric
12066
+
12067
+ @builtins.property
12068
+ def enum(self) -> Optional["scout_compute_api_EnumPlot"]:
12069
+ """
12070
+ Merging be be done by dropping any old points and adding the new ones, accounting for overlaps
12071
+ """
12072
+ return self._enum
12073
+
12074
+ def accept(self, visitor) -> Any:
12075
+ if not isinstance(visitor, persistent_compute_api_ComputeNodeAppendResponseVisitor):
12076
+ raise ValueError('{} is not an instance of persistent_compute_api_ComputeNodeAppendResponseVisitor'.format(visitor.__class__.__name__))
12077
+ if self._type == 'range' and self.range is not None:
12078
+ return visitor._range(self.range)
12079
+ if self._type == 'enumPoint' and self.enum_point is not None:
12080
+ return visitor._enum_point(self.enum_point)
12081
+ if self._type == 'numericPoint' and self.numeric_point is not None:
12082
+ return visitor._numeric_point(self.numeric_point)
12083
+ if self._type == 'logPoint' and self.log_point is not None:
12084
+ return visitor._log_point(self.log_point)
12085
+ if self._type == 'rangeValue' and self.range_value is not None:
12086
+ return visitor._range_value(self.range_value)
12087
+ if self._type == 'numeric' and self.numeric is not None:
12088
+ return visitor._numeric(self.numeric)
12089
+ if self._type == 'enum' and self.enum is not None:
12090
+ return visitor._enum(self.enum)
12091
+
12092
+
12093
+ persistent_compute_api_ComputeNodeAppendResponse.__name__ = "ComputeNodeAppendResponse"
12094
+ persistent_compute_api_ComputeNodeAppendResponse.__qualname__ = "ComputeNodeAppendResponse"
12095
+ persistent_compute_api_ComputeNodeAppendResponse.__module__ = "nominal_api.persistent_compute_api"
12096
+
12097
+
12098
+ class persistent_compute_api_ComputeNodeAppendResponseVisitor:
12099
+
12100
+ @abstractmethod
12101
+ def _range(self, range: List["scout_compute_api_Range"]) -> Any:
12102
+ pass
12103
+
12104
+ @abstractmethod
12105
+ def _enum_point(self, enum_point: Optional["scout_compute_api_EnumPoint"]) -> Any:
12106
+ pass
12107
+
12108
+ @abstractmethod
12109
+ def _numeric_point(self, numeric_point: Optional["scout_compute_api_NumericPoint"]) -> Any:
12110
+ pass
12111
+
12112
+ @abstractmethod
12113
+ def _log_point(self, log_point: Optional["scout_compute_api_LogPoint"]) -> Any:
12114
+ pass
12115
+
12116
+ @abstractmethod
12117
+ def _range_value(self, range_value: Optional["scout_compute_api_Range"]) -> Any:
12118
+ pass
12119
+
12120
+ @abstractmethod
12121
+ def _numeric(self, numeric: "scout_compute_api_NumericPlot") -> Any:
12122
+ pass
12123
+
12124
+ @abstractmethod
12125
+ def _enum(self, enum: "scout_compute_api_EnumPlot") -> Any:
12126
+ pass
12127
+
12128
+
12129
+ persistent_compute_api_ComputeNodeAppendResponseVisitor.__name__ = "ComputeNodeAppendResponseVisitor"
12130
+ persistent_compute_api_ComputeNodeAppendResponseVisitor.__qualname__ = "ComputeNodeAppendResponseVisitor"
12131
+ persistent_compute_api_ComputeNodeAppendResponseVisitor.__module__ = "nominal_api.persistent_compute_api"
12132
+
12133
+
11287
12134
  class persistent_compute_api_FullResult(ConjureBeanType):
11288
12135
 
11289
12136
  @builtins.classmethod
@@ -11600,13 +12447,15 @@ class persistent_compute_api_SubscriptionOptions(ConjureBeanType):
11600
12447
  @builtins.classmethod
11601
12448
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
11602
12449
  return {
11603
- 'min_delay': ConjureFieldDefinition('minDelay', persistent_compute_api_Milliseconds)
12450
+ 'min_delay': ConjureFieldDefinition('minDelay', persistent_compute_api_Milliseconds),
12451
+ 'allow_appends': ConjureFieldDefinition('allowAppends', OptionalTypeWrapper[bool])
11604
12452
  }
11605
12453
 
11606
- __slots__: List[str] = ['_min_delay']
12454
+ __slots__: List[str] = ['_min_delay', '_allow_appends']
11607
12455
 
11608
- def __init__(self, min_delay: int) -> None:
12456
+ def __init__(self, min_delay: int, allow_appends: Optional[bool] = None) -> None:
11609
12457
  self._min_delay = min_delay
12458
+ self._allow_appends = allow_appends
11610
12459
 
11611
12460
  @builtins.property
11612
12461
  def min_delay(self) -> int:
@@ -11615,6 +12464,19 @@ class persistent_compute_api_SubscriptionOptions(ConjureBeanType):
11615
12464
  """
11616
12465
  return self._min_delay
11617
12466
 
12467
+ @builtins.property
12468
+ def allow_appends(self) -> Optional[bool]:
12469
+ """
12470
+ Can be set to `false` by the client to indicate that it doesn't support appends for this subscription
12471
+ and always wants to receive full results. Defaults to `false` if not set.
12472
+ The expectation is that clients should implement support for appends for any of the results covered in
12473
+ `ComputeNodeAppendResponse` and set this to `true` as quickly as possible. However, in order to support
12474
+ adding new sub-types to `ComputeNodeAppendResponse` without breaking clients that haven't upgraded yet
12475
+ and haven't yet added support for them, we default this to `false` and make clients opt-in as soon as they
12476
+ implement support.
12477
+ """
12478
+ return self._allow_appends
12479
+
11618
12480
 
11619
12481
  persistent_compute_api_SubscriptionOptions.__name__ = "SubscriptionOptions"
11620
12482
  persistent_compute_api_SubscriptionOptions.__qualname__ = "SubscriptionOptions"
@@ -11623,41 +12485,58 @@ persistent_compute_api_SubscriptionOptions.__module__ = "nominal_api.persistent_
11623
12485
 
11624
12486
  class persistent_compute_api_SubscriptionUpdate(ConjureUnionType):
11625
12487
  _full: Optional["persistent_compute_api_FullResult"] = None
12488
+ _append: Optional["persistent_compute_api_AppendResult"] = None
11626
12489
 
11627
12490
  @builtins.classmethod
11628
12491
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
11629
12492
  return {
11630
- 'full': ConjureFieldDefinition('full', persistent_compute_api_FullResult)
12493
+ 'full': ConjureFieldDefinition('full', persistent_compute_api_FullResult),
12494
+ 'append': ConjureFieldDefinition('append', persistent_compute_api_AppendResult)
11631
12495
  }
11632
12496
 
11633
12497
  def __init__(
11634
12498
  self,
11635
12499
  full: Optional["persistent_compute_api_FullResult"] = None,
12500
+ append: Optional["persistent_compute_api_AppendResult"] = None,
11636
12501
  type_of_union: Optional[str] = None
11637
12502
  ) -> None:
11638
12503
  if type_of_union is None:
11639
- if (full is not None) != 1:
12504
+ if (full is not None) + (append is not None) != 1:
11640
12505
  raise ValueError('a union must contain a single member')
11641
12506
 
11642
12507
  if full is not None:
11643
12508
  self._full = full
11644
12509
  self._type = 'full'
12510
+ if append is not None:
12511
+ self._append = append
12512
+ self._type = 'append'
11645
12513
 
11646
12514
  elif type_of_union == 'full':
11647
12515
  if full is None:
11648
12516
  raise ValueError('a union value must not be None')
11649
12517
  self._full = full
11650
12518
  self._type = 'full'
12519
+ elif type_of_union == 'append':
12520
+ if append is None:
12521
+ raise ValueError('a union value must not be None')
12522
+ self._append = append
12523
+ self._type = 'append'
11651
12524
 
11652
12525
  @builtins.property
11653
12526
  def full(self) -> Optional["persistent_compute_api_FullResult"]:
11654
12527
  return self._full
11655
12528
 
12529
+ @builtins.property
12530
+ def append(self) -> Optional["persistent_compute_api_AppendResult"]:
12531
+ return self._append
12532
+
11656
12533
  def accept(self, visitor) -> Any:
11657
12534
  if not isinstance(visitor, persistent_compute_api_SubscriptionUpdateVisitor):
11658
12535
  raise ValueError('{} is not an instance of persistent_compute_api_SubscriptionUpdateVisitor'.format(visitor.__class__.__name__))
11659
12536
  if self._type == 'full' and self.full is not None:
11660
12537
  return visitor._full(self.full)
12538
+ if self._type == 'append' and self.append is not None:
12539
+ return visitor._append(self.append)
11661
12540
 
11662
12541
 
11663
12542
  persistent_compute_api_SubscriptionUpdate.__name__ = "SubscriptionUpdate"
@@ -11671,6 +12550,10 @@ class persistent_compute_api_SubscriptionUpdateVisitor:
11671
12550
  def _full(self, full: "persistent_compute_api_FullResult") -> Any:
11672
12551
  pass
11673
12552
 
12553
+ @abstractmethod
12554
+ def _append(self, append: "persistent_compute_api_AppendResult") -> Any:
12555
+ pass
12556
+
11674
12557
 
11675
12558
  persistent_compute_api_SubscriptionUpdateVisitor.__name__ = "SubscriptionUpdateVisitor"
11676
12559
  persistent_compute_api_SubscriptionUpdateVisitor.__qualname__ = "SubscriptionUpdateVisitor"
@@ -39939,13 +40822,15 @@ class scout_compute_api_SelectValue(ConjureUnionType):
39939
40822
  _first_point: Optional["scout_compute_api_Series"] = None
39940
40823
  _first_range: Optional["scout_compute_api_RangeSeries"] = None
39941
40824
  _last_point: Optional["scout_compute_api_Series"] = None
40825
+ _last_range: Optional["scout_compute_api_RangeSeries"] = None
39942
40826
 
39943
40827
  @builtins.classmethod
39944
40828
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
39945
40829
  return {
39946
40830
  'first_point': ConjureFieldDefinition('firstPoint', scout_compute_api_Series),
39947
40831
  'first_range': ConjureFieldDefinition('firstRange', scout_compute_api_RangeSeries),
39948
- 'last_point': ConjureFieldDefinition('lastPoint', scout_compute_api_Series)
40832
+ 'last_point': ConjureFieldDefinition('lastPoint', scout_compute_api_Series),
40833
+ 'last_range': ConjureFieldDefinition('lastRange', scout_compute_api_RangeSeries)
39949
40834
  }
39950
40835
 
39951
40836
  def __init__(
@@ -39953,10 +40838,11 @@ class scout_compute_api_SelectValue(ConjureUnionType):
39953
40838
  first_point: Optional["scout_compute_api_Series"] = None,
39954
40839
  first_range: Optional["scout_compute_api_RangeSeries"] = None,
39955
40840
  last_point: Optional["scout_compute_api_Series"] = None,
40841
+ last_range: Optional["scout_compute_api_RangeSeries"] = None,
39956
40842
  type_of_union: Optional[str] = None
39957
40843
  ) -> None:
39958
40844
  if type_of_union is None:
39959
- if (first_point is not None) + (first_range is not None) + (last_point is not None) != 1:
40845
+ if (first_point is not None) + (first_range is not None) + (last_point is not None) + (last_range is not None) != 1:
39960
40846
  raise ValueError('a union must contain a single member')
39961
40847
 
39962
40848
  if first_point is not None:
@@ -39968,6 +40854,9 @@ class scout_compute_api_SelectValue(ConjureUnionType):
39968
40854
  if last_point is not None:
39969
40855
  self._last_point = last_point
39970
40856
  self._type = 'lastPoint'
40857
+ if last_range is not None:
40858
+ self._last_range = last_range
40859
+ self._type = 'lastRange'
39971
40860
 
39972
40861
  elif type_of_union == 'firstPoint':
39973
40862
  if first_point is None:
@@ -39984,6 +40873,11 @@ class scout_compute_api_SelectValue(ConjureUnionType):
39984
40873
  raise ValueError('a union value must not be None')
39985
40874
  self._last_point = last_point
39986
40875
  self._type = 'lastPoint'
40876
+ elif type_of_union == 'lastRange':
40877
+ if last_range is None:
40878
+ raise ValueError('a union value must not be None')
40879
+ self._last_range = last_range
40880
+ self._type = 'lastRange'
39987
40881
 
39988
40882
  @builtins.property
39989
40883
  def first_point(self) -> Optional["scout_compute_api_Series"]:
@@ -39997,6 +40891,10 @@ class scout_compute_api_SelectValue(ConjureUnionType):
39997
40891
  def last_point(self) -> Optional["scout_compute_api_Series"]:
39998
40892
  return self._last_point
39999
40893
 
40894
+ @builtins.property
40895
+ def last_range(self) -> Optional["scout_compute_api_RangeSeries"]:
40896
+ return self._last_range
40897
+
40000
40898
  def accept(self, visitor) -> Any:
40001
40899
  if not isinstance(visitor, scout_compute_api_SelectValueVisitor):
40002
40900
  raise ValueError('{} is not an instance of scout_compute_api_SelectValueVisitor'.format(visitor.__class__.__name__))
@@ -40006,6 +40904,8 @@ class scout_compute_api_SelectValue(ConjureUnionType):
40006
40904
  return visitor._first_range(self.first_range)
40007
40905
  if self._type == 'lastPoint' and self.last_point is not None:
40008
40906
  return visitor._last_point(self.last_point)
40907
+ if self._type == 'lastRange' and self.last_range is not None:
40908
+ return visitor._last_range(self.last_range)
40009
40909
 
40010
40910
 
40011
40911
  scout_compute_api_SelectValue.__name__ = "SelectValue"
@@ -40027,6 +40927,10 @@ class scout_compute_api_SelectValueVisitor:
40027
40927
  def _last_point(self, last_point: "scout_compute_api_Series") -> Any:
40028
40928
  pass
40029
40929
 
40930
+ @abstractmethod
40931
+ def _last_range(self, last_range: "scout_compute_api_RangeSeries") -> Any:
40932
+ pass
40933
+
40030
40934
 
40031
40935
  scout_compute_api_SelectValueVisitor.__name__ = "SelectValueVisitor"
40032
40936
  scout_compute_api_SelectValueVisitor.__qualname__ = "SelectValueVisitor"
@@ -48986,13 +49890,15 @@ class scout_compute_resolved_api_SelectValueNode(ConjureUnionType):
48986
49890
  _first_point: Optional["scout_compute_resolved_api_SeriesNode"] = None
48987
49891
  _first_range: Optional["scout_compute_resolved_api_RangesNode"] = None
48988
49892
  _last_point: Optional["scout_compute_resolved_api_SeriesNode"] = None
49893
+ _last_range: Optional["scout_compute_resolved_api_RangesNode"] = None
48989
49894
 
48990
49895
  @builtins.classmethod
48991
49896
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
48992
49897
  return {
48993
49898
  'first_point': ConjureFieldDefinition('firstPoint', scout_compute_resolved_api_SeriesNode),
48994
49899
  'first_range': ConjureFieldDefinition('firstRange', scout_compute_resolved_api_RangesNode),
48995
- 'last_point': ConjureFieldDefinition('lastPoint', scout_compute_resolved_api_SeriesNode)
49900
+ 'last_point': ConjureFieldDefinition('lastPoint', scout_compute_resolved_api_SeriesNode),
49901
+ 'last_range': ConjureFieldDefinition('lastRange', scout_compute_resolved_api_RangesNode)
48996
49902
  }
48997
49903
 
48998
49904
  def __init__(
@@ -49000,10 +49906,11 @@ class scout_compute_resolved_api_SelectValueNode(ConjureUnionType):
49000
49906
  first_point: Optional["scout_compute_resolved_api_SeriesNode"] = None,
49001
49907
  first_range: Optional["scout_compute_resolved_api_RangesNode"] = None,
49002
49908
  last_point: Optional["scout_compute_resolved_api_SeriesNode"] = None,
49909
+ last_range: Optional["scout_compute_resolved_api_RangesNode"] = None,
49003
49910
  type_of_union: Optional[str] = None
49004
49911
  ) -> None:
49005
49912
  if type_of_union is None:
49006
- if (first_point is not None) + (first_range is not None) + (last_point is not None) != 1:
49913
+ if (first_point is not None) + (first_range is not None) + (last_point is not None) + (last_range is not None) != 1:
49007
49914
  raise ValueError('a union must contain a single member')
49008
49915
 
49009
49916
  if first_point is not None:
@@ -49015,6 +49922,9 @@ class scout_compute_resolved_api_SelectValueNode(ConjureUnionType):
49015
49922
  if last_point is not None:
49016
49923
  self._last_point = last_point
49017
49924
  self._type = 'lastPoint'
49925
+ if last_range is not None:
49926
+ self._last_range = last_range
49927
+ self._type = 'lastRange'
49018
49928
 
49019
49929
  elif type_of_union == 'firstPoint':
49020
49930
  if first_point is None:
@@ -49031,6 +49941,11 @@ class scout_compute_resolved_api_SelectValueNode(ConjureUnionType):
49031
49941
  raise ValueError('a union value must not be None')
49032
49942
  self._last_point = last_point
49033
49943
  self._type = 'lastPoint'
49944
+ elif type_of_union == 'lastRange':
49945
+ if last_range is None:
49946
+ raise ValueError('a union value must not be None')
49947
+ self._last_range = last_range
49948
+ self._type = 'lastRange'
49034
49949
 
49035
49950
  @builtins.property
49036
49951
  def first_point(self) -> Optional["scout_compute_resolved_api_SeriesNode"]:
@@ -49044,6 +49959,10 @@ class scout_compute_resolved_api_SelectValueNode(ConjureUnionType):
49044
49959
  def last_point(self) -> Optional["scout_compute_resolved_api_SeriesNode"]:
49045
49960
  return self._last_point
49046
49961
 
49962
+ @builtins.property
49963
+ def last_range(self) -> Optional["scout_compute_resolved_api_RangesNode"]:
49964
+ return self._last_range
49965
+
49047
49966
  def accept(self, visitor) -> Any:
49048
49967
  if not isinstance(visitor, scout_compute_resolved_api_SelectValueNodeVisitor):
49049
49968
  raise ValueError('{} is not an instance of scout_compute_resolved_api_SelectValueNodeVisitor'.format(visitor.__class__.__name__))
@@ -49053,6 +49972,8 @@ class scout_compute_resolved_api_SelectValueNode(ConjureUnionType):
49053
49972
  return visitor._first_range(self.first_range)
49054
49973
  if self._type == 'lastPoint' and self.last_point is not None:
49055
49974
  return visitor._last_point(self.last_point)
49975
+ if self._type == 'lastRange' and self.last_range is not None:
49976
+ return visitor._last_range(self.last_range)
49056
49977
 
49057
49978
 
49058
49979
  scout_compute_resolved_api_SelectValueNode.__name__ = "SelectValueNode"
@@ -49074,6 +49995,10 @@ class scout_compute_resolved_api_SelectValueNodeVisitor:
49074
49995
  def _last_point(self, last_point: "scout_compute_resolved_api_SeriesNode") -> Any:
49075
49996
  pass
49076
49997
 
49998
+ @abstractmethod
49999
+ def _last_range(self, last_range: "scout_compute_resolved_api_RangesNode") -> Any:
50000
+ pass
50001
+
49077
50002
 
49078
50003
  scout_compute_resolved_api_SelectValueNodeVisitor.__name__ = "SelectValueNodeVisitor"
49079
50004
  scout_compute_resolved_api_SelectValueNodeVisitor.__qualname__ = "SelectValueNodeVisitor"
@@ -76118,6 +77043,8 @@ upload_api_UploadService.__qualname__ = "UploadService"
76118
77043
  upload_api_UploadService.__module__ = "nominal_api.upload_api"
76119
77044
 
76120
77045
 
77046
+ api_ColumnName = str
77047
+
76121
77048
  api_Label = str
76122
77049
 
76123
77050
  timeseries_archetype_api_SeriesArchetypeName = str
@@ -76148,6 +77075,8 @@ api_rids_VideoFileRid = str
76148
77075
 
76149
77076
  api_Unit = str
76150
77077
 
77078
+ ingest_workflow_api_McapTopicName = str
77079
+
76151
77080
  scout_versioning_api_BranchRid = str
76152
77081
 
76153
77082
  datasource_DatasetFileId = str
@@ -76314,8 +77243,6 @@ scout_datareview_api_AutomaticCheckEvaluationRid = str
76314
77243
 
76315
77244
  scout_compute_api_ErrorType = str
76316
77245
 
76317
- ingest_api_ExtractorInputName = str
76318
-
76319
77246
  comments_api_ResourceRid = str
76320
77247
 
76321
77248
  scout_rids_api_FunctionLineageRid = str