nominal-api 0.609.0__py3-none-any.whl → 0.611.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
@@ -6538,6 +6538,63 @@ ingest_api_AsyncHandle.__qualname__ = "AsyncHandle"
6538
6538
  ingest_api_AsyncHandle.__module__ = "nominal_api.ingest_api"
6539
6539
 
6540
6540
 
6541
+ class ingest_api_Authentication(ConjureUnionType):
6542
+ """Authentication methods for Docker registries."""
6543
+ _user_and_password: Optional["ingest_api_UserAndPasswordAuthentication"] = None
6544
+
6545
+ @builtins.classmethod
6546
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
6547
+ return {
6548
+ 'user_and_password': ConjureFieldDefinition('userAndPassword', ingest_api_UserAndPasswordAuthentication)
6549
+ }
6550
+
6551
+ def __init__(
6552
+ self,
6553
+ user_and_password: Optional["ingest_api_UserAndPasswordAuthentication"] = None,
6554
+ type_of_union: Optional[str] = None
6555
+ ) -> None:
6556
+ if type_of_union is None:
6557
+ if (user_and_password is not None) != 1:
6558
+ raise ValueError('a union must contain a single member')
6559
+
6560
+ if user_and_password is not None:
6561
+ self._user_and_password = user_and_password
6562
+ self._type = 'userAndPassword'
6563
+
6564
+ elif type_of_union == 'userAndPassword':
6565
+ if user_and_password is None:
6566
+ raise ValueError('a union value must not be None')
6567
+ self._user_and_password = user_and_password
6568
+ self._type = 'userAndPassword'
6569
+
6570
+ @builtins.property
6571
+ def user_and_password(self) -> Optional["ingest_api_UserAndPasswordAuthentication"]:
6572
+ return self._user_and_password
6573
+
6574
+ def accept(self, visitor) -> Any:
6575
+ if not isinstance(visitor, ingest_api_AuthenticationVisitor):
6576
+ raise ValueError('{} is not an instance of ingest_api_AuthenticationVisitor'.format(visitor.__class__.__name__))
6577
+ if self._type == 'userAndPassword' and self.user_and_password is not None:
6578
+ return visitor._user_and_password(self.user_and_password)
6579
+
6580
+
6581
+ ingest_api_Authentication.__name__ = "Authentication"
6582
+ ingest_api_Authentication.__qualname__ = "Authentication"
6583
+ ingest_api_Authentication.__module__ = "nominal_api.ingest_api"
6584
+
6585
+
6586
+ class ingest_api_AuthenticationVisitor:
6587
+
6588
+ @abstractmethod
6589
+ def _user_and_password(self, user_and_password: "ingest_api_UserAndPasswordAuthentication") -> Any:
6590
+ pass
6591
+
6592
+
6593
+ ingest_api_AuthenticationVisitor.__name__ = "AuthenticationVisitor"
6594
+ ingest_api_AuthenticationVisitor.__qualname__ = "AuthenticationVisitor"
6595
+ ingest_api_AuthenticationVisitor.__module__ = "nominal_api.ingest_api"
6596
+
6597
+
6541
6598
  class ingest_api_ChannelConfig(ConjureBeanType):
6542
6599
 
6543
6600
  @builtins.classmethod
@@ -6587,63 +6644,310 @@ ingest_api_CompleteMultipartUploadResponse.__qualname__ = "CompleteMultipartUplo
6587
6644
  ingest_api_CompleteMultipartUploadResponse.__module__ = "nominal_api.ingest_api"
6588
6645
 
6589
6646
 
6590
- class ingest_api_CsvOpts(ConjureBeanType):
6647
+ class ingest_api_ContainerizedExtractor(ConjureBeanType):
6591
6648
  """
6592
- Options for ingesting csv files. Supported file formats include .csv, .csv.gz
6649
+ Represents a containerized extractor that processes input files using a container.
6593
6650
  """
6594
6651
 
6595
6652
  @builtins.classmethod
6596
6653
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
6597
6654
  return {
6598
- 'source': ConjureFieldDefinition('source', ingest_api_IngestSource),
6599
- 'target': ConjureFieldDefinition('target', ingest_api_DatasetIngestTarget),
6600
- 'timestamp_metadata': ConjureFieldDefinition('timestampMetadata', ingest_api_TimestampMetadata),
6601
- 'channel_prefix': ConjureFieldDefinition('channelPrefix', ingest_api_ChannelPrefix),
6602
- 'tag_keys_from_columns': ConjureFieldDefinition('tagKeysFromColumns', OptionalTypeWrapper[List[api_TagName]]),
6603
- 'additional_file_tags': ConjureFieldDefinition('additionalFileTags', OptionalTypeWrapper[Dict[api_TagName, api_TagValue]])
6655
+ 'rid': ConjureFieldDefinition('rid', ingest_api_ContainerizedExtractorRid),
6656
+ 'name': ConjureFieldDefinition('name', str),
6657
+ 'description': ConjureFieldDefinition('description', OptionalTypeWrapper[str]),
6658
+ 'image': ConjureFieldDefinition('image', ingest_api_DockerImageSource),
6659
+ 'inputs': ConjureFieldDefinition('inputs', List[ingest_api_FileExtractionInput]),
6660
+ 'properties': ConjureFieldDefinition('properties', Dict[api_PropertyName, api_PropertyValue]),
6661
+ 'labels': ConjureFieldDefinition('labels', List[api_Label]),
6662
+ 'created_at': ConjureFieldDefinition('createdAt', str),
6663
+ 'is_archived': ConjureFieldDefinition('isArchived', bool)
6604
6664
  }
6605
6665
 
6606
- __slots__: List[str] = ['_source', '_target', '_timestamp_metadata', '_channel_prefix', '_tag_keys_from_columns', '_additional_file_tags']
6666
+ __slots__: List[str] = ['_rid', '_name', '_description', '_image', '_inputs', '_properties', '_labels', '_created_at', '_is_archived']
6607
6667
 
6608
- 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:
6609
- self._source = source
6610
- self._target = target
6611
- self._timestamp_metadata = timestamp_metadata
6612
- self._channel_prefix = channel_prefix
6613
- self._tag_keys_from_columns = tag_keys_from_columns
6614
- self._additional_file_tags = additional_file_tags
6668
+ def __init__(self, created_at: str, image: "ingest_api_DockerImageSource", inputs: List["ingest_api_FileExtractionInput"], is_archived: bool, labels: List[str], name: str, properties: Dict[str, str], rid: str, description: Optional[str] = None) -> None:
6669
+ self._rid = rid
6670
+ self._name = name
6671
+ self._description = description
6672
+ self._image = image
6673
+ self._inputs = inputs
6674
+ self._properties = properties
6675
+ self._labels = labels
6676
+ self._created_at = created_at
6677
+ self._is_archived = is_archived
6615
6678
 
6616
6679
  @builtins.property
6617
- def source(self) -> "ingest_api_IngestSource":
6618
- return self._source
6680
+ def rid(self) -> str:
6681
+ """
6682
+ Unique resource identifier for the extractor.
6683
+ """
6684
+ return self._rid
6619
6685
 
6620
6686
  @builtins.property
6621
- def target(self) -> "ingest_api_DatasetIngestTarget":
6622
- return self._target
6687
+ def name(self) -> str:
6688
+ """
6689
+ The name of the extractor as defined by the user.
6690
+ """
6691
+ return self._name
6623
6692
 
6624
6693
  @builtins.property
6625
- def timestamp_metadata(self) -> "ingest_api_TimestampMetadata":
6626
- return self._timestamp_metadata
6694
+ def description(self) -> Optional[str]:
6695
+ """
6696
+ Optional description of the extractor.
6697
+ """
6698
+ return self._description
6627
6699
 
6628
6700
  @builtins.property
6629
- def channel_prefix(self) -> Optional[str]:
6630
- return self._channel_prefix
6701
+ def image(self) -> "ingest_api_DockerImageSource":
6702
+ """
6703
+ Container image used to run the extractor.
6704
+ """
6705
+ return self._image
6631
6706
 
6632
6707
  @builtins.property
6633
- def tag_keys_from_columns(self) -> Optional[List[str]]:
6634
- return self._tag_keys_from_columns
6708
+ def inputs(self) -> List["ingest_api_FileExtractionInput"]:
6709
+ """
6710
+ The input files that this extractor requires, mapped to environment variables that store the path to the file.
6711
+ """
6712
+ return self._inputs
6635
6713
 
6636
6714
  @builtins.property
6637
- def additional_file_tags(self) -> Optional[Dict[str, str]]:
6638
- return self._additional_file_tags
6715
+ def properties(self) -> Dict[str, str]:
6716
+ """
6717
+ Additional properties associated with this extractor.
6718
+ """
6719
+ return self._properties
6720
+
6721
+ @builtins.property
6722
+ def labels(self) -> List[str]:
6723
+ """
6724
+ Set of labels applied to this extractor.
6725
+ """
6726
+ return self._labels
6639
6727
 
6728
+ @builtins.property
6729
+ def created_at(self) -> str:
6730
+ """
6731
+ Timestamp when this extractor was created.
6732
+ """
6733
+ return self._created_at
6640
6734
 
