Skip to content

Commit

Permalink
tests: and fix for creatind sequences files and timeseries listed
Browse files Browse the repository at this point in the history
  • Loading branch information
doctrino committed Aug 18, 2024
1 parent 5a1716d commit 8a6665e
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 10 deletions.
2 changes: 1 addition & 1 deletion examples/omni/_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
28 changes: 19 additions & 9 deletions examples/omni/data_classes/_cdf_external_references_listed.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 @@ -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,
Expand Down Expand Up @@ -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"] = [
Expand All @@ -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
Expand Down
54 changes: 54 additions & 0 deletions tests/test_integration/test_upsert.py
Original file line number Diff line number Diff line change
Expand Up @@ -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())

0 comments on commit 8a6665e

Please sign in to comment.