nominal-api 0.609.0__py3-none-any.whl → 0.610.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/__init__.py CHANGED
@@ -75,5 +75,5 @@ __all__ = [
75
75
 
76
76
  __conjure_generator_version__ = "4.9.0"
77
77
 
78
- __version__ = "0.609.0"
78
+ __version__ = "0.610.0"
79
79
 
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
6639
6720
 
6721
+ @builtins.property
6722
+ def labels(self) -> List[str]:
6723
+ """
6724
+ Set of labels applied to this extractor.
6725
+ """
6726
+ return self._labels
6640
6727
 
6641
- ingest_api_CsvOpts.__name__ = "CsvOpts"
6642
- ingest_api_CsvOpts.__qualname__ = "CsvOpts"
6643
- ingest_api_CsvOpts.__module__ = "nominal_api.ingest_api"
6728
+ @builtins.property
6729
+ def created_at(self) -> str:
6730
+ """
6731
+ Timestamp when this extractor was created.
6732
+ """
6733
+ return self._created_at
6734
+
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
+ }
6644
6766
 
6767
+ _path_params: Dict[str, Any] = {
6768
+ }
6769
+
6770
+ _json: Any = ConjureEncoder().default(request)
6645
6771
 
6646
- class ingest_api_CustomOpts(ConjureBeanType):
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)
6934
+
6935
+ _response: Response = self._request(
6936
+ 'PUT',
6937
+ self._uri + _path,
6938
+ params=_params,
6939
+ headers=_headers,
6940
+ json=_json)
6941
+
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
@@ -69763,24 +70632,18 @@ class storage_writer_api_LogValue(ConjureBeanType):
69763
70632
  @builtins.classmethod
69764
70633
  def _fields(cls) -> Dict[str, ConjureFieldDefinition]:
69765
70634
  return {
69766
- 'raw': ConjureFieldDefinition('raw', str),
69767
- 'message': ConjureFieldDefinition('message', OptionalTypeWrapper[str]),
70635
+ 'message': ConjureFieldDefinition('message', str),
69768
70636
  'args': ConjureFieldDefinition('args', Dict[str, str])
69769
70637
  }
69770
70638
 
69771
- __slots__: List[str] = ['_raw', '_message', '_args']
70639
+ __slots__: List[str] = ['_message', '_args']
69772
70640
 
69773
- def __init__(self, args: Dict[str, str], raw: str, message: Optional[str] = None) -> None:
69774
- self._raw = raw
70641
+ def __init__(self, args: Dict[str, str], message: str) -> None:
69775
70642
  self._message = message
69776
70643
  self._args = args
69777
70644
 
69778
70645
  @builtins.property
69779
- def raw(self) -> str:
69780
- return self._raw
69781
-
69782
- @builtins.property
69783
- def message(self) -> Optional[str]:
70646
+ def message(self) -> str:
69784
70647
  return self._message
69785
70648
 
69786
70649
  @builtins.property
@@ -75107,6 +75970,8 @@ api_rids_ChunkRid = str
75107
75970
 
75108
75971
  scout_rids_api_CheckAlertRid = str
75109
75972
 
75973
+ ingest_api_ContainerizedExtractorRid = str
75974
+
75110
75975
  scout_chart_api_JsonString = str
75111
75976
 
75112
75977
  scout_checks_api_JobRid = str
@@ -75161,6 +76026,8 @@ api_TagName = str
75161
76026
 
75162
76027
  authentication_api_UserRid = str
75163
76028
 
76029
+ ingest_api_EnvironmentVariable = str
76030
+
75164
76031
  scout_datasource_connection_api_ConnectionRid = str
75165
76032
 
75166
76033
  scout_channelvariables_api_ComputeSpecV1 = str