6641
- ingest_api_CsvOpts.__name__ = "CsvOpts"
6642
- ingest_api_CsvOpts.__qualname__ = "CsvOpts"
6643
- ingest_api_CsvOpts.__module__ = "nominal_api.ingest_api"
6735
+ @builtins.property
6736
+ def is_archived(self) -> bool:
6737
+ """
6738
+ Whether this extractor is archived.
6739
+ """
6740
+ return self._is_archived
6741
+
6742
+
6743
+ ingest_api_ContainerizedExtractor.__name__ = "ContainerizedExtractor"
6744
+ ingest_api_ContainerizedExtractor.__qualname__ = "ContainerizedExtractor"
6745
+ ingest_api_ContainerizedExtractor.__module__ = "nominal_api.ingest_api"
6746
+
6747
+
6748
+ class ingest_api_ContainerizedExtractorService(Service):
6749
+ """
6750
+ The Containerized Extractor service provides functionality for creating, updating, and archiving containerized extractors.
6751
+ """
6752
+
6753
+ def register_containerized_extractor(self, auth_header: str, request: "ingest_api_RegisterContainerizedExtractorRequest") -> "ingest_api_RegisterContainerizedExtractorResponse":
6754
+ """
6755
+ Registers a containerized extractor for a given set of containerized files.
6756
+ """
6757
+
6758
+ _headers: Dict[str, Any] = {
6759
+ 'Accept': 'application/json',
6760
+ 'Content-Type': 'application/json',
6761
+ 'Authorization': auth_header,
6762
+ }
6763
+
6764
+ _params: Dict[str, Any] = {
6765
+ }
6766
+
6767
+ _path_params: Dict[str, Any] = {
6768
+ }
6769
+
6770
+ _json: Any = ConjureEncoder().default(request)
6771
+
6772
+ _path = '/extractors/v1/container'
6773
+ _path = _path.format(**_path_params)
6774
+
6775
+ _response: Response = self._request(
6776
+ 'POST',
6777
+ self._uri + _path,
6778
+ params=_params,
6779
+ headers=_headers,
6780
+ json=_json)
6781
+
6782
+ _decoder = ConjureDecoder()
6783
+ return _decoder.decode(_response.json(), ingest_api_RegisterContainerizedExtractorResponse, self._return_none_for_unknown_union_types)
6784
+
6785
+ def get_containerized_extractor(self, auth_header: str, extractor_rid: str) -> "ingest_api_ContainerizedExtractor":
6786
+ """
6787
+ Get a containerized extractor by its RID.
6788
+ """
6789
+
6790
+ _headers: Dict[str, Any] = {
6791
+ 'Accept': 'application/json',
6792
+ 'Authorization': auth_header,
6793
+ }
6794
+
6795
+ _params: Dict[str, Any] = {
6796
+ }
6797
+
6798
+ _path_params: Dict[str, Any] = {
6799
+ 'extractorRid': extractor_rid,
6800
+ }
6801
+
6802
+ _json: Any = None
6803
+
6804
+ _path = '/extractors/v1/container/{extractorRid}'
6805
+ _path = _path.format(**_path_params)
6806
+
6807
+ _response: Response = self._request(
6808
+ 'GET',
6809
+ self._uri + _path,
6810
+ params=_params,
6811
+ headers=_headers,
6812
+ json=_json)
6813
+
6814
+ _decoder = ConjureDecoder()
6815
+ return _decoder.decode(_response.json(), ingest_api_ContainerizedExtractor, self._return_none_for_unknown_union_types)
6816
+
6817
+ def search_containerized_extractors(self, auth_header: str, request: "ingest_api_SearchContainerizedExtractorsRequest") -> List["ingest_api_ContainerizedExtractor"]:
6818
+ """
6819
+ Search for containerized extractors based on query parameters.
6820
+ """
6821
+
6822
+ _headers: Dict[str, Any] = {
6823
+ 'Accept': 'application/json',
6824
+ 'Content-Type': 'application/json',
6825
+ 'Authorization': auth_header,
6826
+ }
6827
+
6828
+ _params: Dict[str, Any] = {
6829
+ }
6830
+
6831
+ _path_params: Dict[str, Any] = {
6832
+ }
6833
+
6834
+ _json: Any = ConjureEncoder().default(request)
6835
+
6836
+ _path = '/extractors/v1/container/search'
6837
+ _path = _path.format(**_path_params)
6838
+
6839
+ _response: Response = self._request(
6840
+ 'POST',
6841
+ self._uri + _path,
6842
+ params=_params,
6843
+ headers=_headers,
6844
+ json=_json)
6845
+
6846
+ _decoder = ConjureDecoder()
6847
+ return _decoder.decode(_response.json(), List[ingest_api_ContainerizedExtractor], self._return_none_for_unknown_union_types)
6848
+
6849
+ def update_containerized_extractor(self, auth_header: str, extractor_rid: str, request: "ingest_api_UpdateContainerizedExtractorRequest") -> "ingest_api_ContainerizedExtractor":
6850
+ """
6851
+ Update a containerized extractor. Only the fields that are set in the request will be updated.
6852
+ """
6853
+
6854
+ _headers: Dict[str, Any] = {
6855
+ 'Accept': 'application/json',
6856
+ 'Content-Type': 'application/json',
6857
+ 'Authorization': auth_header,
6858
+ }
6859
+
6860
+ _params: Dict[str, Any] = {
6861
+ }
6862
+
6863
+ _path_params: Dict[str, Any] = {
6864
+ 'extractorRid': extractor_rid,
6865
+ }
6866
+
6867
+ _json: Any = ConjureEncoder().default(request)
6868
+
6869
+ _path = '/extractors/v1/container/{extractorRid}'
6870
+ _path = _path.format(**_path_params)
6871
+
6872
+ _response: Response = self._request(
6873
+ 'PUT',
6874
+ self._uri + _path,
6875
+ params=_params,
6876
+ headers=_headers,
6877
+ json=_json)
6878
+
6879
+ _decoder = ConjureDecoder()
6880
+ return _decoder.decode(_response.json(), ingest_api_ContainerizedExtractor, self._return_none_for_unknown_union_types)
6881
+
6882
+ def archive_containerized_extractor(self, auth_header: str, extractor_rid: str) -> None:
6883
+ """
6884
+ Archive a containerized extractor.
6885
+ """
6886
+
6887
+ _headers: Dict[str, Any] = {
6888
+ 'Accept': 'application/json',
6889
+ 'Authorization': auth_header,
6890
+ }
6891
+
6892
+ _params: Dict[str, Any] = {
6893
+ }
6894
+
6895
+ _path_params: Dict[str, Any] = {
6896
+ 'extractorRid': extractor_rid,
6897
+ }
6898
+
6899
+ _json: Any = None
6900
+
6901
+ _path = '/extractors/v1/container/{extractorRid}/archive'
6902
+ _path = _path.format(**_path_params)
6903
+
6904
+ _response: Response = self._request(
6905
+ 'PUT',
6906
+ self._uri + _path,
6907
+ params=_params,
6908
+ headers=_headers,
6909
+ json=_json)
6910
+
6911
+ return
6912
+
6913
+ def unarchive_containerized_extractor(self, auth_header: str, extractor_rid: str) -> None:
6914
+ """
6915
+ Unarchive a containerized extractor.
6916
+ """
6917
+
6918
+ _headers: Dict[str, Any] = {
6919
+ 'Accept': 'application/json',
6920
+ 'Authorization': auth_header,
6921
+ }
6922
+
6923
+ _params: Dict[str, Any] = {
6924
+ }
6925
+
6926
+ _path_params: Dict[str, Any] = {
6927
+ 'extractorRid': extractor_rid,
6928
+ }
6929
+
6930
+ _json: Any = None
6931
+
6932
+ _path = '/extractors/v1/container/{extractorRid}/unarchive'
6933
+ _path = _path.format(**_path_params)
6644
6934
 
6935
+ _response: Response = self._request(
6936
+ 'PUT',
6937
+ self._uri + _path,
6938
+ params=_params,
6939
+ headers=_headers,
6940
+ json=_json)
6645
6941
 
6646
- class ingest_api_CustomOpts(ConjureBeanType):
6942
+ return
6943
+
6944
+
6945
+ ingest_api_ContainerizedExtractorService.__name__ = "ContainerizedExtractorService"
6946
+ ingest_api_ContainerizedExtractorService.__qualname__ = "ContainerizedExtractorService"
6947
+ ingest_api_ContainerizedExtractorService.__module__ = "nominal_api.ingest_api"
6948
+
6949
+
6950
+ class ingest_api_ContainerizedOpts(ConjureBeanType):
6647
6951
 
6648
6952
  @builtins.classmethod
6649
6953
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
@@ -6679,9 +6983,65 @@ class ingest_api_CustomOpts(ConjureBeanType):
6679
6983
  return self._target
6680
6984
 
6681
6985
 
6682
- ingest_api_CustomOpts.__name__ = "CustomOpts"
6683
- ingest_api_CustomOpts.__qualname__ = "CustomOpts"
6684
- ingest_api_CustomOpts.__module__ = "nominal_api.ingest_api"
6986
+ ingest_api_ContainerizedOpts.__name__ = "ContainerizedOpts"
6987
+ ingest_api_ContainerizedOpts.__qualname__ = "ContainerizedOpts"
6988
+ ingest_api_ContainerizedOpts.__module__ = "nominal_api.ingest_api"
6989
+
6990
+
6991
+ class ingest_api_CsvOpts(ConjureBeanType):
6992
+ """
6993
+ Options for ingesting csv files. Supported file formats include .csv, .csv.gz
6994
+ """
6995
+
6996
+ @builtins.classmethod
6997
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
6998
+ return {
6999
+ 'source': ConjureFieldDefinition('source', ingest_api_IngestSource),
7000
+ 'target': ConjureFieldDefinition('target', ingest_api_DatasetIngestTarget),
7001
+ 'timestamp_metadata': ConjureFieldDefinition('timestampMetadata', ingest_api_TimestampMetadata),
7002
+ 'channel_prefix': ConjureFieldDefinition('channelPrefix', ingest_api_ChannelPrefix),
7003
+ 'tag_keys_from_columns': ConjureFieldDefinition('tagKeysFromColumns', OptionalTypeWrapper[List[api_TagName]]),
7004
+ 'additional_file_tags': ConjureFieldDefinition('additionalFileTags', OptionalTypeWrapper[Dict[api_TagName, api_TagValue]])
7005
+ }
7006
+
7007
+ __slots__: List[str] = ['_source', '_target', '_timestamp_metadata', '_channel_prefix', '_tag_keys_from_columns', '_additional_file_tags']
7008
+
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:
7010
+ self._source = source
7011
+ self._target = target
7012
+ self._timestamp_metadata = timestamp_metadata
7013
+ self._channel_prefix = channel_prefix
7014
+ self._tag_keys_from_columns = tag_keys_from_columns
7015
+ self._additional_file_tags = additional_file_tags
7016
+
7017
+ @builtins.property
7018
+ def source(self) -> "ingest_api_IngestSource":
7019
+ return self._source
7020
+
7021
+ @builtins.property
7022
+ def target(self) -> "ingest_api_DatasetIngestTarget":
7023
+ return self._target
7024
+
7025
+ @builtins.property
7026
+ def timestamp_metadata(self) -> "ingest_api_TimestampMetadata":
7027
+ return self._timestamp_metadata
7028
+
7029
+ @builtins.property
7030
+ def channel_prefix(self) -> Optional[str]:
7031
+ return self._channel_prefix
7032
+
7033
+ @builtins.property
7034
+ def tag_keys_from_columns(self) -> Optional[List[str]]:
7035
+ return self._tag_keys_from_columns
7036
+
7037
+ @builtins.property
7038
+ def additional_file_tags(self) -> Optional[Dict[str, str]]:
7039
+ return self._additional_file_tags
7040
+
7041
+
7042
+ ingest_api_CsvOpts.__name__ = "CsvOpts"
7043
+ ingest_api_CsvOpts.__qualname__ = "CsvOpts"
7044
+ ingest_api_CsvOpts.__module__ = "nominal_api.ingest_api"
6685
7045
 
6686
7046
 
6687
7047
  class ingest_api_CustomTimestamp(ConjureBeanType):
@@ -7040,6 +7400,62 @@ ingest_api_DeprecatedTriggerIngest.__qualname__ = "DeprecatedTriggerIngest"
7040
7400
  ingest_api_DeprecatedTriggerIngest.__module__ = "nominal_api.ingest_api"
7041
7401
 
7042
7402
 
7403
+ class ingest_api_DockerImageSource(ConjureBeanType):
7404
+ """
7405
+ Docker container image source definition.
7406
+ """
7407
+
7408
+ @builtins.classmethod
7409
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
7410
+ return {
7411
+ 'registry': ConjureFieldDefinition('registry', str),
7412
+ 'repository': ConjureFieldDefinition('repository', str),
7413
+ 'tag': ConjureFieldDefinition('tag', str),
7414
+ 'authentication': ConjureFieldDefinition('authentication', OptionalTypeWrapper[ingest_api_Authentication])
7415
+ }
7416
+
7417
+ __slots__: List[str] = ['_registry', '_repository', '_tag', '_authentication']
7418
+
7419
+ def __init__(self, registry: str, repository: str, tag: str, authentication: Optional["ingest_api_Authentication"] = None) -> None:
7420
+ self._registry = registry
7421
+ self._repository = repository
7422
+ self._tag = tag
7423
+ self._authentication = authentication
7424
+
7425
+ @builtins.property
7426
+ def registry(self) -> str:
7427
+ """
7428
+ The container registry where the image is hosted.
7429
+ """
7430
+ return self._registry
7431
+
7432
+ @builtins.property
7433
+ def repository(self) -> str:
7434
+ """
7435
+ The repository name of the image.
7436
+ """
7437
+ return self._repository
7438
+
7439
+ @builtins.property
7440
+ def tag(self) -> str:
7441
+ """
7442
+ The tag of the image to use.
7443
+ """
7444
+ return self._tag
7445
+
7446
+ @builtins.property
7447
+ def authentication(self) -> Optional["ingest_api_Authentication"]:
7448
+ """
7449
+ Optional authentication for accessing private container registries.
7450
+ """
7451
+ return self._authentication
7452
+
7453
+
7454
+ ingest_api_DockerImageSource.__name__ = "DockerImageSource"
7455
+ ingest_api_DockerImageSource.__qualname__ = "DockerImageSource"
7456
+ ingest_api_DockerImageSource.__module__ = "nominal_api.ingest_api"
7457
+
7458
+
7043
7459
  class ingest_api_EpochTimestamp(ConjureBeanType):
7044
7460
 
7045
7461
  @builtins.classmethod
@@ -7121,6 +7537,62 @@ ingest_api_ExistingVideoIngestDestination.__qualname__ = "ExistingVideoIngestDes
7121
7537
  ingest_api_ExistingVideoIngestDestination.__module__ = "nominal_api.ingest_api"
7122
7538
 
7123
7539
 
