Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions cognite/client/_api/simulators/integrations.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,14 +77,16 @@ def __call__(
def list(
self,
limit: int | None = DEFAULT_LIMIT_READ,
filter: SimulatorIntegrationFilter | None = None,
simulator_external_ids: str | SequenceNotStr[str] | None = None,
active: bool | None = None,
) -> SimulatorIntegrationList:
"""`Filter simulator integrations <https://developer.cognite.com/api#tag/Simulator-Integrations/operation/filter_simulator_integrations_simulators_integrations_list_post>`_
Retrieves a list of simulator integrations that match the given criteria

Args:
limit (int | None): The maximum number of simulator integrations to return, pass None to return all.
filter (SimulatorIntegrationFilter | None): Filter to apply.
simulator_external_ids (str | SequenceNotStr[str] | None): Filter on simulator external ids.
active (bool | None): Filter on active status of the simulator integration.

Returns:
SimulatorIntegrationList: List of simulator integrations
Expand All @@ -99,15 +101,18 @@ def list(
Filter integrations by active status:
>>> from cognite.client.data_classes.simulators import SimulatorIntegrationFilter
>>> res = client.simulators.integrations.list(
... filter=SimulatorIntegrationFilter(active=True))
... simulator_external_ids=["sim1", "sim2"],
... active=True,
... )
"""
integrations_filter = SimulatorIntegrationFilter(simulator_external_ids=simulator_external_ids, active=active)
self._warning.warn()
return self._list(
method="POST",
limit=limit,
resource_cls=SimulatorIntegration,
list_cls=SimulatorIntegrationList,
filter=filter.dump() if isinstance(filter, CogniteFilter) else filter,
filter=integrations_filter.dump(),
)

def delete(
Expand Down
11 changes: 6 additions & 5 deletions cognite/client/_api/simulators/models.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from __future__ import annotations

from collections.abc import Iterator, Sequence
from typing import TYPE_CHECKING, Any, NoReturn, overload
from typing import TYPE_CHECKING, NoReturn, overload

from cognite.client._api.simulators.models_revisions import SimulatorModelRevisionsAPI
from cognite.client._api_client import APIClient
Expand Down Expand Up @@ -39,14 +39,14 @@ def __init__(self, config: ClientConfig, api_version: str | None, cognite_client
def list(
self,
limit: int = DEFAULT_LIMIT_READ,
filter: SimulatorModelsFilter | dict[str, Any] | None = None,
simulator_external_ids: str | SequenceNotStr[str] | None = None,
sort: PropertySort | None = None,
) -> SimulatorModelList:
"""`Filter simulator models <https://developer.cognite.com/api#tag/Simulator-Models/operation/filter_simulator_models_simulators_models_list_post>`_
Retrieves a list of simulator models that match the given criteria
Args:
limit (int): Maximum number of results to return. Defaults to 25. Set to -1, float(“inf”) or None to return all items.
filter (SimulatorModelsFilter | dict[str, Any] | None): Filter to apply.
simulator_external_ids (str | SequenceNotStr[str] | None): Filter by simulator external id(s).
sort (PropertySort | None): The criteria to sort by.
Returns:
SimulatorModelList: List of simulator models
Expand All @@ -61,19 +61,20 @@ def list(
>>> from cognite.client.data_classes.simulators import SimulatorModelsFilter
>>> from cognite.client.data_classes.simulators.filters import PropertySort
>>> res = client.simulators.models.list(
... filter=SimulatorModelsFilter(simulator_external_ids=["simulator_external_id"]),
... simulator_external_ids=["simulator_external_id"],
... sort=PropertySort(order="asc")
... )

"""
model_filter = SimulatorModelsFilter(simulator_external_ids=simulator_external_ids)
self._warning.warn()
return self._list(
method="POST",
limit=limit,
resource_cls=SimulatorModel,
list_cls=SimulatorModelList,
sort=[PropertySort.load(sort).dump()] if sort else None,
filter=filter.dump(camel_case=True) if isinstance(filter, CogniteFilter) else filter,
filter=model_filter.dump(),
)

@overload
Expand Down
30 changes: 24 additions & 6 deletions cognite/client/_api/simulators/models_revisions.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from __future__ import annotations

from collections.abc import Iterator, Sequence
from typing import TYPE_CHECKING, Any, NoReturn, overload
from typing import TYPE_CHECKING, NoReturn, overload

from cognite.client._api_client import APIClient
from cognite.client._constants import DEFAULT_LIMIT_READ
from cognite.client.data_classes._base import CogniteFilter
from cognite.client.data_classes.shared import TimestampRange
from cognite.client.data_classes.simulators.filters import PropertySort, SimulatorModelRevisionsFilter
from cognite.client.data_classes.simulators.models import (
SimulatorModelRevision,
Expand Down Expand Up @@ -36,14 +37,20 @@ def list(
self,
limit: int = DEFAULT_LIMIT_READ,
sort: PropertySort | None = None,
filter: SimulatorModelRevisionsFilter | dict[str, Any] | None = None,
model_external_ids: str | SequenceNotStr[str] | None = None,
all_versions: bool | None = None,
created_time: TimestampRange | None = None,
last_updated_time: TimestampRange | None = None,
) -> SimulatorModelRevisionList:
"""`Filter simulator model revisions <https://developer.cognite.com/api#tag/Simulator-Models/operation/filter_simulator_model_revisions_simulators_models_revisions_list_post>`_
Retrieves a list of simulator model revisions that match the given criteria
Args:
limit (int): Maximum number of results to return. Defaults to 25. Set to -1, float(“inf”) or None to return all items.
sort (PropertySort | None): The criteria to sort by.
filter (SimulatorModelRevisionsFilter | dict[str, Any] | None): Filter to apply.
model_external_ids (str | SequenceNotStr[str] | None): The external ids of the simulator models to filter by.
all_versions (bool | None): If True, all versions of the simulator model revisions are returned. If False, only the latest version is returned.
created_time (TimestampRange | None): Filter by created time.
last_updated_time (TimestampRange | None): Filter by last updated time.
Returns:
SimulatorModelRevisionList: List of simulator model revisions
Examples:
Expand All @@ -55,19 +62,30 @@ def list(
Specify filter and sort order:
>>> from cognite.client.data_classes.simulators import SimulatorModelRevisionsFilter
>>> from cognite.client.data_classes.simulators.filters import PropertySort
>>> from cognite.client.data_classes.shared import TimestampRange
>>> res = client.simulators.models.revisions.list(
... filter=SimulatorModelRevisionsFilter(model_external_ids=["model_external_id"]),
... sort=PropertySort(order="asc")
... model_external_ids=["model1", "model2"],
... all_versions=True,
... created_time=TimestampRange(min=0, max=1000000),
... last_updated_time=TimestampRange(min=0, max=1000000),
... sort=PropertySort(order="asc", property="createdTime"),
... limit=10
... )
"""
model_revisions_filter = SimulatorModelRevisionsFilter(
model_external_ids=model_external_ids,
all_versions=all_versions,
created_time=created_time,
last_updated_time=last_updated_time,
)
self._warning.warn()
return self._list(
method="POST",
limit=limit,
resource_cls=SimulatorModelRevision,
list_cls=SimulatorModelRevisionList,
sort=[PropertySort.load(sort).dump()] if sort else None,
filter=filter.dump(camel_case=True) if isinstance(filter, CogniteFilter) else filter,
filter=model_revisions_filter.dump(),
)

@overload
Expand Down
11 changes: 8 additions & 3 deletions cognite/client/data_classes/simulators/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def _parse_str_or_sequence(value: str | SequenceNotStr[str] | None) -> list[str]
class SimulatorIntegrationFilter(CogniteFilter):
def __init__(
self,
simulator_external_ids: str | Sequence[str] | None = None,
simulator_external_ids: str | SequenceNotStr[str] | None = None,
active: bool | None = None,
) -> None:
self.simulator_external_ids = (
Expand All @@ -31,7 +31,7 @@ def __init__(
class SimulatorModelsFilter(CogniteFilter):
def __init__(
self,
simulator_external_ids: str | Sequence[str] | None = None,
simulator_external_ids: str | SequenceNotStr[str] | None = None,
) -> None:
self.simulator_external_ids = (
[simulator_external_ids] if isinstance(simulator_external_ids, str) else simulator_external_ids
Expand All @@ -41,10 +41,15 @@ def __init__(
class SimulatorModelRevisionsFilter(CogniteFilter):
def __init__(
self,
model_external_ids: str | Sequence[str] | None = None,
model_external_ids: str | SequenceNotStr[str] | None = None,
all_versions: bool | None = None,
created_time: TimestampRange | None = None,
last_updated_time: TimestampRange | None = None,
) -> None:
self.model_external_ids = [model_external_ids] if isinstance(model_external_ids, str) else model_external_ids
self.all_versions = all_versions
self.created_time = created_time
self.last_updated_time = last_updated_time


class SimulatorRunsFilter(CogniteFilter):
Expand Down
39 changes: 19 additions & 20 deletions tests/tests_integration/test_api/test_simulators/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@
from cognite.client._cognite_client import CogniteClient
from cognite.client.data_classes.data_sets import DataSetWrite
from cognite.client.data_classes.files import FileMetadata
from cognite.client.data_classes.simulators.filters import (
SimulatorModelRevisionsFilter,
)
from cognite.client.data_classes.simulators.models import SimulatorModelWrite
from cognite.client.data_classes.simulators.routine_revisions import SimulatorRoutineRevisionWrite
from cognite.client.data_classes.simulators.routines import SimulatorRoutineWrite
Expand Down Expand Up @@ -130,24 +127,26 @@ def seed_simulator_model_revisions(cognite_client: CogniteClient, seed_simulator
model_unique_external_id = resource_names["simulator_model_external_id"]
model_revision_unique_external_id = resource_names["simulator_model_revision_external_id"]
model_revisions = cognite_client.simulators.models.revisions.list(
filter=SimulatorModelRevisionsFilter(model_external_ids=[model_unique_external_id])
model_external_ids=[model_unique_external_id],
)
model_revision_not_exists = not model_revisions.get(external_id=model_revision_unique_external_id)

if model_revision_not_exists:
cognite_client.simulators._post(
"/simulators/models/revisions",
json={
"items": [
{
"description": "test sim model revision description",
"fileId": seed_file.id,
"modelExternalId": model_unique_external_id,
"externalId": model_revision_unique_external_id,
}
]
},
)

revisions = [f"{model_revision_unique_external_id}_1", model_revision_unique_external_id]

for revision in revisions:
if not model_revisions.get(external_id=revision):
cognite_client.simulators._post(
"/simulators/models/revisions",
json={
"items": [
{
"description": "test sim model revision description",
"fileId": seed_file.id,
"modelExternalId": model_unique_external_id,
"externalId": revision,
}
]
},
)


@pytest.fixture(scope="session")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,9 @@ def test_filter_integrations(self, cognite_client: CogniteClient, seed_resource_
assert integration.active is True

all_integrations = cognite_client.simulators.integrations.list()
active_integrations = cognite_client.simulators.integrations.list(
filter=SimulatorIntegrationFilter(active=True)
)
active_integrations = cognite_client.simulators.integrations.list(active=True)
filtered_integrations = cognite_client.simulators.integrations.list(
filter=SimulatorIntegrationFilter(simulator_external_ids=[seed_resource_names["simulator_external_id"]])
simulator_external_ids=[seed_resource_names["simulator_external_id"]],
)
assert len(all_integrations) > 0
assert len(active_integrations) > 0
Expand Down
46 changes: 43 additions & 3 deletions tests/tests_integration/test_api/test_simulators/test_models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import time

import pytest

from cognite.client._cognite_client import CogniteClient
from cognite.client.data_classes import TimestampRange
from cognite.client.data_classes.files import FileMetadata
from cognite.client.data_classes.simulators.filters import SimulatorModelRevisionsFilter, SimulatorModelsFilter
from cognite.client.data_classes.simulators.filters import PropertySort
from cognite.client.data_classes.simulators.models import (
SimulatorModelRevisionWrite,
SimulatorModelWrite,
Expand All @@ -18,7 +21,8 @@
class TestSimulatorModels:
def test_list_models(self, cognite_client: CogniteClient, seed_resource_names) -> None:
models = cognite_client.simulators.models.list(
limit=5, filter=SimulatorModelsFilter(simulator_external_ids=[seed_resource_names["simulator_external_id"]])
limit=5,
simulator_external_ids=[seed_resource_names["simulator_external_id"]],
)

model_ids = []
Expand Down Expand Up @@ -48,7 +52,7 @@ def test_list_model_revisions(self, cognite_client: CogniteClient, seed_resource

revisions = cognite_client.simulators.models.revisions.list(
limit=5,
filter=SimulatorModelRevisionsFilter(model_external_ids=[model_external_id]),
model_external_ids=[model_external_id],
)

model_revision_ids = []
Expand All @@ -61,6 +65,42 @@ def test_list_model_revisions(self, cognite_client: CogniteClient, seed_resource

assert len(revisions) > 0

def test_list_model_revisions_filtering_all_versions(
self, cognite_client: CogniteClient, seed_resource_names
) -> None:
model_external_id = seed_resource_names["simulator_model_external_id"]
revisions_all_versions = cognite_client.simulators.models.revisions.list(
all_versions=True,
model_external_ids=[model_external_id],
created_time=TimestampRange(start=0, end=int(time.time() * 1000)),
last_updated_time=TimestampRange(start=0, end=int(time.time() * 1000)),
)
revisions_all_versions_external_ids = [revision.external_id for revision in revisions_all_versions]
revisions_default = cognite_client.simulators.models.revisions.list(
model_external_ids=seed_resource_names["simulator_model_external_id"]
)

assert len(revisions_default) == 1
assert revisions_default[0].external_id in revisions_all_versions_external_ids
assert len(revisions_all_versions) != len(revisions_default)

def test_list_model_revisions_filtering_sort(self, cognite_client: CogniteClient, seed_resource_names) -> None:
revisions_asc = cognite_client.simulators.models.revisions.list(
sort=PropertySort(order="asc", property="createdTime"),
model_external_ids=[seed_resource_names["simulator_model_external_id"]],
all_versions=True,
)

revisions_desc = cognite_client.simulators.models.revisions.list(
sort=PropertySort(order="desc", property="createdTime"),
model_external_ids=[seed_resource_names["simulator_model_external_id"]],
all_versions=True,
)
assert len(revisions_asc) > 0
assert len(revisions_desc) > 0
assert revisions_asc[0].created_time == revisions_desc[-1].created_time
assert revisions_desc[0].created_time == revisions_asc[-1].created_time

def test_retrieve_model_revision(self, cognite_client: CogniteClient, seed_resource_names) -> None:
model_revision_external_id = seed_resource_names["simulator_model_revision_external_id"]
model_revision = cognite_client.simulators.models.revisions.retrieve(external_id=model_revision_external_id)
Expand Down