Skip to content

Commit

Permalink
test: and fix for cdf external reference
Browse files Browse the repository at this point in the history
  • Loading branch information
doctrino committed Aug 18, 2024
1 parent 0608b3a commit 952dbc7
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 9 deletions.
14 changes: 12 additions & 2 deletions examples/omni/_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
from typing import Any, Sequence

from cognite.client import ClientConfig, CogniteClient, data_modeling as dm
from cognite.client.data_classes import TimeSeriesList
from cognite.client.data_classes import TimeSeriesList, FileMetadataList, SequenceList
from cognite.client.credentials import OAuthClientCredentials
from cognite.client.exceptions import CogniteAPIError

from ._api import (
CDFExternalReferencesAPI,
Expand Down Expand Up @@ -118,8 +119,17 @@ def upsert(
time_series = TimeSeriesList([])
if instances.time_series:
time_series = self._client.time_series.upsert(instances.time_series, mode="patch")
files = FileMetadataList([])
if instances.files:
for file in instances.files:
created, _ = self._client.files.create(file, overwrite=True)
files.append(created)

return data_classes.ResourcesWriteResult(result.nodes, result.edges, TimeSeriesList(time_series))
sequences = SequenceList([])
if instances.sequences:
sequences = self._client.sequences.upsert(instances.sequences, mode="patch")

return data_classes.ResourcesWriteResult(result.nodes, result.edges, time_series, files, sequences)

def _create_instances(
self,
Expand Down
23 changes: 16 additions & 7 deletions examples/omni/data_classes/_cdf_external_references.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -156,9 +163,11 @@ def as_write(self) -> CDFExternalReferencesWrite:
space=self.space,
external_id=self.external_id,
data_record=DataRecordWrite(existing_version=self.data_record.version),
file=self.file.as_write() if isinstance(self.file, FileMetadata) else self.file,
sequence=self.sequence.as_write() if isinstance(self.sequence, SequenceRead) else self.sequence,
timeseries=self.timeseries.as_write() if isinstance(self.timeseries, TimeSeries) else self.timeseries,
file=self.file.as_write() if isinstance(self.file, CogniteFileMetadata) else self.file,
sequence=self.sequence.as_write() if isinstance(self.sequence, CogniteSequence) else self.sequence,
timeseries=(
self.timeseries.as_write() if isinstance(self.timeseries, CogniteTimeSeries) else self.timeseries
),
)

def as_apply(self) -> CDFExternalReferencesWrite:
Expand Down Expand Up @@ -236,13 +245,13 @@ def _to_instances_write(
resources.nodes.append(this_node)
cache.add(self.as_tuple_id())

if isinstance(self.file, FileMetadataWrite):
if isinstance(self.file, CogniteFileMetadataWrite):
resources.files.append(self.file)

if isinstance(self.sequence, SequenceWrite):
if isinstance(self.sequence, CogniteSequenceWrite):
resources.sequences.append(self.sequence)

if isinstance(self.timeseries, TimeSeries):
if isinstance(self.timeseries, CogniteTimeSeriesWrite):
resources.time_series.append(self.timeseries)

return resources
Expand Down
48 changes: 48 additions & 0 deletions tests/test_integration/test_upsert.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import pytest
from cognite.client import CogniteClient
from cognite.client.data_classes import FileMetadataWrite, SequenceColumnWrite, SequenceWrite, TimeSeriesWrite

from tests.constants import IS_PYDANTIC_V2

Expand Down Expand Up @@ -279,3 +280,50 @@ def test_upsert_recursive_with_single_edge(omni_client: OmniClient, cognite_clie
cognite_client.data_modeling.instances.delete(resources.nodes.as_ids())
if resources.edges:
cognite_client.data_modeling.instances.delete(edges=resources.edges.as_ids())


def test_upsert_with_cdf_external(omni_client: OmniClient, cognite_client: CogniteClient) -> None:
# Arrange
test_name = "integration_test:upsert_with_cdf_external"
new_item = dc.CDFExternalReferencesWrite(
external_id=f"{test_name}:Item1",
file=FileMetadataWrite(
external_id=f"{test_name}:File1",
name="File1",
),
sequence=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())

0 comments on commit 952dbc7

Please sign in to comment.