7540
+ class ingest_api_FileExtractionInput(ConjureBeanType):
7541
+ """
7542
+ Defines an input file to be provided to the extractor.
7543
+ """
7544
+
7545
+ @builtins.classmethod
7546
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
7547
+ return {
7548
+ 'environment_variable': ConjureFieldDefinition('environmentVariable', ingest_api_EnvironmentVariable),
7549
+ 'name': ConjureFieldDefinition('name', str),
7550
+ 'description': ConjureFieldDefinition('description', OptionalTypeWrapper[str]),
7551
+ 'regex': ConjureFieldDefinition('regex', OptionalTypeWrapper[str])
7552
+ }
7553
+
7554
+ __slots__: List[str] = ['_environment_variable', '_name', '_description', '_regex']
7555
+
7556
+ def __init__(self, environment_variable: str, name: str, description: Optional[str] = None, regex: Optional[str] = None) -> None:
7557
+ self._environment_variable = environment_variable
7558
+ self._name = name
7559
+ self._description = description
7560
+ self._regex = regex
7561
+
7562
+ @builtins.property
7563
+ def environment_variable(self) -> str:
7564
+ """
7565
+ The environment variable that stores the path to the input file.
7566
+ """
7567
+ return self._environment_variable
7568
+
7569
+ @builtins.property
7570
+ def name(self) -> str:
7571
+ """
7572
+ Name of the input file which users will be prompted with
7573
+ """
7574
+ return self._name
7575
+
7576
+ @builtins.property
7577
+ def description(self) -> Optional[str]:
7578
+ """
7579
+ Description of the input file which users will be prompted with
7580
+ """
7581
+ return self._description
7582
+
7583
+ @builtins.property
7584
+ def regex(self) -> Optional[str]:
7585
+ """
7586
+ Optionally filter files by regex for file selection. Will not be enforced at runtime, so containers need to handle their own validation.
7587
+ """
7588
+ return self._regex
7589
+
7590
+
7591
+ ingest_api_FileExtractionInput.__name__ = "FileExtractionInput"
7592
+ ingest_api_FileExtractionInput.__qualname__ = "FileExtractionInput"
7593
+ ingest_api_FileExtractionInput.__module__ = "nominal_api.ingest_api"
7594
+
7595
+
7124
7596
  class ingest_api_GcsIngestSource(ConjureBeanType):
7125
7597
 
7126
7598
  @builtins.classmethod
@@ -7144,6 +7616,52 @@ ingest_api_GcsIngestSource.__qualname__ = "GcsIngestSource"
7144
7616
  ingest_api_GcsIngestSource.__module__ = "nominal_api.ingest_api"
7145
7617
 
7146
7618
 
7619
+ class ingest_api_GetContainerizedExtractorsRequest(ConjureBeanType):
7620
+
7621
+ @builtins.classmethod
7622
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
7623
+ return {
7624
+ 'extractor_rids': ConjureFieldDefinition('extractorRids', List[ingest_api_ContainerizedExtractorRid])
7625
+ }
7626
+
7627
+ __slots__: List[str] = ['_extractor_rids']
7628
+
7629
+ def __init__(self, extractor_rids: List[str]) -> None:
7630
+ self._extractor_rids = extractor_rids
7631
+
7632
+ @builtins.property
7633
+ def extractor_rids(self) -> List[str]:
7634
+ return self._extractor_rids
7635
+
7636
+
7637
+ ingest_api_GetContainerizedExtractorsRequest.__name__ = "GetContainerizedExtractorsRequest"
7638
+ ingest_api_GetContainerizedExtractorsRequest.__qualname__ = "GetContainerizedExtractorsRequest"
7639
+ ingest_api_GetContainerizedExtractorsRequest.__module__ = "nominal_api.ingest_api"
7640
+
7641
+
7642
+ class ingest_api_GetContainerizedExtractorsResponse(ConjureBeanType):
7643
+
7644
+ @builtins.classmethod
7645
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
7646
+ return {
7647
+ 'extractors': ConjureFieldDefinition('extractors', List[ingest_api_ContainerizedExtractor])
7648
+ }
7649
+
7650
+ __slots__: List[str] = ['_extractors']
7651
+
7652
+ def __init__(self, extractors: List["ingest_api_ContainerizedExtractor"]) -> None:
7653
+ self._extractors = extractors
7654
+
7655
+ @builtins.property
7656
+ def extractors(self) -> List["ingest_api_ContainerizedExtractor"]:
7657
+ return self._extractors
7658
+
7659
+
7660
+ ingest_api_GetContainerizedExtractorsResponse.__name__ = "GetContainerizedExtractorsResponse"
7661
+ ingest_api_GetContainerizedExtractorsResponse.__qualname__ = "GetContainerizedExtractorsResponse"
7662
+ ingest_api_GetContainerizedExtractorsResponse.__module__ = "nominal_api.ingest_api"
7663
+
7664
+
7147
7665
  class ingest_api_IngestDataSource(ConjureUnionType):
7148
7666
  _existing_data_source: Optional[str] = None
7149
7667
  _new_data_source: Optional["ingest_api_DeprecatedNewDataSource"] = None
@@ -7543,7 +8061,7 @@ class ingest_api_IngestOptions(ConjureUnionType):
7543
8061
  _csv: Optional["ingest_api_CsvOpts"] = None
7544
8062
  _parquet: Optional["ingest_api_ParquetOpts"] = None
7545
8063
  _video: Optional["ingest_api_VideoOpts"] = None
7546
- _custom: Optional["ingest_api_CustomOpts"] = None
8064
+ _containerized: Optional["ingest_api_ContainerizedOpts"] = None
7547
8065
 
7548
8066
  @builtins.classmethod
7549
8067
  def _options(cls) -> Dict[str, ConjureFieldDefinition]:
@@ -7554,7 +8072,7 @@ class ingest_api_IngestOptions(ConjureUnionType):
7554
8072
  'csv': ConjureFieldDefinition('csv', ingest_api_CsvOpts),
7555
8073
  'parquet': ConjureFieldDefinition('parquet', ingest_api_ParquetOpts),
7556
8074
  'video': ConjureFieldDefinition('video', ingest_api_VideoOpts),
7557
- 'custom': ConjureFieldDefinition('custom', ingest_api_CustomOpts)
8075
+ 'containerized': ConjureFieldDefinition('containerized', ingest_api_ContainerizedOpts)
7558
8076
  }
7559
8077
 
7560
8078
  def __init__(
@@ -7565,11 +8083,11 @@ class ingest_api_IngestOptions(ConjureUnionType):
7565
8083
  csv: Optional["ingest_api_CsvOpts"] = None,
7566
8084
  parquet: Optional["ingest_api_ParquetOpts"] = None,
7567
8085
  video: Optional["ingest_api_VideoOpts"] = None,
7568
- custom: Optional["ingest_api_CustomOpts"] = None,
8086
+ containerized: Optional["ingest_api_ContainerizedOpts"] = None,
7569
8087
  type_of_union: Optional[str] = None
7570
8088
  ) -> None:
7571
8089
  if type_of_union is None:
7572
- if (dataflash is not None) + (mcap_protobuf_timeseries is not None) + (journal_json is not None) + (csv is not None) + (parquet is not None) + (video is not None) + (custom is not None) != 1:
8090
+ if (dataflash is not None) + (mcap_protobuf_timeseries is not None) + (journal_json is not None) + (csv is not None) + (parquet is not None) + (video is not None) + (containerized is not None) != 1:
7573
8091
  raise ValueError('a union must contain a single member')
7574
8092
 
7575
8093
  if dataflash is not None:
@@ -7590,9 +8108,9 @@ class ingest_api_IngestOptions(ConjureUnionType):
7590
8108
  if video is not None:
7591
8109
  self._video = video
7592
8110
  self._type = 'video'
7593
- if custom is not None:
7594
- self._custom = custom
7595
- self._type = 'custom'
8111
+ if containerized is not None:
8112
+ self._containerized = containerized
8113
+ self._type = 'containerized'
7596
8114
 
7597
8115
  elif type_of_union == 'dataflash':
7598
8116
  if dataflash is None:
@@ -7624,11 +8142,11 @@ class ingest_api_IngestOptions(ConjureUnionType):
7624
8142
  raise ValueError('a union value must not be None')
7625
8143
  self._video = video
7626
8144
  self._type = 'video'
7627
- elif type_of_union == 'custom':
7628
- if custom is None:
8145
+ elif type_of_union == 'containerized':
8146
+ if containerized is None:
7629
8147
  raise ValueError('a union value must not be None')
7630
- self._custom = custom
7631
- self._type = 'custom'
8148
+ self._containerized = containerized
8149
+ self._type = 'containerized'
7632
8150
 
7633
8151
  @builtins.property
7634
8152
  def dataflash(self) -> Optional["ingest_api_DataflashOpts"]:
@@ -7655,8 +8173,8 @@ class ingest_api_IngestOptions(ConjureUnionType):
7655
8173
  return self._video
7656
8174
 
7657
8175
  @builtins.property
7658
- def custom(self) -> Optional["ingest_api_CustomOpts"]:
7659
- return self._custom
8176
+ def containerized(self) -> Optional["ingest_api_ContainerizedOpts"]:
8177
+ return self._containerized
7660
8178
 
7661
8179
  def accept(self, visitor) -> Any:
7662
8180
  if not isinstance(visitor, ingest_api_IngestOptionsVisitor):
@@ -7673,8 +8191,8 @@ class ingest_api_IngestOptions(ConjureUnionType):
7673
8191
  return visitor._parquet(self.parquet)
7674
8192
  if self._type == 'video' and self.video is not None:
7675
8193
  return visitor._video(self.video)
7676
- if self._type == 'custom' and self.custom is not None:
7677
- return visitor._custom(self.custom)
8194
+ if self._type == 'containerized' and self.containerized is not None:
8195
+ return visitor._containerized(self.containerized)
7678
8196
 
7679
8197
 
7680
8198
  ingest_api_IngestOptions.__name__ = "IngestOptions"
@@ -7709,7 +8227,7 @@ class ingest_api_IngestOptionsVisitor:
7709
8227
  pass
7710
8228
 
7711
8229
  @abstractmethod
7712
- def _custom(self, custom: "ingest_api_CustomOpts") -> Any:
8230
+ def _containerized(self, containerized: "ingest_api_ContainerizedOpts") -> Any:
7713
8231
  pass
7714
8232
 
7715
8233
 
@@ -9466,6 +9984,94 @@ ingest_api_PartWithSize.__qualname__ = "PartWithSize"
9466
9984
  ingest_api_PartWithSize.__module__ = "nominal_api.ingest_api"
9467
9985
 
9468
9986
 
