diff --git a/examples/omni/_api_client.py b/examples/omni/_api_client.py index 75b3764b1..966f3e66c 100644 --- a/examples/omni/_api_client.py +++ b/examples/omni/_api_client.py @@ -160,7 +160,7 @@ def apply( replace: bool = False, write_none: bool = False, ) -> data_classes.ResourcesWriteResult: - """Add or update (upsert) items. + """[DEPRECATED] Add or update (upsert) items. Args: items: One or more instances of the pygen generated data classes. diff --git a/examples/omni/data_classes/_cdf_external_references_listed.py b/examples/omni/data_classes/_cdf_external_references_listed.py index e4cace0e2..6a564eb29 100644 --- a/examples/omni/data_classes/_cdf_external_references_listed.py +++ b/examples/omni/data_classes/_cdf_external_references_listed.py @@ -4,7 +4,14 @@ from typing import Any, ClassVar, Literal, no_type_check, Optional, Union from cognite.client import data_modeling as dm, CogniteClient -from cognite.client.data_classes import TimeSeries as CogniteTimeSeries +from cognite.client.data_classes import ( + TimeSeriesWrite as CogniteTimeSeriesWrite, + SequenceWrite as CogniteSequenceWrite, + FileMetadataWrite as CogniteFileMetadataWrite, + FileMetadata as CogniteFileMetadata, + TimeSeries as CogniteTimeSeries, + Sequence as CogniteSequence, +) from pydantic import field_validator, model_validator from ._core import ( @@ -162,14 +169,15 @@ def as_write(self) -> CDFExternalReferencesListedWrite: space=self.space, external_id=self.external_id, data_record=DataRecordWrite(existing_version=self.data_record.version), - files=[file.as_write() if isinstance(file, FileMetadata) else file for file in self.files or []] or None, + files=[file.as_write() if isinstance(file, CogniteFileMetadata) else file for file in self.files or []] + or None, sequences=[ - sequence.as_write() if isinstance(sequence, SequenceRead) else sequence + sequence.as_write() if isinstance(sequence, CogniteSequence) else sequence for sequence in self.sequences or [] ] or None, timeseries=[ - timeseries.as_write() if isinstance(timeseries, TimeSeries) else timeseries + timeseries.as_write() if isinstance(timeseries, CogniteTimeSeries) else timeseries for timeseries in self.timeseries or [] ] or None, @@ -220,12 +228,14 @@ def _to_instances_write( properties: dict[str, Any] = {} if self.files is not None or write_none: - properties["files"] = [value if isinstance(value, str) else value.external_id for value in self.files or []] + properties["files"] = [ + value if isinstance(value, str) else value.external_id for value in self.files or [] + ] or None if self.sequences is not None or write_none: properties["sequences"] = [ value if isinstance(value, str) else value.external_id for value in self.sequences or [] - ] + ] or None if self.timeseries is not None or write_none: properties["timeseries"] = [ @@ -249,15 +259,15 @@ def _to_instances_write( cache.add(self.as_tuple_id()) for file in self.files or []: - if isinstance(file, FileMetadataWrite): + if isinstance(file, CogniteFileMetadataWrite): resources.files.append(file) for sequence in self.sequences or []: - if isinstance(sequence, SequenceWrite): + if isinstance(sequence, CogniteSequenceWrite): resources.sequences.append(sequence) for timeseries in self.timeseries or []: - if isinstance(timeseries, TimeSeriesWrite): + if isinstance(timeseries, CogniteTimeSeriesWrite): resources.time_series.append(timeseries) return resources diff --git a/tests/test_integration/test_upsert.py b/tests/test_integration/test_upsert.py index 144d5d48b..5f7fb3ab1 100644 --- a/tests/test_integration/test_upsert.py +++ b/tests/test_integration/test_upsert.py @@ -327,3 +327,57 @@ def test_upsert_with_cdf_external(omni_client: OmniClient, cognite_client: Cogni cognite_client.files.delete(id=resources.files.as_ids()) if resources.sequences: cognite_client.sequences.delete(external_id=resources.sequences.as_external_ids()) + + +def test_upsert_with_cdf_external_listed(omni_client: OmniClient, cognite_client: CogniteClient) -> None: + # Arrange + test_name = "integration_test:upsert_with_cdf_external_listed" + new_item = dc.CDFExternalReferencesListedWrite( + external_id=f"{test_name}:Item1", + files=[ + FileMetadataWrite( + external_id=f"{test_name}:File1", + name="File1", + ) + ], + sequences=[ + SequenceWrite( + external_id=f"{test_name}:Sequence1", + name="Sequence1", + columns=[ + SequenceColumnWrite( + external_id=f"{test_name}:Column1", + name="Column1", + value_type="String", + ) + ], + ) + ], + timeseries=[ + TimeSeriesWrite( + external_id=f"{test_name}:TimeSeries1", + name="TimeSeries1", + metadata={"key": "value"}, + ) + ], + ) + + resources = dc.ResourcesWriteResult() + try: + # Act + resources = omni_client.upsert(new_item) + + # Assert + assert len(resources.nodes) == 1 + assert len(resources.time_series) == 1 + assert len(resources.files) == 1 + assert len(resources.sequences) == 1 + finally: + if resources.nodes: + cognite_client.data_modeling.instances.delete(resources.nodes.as_ids()) + if resources.time_series: + cognite_client.time_series.delete(external_id=resources.time_series.as_external_ids()) + if resources.files: + cognite_client.files.delete(id=resources.files.as_ids()) + if resources.sequences: + cognite_client.sequences.delete(external_id=resources.sequences.as_external_ids())