cognite-toolkit 0.7.10__py3-none-any.whl → 0.7.12__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.
- cognite_toolkit/_cdf.py +8 -0
- cognite_toolkit/_cdf_tk/commands/__init__.py +2 -2
- cognite_toolkit/_cdf_tk/commands/_purge.py +27 -28
- cognite_toolkit/_cdf_tk/commands/_upload.py +5 -1
- cognite_toolkit/_cdf_tk/commands/about.py +221 -0
- cognite_toolkit/_cdf_tk/commands/clean.py +11 -13
- cognite_toolkit/_cdf_tk/commands/deploy.py +9 -17
- cognite_toolkit/_cdf_tk/commands/dump_resource.py +6 -4
- cognite_toolkit/_cdf_tk/commands/pull.py +6 -19
- cognite_toolkit/_cdf_tk/cruds/_base_cruds.py +7 -25
- cognite_toolkit/_cdf_tk/cruds/_data_cruds.py +3 -6
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/agent.py +4 -6
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/auth.py +4 -12
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/classic.py +19 -36
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/configuration.py +4 -10
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/data_organization.py +4 -12
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/datamodel.py +16 -41
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/extraction_pipeline.py +5 -15
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/fieldops.py +8 -21
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/file.py +6 -22
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/function.py +5 -15
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/hosted_extractors.py +12 -26
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/industrial_tool.py +3 -6
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/location.py +3 -14
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/migration.py +4 -8
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/raw.py +4 -8
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/relationship.py +3 -6
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/robotics.py +15 -34
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/streams.py +2 -5
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/three_d_model.py +3 -6
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/timeseries.py +5 -13
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/transformation.py +4 -19
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/workflow.py +20 -37
- cognite_toolkit/_cdf_tk/cruds/_worker.py +13 -30
- cognite_toolkit/_cdf_tk/feature_flags.py +1 -1
- cognite_toolkit/_cdf_tk/storageio/_base.py +23 -0
- cognite_toolkit/_cdf_tk/storageio/_file_content.py +4 -0
- cognite_toolkit/_cdf_tk/utils/fileio/_readers.py +42 -1
- cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml +1 -1
- cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml +1 -1
- cognite_toolkit/_resources/cdf.toml +1 -1
- cognite_toolkit/_version.py +1 -1
- {cognite_toolkit-0.7.10.dist-info → cognite_toolkit-0.7.12.dist-info}/METADATA +1 -1
- {cognite_toolkit-0.7.10.dist-info → cognite_toolkit-0.7.12.dist-info}/RECORD +47 -47
- cognite_toolkit/_cdf_tk/commands/featureflag.py +0 -27
- {cognite_toolkit-0.7.10.dist-info → cognite_toolkit-0.7.12.dist-info}/WHEEL +0 -0
- {cognite_toolkit-0.7.10.dist-info → cognite_toolkit-0.7.12.dist-info}/entry_points.txt +0 -0
- {cognite_toolkit-0.7.10.dist-info → cognite_toolkit-0.7.12.dist-info}/licenses/LICENSE +0 -0
|
@@ -29,13 +29,6 @@ from cognite_toolkit._cdf_tk.cruds import (
|
|
|
29
29
|
ResourceCRUD,
|
|
30
30
|
StreamlitCRUD,
|
|
31
31
|
)
|
|
32
|
-
from cognite_toolkit._cdf_tk.cruds._base_cruds import (
|
|
33
|
-
T_ID,
|
|
34
|
-
T_ResourceRequest,
|
|
35
|
-
T_ResourceRequestList,
|
|
36
|
-
T_ResourceResponse,
|
|
37
|
-
T_ResourceResponseList,
|
|
38
|
-
)
|
|
39
32
|
from cognite_toolkit._cdf_tk.data_classes import (
|
|
40
33
|
BuildEnvironment,
|
|
41
34
|
BuildVariable,
|
|
@@ -49,6 +42,7 @@ from cognite_toolkit._cdf_tk.data_classes import (
|
|
|
49
42
|
YAMLComments,
|
|
50
43
|
)
|
|
51
44
|
from cognite_toolkit._cdf_tk.exceptions import ToolkitError, ToolkitMissingResourceError, ToolkitValueError
|
|
45
|
+
from cognite_toolkit._cdf_tk.protocols import T_ResourceRequest, T_ResourceResponse
|
|
52
46
|
from cognite_toolkit._cdf_tk.tk_warnings import LowSeverityWarning, MediumSeverityWarning
|
|
53
47
|
from cognite_toolkit._cdf_tk.utils import (
|
|
54
48
|
YAMLComment,
|
|
@@ -64,6 +58,7 @@ from cognite_toolkit._cdf_tk.utils.modules import (
|
|
|
64
58
|
module_directory_from_path,
|
|
65
59
|
parse_user_selected_modules,
|
|
66
60
|
)
|
|
61
|
+
from cognite_toolkit._cdf_tk.utils.useful_types import T_ID
|
|
67
62
|
|
|
68
63
|
from ._base import ToolkitCommand
|
|
69
64
|
from .build_cmd import BuildCommand
|
|
@@ -547,9 +542,7 @@ class PullCommand(ToolkitCommand):
|
|
|
547
542
|
|
|
548
543
|
def _pull_resources(
|
|
549
544
|
self,
|
|
550
|
-
loader: ResourceCRUD[
|
|
551
|
-
T_ID, T_ResourceRequest, T_ResourceResponse, T_ResourceRequestList, T_ResourceResponseList
|
|
552
|
-
],
|
|
545
|
+
loader: ResourceCRUD[T_ID, T_ResourceRequest, T_ResourceResponse],
|
|
553
546
|
resources: BuiltFullResourceList[T_ID],
|
|
554
547
|
dry_run: bool,
|
|
555
548
|
environment_variables: dict[str, str | None],
|
|
@@ -581,9 +574,7 @@ class PullCommand(ToolkitCommand):
|
|
|
581
574
|
local_resource_by_id: dict[T_ID, dict[str, Any]],
|
|
582
575
|
cdf_resource_by_id: dict[T_ID, T_ResourceResponse],
|
|
583
576
|
file_results: ResourceDeployResult,
|
|
584
|
-
loader: ResourceCRUD[
|
|
585
|
-
T_ID, T_ResourceRequest, T_ResourceResponse, T_ResourceRequestList, T_ResourceResponseList
|
|
586
|
-
],
|
|
577
|
+
loader: ResourceCRUD[T_ID, T_ResourceRequest, T_ResourceResponse],
|
|
587
578
|
) -> tuple[bool, dict[T_ID, dict[str, Any]]]:
|
|
588
579
|
to_write: dict[T_ID, dict[str, Any]] = {}
|
|
589
580
|
has_changes = False
|
|
@@ -612,9 +603,7 @@ class PullCommand(ToolkitCommand):
|
|
|
612
603
|
@staticmethod
|
|
613
604
|
def _get_local_resource_dict_by_id(
|
|
614
605
|
resources: BuiltFullResourceList[T_ID],
|
|
615
|
-
loader: ResourceCRUD[
|
|
616
|
-
T_ID, T_ResourceRequest, T_ResourceResponse, T_ResourceRequestList, T_ResourceResponseList
|
|
617
|
-
],
|
|
606
|
+
loader: ResourceCRUD[T_ID, T_ResourceRequest, T_ResourceResponse],
|
|
618
607
|
environment_variables: dict[str, str | None],
|
|
619
608
|
) -> dict[T_ID, dict[str, Any]]:
|
|
620
609
|
unique_destinations = {r.destination for r in resources if r.destination}
|
|
@@ -651,9 +640,7 @@ class PullCommand(ToolkitCommand):
|
|
|
651
640
|
to_write: dict[T_ID, dict[str, Any]],
|
|
652
641
|
resources: BuiltFullResourceList[T_ID],
|
|
653
642
|
environment_variables: dict[str, str | None],
|
|
654
|
-
loader: ResourceCRUD[
|
|
655
|
-
T_ID, T_ResourceRequest, T_ResourceResponse, T_ResourceRequestList, T_ResourceResponseList
|
|
656
|
-
],
|
|
643
|
+
loader: ResourceCRUD[T_ID, T_ResourceRequest, T_ResourceResponse],
|
|
657
644
|
source_file: Path,
|
|
658
645
|
) -> tuple[str, dict[Path, str]]:
|
|
659
646
|
# 1. Replace all variables with placeholders
|
|
@@ -10,12 +10,7 @@ from rich.console import Console
|
|
|
10
10
|
|
|
11
11
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
12
12
|
from cognite_toolkit._cdf_tk.constants import BUILD_FOLDER_ENCODING, EXCL_FILES
|
|
13
|
-
from cognite_toolkit._cdf_tk.protocols import
|
|
14
|
-
T_ResourceRequest,
|
|
15
|
-
T_ResourceRequestList,
|
|
16
|
-
T_ResourceResponse,
|
|
17
|
-
T_ResourceResponseList,
|
|
18
|
-
)
|
|
13
|
+
from cognite_toolkit._cdf_tk.protocols import T_ResourceRequest, T_ResourceResponse
|
|
19
14
|
from cognite_toolkit._cdf_tk.resource_classes import ToolkitResource
|
|
20
15
|
from cognite_toolkit._cdf_tk.tk_warnings import ToolkitWarning
|
|
21
16
|
from cognite_toolkit._cdf_tk.utils import load_yaml_inject_variables, safe_read, sanitize_filename
|
|
@@ -133,11 +128,7 @@ class Loader(ABC):
|
|
|
133
128
|
T_Loader = TypeVar("T_Loader", bound=Loader)
|
|
134
129
|
|
|
135
130
|
|
|
136
|
-
class ResourceCRUD(
|
|
137
|
-
Loader,
|
|
138
|
-
ABC,
|
|
139
|
-
Generic[T_ID, T_ResourceRequest, T_ResourceResponse, T_ResourceRequestList, T_ResourceResponseList],
|
|
140
|
-
):
|
|
131
|
+
class ResourceCRUD(Loader, ABC, Generic[T_ID, T_ResourceRequest, T_ResourceResponse]):
|
|
141
132
|
"""This is the base class for all resource CRUD.
|
|
142
133
|
|
|
143
134
|
A resource loader consists of the following
|
|
@@ -150,8 +141,6 @@ class ResourceCRUD(
|
|
|
150
141
|
Class attributes:
|
|
151
142
|
resource_write_cls: The API write data class for the resource.
|
|
152
143
|
resource_cls: The API read data class for the resource.
|
|
153
|
-
list_cls: The API read list format for this resource.
|
|
154
|
-
list_write_cls: The API write list format for this resource.
|
|
155
144
|
yaml_cls: The File format for this resource. This is used to validate the user input.
|
|
156
145
|
support_drop: Whether the resource supports the drop flag.
|
|
157
146
|
support_update: Whether the resource supports the update operation.
|
|
@@ -165,8 +154,6 @@ class ResourceCRUD(
|
|
|
165
154
|
# Must be set in the subclass
|
|
166
155
|
resource_write_cls: type[T_ResourceRequest]
|
|
167
156
|
resource_cls: type[T_ResourceResponse]
|
|
168
|
-
list_cls: type[T_ResourceResponseList]
|
|
169
|
-
list_write_cls: type[T_ResourceRequestList]
|
|
170
157
|
yaml_cls: type[ToolkitResource]
|
|
171
158
|
# Optional to set in the subclass
|
|
172
159
|
support_drop = True
|
|
@@ -197,14 +184,14 @@ class ResourceCRUD(
|
|
|
197
184
|
raise NotImplementedError(f"get_required_capability must be implemented for {cls.__name__}.")
|
|
198
185
|
|
|
199
186
|
@abstractmethod
|
|
200
|
-
def create(self, items:
|
|
187
|
+
def create(self, items: Sequence[T_ResourceRequest]) -> Sized:
|
|
201
188
|
raise NotImplementedError
|
|
202
189
|
|
|
203
190
|
@abstractmethod
|
|
204
|
-
def retrieve(self, ids: SequenceNotStr[T_ID]) ->
|
|
191
|
+
def retrieve(self, ids: SequenceNotStr[T_ID]) -> Sequence[T_ResourceResponse]:
|
|
205
192
|
raise NotImplementedError
|
|
206
193
|
|
|
207
|
-
def update(self, items:
|
|
194
|
+
def update(self, items: Sequence[T_ResourceRequest]) -> Sized:
|
|
208
195
|
raise NotImplementedError(f"Update is not supported for {type(self).__name__}.")
|
|
209
196
|
|
|
210
197
|
@abstractmethod
|
|
@@ -390,9 +377,7 @@ class ResourceCRUD(
|
|
|
390
377
|
|
|
391
378
|
# Helper methods
|
|
392
379
|
@classmethod
|
|
393
|
-
def get_ids(
|
|
394
|
-
cls, items: Sequence[T_ResourceRequest | T_ResourceResponse | dict] | T_ResourceResponseList
|
|
395
|
-
) -> list[T_ID]:
|
|
380
|
+
def get_ids(cls, items: Sequence[T_ResourceRequest | T_ResourceResponse | dict]) -> list[T_ID]:
|
|
396
381
|
return [cls.get_id(item) for item in items]
|
|
397
382
|
|
|
398
383
|
@classmethod
|
|
@@ -404,10 +389,7 @@ class ResourceCRUD(
|
|
|
404
389
|
)
|
|
405
390
|
|
|
406
391
|
|
|
407
|
-
class ResourceContainerCRUD(
|
|
408
|
-
ResourceCRUD[T_ID, T_ResourceRequest, T_ResourceResponse, T_ResourceRequestList, T_ResourceResponseList],
|
|
409
|
-
ABC,
|
|
410
|
-
):
|
|
392
|
+
class ResourceContainerCRUD(ResourceCRUD[T_ID, T_ResourceRequest, T_ResourceResponse], ABC):
|
|
411
393
|
"""This is the base class for all resource CRUD' containers.
|
|
412
394
|
|
|
413
395
|
A resource container CRUD is a resource that contains data. For example, Timeseries contains datapoints, and another
|
|
@@ -11,9 +11,7 @@ from cognite_toolkit._cdf_tk.client.data_classes.raw import RawTable
|
|
|
11
11
|
from cognite_toolkit._cdf_tk.constants import BUILD_FOLDER_ENCODING
|
|
12
12
|
from cognite_toolkit._cdf_tk.protocols import (
|
|
13
13
|
T_ResourceRequest,
|
|
14
|
-
T_ResourceRequestList,
|
|
15
14
|
T_ResourceResponse,
|
|
16
|
-
T_ResourceResponseList,
|
|
17
15
|
)
|
|
18
16
|
from cognite_toolkit._cdf_tk.utils import read_yaml_content, safe_read
|
|
19
17
|
from cognite_toolkit._cdf_tk.utils.file import read_csv
|
|
@@ -131,17 +129,16 @@ class FileCRUD(DataCRUD):
|
|
|
131
129
|
@staticmethod
|
|
132
130
|
def _read_metadata(
|
|
133
131
|
destination: Path,
|
|
134
|
-
loader: type[
|
|
135
|
-
ResourceCRUD[T_ID, T_ResourceRequest, T_ResourceResponse, T_ResourceRequestList, T_ResourceResponseList]
|
|
136
|
-
],
|
|
132
|
+
loader: type[ResourceCRUD[T_ID, T_ResourceRequest, T_ResourceResponse]],
|
|
137
133
|
identifier: T_ID,
|
|
138
134
|
) -> T_ResourceRequest:
|
|
139
135
|
built_content = read_yaml_content(safe_read(destination, encoding=BUILD_FOLDER_ENCODING))
|
|
140
136
|
if isinstance(built_content, dict):
|
|
141
137
|
return loader.resource_write_cls._load(built_content)
|
|
142
138
|
elif isinstance(built_content, list):
|
|
139
|
+
write_resources = (loader.resource_write_cls._load(content) for content in built_content)
|
|
143
140
|
try:
|
|
144
|
-
return next(m for m in
|
|
141
|
+
return next(m for m in write_resources if loader.get_id(m) == identifier)
|
|
145
142
|
except StopIteration:
|
|
146
143
|
raise RuntimeError(f"Missing metadata for {destination.as_posix()}")
|
|
147
144
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from collections.abc import Hashable, Iterable, Sequence
|
|
2
2
|
from typing import Any
|
|
3
3
|
|
|
4
|
-
from cognite.client.data_classes.agents import Agent, AgentList, AgentUpsert
|
|
4
|
+
from cognite.client.data_classes.agents import Agent, AgentList, AgentUpsert
|
|
5
5
|
from cognite.client.data_classes.capabilities import AgentsAcl, Capability
|
|
6
6
|
from cognite.client.exceptions import CogniteAPIError
|
|
7
7
|
from cognite.client.utils.useful_types import SequenceNotStr
|
|
@@ -11,12 +11,10 @@ from cognite_toolkit._cdf_tk.resource_classes import AgentYAML
|
|
|
11
11
|
from cognite_toolkit._cdf_tk.utils.diff_list import diff_list_hashable, diff_list_identifiable
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
class AgentCRUD(ResourceCRUD[str, AgentUpsert, Agent
|
|
14
|
+
class AgentCRUD(ResourceCRUD[str, AgentUpsert, Agent]):
|
|
15
15
|
folder_name = "agents"
|
|
16
16
|
resource_cls = Agent
|
|
17
17
|
resource_write_cls = AgentUpsert
|
|
18
|
-
list_cls = AgentList
|
|
19
|
-
list_write_cls = AgentUpsertList
|
|
20
18
|
kind = "Agent"
|
|
21
19
|
yaml_cls = AgentYAML
|
|
22
20
|
_doc_base_url = ""
|
|
@@ -43,13 +41,13 @@ class AgentCRUD(ResourceCRUD[str, AgentUpsert, Agent, AgentUpsertList, AgentList
|
|
|
43
41
|
|
|
44
42
|
return AgentsAcl(actions, AgentsAcl.Scope.All())
|
|
45
43
|
|
|
46
|
-
def create(self, items:
|
|
44
|
+
def create(self, items: Sequence[AgentUpsert]) -> AgentList:
|
|
47
45
|
return self.client.agents.upsert(items)
|
|
48
46
|
|
|
49
47
|
def retrieve(self, ids: SequenceNotStr[str]) -> AgentList:
|
|
50
48
|
return self.client.agents.retrieve(ids, ignore_unknown_ids=True)
|
|
51
49
|
|
|
52
|
-
def update(self, items:
|
|
50
|
+
def update(self, items: Sequence[AgentUpsert]) -> AgentList:
|
|
53
51
|
return self.client.agents.upsert(items)
|
|
54
52
|
|
|
55
53
|
def delete(self, ids: SequenceNotStr[str]) -> int:
|
|
@@ -30,11 +30,9 @@ from cognite.client.data_classes.iam import (
|
|
|
30
30
|
Group,
|
|
31
31
|
GroupList,
|
|
32
32
|
GroupWrite,
|
|
33
|
-
GroupWriteList,
|
|
34
33
|
SecurityCategory,
|
|
35
34
|
SecurityCategoryList,
|
|
36
35
|
SecurityCategoryWrite,
|
|
37
|
-
SecurityCategoryWriteList,
|
|
38
36
|
)
|
|
39
37
|
from cognite.client.exceptions import CogniteAPIError, CogniteNotFoundError
|
|
40
38
|
from cognite.client.utils.useful_types import SequenceNotStr
|
|
@@ -65,13 +63,11 @@ class _ReplaceMethod:
|
|
|
65
63
|
id_name: str
|
|
66
64
|
|
|
67
65
|
|
|
68
|
-
class GroupCRUD(ResourceCRUD[str, GroupWrite, Group
|
|
66
|
+
class GroupCRUD(ResourceCRUD[str, GroupWrite, Group]):
|
|
69
67
|
folder_name = "auth"
|
|
70
68
|
kind = "Group"
|
|
71
69
|
resource_cls = Group
|
|
72
70
|
resource_write_cls = GroupWrite
|
|
73
|
-
list_cls = GroupList
|
|
74
|
-
list_write_cls = GroupWriteList
|
|
75
71
|
yaml_cls = GroupYAML
|
|
76
72
|
resource_scopes = frozenset(
|
|
77
73
|
{
|
|
@@ -478,13 +474,9 @@ class GroupAllScopedCRUD(GroupCRUD):
|
|
|
478
474
|
|
|
479
475
|
|
|
480
476
|
@final
|
|
481
|
-
class SecurityCategoryCRUD(
|
|
482
|
-
ResourceCRUD[str, SecurityCategoryWrite, SecurityCategory, SecurityCategoryWriteList, SecurityCategoryList]
|
|
483
|
-
):
|
|
477
|
+
class SecurityCategoryCRUD(ResourceCRUD[str, SecurityCategoryWrite, SecurityCategory]):
|
|
484
478
|
resource_cls = SecurityCategory
|
|
485
479
|
resource_write_cls = SecurityCategoryWrite
|
|
486
|
-
list_cls = SecurityCategoryList
|
|
487
|
-
list_write_cls = SecurityCategoryWriteList
|
|
488
480
|
kind = "SecurityCategory"
|
|
489
481
|
yaml_cls = SecurityCategoriesYAML
|
|
490
482
|
folder_name = "auth"
|
|
@@ -532,7 +524,7 @@ class SecurityCategoryCRUD(
|
|
|
532
524
|
SecurityCategoriesAcl.Scope.All(),
|
|
533
525
|
)
|
|
534
526
|
|
|
535
|
-
def create(self, items:
|
|
527
|
+
def create(self, items: Sequence[SecurityCategoryWrite]) -> SecurityCategoryList:
|
|
536
528
|
return self.client.iam.security_categories.create(items)
|
|
537
529
|
|
|
538
530
|
def retrieve(self, ids: SequenceNotStr[str]) -> SecurityCategoryList:
|
|
@@ -540,7 +532,7 @@ class SecurityCategoryCRUD(
|
|
|
540
532
|
categories = self.client.iam.security_categories.list(limit=-1)
|
|
541
533
|
return SecurityCategoryList([c for c in categories if c.name in names])
|
|
542
534
|
|
|
543
|
-
def update(self, items:
|
|
535
|
+
def update(self, items: Sequence[SecurityCategoryWrite]) -> SecurityCategoryList:
|
|
544
536
|
items_by_name = {item.name: item for item in items}
|
|
545
537
|
retrieved = self.retrieve(list(items_by_name.keys()))
|
|
546
538
|
retrieved_by_name = {item.name: item for item in retrieved}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import collections.abc
|
|
2
2
|
import io
|
|
3
|
-
from collections.abc import Hashable, Iterable
|
|
3
|
+
from collections.abc import Hashable, Iterable, Sequence
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import Any, final
|
|
6
6
|
|
|
@@ -10,17 +10,14 @@ from cognite.client.data_classes import (
|
|
|
10
10
|
Asset,
|
|
11
11
|
AssetList,
|
|
12
12
|
AssetWrite,
|
|
13
|
-
AssetWriteList,
|
|
14
13
|
Event,
|
|
15
14
|
EventList,
|
|
16
15
|
EventWrite,
|
|
17
|
-
EventWriteList,
|
|
18
|
-
Sequence,
|
|
19
16
|
SequenceList,
|
|
20
17
|
SequenceWrite,
|
|
21
|
-
SequenceWriteList,
|
|
22
18
|
capabilities,
|
|
23
19
|
)
|
|
20
|
+
from cognite.client.data_classes import Sequence as CDFSequence
|
|
24
21
|
from cognite.client.data_classes.capabilities import Capability
|
|
25
22
|
from cognite.client.exceptions import CogniteAPIError, CogniteNotFoundError
|
|
26
23
|
from cognite.client.utils.useful_types import SequenceNotStr
|
|
@@ -31,7 +28,6 @@ from cognite_toolkit._cdf_tk.client.data_classes.sequences import (
|
|
|
31
28
|
ToolkitSequenceRows,
|
|
32
29
|
ToolkitSequenceRowsList,
|
|
33
30
|
ToolkitSequenceRowsWrite,
|
|
34
|
-
ToolkitSequenceRowsWriteList,
|
|
35
31
|
)
|
|
36
32
|
from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceCRUD
|
|
37
33
|
from cognite_toolkit._cdf_tk.resource_classes import AssetYAML, EventYAML, SequenceRowYAML, SequenceYAML
|
|
@@ -44,13 +40,11 @@ from .data_organization import DataSetsCRUD, LabelCRUD
|
|
|
44
40
|
|
|
45
41
|
|
|
46
42
|
@final
|
|
47
|
-
class AssetCRUD(ResourceCRUD[str, AssetWrite, Asset
|
|
43
|
+
class AssetCRUD(ResourceCRUD[str, AssetWrite, Asset]):
|
|
48
44
|
folder_name = "classic"
|
|
49
45
|
filetypes = frozenset({"yaml", "yml", "csv", "parquet"})
|
|
50
46
|
resource_cls = Asset
|
|
51
47
|
resource_write_cls = AssetWrite
|
|
52
|
-
list_cls = AssetList
|
|
53
|
-
list_write_cls = AssetWriteList
|
|
54
48
|
yaml_cls = AssetYAML
|
|
55
49
|
kind = "Asset"
|
|
56
50
|
dependencies = frozenset({DataSetsCRUD, LabelCRUD})
|
|
@@ -102,13 +96,13 @@ class AssetCRUD(ResourceCRUD[str, AssetWrite, Asset, AssetWriteList, AssetList])
|
|
|
102
96
|
|
|
103
97
|
return capabilities.AssetsAcl(actions, scope)
|
|
104
98
|
|
|
105
|
-
def create(self, items:
|
|
99
|
+
def create(self, items: Sequence[AssetWrite]) -> AssetList:
|
|
106
100
|
return self.client.assets.create(items)
|
|
107
101
|
|
|
108
102
|
def retrieve(self, ids: SequenceNotStr[str]) -> AssetList:
|
|
109
103
|
return self.client.assets.retrieve_multiple(external_ids=ids, ignore_unknown_ids=True)
|
|
110
104
|
|
|
111
|
-
def update(self, items:
|
|
105
|
+
def update(self, items: Sequence[AssetWrite]) -> AssetList:
|
|
112
106
|
return self.client.assets.update(items, mode="replace")
|
|
113
107
|
|
|
114
108
|
def delete(self, ids: SequenceNotStr[str | int]) -> int:
|
|
@@ -231,12 +225,10 @@ class AssetCRUD(ResourceCRUD[str, AssetWrite, Asset, AssetWriteList, AssetList])
|
|
|
231
225
|
|
|
232
226
|
|
|
233
227
|
@final
|
|
234
|
-
class SequenceCRUD(ResourceCRUD[str, SequenceWrite,
|
|
228
|
+
class SequenceCRUD(ResourceCRUD[str, SequenceWrite, CDFSequence]):
|
|
235
229
|
folder_name = "classic"
|
|
236
|
-
resource_cls =
|
|
230
|
+
resource_cls = CDFSequence
|
|
237
231
|
resource_write_cls = SequenceWrite
|
|
238
|
-
list_cls = SequenceList
|
|
239
|
-
list_write_cls = SequenceWriteList
|
|
240
232
|
kind = "Sequence"
|
|
241
233
|
dependencies = frozenset({DataSetsCRUD, AssetCRUD})
|
|
242
234
|
yaml_cls = SequenceYAML
|
|
@@ -247,7 +239,7 @@ class SequenceCRUD(ResourceCRUD[str, SequenceWrite, Sequence, SequenceWriteList,
|
|
|
247
239
|
return "sequences"
|
|
248
240
|
|
|
249
241
|
@classmethod
|
|
250
|
-
def get_id(cls, item:
|
|
242
|
+
def get_id(cls, item: CDFSequence | SequenceWrite | dict) -> str:
|
|
251
243
|
if isinstance(item, dict):
|
|
252
244
|
return item["externalId"]
|
|
253
245
|
if not item.external_id:
|
|
@@ -255,7 +247,7 @@ class SequenceCRUD(ResourceCRUD[str, SequenceWrite, Sequence, SequenceWriteList,
|
|
|
255
247
|
return item.external_id
|
|
256
248
|
|
|
257
249
|
@classmethod
|
|
258
|
-
def get_internal_id(cls, item:
|
|
250
|
+
def get_internal_id(cls, item: CDFSequence | dict) -> int:
|
|
259
251
|
if isinstance(item, dict):
|
|
260
252
|
return item["id"]
|
|
261
253
|
if not item.id:
|
|
@@ -268,7 +260,7 @@ class SequenceCRUD(ResourceCRUD[str, SequenceWrite, Sequence, SequenceWriteList,
|
|
|
268
260
|
|
|
269
261
|
@classmethod
|
|
270
262
|
def get_required_capability(
|
|
271
|
-
cls, items:
|
|
263
|
+
cls, items: Sequence[SequenceWrite] | None, read_only: bool
|
|
272
264
|
) -> Capability | list[Capability]:
|
|
273
265
|
if not items and items is not None:
|
|
274
266
|
return []
|
|
@@ -292,7 +284,7 @@ class SequenceCRUD(ResourceCRUD[str, SequenceWrite, Sequence, SequenceWriteList,
|
|
|
292
284
|
resource["assetId"] = self.client.lookup.assets.id(asset_external_id, is_dry_run)
|
|
293
285
|
return SequenceWrite._load(resource)
|
|
294
286
|
|
|
295
|
-
def dump_resource(self, resource:
|
|
287
|
+
def dump_resource(self, resource: CDFSequence, local: dict[str, Any] | None = None) -> dict[str, Any]:
|
|
296
288
|
dumped = resource.as_write().dump()
|
|
297
289
|
local = local or {}
|
|
298
290
|
if data_set_id := dumped.pop("dataSetId", None):
|
|
@@ -320,13 +312,13 @@ class SequenceCRUD(ResourceCRUD[str, SequenceWrite, Sequence, SequenceWriteList,
|
|
|
320
312
|
return super().diff_list(local, cdf, json_path)
|
|
321
313
|
return diff_list_identifiable(local, cdf, get_identifier=lambda col: col["externalId"])
|
|
322
314
|
|
|
323
|
-
def create(self, items:
|
|
315
|
+
def create(self, items: Sequence[SequenceWrite]) -> SequenceList:
|
|
324
316
|
return self.client.sequences.create(items)
|
|
325
317
|
|
|
326
318
|
def retrieve(self, ids: SequenceNotStr[str]) -> SequenceList:
|
|
327
319
|
return self.client.sequences.retrieve_multiple(external_ids=ids, ignore_unknown_ids=True)
|
|
328
320
|
|
|
329
|
-
def update(self, items:
|
|
321
|
+
def update(self, items: Sequence[SequenceWrite]) -> SequenceList:
|
|
330
322
|
return self.client.sequences.upsert(items, mode="replace")
|
|
331
323
|
|
|
332
324
|
def delete(self, ids: SequenceNotStr[str | int]) -> int:
|
|
@@ -347,7 +339,7 @@ class SequenceCRUD(ResourceCRUD[str, SequenceWrite, Sequence, SequenceWriteList,
|
|
|
347
339
|
data_set_external_id: str | None = None,
|
|
348
340
|
space: str | None = None,
|
|
349
341
|
parent_ids: list[Hashable] | None = None,
|
|
350
|
-
) -> Iterable[
|
|
342
|
+
) -> Iterable[CDFSequence]:
|
|
351
343
|
return iter(
|
|
352
344
|
self.client.sequences(data_set_external_ids=[data_set_external_id] if data_set_external_id else None)
|
|
353
345
|
)
|
|
@@ -361,16 +353,10 @@ class SequenceCRUD(ResourceCRUD[str, SequenceWrite, Sequence, SequenceWriteList,
|
|
|
361
353
|
|
|
362
354
|
|
|
363
355
|
@final
|
|
364
|
-
class SequenceRowCRUD(
|
|
365
|
-
ResourceCRUD[
|
|
366
|
-
str, ToolkitSequenceRowsWrite, ToolkitSequenceRows, ToolkitSequenceRowsWriteList, ToolkitSequenceRowsList
|
|
367
|
-
]
|
|
368
|
-
):
|
|
356
|
+
class SequenceRowCRUD(ResourceCRUD[str, ToolkitSequenceRowsWrite, ToolkitSequenceRows]):
|
|
369
357
|
folder_name = "classic"
|
|
370
358
|
resource_cls = ToolkitSequenceRows
|
|
371
359
|
resource_write_cls = ToolkitSequenceRowsWrite
|
|
372
|
-
list_cls = ToolkitSequenceRowsList
|
|
373
|
-
list_write_cls = ToolkitSequenceRowsWriteList
|
|
374
360
|
kind = "SequenceRow"
|
|
375
361
|
dependencies = frozenset({SequenceCRUD})
|
|
376
362
|
parent_resource = frozenset({SequenceCRUD})
|
|
@@ -415,8 +401,7 @@ class SequenceRowCRUD(
|
|
|
415
401
|
# We don't have any capabilities for SequenceRows, that is already handled by the Sequence
|
|
416
402
|
return []
|
|
417
403
|
|
|
418
|
-
def create(self, items:
|
|
419
|
-
item: ToolkitSequenceRowsWrite
|
|
404
|
+
def create(self, items: Sequence[ToolkitSequenceRowsWrite]) -> Sequence[ToolkitSequenceRowsWrite]:
|
|
420
405
|
for item in items:
|
|
421
406
|
self.client.sequences.rows.insert(item.as_sequence_rows(), external_id=item.external_id)
|
|
422
407
|
return items
|
|
@@ -492,13 +477,11 @@ class SequenceRowCRUD(
|
|
|
492
477
|
|
|
493
478
|
|
|
494
479
|
@final
|
|
495
|
-
class EventCRUD(ResourceCRUD[str, EventWrite, Event
|
|
480
|
+
class EventCRUD(ResourceCRUD[str, EventWrite, Event]):
|
|
496
481
|
folder_name = "classic"
|
|
497
482
|
filetypes = frozenset({"yaml", "yml"})
|
|
498
483
|
resource_cls = Event
|
|
499
484
|
resource_write_cls = EventWrite
|
|
500
|
-
list_cls = EventList
|
|
501
|
-
list_write_cls = EventWriteList
|
|
502
485
|
yaml_cls = EventYAML
|
|
503
486
|
kind = "Event"
|
|
504
487
|
dependencies = frozenset({DataSetsCRUD, AssetCRUD})
|
|
@@ -550,13 +533,13 @@ class EventCRUD(ResourceCRUD[str, EventWrite, Event, EventWriteList, EventList])
|
|
|
550
533
|
|
|
551
534
|
return capabilities.EventsAcl(actions, scope)
|
|
552
535
|
|
|
553
|
-
def create(self, items:
|
|
536
|
+
def create(self, items: Sequence[EventWrite]) -> EventList:
|
|
554
537
|
return self.client.events.create(items)
|
|
555
538
|
|
|
556
539
|
def retrieve(self, ids: SequenceNotStr[str]) -> EventList:
|
|
557
540
|
return self.client.events.retrieve_multiple(external_ids=ids, ignore_unknown_ids=True)
|
|
558
541
|
|
|
559
|
-
def update(self, items:
|
|
542
|
+
def update(self, items: Sequence[EventWrite]) -> EventList:
|
|
560
543
|
return self.client.events.update(items, mode="replace")
|
|
561
544
|
|
|
562
545
|
def delete(self, ids: SequenceNotStr[str | int]) -> int:
|
|
@@ -11,7 +11,6 @@ from cognite_toolkit._cdf_tk.client.data_classes.search_config import (
|
|
|
11
11
|
SearchConfig,
|
|
12
12
|
SearchConfigList,
|
|
13
13
|
SearchConfigWrite,
|
|
14
|
-
SearchConfigWriteList,
|
|
15
14
|
ViewId,
|
|
16
15
|
)
|
|
17
16
|
from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceCRUD
|
|
@@ -23,13 +22,11 @@ from .datamodel import ViewCRUD
|
|
|
23
22
|
|
|
24
23
|
|
|
25
24
|
@final
|
|
26
|
-
class SearchConfigCRUD(ResourceCRUD[ViewId, SearchConfigWrite, SearchConfig
|
|
25
|
+
class SearchConfigCRUD(ResourceCRUD[ViewId, SearchConfigWrite, SearchConfig]):
|
|
27
26
|
support_drop = False
|
|
28
27
|
folder_name = "cdf_applications"
|
|
29
28
|
resource_cls = SearchConfig
|
|
30
29
|
resource_write_cls = SearchConfigWrite
|
|
31
|
-
list_cls = SearchConfigList
|
|
32
|
-
list_write_cls = SearchConfigWriteList
|
|
33
30
|
yaml_cls = SearchConfigYAML
|
|
34
31
|
dependencies = frozenset({ViewCRUD})
|
|
35
32
|
kind = "SearchConfig"
|
|
@@ -103,20 +100,17 @@ class SearchConfigCRUD(ResourceCRUD[ViewId, SearchConfigWrite, SearchConfig, Sea
|
|
|
103
100
|
return diff_list_identifiable(local, cdf, get_identifier=dm_identifier)
|
|
104
101
|
return super().diff_list(local, cdf, json_path)
|
|
105
102
|
|
|
106
|
-
def _upsert(self, items: SearchConfigWrite
|
|
103
|
+
def _upsert(self, items: Sequence[SearchConfigWrite]) -> SearchConfigList:
|
|
107
104
|
"""
|
|
108
105
|
Upsert search configurations using the upsert method
|
|
109
106
|
"""
|
|
110
|
-
if isinstance(items, SearchConfigWrite):
|
|
111
|
-
items = SearchConfigWriteList([items])
|
|
112
|
-
|
|
113
107
|
result = SearchConfigList([])
|
|
114
108
|
for item in items:
|
|
115
109
|
created = self.client.search.configurations.upsert(item)
|
|
116
110
|
result.append(created)
|
|
117
111
|
return result
|
|
118
112
|
|
|
119
|
-
def create(self, items:
|
|
113
|
+
def create(self, items: Sequence[SearchConfigWrite]) -> SearchConfigList:
|
|
120
114
|
"""
|
|
121
115
|
Create new search configurations using the upsert method
|
|
122
116
|
"""
|
|
@@ -128,7 +122,7 @@ class SearchConfigCRUD(ResourceCRUD[ViewId, SearchConfigWrite, SearchConfig, Sea
|
|
|
128
122
|
# The API does not support server-side filtering, so we filter in memory.
|
|
129
123
|
return SearchConfigList([config for config in all_configs if config.view in ids])
|
|
130
124
|
|
|
131
|
-
def update(self, items:
|
|
125
|
+
def update(self, items: Sequence[SearchConfigWrite]) -> SearchConfigList:
|
|
132
126
|
"""
|
|
133
127
|
Update search configurations using the upsert method
|
|
134
128
|
"""
|
|
@@ -21,7 +21,6 @@ from cognite.client.data_classes import (
|
|
|
21
21
|
DataSet,
|
|
22
22
|
DataSetList,
|
|
23
23
|
DataSetWrite,
|
|
24
|
-
DataSetWriteList,
|
|
25
24
|
LabelDefinition,
|
|
26
25
|
LabelDefinitionList,
|
|
27
26
|
LabelDefinitionWrite,
|
|
@@ -31,7 +30,6 @@ from cognite.client.data_classes.capabilities import (
|
|
|
31
30
|
Capability,
|
|
32
31
|
DataSetsAcl,
|
|
33
32
|
)
|
|
34
|
-
from cognite.client.data_classes.labels import LabelDefinitionWriteList
|
|
35
33
|
from cognite.client.exceptions import CogniteAPIError, CogniteDuplicatedError, CogniteNotFoundError
|
|
36
34
|
from cognite.client.utils.useful_types import SequenceNotStr
|
|
37
35
|
|
|
@@ -45,13 +43,11 @@ from .auth import GroupAllScopedCRUD
|
|
|
45
43
|
|
|
46
44
|
|
|
47
45
|
@final
|
|
48
|
-
class DataSetsCRUD(ResourceCRUD[str, DataSetWrite, DataSet
|
|
46
|
+
class DataSetsCRUD(ResourceCRUD[str, DataSetWrite, DataSet]):
|
|
49
47
|
support_drop = False
|
|
50
48
|
folder_name = "data_sets"
|
|
51
49
|
resource_cls = DataSet
|
|
52
50
|
resource_write_cls = DataSetWrite
|
|
53
|
-
list_cls = DataSetList
|
|
54
|
-
list_write_cls = DataSetWriteList
|
|
55
51
|
yaml_cls = DataSetYAML
|
|
56
52
|
kind = "DataSet"
|
|
57
53
|
dependencies = frozenset({GroupAllScopedCRUD})
|
|
@@ -142,7 +138,7 @@ class DataSetsCRUD(ResourceCRUD[str, DataSetWrite, DataSet, DataSetWriteList, Da
|
|
|
142
138
|
def retrieve(self, ids: SequenceNotStr[str]) -> DataSetList:
|
|
143
139
|
return self.client.data_sets.retrieve_multiple(external_ids=ids, ignore_unknown_ids=True)
|
|
144
140
|
|
|
145
|
-
def update(self, items:
|
|
141
|
+
def update(self, items: Sequence[DataSetWrite]) -> DataSetList:
|
|
146
142
|
return self.client.data_sets.update(items, mode="replace")
|
|
147
143
|
|
|
148
144
|
def delete(self, ids: SequenceNotStr[str]) -> int:
|
|
@@ -158,14 +154,10 @@ class DataSetsCRUD(ResourceCRUD[str, DataSetWrite, DataSet, DataSetWriteList, Da
|
|
|
158
154
|
|
|
159
155
|
|
|
160
156
|
@final
|
|
161
|
-
class LabelCRUD(
|
|
162
|
-
ResourceCRUD[str, LabelDefinitionWrite, LabelDefinition, LabelDefinitionWriteList, LabelDefinitionList]
|
|
163
|
-
):
|
|
157
|
+
class LabelCRUD(ResourceCRUD[str, LabelDefinitionWrite, LabelDefinition]):
|
|
164
158
|
folder_name = "classic"
|
|
165
159
|
resource_cls = LabelDefinition
|
|
166
160
|
resource_write_cls = LabelDefinitionWrite
|
|
167
|
-
list_cls = LabelDefinitionList
|
|
168
|
-
list_write_cls = LabelDefinitionWriteList
|
|
169
161
|
yaml_cls = LabelsYAML
|
|
170
162
|
kind = "Label"
|
|
171
163
|
dependencies = frozenset({DataSetsCRUD, GroupAllScopedCRUD})
|
|
@@ -209,7 +201,7 @@ class LabelCRUD(
|
|
|
209
201
|
|
|
210
202
|
return capabilities.LabelsAcl(actions, scope)
|
|
211
203
|
|
|
212
|
-
def create(self, items:
|
|
204
|
+
def create(self, items: Sequence[LabelDefinitionWrite]) -> LabelDefinitionList:
|
|
213
205
|
return self.client.labels.create(items)
|
|
214
206
|
|
|
215
207
|
def retrieve(self, ids: SequenceNotStr[str]) -> LabelDefinitionList:
|