9987
+ class ingest_api_RegisterContainerizedExtractorRequest(ConjureBeanType):
9988
+
9989
+ @builtins.classmethod
9990
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
9991
+ return {
9992
+ 'name': ConjureFieldDefinition('name', str),
9993
+ 'description': ConjureFieldDefinition('description', OptionalTypeWrapper[str]),
9994
+ 'image': ConjureFieldDefinition('image', ingest_api_DockerImageSource),
9995
+ 'inputs': ConjureFieldDefinition('inputs', List[ingest_api_FileExtractionInput]),
9996
+ 'properties': ConjureFieldDefinition('properties', Dict[api_PropertyName, api_PropertyValue]),
9997
+ 'labels': ConjureFieldDefinition('labels', List[api_Label]),
9998
+ 'workspace': ConjureFieldDefinition('workspace', api_rids_WorkspaceRid)
9999
+ }
10000
+
10001
+ __slots__: List[str] = ['_name', '_description', '_image', '_inputs', '_properties', '_labels', '_workspace']
10002
+
10003
+ def __init__(self, image: "ingest_api_DockerImageSource", inputs: List["ingest_api_FileExtractionInput"], labels: List[str], name: str, properties: Dict[str, str], workspace: str, description: Optional[str] = None) -> None:
10004
+ self._name = name
10005
+ self._description = description
10006
+ self._image = image
10007
+ self._inputs = inputs
10008
+ self._properties = properties
10009
+ self._labels = labels
10010
+ self._workspace = workspace
10011
+
10012
+ @builtins.property
10013
+ def name(self) -> str:
10014
+ return self._name
10015
+
10016
+ @builtins.property
10017
+ def description(self) -> Optional[str]:
10018
+ return self._description
10019
+
10020
+ @builtins.property
10021
+ def image(self) -> "ingest_api_DockerImageSource":
10022
+ return self._image
10023
+
10024
+ @builtins.property
10025
+ def inputs(self) -> List["ingest_api_FileExtractionInput"]:
10026
+ """
10027
+ payload must match input defined in containerized extraction
10028
+ """
10029
+ return self._inputs
10030
+
10031
+ @builtins.property
10032
+ def properties(self) -> Dict[str, str]:
10033
+ return self._properties
10034
+
10035
+ @builtins.property
10036
+ def labels(self) -> List[str]:
10037
+ return self._labels
10038
+
10039
+ @builtins.property
10040
+ def workspace(self) -> str:
10041
+ """
10042
+ The workspace in which to create the extractor
10043
+ """
10044
+ return self._workspace
10045
+
10046
+
10047
+ ingest_api_RegisterContainerizedExtractorRequest.__name__ = "RegisterContainerizedExtractorRequest"
10048
+ ingest_api_RegisterContainerizedExtractorRequest.__qualname__ = "RegisterContainerizedExtractorRequest"
10049
+ ingest_api_RegisterContainerizedExtractorRequest.__module__ = "nominal_api.ingest_api"
10050
+
10051
+
10052
+ class ingest_api_RegisterContainerizedExtractorResponse(ConjureBeanType):
10053
+
10054
+ @builtins.classmethod
10055
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
10056
+ return {
10057
+ 'extractor_rid': ConjureFieldDefinition('extractorRid', ingest_api_ContainerizedExtractorRid)
10058
+ }
10059
+
10060
+ __slots__: List[str] = ['_extractor_rid']
10061
+
10062
+ def __init__(self, extractor_rid: str) -> None:
10063
+ self._extractor_rid = extractor_rid
10064
+
10065
+ @builtins.property
10066
+ def extractor_rid(self) -> str:
10067
+ return self._extractor_rid
10068
+
10069
+
10070
+ ingest_api_RegisterContainerizedExtractorResponse.__name__ = "RegisterContainerizedExtractorResponse"
10071
+ ingest_api_RegisterContainerizedExtractorResponse.__qualname__ = "RegisterContainerizedExtractorResponse"
10072
+ ingest_api_RegisterContainerizedExtractorResponse.__module__ = "nominal_api.ingest_api"
10073
+
10074
+
9469
10075
  class ingest_api_RelativeTimestamp(ConjureBeanType):
9470
10076
 
9471
10077
  @builtins.classmethod
@@ -9625,6 +10231,190 @@ ingest_api_ScaleParameterVisitor.__qualname__ = "ScaleParameterVisitor"
9625
10231
  ingest_api_ScaleParameterVisitor.__module__ = "nominal_api.ingest_api"
9626
10232
 
9627
10233
 
10234
+ class ingest_api_SearchContainerizedExtractorsQuery(ConjureUnionType):
10235
+ _search_text: Optional[str] = None
10236
+ _label: Optional[str] = None
10237
+ _property: Optional["api_Property"] = None
10238
+ _and_: Optional[List["ingest_api_SearchContainerizedExtractorsQuery"]] = None
10239
+ _or_: Optional[List["ingest_api_SearchContainerizedExtractorsQuery"]] = None
10240
+ _workspace: Optional[str] = None
10241
+
10242
+ @builtins.classmethod
10243
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
10244
+ return {
10245
+ 'search_text': ConjureFieldDefinition('searchText', str),
10246
+ 'label': ConjureFieldDefinition('label', api_Label),
10247
+ 'property': ConjureFieldDefinition('property', api_Property),
10248
+ 'and_': ConjureFieldDefinition('and', List[ingest_api_SearchContainerizedExtractorsQuery]),
10249
+ 'or_': ConjureFieldDefinition('or', List[ingest_api_SearchContainerizedExtractorsQuery]),
10250
+ 'workspace': ConjureFieldDefinition('workspace', api_rids_WorkspaceRid)
10251
+ }
10252
+
10253
+ def __init__(
10254
+ self,
10255
+ search_text: Optional[str] = None,
10256
+ label: Optional[str] = None,
10257
+ property: Optional["api_Property"] = None,
10258
+ and_: Optional[List["ingest_api_SearchContainerizedExtractorsQuery"]] = None,
10259
+ or_: Optional[List["ingest_api_SearchContainerizedExtractorsQuery"]] = None,
10260
+ workspace: Optional[str] = None,
10261
+ type_of_union: Optional[str] = None
10262
+ ) -> None:
10263
+ if type_of_union is None:
10264
+ if (search_text is not None) + (label is not None) + (property is not None) + (and_ is not None) + (or_ is not None) + (workspace is not None) != 1:
10265
+ raise ValueError('a union must contain a single member')
10266
+
10267
+ if search_text is not None:
10268
+ self._search_text = search_text
10269
+ self._type = 'searchText'
10270
+ if label is not None:
10271
+ self._label = label
10272
+ self._type = 'label'
10273
+ if property is not None:
10274
+ self._property = property
10275
+ self._type = 'property'
10276
+ if and_ is not None:
10277
+ self._and_ = and_
10278
+ self._type = 'and'
10279
+ if or_ is not None:
10280
+ self._or_ = or_
10281
+ self._type = 'or'
10282
+ if workspace is not None:
10283
+ self._workspace = workspace
10284
+ self._type = 'workspace'
10285
+
10286
+ elif type_of_union == 'searchText':
10287
+ if search_text is None:
10288
+ raise ValueError('a union value must not be None')
10289
+ self._search_text = search_text
10290
+ self._type = 'searchText'
10291
+ elif type_of_union == 'label':
10292
+ if label is None:
10293
+ raise ValueError('a union value must not be None')
10294
+ self._label = label
10295
+ self._type = 'label'
10296
+ elif type_of_union == 'property':
10297
+ if property is None:
10298
+ raise ValueError('a union value must not be None')
10299
+ self._property = property
10300
+ self._type = 'property'
10301
+ elif type_of_union == 'and':
10302
+ if and_ is None:
10303
+ raise ValueError('a union value must not be None')
10304
+ self._and_ = and_
10305
+ self._type = 'and'
10306
+ elif type_of_union == 'or':
10307
+ if or_ is None:
10308
+ raise ValueError('a union value must not be None')
10309
+ self._or_ = or_
10310
+ self._type = 'or'
10311
+ elif type_of_union == 'workspace':
10312
+ if workspace is None:
10313
+ raise ValueError('a union value must not be None')
10314
+ self._workspace = workspace
10315
+ self._type = 'workspace'
10316
+
10317
+ @builtins.property
10318
+ def search_text(self) -> Optional[str]:
10319
+ return self._search_text
10320
+
10321
+ @builtins.property
10322
+ def label(self) -> Optional[str]:
10323
+ return self._label
10324
+
10325
+ @builtins.property
10326
+ def property(self) -> Optional["api_Property"]:
10327
+ return self._property
10328
+
10329
+ @builtins.property
10330
+ def and_(self) -> Optional[List["ingest_api_SearchContainerizedExtractorsQuery"]]:
10331
+ return self._and_
10332
+
10333
+ @builtins.property
10334
+ def or_(self) -> Optional[List["ingest_api_SearchContainerizedExtractorsQuery"]]:
10335
+ return self._or_
10336
+
10337
+ @builtins.property
10338
+ def workspace(self) -> Optional[str]:
10339
+ return self._workspace
10340
+
10341
+ def accept(self, visitor) -> Any:
10342
+ if not isinstance(visitor, ingest_api_SearchContainerizedExtractorsQueryVisitor):
10343
+ raise ValueError('{} is not an instance of ingest_api_SearchContainerizedExtractorsQueryVisitor'.format(visitor.__class__.__name__))
10344
+ if self._type == 'searchText' and self.search_text is not None:
10345
+ return visitor._search_text(self.search_text)
10346
+ if self._type == 'label' and self.label is not None:
10347
+ return visitor._label(self.label)
10348
+ if self._type == 'property' and self.property is not None:
10349
+ return visitor._property(self.property)
10350
+ if self._type == 'and' and self.and_ is not None:
10351
+ return visitor._and(self.and_)
10352
+ if self._type == 'or' and self.or_ is not None:
10353
+ return visitor._or(self.or_)
10354
+ if self._type == 'workspace' and self.workspace is not None:
10355
+ return visitor._workspace(self.workspace)
10356
+
10357
+
10358
+ ingest_api_SearchContainerizedExtractorsQuery.__name__ = "SearchContainerizedExtractorsQuery"
10359
+ ingest_api_SearchContainerizedExtractorsQuery.__qualname__ = "SearchContainerizedExtractorsQuery"
10360
+ ingest_api_SearchContainerizedExtractorsQuery.__module__ = "nominal_api.ingest_api"
10361
+
10362
+
10363
+ class ingest_api_SearchContainerizedExtractorsQueryVisitor:
10364
+
10365
+ @abstractmethod
10366
+ def _search_text(self, search_text: str) -> Any:
10367
+ pass
10368
+
10369
+ @abstractmethod
10370
+ def _label(self, label: str) -> Any:
10371
+ pass
10372
+
10373
+ @abstractmethod
10374
+ def _property(self, property: "api_Property") -> Any:
10375
+ pass
10376
+
10377
+ @abstractmethod
10378
+ def _and(self, and_: List["ingest_api_SearchContainerizedExtractorsQuery"]) -> Any:
10379
+ pass
10380
+
10381
+ @abstractmethod
10382
+ def _or(self, or_: List["ingest_api_SearchContainerizedExtractorsQuery"]) -> Any:
10383
+ pass
10384
+
10385
+ @abstractmethod
10386
+ def _workspace(self, workspace: str) -> Any:
10387
+ pass
10388
+
10389
+
10390
+ ingest_api_SearchContainerizedExtractorsQueryVisitor.__name__ = "SearchContainerizedExtractorsQueryVisitor"
10391
+ ingest_api_SearchContainerizedExtractorsQueryVisitor.__qualname__ = "SearchContainerizedExtractorsQueryVisitor"
10392
+ ingest_api_SearchContainerizedExtractorsQueryVisitor.__module__ = "nominal_api.ingest_api"
10393
+
10394
+
10395
+ class ingest_api_SearchContainerizedExtractorsRequest(ConjureBeanType):
10396
+
10397
+ @builtins.classmethod
10398
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
10399
+ return {
10400
+ 'query': ConjureFieldDefinition('query', ingest_api_SearchContainerizedExtractorsQuery)
10401
+ }
10402
+
10403
+ __slots__: List[str] = ['_query']
10404
+
10405
+ def __init__(self, query: "ingest_api_SearchContainerizedExtractorsQuery") -> None:
10406
+ self._query = query
10407
+
10408
+ @builtins.property
10409
+ def query(self) -> "ingest_api_SearchContainerizedExtractorsQuery":
10410
+ return self._query
10411
+
10412
+
10413
+ ingest_api_SearchContainerizedExtractorsRequest.__name__ = "SearchContainerizedExtractorsRequest"
10414
+ ingest_api_SearchContainerizedExtractorsRequest.__qualname__ = "SearchContainerizedExtractorsRequest"
10415
+ ingest_api_SearchContainerizedExtractorsRequest.__module__ = "nominal_api.ingest_api"
10416
+
10417
+
9628
10418
  class ingest_api_SignPartResponse(ConjureBeanType):
9629
10419
 
9630
10420
  @builtins.classmethod
@@ -10026,6 +10816,85 @@ ingest_api_TriggeredIngest.__qualname__ = "TriggeredIngest"
10026
10816
  ingest_api_TriggeredIngest.__module__ = "nominal_api.ingest_api"
10027
10817
 
10028
10818
 