@@ -3,11 +3,16 @@ from .._impl import (
3
3
  ingest_api_AbsoluteTimestamp as AbsoluteTimestamp,
4
4
  ingest_api_AbsoluteTimestampVisitor as AbsoluteTimestampVisitor,
5
5
  ingest_api_AsyncHandle as AsyncHandle,
6
+ ingest_api_Authentication as Authentication,
7
+ ingest_api_AuthenticationVisitor as AuthenticationVisitor,
6
8
  ingest_api_ChannelConfig as ChannelConfig,
7
9
  ingest_api_ChannelPrefix as ChannelPrefix,
8
10
  ingest_api_CompleteMultipartUploadResponse as CompleteMultipartUploadResponse,
11
+ ingest_api_ContainerizedExtractor as ContainerizedExtractor,
12
+ ingest_api_ContainerizedExtractorRid as ContainerizedExtractorRid,
13
+ ingest_api_ContainerizedExtractorService as ContainerizedExtractorService,
14
+ ingest_api_ContainerizedOpts as ContainerizedOpts,
9
15
  ingest_api_CsvOpts as CsvOpts,
10
- ingest_api_CustomOpts as CustomOpts,
11
16
  ingest_api_CustomTimestamp as CustomTimestamp,
12
17
  ingest_api_DataSourceRefName as DataSourceRefName,
13
18
  ingest_api_DataflashOpts as DataflashOpts,
@@ -19,11 +24,16 @@ from .._impl import (
19
24
  ingest_api_DeprecatedNewDataSourceVisitor as DeprecatedNewDataSourceVisitor,
20
25
  ingest_api_DeprecatedTimestampMetadata as DeprecatedTimestampMetadata,
21
26
  ingest_api_DeprecatedTriggerIngest as DeprecatedTriggerIngest,
27
+ ingest_api_DockerImageSource as DockerImageSource,
28
+ ingest_api_EnvironmentVariable as EnvironmentVariable,
22
29
  ingest_api_EpochTimestamp as EpochTimestamp,
23
30
  ingest_api_ExistingDatasetIngestDestination as ExistingDatasetIngestDestination,
24
31
  ingest_api_ExistingVideoIngestDestination as ExistingVideoIngestDestination,
25
32
  ingest_api_ExtractorInputName as ExtractorInputName,
33
+ ingest_api_FileExtractionInput as FileExtractionInput,
26
34
  ingest_api_GcsIngestSource as GcsIngestSource,
35
+ ingest_api_GetContainerizedExtractorsRequest as GetContainerizedExtractorsRequest,
36
+ ingest_api_GetContainerizedExtractorsResponse as GetContainerizedExtractorsResponse,
27
37
  ingest_api_IngestDataSource as IngestDataSource,
28
38
  ingest_api_IngestDataSourceVisitor as IngestDataSourceVisitor,
29
39
  ingest_api_IngestDatasetFileDetails as IngestDatasetFileDetails,
@@ -76,11 +86,16 @@ from .._impl import (
76
86
  ingest_api_ParquetOpts as ParquetOpts,
77
87
  ingest_api_Part as Part,
78
88
  ingest_api_PartWithSize as PartWithSize,
89
+ ingest_api_RegisterContainerizedExtractorRequest as RegisterContainerizedExtractorRequest,
90
+ ingest_api_RegisterContainerizedExtractorResponse as RegisterContainerizedExtractorResponse,
79
91
  ingest_api_RelativeTimestamp as RelativeTimestamp,
80
92
  ingest_api_RunRid as RunRid,
81
93
  ingest_api_S3IngestSource as S3IngestSource,
82
94
  ingest_api_ScaleParameter as ScaleParameter,
83
95
  ingest_api_ScaleParameterVisitor as ScaleParameterVisitor,
96
+ ingest_api_SearchContainerizedExtractorsQuery as SearchContainerizedExtractorsQuery,
97
+ ingest_api_SearchContainerizedExtractorsQueryVisitor as SearchContainerizedExtractorsQueryVisitor,
98
+ ingest_api_SearchContainerizedExtractorsRequest as SearchContainerizedExtractorsRequest,
84
99
  ingest_api_SignPartResponse as SignPartResponse,
85
100
  ingest_api_SkipRowsConfig as SkipRowsConfig,
86
101
  ingest_api_TimeOffsetSpec as TimeOffsetSpec,
@@ -92,6 +107,8 @@ from .._impl import (
92
107
  ingest_api_TriggerFileIngest as TriggerFileIngest,
93
108
  ingest_api_TriggerIngest as TriggerIngest,
94
109
  ingest_api_TriggeredIngest as TriggeredIngest,
110
+ ingest_api_UpdateContainerizedExtractorRequest as UpdateContainerizedExtractorRequest,
111
+ ingest_api_UserAndPasswordAuthentication as UserAndPasswordAuthentication,
95
112
  ingest_api_UtcTimestamp as UtcTimestamp,
96
113
  ingest_api_VideoFileIngestDetails as VideoFileIngestDetails,
97
114
  ingest_api_VideoIngestTarget as VideoIngestTarget,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nominal-api
3
- Version: 0.609.0
3
+ Version: 0.610.0
4
4
  Requires-Python: >=3.8
5
5
  Requires-Dist: requests
6
6
  Requires-Dist: conjure-python-client<3,>=2.8.0
@@ -1,5 +1,5 @@
1
- nominal_api/__init__.py,sha256=dQTea6S4ECozoLcRWhHd0e0eX9T111oNCCepZm1UVCQ,1968
2
- nominal_api/_impl.py,sha256=Wp_eJzHp5nSlc-pwBdiwcwumVefiBA-2BZkRpT081m8,2913421
1
+ nominal_api/__init__.py,sha256=j6drOnq-fHoXCuF8zNak19e98rrqi7Hd1d7cogsz248,1968
2
+ nominal_api/_impl.py,sha256=cESjkZVtCToHH_7E2sCKdeFgROiEEsAChFITfbLuSFk,2944602
3
3
  nominal_api/py.typed,sha256=eoZ6GfifbqhMLNzjlqRDVil-yyBkOmVN9ujSgJWNBlY,15
4
4
  nominal_api/api/__init__.py,sha256=kJBEE_HLVpKYdLH12KyO-cSAVzwxYpBwaaDutCtT-LM,1236
5
5
  nominal_api/api_ids/__init__.py,sha256=CAtt44XgNZEEUDv-BbEbYtuxQ8y1wqSZU-STjBYdZv8,80
@@ -15,7 +15,7 @@ nominal_api/datasource_logset/__init__.py,sha256=H3fNxqyYC490MwvdWbt5BwhgWQUev7u
15
15
  nominal_api/datasource_logset_api/__init__.py,sha256=JyjO1tQmG-HZ7kYMi8lSfeaaYddBZdCMIyqc0IUJfWo,1006
16
16
  nominal_api/datasource_pagination_api/__init__.py,sha256=3GO8TAUavOe6dUEitOhje74aSZHjTKVI5N1MNuct1lI,212
17
17
  nominal_api/event/__init__.py,sha256=YUhvDFXtyAn08WNd7Xwnybz3PtflvtTcIOaunRS5-1I,836
18
- nominal_api/ingest_api/__init__.py,sha256=R0c6aMKwtqya4icx6Ffd31jgfQCwrr-yntkg9vOde_0,5673
18
+ nominal_api/ingest_api/__init__.py,sha256=UhryPXVmWzGACR4WrPQaEqAbOdM6XCn0zvyiGNZ6z0w,7010
19
19
  nominal_api/persistent_compute_api/__init__.py,sha256=5qZTTfN4X9u_qunFnWbLrPpG_FO5h7YBX68-_F6gYyQ,1031
20
20
  nominal_api/scout/__init__.py,sha256=ip3XK_9jJKAoFiCifUVMTpDMiUE4mWIdGzMDu7LASus,324
21
21
  nominal_api/scout_api/__init__.py,sha256=biO4DEygbGcLwM6Dg2VuvMra3A5EW6NBjukbIemXoG8,178
@@ -72,7 +72,7 @@ nominal_api/timeseries_logicalseries_api/__init__.py,sha256=Q9iZHurmyDsJIFbUg-Eb
72
72
  nominal_api/timeseries_seriescache/__init__.py,sha256=tFCkNuyrVMgtj-HIl1pOYPJHaL2VikI4C_x97bX_Lcs,109
73
73
  nominal_api/timeseries_seriescache_api/__init__.py,sha256=U9EhlqdF9qzD1O9al0vcvcdgS_C5lq-lN3Kmr0K3g84,1191
74
74
  nominal_api/upload_api/__init__.py,sha256=ZMudWMSqCrNozohbHaJKuxJnT9Edepe7nxxXMz_pT9k,87
75
- nominal_api-0.609.0.dist-info/METADATA,sha256=I366bMKRF2qePX10r_wshRT_EiLedqOhtyg3SuYLGMY,199
76
- nominal_api-0.609.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
77
- nominal_api-0.609.0.dist-info/top_level.txt,sha256=gI1ZdNJbuHcJZeKtCzzBXsEtpU1GX6XJKs6ksi_gCRA,12
78
- nominal_api-0.609.0.dist-info/RECORD,,
75
+ nominal_api-0.610.0.dist-info/METADATA,sha256=JLs5SYFJpBcnGTo16WPSjOzjCmJoXpjfljNd0M924uw,199
76
+ nominal_api-0.610.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
77
+ nominal_api-0.610.0.dist-info/top_level.txt,sha256=gI1ZdNJbuHcJZeKtCzzBXsEtpU1GX6XJKs6ksi_gCRA,12
78
+ nominal_api-0.610.0.dist-info/RECORD,,