10819
+ class ingest_api_UpdateContainerizedExtractorRequest(ConjureBeanType):
10820
+
10821
+ @builtins.classmethod
10822
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
10823
+ return {
10824
+ 'name': ConjureFieldDefinition('name', OptionalTypeWrapper[str]),
10825
+ 'description': ConjureFieldDefinition('description', OptionalTypeWrapper[str]),
10826
+ 'properties': ConjureFieldDefinition('properties', OptionalTypeWrapper[Dict[api_PropertyName, api_PropertyValue]]),
10827
+ 'labels': ConjureFieldDefinition('labels', OptionalTypeWrapper[List[api_Label]])
10828
+ }
10829
+
10830
+ __slots__: List[str] = ['_name', '_description', '_properties', '_labels']
10831
+
10832
+ def __init__(self, description: Optional[str] = None, labels: Optional[List[str]] = None, name: Optional[str] = None, properties: Optional[Dict[str, str]] = None) -> None:
10833
+ self._name = name
10834
+ self._description = description
10835
+ self._properties = properties
10836
+ self._labels = labels
10837
+
10838
+ @builtins.property
10839
+ def name(self) -> Optional[str]:
10840
+ return self._name
10841
+
10842
+ @builtins.property
10843
+ def description(self) -> Optional[str]:
10844
+ return self._description
10845
+
10846
+ @builtins.property
10847
+ def properties(self) -> Optional[Dict[str, str]]:
10848
+ return self._properties
10849
+
10850
+ @builtins.property
10851
+ def labels(self) -> Optional[List[str]]:
10852
+ return self._labels
10853
+
10854
+
10855
+ ingest_api_UpdateContainerizedExtractorRequest.__name__ = "UpdateContainerizedExtractorRequest"
10856
+ ingest_api_UpdateContainerizedExtractorRequest.__qualname__ = "UpdateContainerizedExtractorRequest"
10857
+ ingest_api_UpdateContainerizedExtractorRequest.__module__ = "nominal_api.ingest_api"
10858
+
10859
+
10860
+ class ingest_api_UserAndPasswordAuthentication(ConjureBeanType):
10861
+ """
10862
+ Username and password authentication.
10863
+ """
10864
+
10865
+ @builtins.classmethod
10866
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
10867
+ return {
10868
+ 'username': ConjureFieldDefinition('username', str),
10869
+ 'password_secret_rid': ConjureFieldDefinition('passwordSecretRid', secrets_api_SecretRid)
10870
+ }
10871
+
10872
+ __slots__: List[str] = ['_username', '_password_secret_rid']
10873
+
10874
+ def __init__(self, password_secret_rid: str, username: str) -> None:
10875
+ self._username = username
10876
+ self._password_secret_rid = password_secret_rid
10877
+
10878
+ @builtins.property
10879
+ def username(self) -> str:
10880
+ """
10881
+ Username for registry authentication.
10882
+ """
10883
+ return self._username
10884
+
10885
+ @builtins.property
10886
+ def password_secret_rid(self) -> str:
10887
+ """
10888
+ The RID of the secret containing the password for registry authentication.
10889
+ """
10890
+ return self._password_secret_rid
10891
+
10892
+
10893
+ ingest_api_UserAndPasswordAuthentication.__name__ = "UserAndPasswordAuthentication"
10894
+ ingest_api_UserAndPasswordAuthentication.__qualname__ = "UserAndPasswordAuthentication"
10895
+ ingest_api_UserAndPasswordAuthentication.__module__ = "nominal_api.ingest_api"
10896
+
10897
+
10029
10898
  class ingest_api_UtcTimestamp(ConjureBeanType):
10030
10899
 
10031
10900
  @builtins.classmethod
@@ -11879,6 +12748,35 @@ includes metrics for check and violation review status.
11879
12748
  _decoder = ConjureDecoder()
11880
12749
  return _decoder.decode(_response.json(), bool, self._return_none_for_unknown_union_types)
11881
12750
 
12751
+ def unarchive_run(self, auth_header: str, rid: str) -> bool:
12752
+
12753
+ _headers: Dict[str, Any] = {
12754
+ 'Accept': 'application/json',
12755
+ 'Authorization': auth_header,
12756
+ }
12757
+
12758
+ _params: Dict[str, Any] = {
12759
+ }
12760
+
12761
+ _path_params: Dict[str, Any] = {
12762
+ 'rid': rid,
12763
+ }
12764
+
12765
+ _json: Any = None
12766
+
12767
+ _path = '/scout/v1/unarchive-run/{rid}'
12768
+ _path = _path.format(**_path_params)
12769
+
12770
+ _response: Response = self._request(
12771
+ 'PUT',
12772
+ self._uri + _path,
12773
+ params=_params,
12774
+ headers=_headers,
12775
+ json=_json)
12776
+
12777
+ _decoder = ConjureDecoder()
12778
+ return _decoder.decode(_response.json(), bool, self._return_none_for_unknown_union_types)
12779
+
11882
12780
  def get_data_source_ref_name_and_type_list(self, auth_header: str, workspaces: List[str] = None) -> List["scout_run_api_RefNameAndType"]:
11883
12781
  """
11884
12782
  Returns the list of ref names that are in use across specified and authorized workspaces.
@@ -12361,6 +13259,40 @@ default, follow the UCUM convention for representation.
12361
13259
  _decoder = ConjureDecoder()
12362
13260
  return None if _response.status_code == 204 else _decoder.decode(_response.json(), OptionalTypeWrapper[scout_units_api_Unit], self._return_none_for_unknown_union_types)
12363
13261
 
13262
+ def get_batch_units(self, auth_header: str, units: List[str] = None) -> Dict[str, "scout_units_api_Unit"]:
13263
+ """
13264
+ Returns information for the unit symbols if available. If the provided symbol cannot be parsed, it will be
13265
+ omitted from the map.
13266
+ """
13267
+ units = units if units is not None else []
13268
+
13269
+ _headers: Dict[str, Any] = {
13270
+ 'Accept': 'application/json',
13271
+ 'Content-Type': 'application/json',
13272
+ 'Authorization': auth_header,
13273
+ }
13274
+
13275
+ _params: Dict[str, Any] = {
13276
+ }
13277
+
13278
+ _path_params: Dict[str, Any] = {
13279
+ }
13280
+
13281
+ _json: Any = ConjureEncoder().default(units)
13282
+
13283
+ _path = '/units/v1/units/get-batch-units'
13284
+ _path = _path.format(**_path_params)
13285
+
13286
+ _response: Response = self._request(
13287
+ 'POST',
13288
+ self._uri + _path,
13289
+ params=_params,
13290
+ headers=_headers,
13291
+ json=_json)
13292
+
13293
+ _decoder = ConjureDecoder()
13294
+ return _decoder.decode(_response.json(), Dict[scout_units_api_UnitSymbol, scout_units_api_Unit], self._return_none_for_unknown_union_types)
13295
+
12364
13296
  def get_commensurable_units(self, auth_header: str, unit: str) -> List["scout_units_api_Unit"]:
12365
13297
  """
12366
13298
  Returns the set of cataloged units that can be converted to and from the given unit.
@@ -13107,12 +14039,13 @@ class scout_asset_api_Asset(ConjureBeanType):
13107
14039
  'updated_at': ConjureFieldDefinition('updatedAt', str),
13108
14040
  'attachments': ConjureFieldDefinition('attachments', List[api_rids_AttachmentRid]),
13109
14041
  'type': ConjureFieldDefinition('type', OptionalTypeWrapper[scout_rids_api_TypeRid]),
13110
- 'is_staged': ConjureFieldDefinition('isStaged', bool)
14042
+ 'is_staged': ConjureFieldDefinition('isStaged', bool),
14043
+ 'is_archived': ConjureFieldDefinition('isArchived', bool)
13111
14044
  }
13112
14045
 
13113
- __slots__: List[str] = ['_rid', '_title', '_description', '_properties', '_labels', '_links', '_data_scopes', '_created_by', '_created_at', '_updated_at', '_attachments', '_type', '_is_staged']
14046
+ __slots__: List[str] = ['_rid', '_title', '_description', '_properties', '_labels', '_links', '_data_scopes', '_created_by', '_created_at', '_updated_at', '_attachments', '_type', '_is_staged', '_is_archived']
13114
14047
 
13115
- def __init__(self, attachments: List[str], created_at: str, data_scopes: List["scout_asset_api_AssetDataScope"], is_staged: bool, labels: List[str], links: List["scout_run_api_Link"], properties: Dict[str, str], rid: str, title: str, updated_at: str, created_by: Optional[str] = None, description: Optional[str] = None, type: Optional[str] = None) -> None:
14048
+ def __init__(self, attachments: List[str], created_at: str, data_scopes: List["scout_asset_api_AssetDataScope"], is_archived: bool, is_staged: bool, labels: List[str], links: List["scout_run_api_Link"], properties: Dict[str, str], rid: str, title: str, updated_at: str, created_by: Optional[str] = None, description: Optional[str] = None, type: Optional[str] = None) -> None:
13116
14049
  self._rid = rid
13117
14050
  self._title = title
13118
14051
  self._description = description
@@ -13126,6 +14059,7 @@ class scout_asset_api_Asset(ConjureBeanType):
13126
14059
  self._attachments = attachments
13127
14060
  self._type = type
13128
14061
  self._is_staged = is_staged
14062
+ self._is_archived = is_archived
13129
14063
 
13130
14064
  @builtins.property
13131
14065
  def rid(self) -> str:
@@ -13193,6 +14127,10 @@ To associate links with a range of time, create a time range on the asset with l
13193
14127
  """
13194
14128
  return self._is_staged
13195
14129
 
14130
+ @builtins.property
14131
+ def is_archived(self) -> bool:
14132
+ return self._is_archived
14133
+
13196
14134
 
13197
14135
  scout_asset_api_Asset.__name__ = "Asset"
13198
14136
  scout_asset_api_Asset.__qualname__ = "Asset"
@@ -15387,35 +16325,6 @@ a file, primarily CSV.
15387
16325
  _decoder = ConjureDecoder()
15388
16326
  return None if _response.status_code == 204 else _decoder.decode(_response.json(), OptionalTypeWrapper[scout_catalog_Handle], self._return_none_for_unknown_union_types)
15389
16327
 
15390
- def get_series_details(self, auth_header: str, get_series_details: "scout_catalog_GetSeriesDetailsRequest") -> "scout_catalog_SeriesDetails":
15391
-
15392
- _headers: Dict[str, Any] = {
15393
- 'Accept': 'application/json',
15394
- 'Content-Type': 'application/json',
15395
- 'Authorization': auth_header,
15396
- }
15397
-
15398
- _params: Dict[str, Any] = {
15399
- }
15400
-
15401
- _path_params: Dict[str, Any] = {
15402
- }
15403
-
15404
- _json: Any = ConjureEncoder().default(get_series_details)
15405
-
15406
- _path = '/catalog/v1/series/details'
15407
- _path = _path.format(**_path_params)
15408
-
15409
- _response: Response = self._request(
15410
- 'POST',
15411
- self._uri + _path,
15412
- params=_params,
15413
- headers=_headers,
15414
- json=_json)
15415
-
15416
- _decoder = ConjureDecoder()
15417
- return _decoder.decode(_response.json(), scout_catalog_SeriesDetails, self._return_none_for_unknown_union_types)
15418
-
15419
16328
  def create_dataset(self, auth_header: str, details: "scout_catalog_CreateDataset") -> "scout_catalog_EnrichedDataset":
15420
16329
 
15421
16330
  _headers: Dict[str, Any] = {
@@ -15727,35 +16636,6 @@ the bounds will be min(current start, request start), max(current end, request e
15727
16636
  _decoder = ConjureDecoder()
15728
16637
  return _decoder.decode(_response.json(), scout_catalog_Dataset, self._return_none_for_unknown_union_types)
15729
16638
 
15730
- def delete_dataset_series(self, auth_header: str, dataset_rid: str) -> "scout_catalog_DeleteSeriesResult":
15731
-
15732
- _headers: Dict[str, Any] = {
15733
- 'Accept': 'application/json',
15734
- 'Authorization': auth_header,
15735
- }
15736
-
15737
- _params: Dict[str, Any] = {
15738
- }
15739
-
15740
- _path_params: Dict[str, Any] = {
15741
- 'datasetRid': dataset_rid,
15742
- }
15743
-
15744
- _json: Any = None
15745
-
15746
- _path = '/catalog/v1/series/for-dataset/{datasetRid}'
15747
- _path = _path.format(**_path_params)
15748
-
15749
- _response: Response = self._request(
15750
- 'DELETE',
15751
- self._uri + _path,
15752
- params=_params,
15753
- headers=_headers,
15754
- json=_json)
15755
-
15756
- _decoder = ConjureDecoder()
15757
- return _decoder.decode(_response.json(), scout_catalog_DeleteSeriesResult, self._return_none_for_unknown_union_types)
15758
-
15759
16639
  def archive_dataset(self, auth_header: str, dataset_rid: str) -> None:
15760
16640
  """
15761
16641
  Archives a dataset, which will hide it from search results unless the includeArchived flag is set to true. The
@@ -16423,29 +17303,6 @@ scout_catalog_DatasetOriginMetadata.__qualname__ = "DatasetOriginMetadata"
16423
17303
  scout_catalog_DatasetOriginMetadata.__module__ = "nominal_api.scout_catalog"
16424
17304
 
16425
17305
 
16426
- class scout_catalog_DeleteSeriesResult(ConjureBeanType):
16427
-
16428
- @builtins.classmethod
16429
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
16430
- return {
16431
- 'number_deleted': ConjureFieldDefinition('numberDeleted', int)
16432
- }
16433
-
16434
- __slots__: List[str] = ['_number_deleted']
16435
-
16436
- def __init__(self, number_deleted: int) -> None:
16437
- self._number_deleted = number_deleted
16438
-
16439
- @builtins.property
16440
- def number_deleted(self) -> int:
16441
- return self._number_deleted
16442
-
16443
-
16444
- scout_catalog_DeleteSeriesResult.__name__ = "DeleteSeriesResult"
16445
- scout_catalog_DeleteSeriesResult.__qualname__ = "DeleteSeriesResult"
16446
- scout_catalog_DeleteSeriesResult.__module__ = "nominal_api.scout_catalog"
16447
-
16448
-
16449
17306
  class scout_catalog_EnrichedDataset(ConjureBeanType):
16450
17307
 
16451
17308
  @builtins.classmethod
@@ -16692,135 +17549,6 @@ scout_catalog_GetHandlesForDatasetsRequest.__qualname__ = "GetHandlesForDatasets
16692
17549
  scout_catalog_GetHandlesForDatasetsRequest.__module__ = "nominal_api.scout_catalog"
16693
17550
 
16694
17551
 
16695
- class scout_catalog_GetSeriesDetailsByName(ConjureBeanType):
16696
-
16697
- @builtins.classmethod
16698
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
16699
- return {
16700
- 'dataset_rid': ConjureFieldDefinition('datasetRid', str),
16701
- 'name': ConjureFieldDefinition('name', str)
16702
- }
16703
-
16704
- __slots__: List[str] = ['_dataset_rid', '_name']
16705
-
16706
- def __init__(self, dataset_rid: str, name: str) -> None:
16707
- self._dataset_rid = dataset_rid
16708
- self._name = name
16709
-
16710
- @builtins.property
16711
- def dataset_rid(self) -> str:
16712
- return self._dataset_rid
16713
-
16714
- @builtins.property
16715
- def name(self) -> str:
16716
- return self._name
16717
-
16718
-
16719
- scout_catalog_GetSeriesDetailsByName.__name__ = "GetSeriesDetailsByName"
16720
- scout_catalog_GetSeriesDetailsByName.__qualname__ = "GetSeriesDetailsByName"
16721
- scout_catalog_GetSeriesDetailsByName.__module__ = "nominal_api.scout_catalog"
16722
-
16723
-
16724
- class scout_catalog_GetSeriesDetailsByRid(ConjureBeanType):
16725
-
16726
- @builtins.classmethod
16727
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
16728
- return {
16729
- 'rid': ConjureFieldDefinition('rid', str)
16730
- }
16731
-
16732
- __slots__: List[str] = ['_rid']
16733
-
16734
- def __init__(self, rid: str) -> None:
16735
- self._rid = rid
16736
-
16737
- @builtins.property
16738
- def rid(self) -> str:
16739
- return self._rid
16740
-
16741
-
16742
- scout_catalog_GetSeriesDetailsByRid.__name__ = "GetSeriesDetailsByRid"
16743
- scout_catalog_GetSeriesDetailsByRid.__qualname__ = "GetSeriesDetailsByRid"
16744
- scout_catalog_GetSeriesDetailsByRid.__module__ = "nominal_api.scout_catalog"
16745
-
16746
-
16747
- class scout_catalog_GetSeriesDetailsRequest(ConjureUnionType):
16748
- _by_rid: Optional["scout_catalog_GetSeriesDetailsByRid"] = None
16749
- _by_name: Optional["scout_catalog_GetSeriesDetailsByName"] = None
16750
-
16751
- @builtins.classmethod
16752
- def _options(cls) -> Dict[str, ConjureFieldDefinition]:
16753
- return {
16754
- 'by_rid': ConjureFieldDefinition('byRid', scout_catalog_GetSeriesDetailsByRid),
16755
- 'by_name': ConjureFieldDefinition('byName', scout_catalog_GetSeriesDetailsByName)
16756
- }
16757
-
16758
- def __init__(
16759
- self,
16760
- by_rid: Optional["scout_catalog_GetSeriesDetailsByRid"] = None,
16761
- by_name: Optional["scout_catalog_GetSeriesDetailsByName"] = None,
16762
- type_of_union: Optional[str] = None
16763
- ) -> None:
16764
- if type_of_union is None:
16765
- if (by_rid is not None) + (by_name is not None) != 1:
16766
- raise ValueError('a union must contain a single member')
16767
-
16768
- if by_rid is not None:
16769
- self._by_rid = by_rid
16770
- self._type = 'byRid'
16771
- if by_name is not None:
16772
- self._by_name = by_name
16773
- self._type = 'byName'
16774
-
16775
- elif type_of_union == 'byRid':
16776
- if by_rid is None:
16777
- raise ValueError('a union value must not be None')
16778
- self._by_rid = by_rid
16779
- self._type = 'byRid'
16780
- elif type_of_union == 'byName':
16781
- if by_name is None:
16782
- raise ValueError('a union value must not be None')
16783
- self._by_name = by_name
16784
- self._type = 'byName'
16785
-
16786
- @builtins.property
16787
- def by_rid(self) -> Optional["scout_catalog_GetSeriesDetailsByRid"]:
16788
- return self._by_rid
16789
-
16790
- @builtins.property
16791
- def by_name(self) -> Optional["scout_catalog_GetSeriesDetailsByName"]:
16792
- return self._by_name
16793
-
16794
- def accept(self, visitor) -> Any:
16795
- if not isinstance(visitor, scout_catalog_GetSeriesDetailsRequestVisitor):
16796
- raise ValueError('{} is not an instance of scout_catalog_GetSeriesDetailsRequestVisitor'.format(visitor.__class__.__name__))
16797
- if self._type == 'byRid' and self.by_rid is not None:
16798
- return visitor._by_rid(self.by_rid)
16799
- if self._type == 'byName' and self.by_name is not None:
16800
- return visitor._by_name(self.by_name)
16801
-
16802
-
16803
- scout_catalog_GetSeriesDetailsRequest.__name__ = "GetSeriesDetailsRequest"
16804
- scout_catalog_GetSeriesDetailsRequest.__qualname__ = "GetSeriesDetailsRequest"
16805
- scout_catalog_GetSeriesDetailsRequest.__module__ = "nominal_api.scout_catalog"
16806
-
16807
-
16808
- class scout_catalog_GetSeriesDetailsRequestVisitor:
16809
-
16810
- @abstractmethod
16811
- def _by_rid(self, by_rid: "scout_catalog_GetSeriesDetailsByRid") -> Any:
16812
- pass
16813
-
16814
- @abstractmethod
16815
- def _by_name(self, by_name: "scout_catalog_GetSeriesDetailsByName") -> Any:
16816
- pass
16817
-
16818
-
16819
- scout_catalog_GetSeriesDetailsRequestVisitor.__name__ = "GetSeriesDetailsRequestVisitor"
16820
- scout_catalog_GetSeriesDetailsRequestVisitor.__qualname__ = "GetSeriesDetailsRequestVisitor"
16821
- scout_catalog_GetSeriesDetailsRequestVisitor.__module__ = "nominal_api.scout_catalog"
16822
-
16823
-
16824
17552
  class scout_catalog_Handle(ConjureUnionType):
16825
17553
  _s3: Optional["scout_catalog_S3Handle"] = None
16826
17554
 
@@ -17582,59 +18310,6 @@ scout_catalog_SearchDatasetsResponse.__qualname__ = "SearchDatasetsResponse"
17582
18310
  scout_catalog_SearchDatasetsResponse.__module__ = "nominal_api.scout_catalog"
17583
18311
 
17584
18312
 
17585
- class scout_catalog_SeriesDetails(ConjureBeanType):
17586
-
17587
- @builtins.classmethod
17588
- def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
17589
- return {
17590
- 'rid': ConjureFieldDefinition('rid', str),
17591
- 'name': ConjureFieldDefinition('name', str),
17592
- 'origin_metadata': ConjureFieldDefinition('originMetadata', Dict[str, str]),
17593
- 'csv_index': ConjureFieldDefinition('csvIndex', OptionalTypeWrapper[int]),
17594
- 'dataset_rid': ConjureFieldDefinition('datasetRid', str),
17595
- 'handle': ConjureFieldDefinition('handle', scout_catalog_Handle)
17596
- }
17597
-
17598
- __slots__: List[str] = ['_rid', '_name', '_origin_metadata', '_csv_index', '_dataset_rid', '_handle']
17599
-
17600
- def __init__(self, dataset_rid: str, handle: "scout_catalog_Handle", name: str, origin_metadata: Dict[str, str], rid: str, csv_index: Optional[int] = None) -> None:
17601
- self._rid = rid
17602
- self._name = name
17603
- self._origin_metadata = origin_metadata
17604
- self._csv_index = csv_index
17605
- self._dataset_rid = dataset_rid
17606
- self._handle = handle
17607
-
17608
- @builtins.property
17609
- def rid(self) -> str:
17610
- return self._rid
17611
-
17612
- @builtins.property
17613
- def name(self) -> str:
17614
- return self._name
17615
-
17616
- @builtins.property
17617
- def origin_metadata(self) -> Dict[str, str]:
17618
- return self._origin_metadata
17619
-
17620
- @builtins.property
17621
- def csv_index(self) -> Optional[int]:
17622
- return self._csv_index
17623
-
17624
- @builtins.property
17625
- def dataset_rid(self) -> str:
17626
- return self._dataset_rid
17627
-
17628
- @builtins.property
17629
- def handle(self) -> "scout_catalog_Handle":
17630
- return self._handle
17631
-
17632
-
17633
- scout_catalog_SeriesDetails.__name__ = "SeriesDetails"
17634
- scout_catalog_SeriesDetails.__qualname__ = "SeriesDetails"
17635
- scout_catalog_SeriesDetails.__module__ = "nominal_api.scout_catalog"
17636
-
17637
-
17638
18313
  class scout_catalog_SkipRowsConfig(ConjureBeanType):
17639
18314
 
17640
18315
  @builtins.classmethod
@@ -44441,6 +45116,35 @@ scout_compute_resolved_api_BitOperationSeriesNode.__qualname__ = "BitOperationSe
44441
45116
  scout_compute_resolved_api_BitOperationSeriesNode.__module__ = "nominal_api.scout_compute_resolved_api"
44442
45117
 
44443
45118
 
45119
+ class scout_compute_resolved_api_CachedStorageLocator(ConjureBeanType):
45120
+
45121
+ @builtins.classmethod
45122
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
45123
+ return {
45124
+ 'series_uuids': ConjureFieldDefinition('seriesUuids', List[str]),
45125
+ 'type': ConjureFieldDefinition('type', storage_series_api_NominalDataType)
45126
+ }
45127
+
45128
+ __slots__: List[str] = ['_series_uuids', '_type']
45129
+
45130
+ def __init__(self, series_uuids: List[str], type: "storage_series_api_NominalDataType") -> None:
45131
+ self._series_uuids = series_uuids
45132
+ self._type = type
45133
+
45134
+ @builtins.property
45135
+ def series_uuids(self) -> List[str]:
45136
+ return self._series_uuids
45137
+
45138
+ @builtins.property
45139
+ def type(self) -> "storage_series_api_NominalDataType":
45140
+ return self._type
45141
+
45142
+
45143
+ scout_compute_resolved_api_CachedStorageLocator.__name__ = "CachedStorageLocator"
45144
+ scout_compute_resolved_api_CachedStorageLocator.__qualname__ = "CachedStorageLocator"
45145
+ scout_compute_resolved_api_CachedStorageLocator.__module__ = "nominal_api.scout_compute_resolved_api"
45146
+
45147
+
44444
45148
  class scout_compute_resolved_api_Cartesian3dBounds(ConjureBeanType):
44445
45149
 
44446
45150
  @builtins.classmethod
@@ -44650,6 +45354,41 @@ scout_compute_resolved_api_CartesianNodeVisitor.__qualname__ = "CartesianNodeVis
44650
45354
  scout_compute_resolved_api_CartesianNodeVisitor.__module__ = "nominal_api.scout_compute_resolved_api"
44651
45355
 
44652
45356
 
45357
+ class scout_compute_resolved_api_ClickHouseSeriesResolutionDetails(ConjureBeanType):
45358
+
45359
+ @builtins.classmethod
45360
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
45361
+ return {
45362
+ 'channel': ConjureFieldDefinition('channel', api_Channel),
45363
+ 'tags': ConjureFieldDefinition('tags', Dict[api_TagName, api_TagValue]),
45364
+ 'org_rid': ConjureFieldDefinition('orgRid', authentication_api_OrgRid)
45365
+ }
45366
+
45367
+ __slots__: List[str] = ['_channel', '_tags', '_org_rid']
45368
+
45369
+ def __init__(self, channel: str, org_rid: str, tags: Dict[str, str]) -> None:
45370
+ self._channel = channel
45371
+ self._tags = tags
45372
+ self._org_rid = org_rid
45373
+
45374
+ @builtins.property
45375
+ def channel(self) -> str:
45376
+ return self._channel
45377
+
45378
+ @builtins.property
45379
+ def tags(self) -> Dict[str, str]:
45380
+ return self._tags
45381
+
45382
+ @builtins.property
45383
+ def org_rid(self) -> str:
45384
+ return self._org_rid
45385
+
45386
+
45387
+ scout_compute_resolved_api_ClickHouseSeriesResolutionDetails.__name__ = "ClickHouseSeriesResolutionDetails"
45388
+ scout_compute_resolved_api_ClickHouseSeriesResolutionDetails.__qualname__ = "ClickHouseSeriesResolutionDetails"
45389
+ scout_compute_resolved_api_ClickHouseSeriesResolutionDetails.__module__ = "nominal_api.scout_compute_resolved_api"
45390
+
45391
+
44653
45392
  class scout_compute_resolved_api_CumulativeSumSeriesNode(ConjureBeanType):
44654
45393
 
44655
45394
  @builtins.classmethod
@@ -46107,6 +46846,47 @@ scout_compute_resolved_api_MinSeriesNode.__qualname__ = "MinSeriesNode"
46107
46846
  scout_compute_resolved_api_MinSeriesNode.__module__ = "nominal_api.scout_compute_resolved_api"
46108
46847
 
46109
46848
 
46849
+ class scout_compute_resolved_api_NominalStorageLocator(ConjureBeanType):
46850
+
46851
+ @builtins.classmethod
46852
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
46853
+ return {
46854
+ 'data_source_rid': ConjureFieldDefinition('dataSourceRid', api_rids_NominalDataSourceOrDatasetRid),
46855
+ 'type': ConjureFieldDefinition('type', storage_series_api_NominalDataType),
46856
+ 'details': ConjureFieldDefinition('details', scout_compute_resolved_api_ClickHouseSeriesResolutionDetails),
46857
+ 'is_in_memory_streaming_enabled': ConjureFieldDefinition('isInMemoryStreamingEnabled', bool)
46858
+ }
46859
+
46860
+ __slots__: List[str] = ['_data_source_rid', '_type', '_details', '_is_in_memory_streaming_enabled']
46861
+
46862
+ def __init__(self, data_source_rid: str, details: "scout_compute_resolved_api_ClickHouseSeriesResolutionDetails", is_in_memory_streaming_enabled: bool, type: "storage_series_api_NominalDataType") -> None:
46863
+ self._data_source_rid = data_source_rid
46864
+ self._type = type
46865
+ self._details = details
46866
+ self._is_in_memory_streaming_enabled = is_in_memory_streaming_enabled
46867
+
46868
+ @builtins.property
46869
+ def data_source_rid(self) -> str:
46870
+ return self._data_source_rid
46871
+
46872
+ @builtins.property
46873
+ def type(self) -> "storage_series_api_NominalDataType":
46874
+ return self._type
46875
+
46876
+ @builtins.property
46877
+ def details(self) -> "scout_compute_resolved_api_ClickHouseSeriesResolutionDetails":
46878
+ return self._details
46879
+
46880
+ @builtins.property
46881
+ def is_in_memory_streaming_enabled(self) -> bool:
46882
+ return self._is_in_memory_streaming_enabled
46883
+
46884
+
46885
+ scout_compute_resolved_api_NominalStorageLocator.__name__ = "NominalStorageLocator"
46886
+ scout_compute_resolved_api_NominalStorageLocator.__qualname__ = "NominalStorageLocator"
46887
+ scout_compute_resolved_api_NominalStorageLocator.__module__ = "nominal_api.scout_compute_resolved_api"
46888
+
46889
+
46110
46890
  class scout_compute_resolved_api_NotRangesNode(ConjureBeanType):
46111
46891
 
46112
46892
  @builtins.classmethod
@@ -47508,16 +48288,16 @@ class scout_compute_resolved_api_RawEnumSeriesNode(ConjureBeanType):
47508
48288
  @builtins.classmethod
47509
48289
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
47510
48290
  return {
47511
- 'series': ConjureFieldDefinition('series', scout_compute_api_SeriesSpec)
48291
+ 'series': ConjureFieldDefinition('series', scout_compute_resolved_api_ResolvedSeries)
47512
48292
  }
47513
48293
 
47514
48294
  __slots__: List[str] = ['_series']
47515
48295
 
47516
- def __init__(self, series: "scout_compute_api_SeriesSpec") -> None:
48296
+ def __init__(self, series: "scout_compute_resolved_api_ResolvedSeries") -> None:
47517
48297
  self._series = series
47518
48298
 
47519
48299
  @builtins.property
47520
- def series(self) -> "scout_compute_api_SeriesSpec":
48300
+ def series(self) -> "scout_compute_resolved_api_ResolvedSeries":
47521
48301
  return self._series
47522
48302
 
47523
48303
 
@@ -47531,16 +48311,16 @@ class scout_compute_resolved_api_RawLogSeriesNode(ConjureBeanType):
47531
48311
  @builtins.classmethod
47532
48312
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
47533
48313
  return {
47534
- 'series': ConjureFieldDefinition('series', scout_compute_api_SeriesSpec)
48314
+ 'series': ConjureFieldDefinition('series', scout_compute_resolved_api_ResolvedSeries)
47535
48315
  }
47536
48316
 
47537
48317
  __slots__: List[str] = ['_series']
47538
48318
 
47539
- def __init__(self, series: "scout_compute_api_SeriesSpec") -> None:
48319
+ def __init__(self, series: "scout_compute_resolved_api_ResolvedSeries") -> None:
47540
48320
  self._series = series
47541
48321
 
47542
48322
  @builtins.property
47543
- def series(self) -> "scout_compute_api_SeriesSpec":
48323
+ def series(self) -> "scout_compute_resolved_api_ResolvedSeries":
47544
48324
  return self._series
47545
48325
 
47546
48326
 
@@ -47554,16 +48334,16 @@ class scout_compute_resolved_api_RawNumericSeriesNode(ConjureBeanType):
47554
48334
  @builtins.classmethod
47555
48335
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
47556
48336
  return {
47557
- 'series': ConjureFieldDefinition('series', scout_compute_api_SeriesSpec)
48337
+ 'series': ConjureFieldDefinition('series', scout_compute_resolved_api_ResolvedSeries)
47558
48338
  }
47559
48339
 
47560
48340
  __slots__: List[str] = ['_series']
47561
48341
 
47562
- def __init__(self, series: "scout_compute_api_SeriesSpec") -> None:
48342
+ def __init__(self, series: "scout_compute_resolved_api_ResolvedSeries") -> None:
47563
48343
  self._series = series
47564
48344
 
47565
48345
  @builtins.property
47566
- def series(self) -> "scout_compute_api_SeriesSpec":
48346
+ def series(self) -> "scout_compute_resolved_api_ResolvedSeries":
47567
48347
  return self._series
47568
48348
 
47569
48349
 
@@ -47577,16 +48357,16 @@ class scout_compute_resolved_api_RawUntypedSeriesNode(ConjureBeanType):
47577
48357
  @builtins.classmethod
47578
48358
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
47579
48359
  return {
47580
- 'series': ConjureFieldDefinition('series', scout_compute_api_SeriesSpec)
48360
+ 'series': ConjureFieldDefinition('series', scout_compute_resolved_api_ResolvedSeries)
47581
48361
  }
47582
48362
 
47583
48363
  __slots__: List[str] = ['_series']
47584
48364
 
47585
- def __init__(self, series: "scout_compute_api_SeriesSpec") -> None:
48365
+ def __init__(self, series: "scout_compute_resolved_api_ResolvedSeries") -> None:
47586
48366
  self._series = series
47587
48367
 
47588
48368
  @builtins.property
47589
- def series(self) -> "scout_compute_api_SeriesSpec":
48369
+ def series(self) -> "scout_compute_resolved_api_ResolvedSeries":
47590
48370
  return self._series
47591
48371
 
47592
48372
 
@@ -47883,6 +48663,47 @@ scout_compute_resolved_api_ResolvedNodeVisitor.__qualname__ = "ResolvedNodeVisit
47883
48663
  scout_compute_resolved_api_ResolvedNodeVisitor.__module__ = "nominal_api.scout_compute_resolved_api"
47884
48664
 
47885
48665
 
48666
+ class scout_compute_resolved_api_ResolvedSeries(ConjureBeanType):
48667
+
48668
+ @builtins.classmethod
48669
+ def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
48670
+ return {
48671
+ 'logical_series': ConjureFieldDefinition('logicalSeries', timeseries_logicalseries_api_LogicalSeries),
48672
+ 'series_spec': ConjureFieldDefinition('seriesSpec', scout_compute_api_SeriesSpec),
48673
+ 'storage_locator': ConjureFieldDefinition('storageLocator', OptionalTypeWrapper[scout_compute_resolved_api_StorageLocator]),
48674
+ 'granularity': ConjureFieldDefinition('granularity', api_Granularity)
48675
+ }
48676
+
48677
+ __slots__: List[str] = ['_logical_series', '_series_spec', '_storage_locator', '_granularity']
48678
+
48679
+ def __init__(self, granularity: "api_Granularity", logical_series: "timeseries_logicalseries_api_LogicalSeries", series_spec: "scout_compute_api_SeriesSpec", storage_locator: Optional["scout_compute_resolved_api_StorageLocator"] = None) -> None:
48680
+ self._logical_series = logical_series
48681
+ self._series_spec = series_spec
48682
+ self._storage_locator = storage_locator
48683
+ self._granularity = granularity
48684
+
48685
+ @builtins.property
48686
+ def logical_series(self) -> "timeseries_logicalseries_api_LogicalSeries":
48687
+ return self._logical_series
48688
+
48689
+ @builtins.property
48690
+ def series_spec(self) -> "scout_compute_api_SeriesSpec":
48691
+ return self._series_spec
48692
+
48693
+ @builtins.property
48694
+ def storage_locator(self) -> Optional["scout_compute_resolved_api_StorageLocator"]:
48695
+ return self._storage_locator
48696
+
48697
+ @builtins.property
48698
+ def granularity(self) -> "api_Granularity":
48699
+ return self._granularity
48700
+
48701
+
48702
+ scout_compute_resolved_api_ResolvedSeries.__name__ = "ResolvedSeries"
48703
+ scout_compute_resolved_api_ResolvedSeries.__qualname__ = "ResolvedSeries"
48704
+ scout_compute_resolved_api_ResolvedSeries.__module__ = "nominal_api.scout_compute_resolved_api"
48705
+
48706
+
47886
48707
  class scout_compute_resolved_api_RollingOperationSeriesNode(ConjureBeanType):
47887
48708
 
47888
48709
  @builtins.classmethod
@@ -48514,6 +49335,83 @@ scout_compute_resolved_api_StaleRangesNode.__qualname__ = "StaleRangesNode"
48514
49335
  scout_compute_resolved_api_StaleRangesNode.__module__ = "nominal_api.scout_compute_resolved_api"
48515
49336
 
48516
49337
 
49338
+ class scout_compute_resolved_api_StorageLocator(ConjureUnionType):
49339
+ _cached: Optional["scout_compute_resolved_api_CachedStorageLocator"] = None
49340
+ _nominal: Optional["scout_compute_resolved_api_NominalStorageLocator"] = None
49341
+
49342
+ @builtins.classmethod
49343
+ def _options(cls) -> Dict[str, ConjureFieldDefinition]:
49344
+ return {
49345
+ 'cached': ConjureFieldDefinition('cached', scout_compute_resolved_api_CachedStorageLocator),
49346
+ 'nominal': ConjureFieldDefinition('nominal', scout_compute_resolved_api_NominalStorageLocator)
49347
+ }
49348
+
49349
+ def __init__(
49350
+ self,
49351
+ cached: Optional["scout_compute_resolved_api_CachedStorageLocator"] = None,
49352
+ nominal: Optional["scout_compute_resolved_api_NominalStorageLocator"] = None,
49353
+ type_of_union: Optional[str] = None
49354
+ ) -> None:
49355
+ if type_of_union is None:
49356
+ if (cached is not None) + (nominal is not None) != 1:
49357
+ raise ValueError('a union must contain a single member')
49358
+
49359
+ if cached is not None:
49360
+ self._cached = cached
49361
+ self._type = 'cached'
49362
+ if nominal is not None:
49363
+ self._nominal = nominal
49364
+ self._type = 'nominal'
49365
+
49366
+ elif type_of_union == 'cached':
49367
+ if cached is None:
49368
+ raise ValueError('a union value must not be None')
49369
+ self._cached = cached
49370
+ self._type = 'cached'
49371
+ elif type_of_union == 'nominal':
49372
+ if nominal is None:
49373
+ raise ValueError('a union value must not be None')
49374
+ self._nominal = nominal
49375
+ self._type = 'nominal'
49376
+
49377
+ @builtins.property
49378
+ def cached(self) -> Optional["scout_compute_resolved_api_CachedStorageLocator"]:
49379
+ return self._cached
49380
+
49381
+ @builtins.property
49382
+ def nominal(self) -> Optional["scout_compute_resolved_api_NominalStorageLocator"]:
49383
+ return self._nominal
49384
+
49385
+ def accept(self, visitor) -> Any:
49386
+ if not isinstance(visitor, scout_compute_resolved_api_StorageLocatorVisitor):
49387
+ raise ValueError('{} is not an instance of scout_compute_resolved_api_StorageLocatorVisitor'.format(visitor.__class__.__name__))
49388
+ if self._type == 'cached' and self.cached is not None:
49389
+ return visitor._cached(self.cached)
49390
+ if self._type == 'nominal' and self.nominal is not None:
49391
+ return visitor._nominal(self.nominal)
49392
+
49393
+
49394
+ scout_compute_resolved_api_StorageLocator.__name__ = "StorageLocator"
49395
+ scout_compute_resolved_api_StorageLocator.__qualname__ = "StorageLocator"
49396
+ scout_compute_resolved_api_StorageLocator.__module__ = "nominal_api.scout_compute_resolved_api"
49397
+
49398
+
49399
+ class scout_compute_resolved_api_StorageLocatorVisitor:
49400
+
49401
+ @abstractmethod
49402
+ def _cached(self, cached: "scout_compute_resolved_api_CachedStorageLocator") -> Any:
49403
+ pass
49404
+
49405
+ @abstractmethod
49406
+ def _nominal(self, nominal: "scout_compute_resolved_api_NominalStorageLocator") -> Any:
49407
+ pass
49408
+
49409
+
49410
+ scout_compute_resolved_api_StorageLocatorVisitor.__name__ = "StorageLocatorVisitor"
49411
+ scout_compute_resolved_api_StorageLocatorVisitor.__qualname__ = "StorageLocatorVisitor"
49412
+ scout_compute_resolved_api_StorageLocatorVisitor.__module__ = "nominal_api.scout_compute_resolved_api"
49413
+
49414
+
48517
49415
  class scout_compute_resolved_api_SumSeriesNode(ConjureBeanType):
48518
49416
 
48519
49417
  @builtins.classmethod
@@ -61999,12 +62897,13 @@ class scout_run_api_Run(ConjureBeanType):
61999
62897
  'data_sources': ConjureFieldDefinition('dataSources', Dict[scout_api_DataSourceRefName, scout_run_api_RunDataSource]),
62000
62898
  'attachments': ConjureFieldDefinition('attachments', List[api_rids_AttachmentRid]),
62001
62899
  'asset': ConjureFieldDefinition('asset', OptionalTypeWrapper[scout_rids_api_AssetRid]),
62002
- 'assets': ConjureFieldDefinition('assets', List[scout_rids_api_AssetRid])
62900
+ 'assets': ConjureFieldDefinition('assets', List[scout_rids_api_AssetRid]),
62901
+ 'is_archived': ConjureFieldDefinition('isArchived', bool)
62003
62902
  }
62004
62903
 
62005
- __slots__: List[str] = ['_rid', '_run_number', '_run_prefix', '_title', '_description', '_author_rid', '_start_time', '_end_time', '_properties', '_labels', '_links', '_created_at', '_updated_at', '_asset_data_scopes', '_data_sources', '_attachments', '_asset', '_assets']
62904
+ __slots__: List[str] = ['_rid', '_run_number', '_run_prefix', '_title', '_description', '_author_rid', '_start_time', '_end_time', '_properties', '_labels', '_links', '_created_at', '_updated_at', '_asset_data_scopes', '_data_sources', '_attachments', '_asset', '_assets', '_is_archived']
62006
62905
 
62007
- def __init__(self, asset_data_scopes: List["scout_asset_api_AssetDataScope"], assets: List[str], attachments: List[str], created_at: str, data_sources: Dict[str, "scout_run_api_RunDataSource"], description: str, labels: List[str], links: List["scout_run_api_Link"], properties: Dict[str, str], rid: str, run_number: int, start_time: "scout_run_api_UtcTimestamp", title: str, updated_at: str, asset: Optional[str] = None, author_rid: Optional[str] = None, end_time: Optional["scout_run_api_UtcTimestamp"] = None, run_prefix: Optional[str] = None) -> None:
62906
+ def __init__(self, asset_data_scopes: List["scout_asset_api_AssetDataScope"], assets: List[str], attachments: List[str], created_at: str, data_sources: Dict[str, "scout_run_api_RunDataSource"], description: str, is_archived: bool, labels: List[str], links: List["scout_run_api_Link"], properties: Dict[str, str], rid: str, run_number: int, start_time: "scout_run_api_UtcTimestamp", title: str, updated_at: str, asset: Optional[str] = None, author_rid: Optional[str] = None, end_time: Optional["scout_run_api_UtcTimestamp"] = None, run_prefix: Optional[str] = None) -> None:
62008
62907
  self._rid = rid
62009
62908
  self._run_number = run_number
62010
62909
  self._run_prefix = run_prefix
@@ -62023,6 +62922,7 @@ class scout_run_api_Run(ConjureBeanType):
62023
62922
  self._attachments = attachments
62024
62923
  self._asset = asset
62025
62924
  self._assets = assets
62925
+ self._is_archived = is_archived
62026
62926
 
62027
62927
  @builtins.property
62028
62928
  def rid(self) -> str:
@@ -62099,6 +62999,10 @@ class scout_run_api_Run(ConjureBeanType):
62099
62999
  def assets(self) -> List[str]:
62100
63000
  return self._assets
62101
63001
 
63002
+ @builtins.property
63003
+ def is_archived(self) -> bool:
63004
+ return self._is_archived
63005
+
62102
63006
 
62103
63007
  scout_run_api_Run.__name__ = "Run"
62104
63008
  scout_run_api_Run.__qualname__ = "Run"
@@ -62767,16 +63671,18 @@ class scout_run_api_SearchRunsRequest(ConjureBeanType):
62767
63671
  'sort': ConjureFieldDefinition('sort', scout_run_api_SortOptions),
62768
63672
  'page_size': ConjureFieldDefinition('pageSize', int),
62769
63673
  'next_page_token': ConjureFieldDefinition('nextPageToken', OptionalTypeWrapper[api_Token]),
62770
- 'query': ConjureFieldDefinition('query', scout_run_api_SearchQuery)
63674
+ 'query': ConjureFieldDefinition('query', scout_run_api_SearchQuery),
63675
+ 'archived_statuses': ConjureFieldDefinition('archivedStatuses', OptionalTypeWrapper[List[api_ArchivedStatus]])
62771
63676
  }
62772
63677
 
62773
- __slots__: List[str] = ['_sort', '_page_size', '_next_page_token', '_query']
63678
+ __slots__: List[str] = ['_sort', '_page_size', '_next_page_token', '_query', '_archived_statuses']
62774
63679
 
62775
- def __init__(self, page_size: int, query: "scout_run_api_SearchQuery", sort: "scout_run_api_SortOptions", next_page_token: Optional[str] = None) -> None:
63680
+ def __init__(self, page_size: int, query: "scout_run_api_SearchQuery", sort: "scout_run_api_SortOptions", archived_statuses: Optional[List["api_ArchivedStatus"]] = None, next_page_token: Optional[str] = None) -> None:
62776
63681
  self._sort = sort
62777
63682
  self._page_size = page_size
62778
63683
  self._next_page_token = next_page_token
62779
63684
  self._query = query
63685
+ self._archived_statuses = archived_statuses
62780
63686
 
62781
63687
  @builtins.property
62782
63688
  def sort(self) -> "scout_run_api_SortOptions":
@@ -62797,6 +63703,13 @@ class scout_run_api_SearchRunsRequest(ConjureBeanType):
62797
63703
  def query(self) -> "scout_run_api_SearchQuery":
62798
63704
  return self._query
62799
63705
 
63706
+ @builtins.property
63707
+ def archived_statuses(self) -> Optional[List["api_ArchivedStatus"]]:
63708
+ """
63709
+ Default search status is NOT_ARCHIVED if none are provided. Allows for including archived runs in search.
63710
+ """
63711
+ return self._archived_statuses
63712
+
62800
63713
 
62801
63714
  scout_run_api_SearchRunsRequest.__name__ = "SearchRunsRequest"
62802
63715
  scout_run_api_SearchRunsRequest.__qualname__ = "SearchRunsRequest"
@@ -69763,24 +70676,18 @@ class storage_writer_api_LogValue(ConjureBeanType):
69763
70676
  @builtins.classmethod
69764
70677
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
69765
70678
  return {
69766
- 'raw': ConjureFieldDefinition('raw', str),
69767
- 'message': ConjureFieldDefinition('message', OptionalTypeWrapper[str]),
70679
+ 'message': ConjureFieldDefinition('message', str),
69768
70680
  'args': ConjureFieldDefinition('args', Dict[str, str])
69769
70681
  }
69770
70682
 
69771
- __slots__: List[str] = ['_raw', '_message', '_args']
70683
+ __slots__: List[str] = ['_message', '_args']
69772
70684
 
69773
- def __init__(self, args: Dict[str, str], raw: str, message: Optional[str] = None) -> None:
69774
- self._raw = raw
70685
+ def __init__(self, args: Dict[str, str], message: str) -> None:
69775
70686
  self._message = message
69776
70687
  self._args = args
69777
70688
 
69778
70689
  @builtins.property
69779
- def raw(self) -> str:
69780
- return self._raw
69781
-
69782
- @builtins.property
69783
- def message(self) -> Optional[str]:
70690
+ def message(self) -> str:
69784
70691
  return self._message
69785
70692
 
69786
70693
  @builtins.property
@@ -75107,6 +76014,8 @@ api_rids_ChunkRid = str
75107
76014
 
75108
76015
  scout_rids_api_CheckAlertRid = str
75109
76016
 
76017
+ ingest_api_ContainerizedExtractorRid = str
76018
+
75110
76019
  scout_chart_api_JsonString = str
75111
76020
 
75112
76021
  scout_checks_api_JobRid = str
@@ -75161,6 +76070,8 @@ api_TagName = str
75161
76070
 
75162
76071
  authentication_api_UserRid = str
75163
76072
 
76073
+ ingest_api_EnvironmentVariable = str
76074
+
75164
76075
  scout_datasource_connection_api_ConnectionRid = str
75165
76076
 
75166
76077
  scout_channelvariables_api_ComputeSpecV1 = str