cognite-toolkit 0.7.9__py3-none-any.whl → 0.7.11__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_tk/commands/_purge.py +27 -28
- cognite_toolkit/_cdf_tk/commands/_upload.py +6 -2
- 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/storageio/__init__.py +3 -3
- cognite_toolkit/_cdf_tk/storageio/_base.py +23 -0
- cognite_toolkit/_cdf_tk/storageio/_file_content.py +4 -0
- cognite_toolkit/_cdf_tk/storageio/selectors/_datapoints.py +1 -1
- 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.9.dist-info → cognite_toolkit-0.7.11.dist-info}/METADATA +1 -1
- {cognite_toolkit-0.7.9.dist-info → cognite_toolkit-0.7.11.dist-info}/RECORD +45 -45
- {cognite_toolkit-0.7.9.dist-info → cognite_toolkit-0.7.11.dist-info}/WHEEL +0 -0
- {cognite_toolkit-0.7.9.dist-info → cognite_toolkit-0.7.11.dist-info}/entry_points.txt +0 -0
- {cognite_toolkit-0.7.9.dist-info → cognite_toolkit-0.7.11.dist-info}/licenses/LICENSE +0 -0
|
@@ -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:
|
|
@@ -34,32 +34,26 @@ from cognite.client.data_classes.capabilities import (
|
|
|
34
34
|
from cognite.client.data_classes.data_modeling import (
|
|
35
35
|
Container,
|
|
36
36
|
ContainerApply,
|
|
37
|
-
ContainerApplyList,
|
|
38
37
|
ContainerList,
|
|
39
38
|
DataModel,
|
|
40
39
|
DataModelApply,
|
|
41
|
-
DataModelApplyList,
|
|
42
40
|
DataModelList,
|
|
43
41
|
DirectRelation,
|
|
44
42
|
Edge,
|
|
45
43
|
EdgeApply,
|
|
46
|
-
EdgeApplyList,
|
|
47
44
|
EdgeApplyResultList,
|
|
48
45
|
EdgeList,
|
|
49
46
|
MappedProperty,
|
|
50
47
|
Node,
|
|
51
48
|
NodeApply,
|
|
52
|
-
NodeApplyList,
|
|
53
49
|
NodeApplyResultList,
|
|
54
50
|
NodeList,
|
|
55
51
|
RequiresConstraint,
|
|
56
52
|
Space,
|
|
57
53
|
SpaceApply,
|
|
58
|
-
SpaceApplyList,
|
|
59
54
|
SpaceList,
|
|
60
55
|
View,
|
|
61
56
|
ViewApply,
|
|
62
|
-
ViewApplyList,
|
|
63
57
|
ViewList,
|
|
64
58
|
)
|
|
65
59
|
from cognite.client.data_classes.data_modeling.graphql import DMLApplyResult
|
|
@@ -83,7 +77,6 @@ from cognite_toolkit._cdf_tk.client.data_classes.graphql_data_models import (
|
|
|
83
77
|
GraphQLDataModel,
|
|
84
78
|
GraphQLDataModelList,
|
|
85
79
|
GraphQLDataModelWrite,
|
|
86
|
-
GraphQLDataModelWriteList,
|
|
87
80
|
)
|
|
88
81
|
from cognite_toolkit._cdf_tk.constants import BUILD_FOLDER_ENCODING, HAS_DATA_FILTER_LIMIT
|
|
89
82
|
from cognite_toolkit._cdf_tk.cruds._base_cruds import (
|
|
@@ -118,13 +111,11 @@ from .auth import GroupAllScopedCRUD
|
|
|
118
111
|
|
|
119
112
|
|
|
120
113
|
@final
|
|
121
|
-
class SpaceCRUD(ResourceContainerCRUD[str, SpaceApply, Space
|
|
114
|
+
class SpaceCRUD(ResourceContainerCRUD[str, SpaceApply, Space]):
|
|
122
115
|
item_name = "nodes and edges"
|
|
123
116
|
folder_name = "data_modeling"
|
|
124
117
|
resource_cls = Space
|
|
125
118
|
resource_write_cls = SpaceApply
|
|
126
|
-
list_write_cls = SpaceApplyList
|
|
127
|
-
list_cls = SpaceList
|
|
128
119
|
kind = "Space"
|
|
129
120
|
yaml_cls = SpaceYAML
|
|
130
121
|
dependencies = frozenset({GroupAllScopedCRUD})
|
|
@@ -249,13 +240,11 @@ class SpaceCRUD(ResourceContainerCRUD[str, SpaceApply, Space, SpaceApplyList, Sp
|
|
|
249
240
|
yield instances.as_ids()
|
|
250
241
|
|
|
251
242
|
|
|
252
|
-
class ContainerCRUD(ResourceContainerCRUD[ContainerId, ContainerApply, Container
|
|
243
|
+
class ContainerCRUD(ResourceContainerCRUD[ContainerId, ContainerApply, Container]):
|
|
253
244
|
item_name = "nodes and edges"
|
|
254
245
|
folder_name = "data_modeling"
|
|
255
246
|
resource_cls = Container
|
|
256
247
|
resource_write_cls = ContainerApply
|
|
257
|
-
list_cls = ContainerList
|
|
258
|
-
list_write_cls = ContainerApplyList
|
|
259
248
|
kind = "Container"
|
|
260
249
|
dependencies = frozenset({SpaceCRUD})
|
|
261
250
|
yaml_cls = ContainerYAML
|
|
@@ -514,12 +503,10 @@ class ContainerCRUD(ResourceContainerCRUD[ContainerId, ContainerApply, Container
|
|
|
514
503
|
return sanitize_filename(f"{id.space}_{id.external_id}")
|
|
515
504
|
|
|
516
505
|
|
|
517
|
-
class ViewCRUD(ResourceCRUD[ViewId, ViewApply, View
|
|
506
|
+
class ViewCRUD(ResourceCRUD[ViewId, ViewApply, View]):
|
|
518
507
|
folder_name = "data_modeling"
|
|
519
508
|
resource_cls = View
|
|
520
509
|
resource_write_cls = ViewApply
|
|
521
|
-
list_cls = ViewList
|
|
522
|
-
list_write_cls = ViewApplyList
|
|
523
510
|
kind = "View"
|
|
524
511
|
dependencies = frozenset({SpaceCRUD, ContainerCRUD})
|
|
525
512
|
yaml_cls = ViewYAML
|
|
@@ -855,12 +842,10 @@ class ViewCRUD(ResourceCRUD[ViewId, ViewApply, View, ViewApplyList, ViewList]):
|
|
|
855
842
|
|
|
856
843
|
|
|
857
844
|
@final
|
|
858
|
-
class DataModelCRUD(ResourceCRUD[DataModelId, DataModelApply, DataModel
|
|
845
|
+
class DataModelCRUD(ResourceCRUD[DataModelId, DataModelApply, DataModel]):
|
|
859
846
|
folder_name = "data_modeling"
|
|
860
847
|
resource_cls = DataModel
|
|
861
848
|
resource_write_cls = DataModelApply
|
|
862
|
-
list_cls = DataModelList
|
|
863
|
-
list_write_cls = DataModelApplyList
|
|
864
849
|
kind = "DataModel"
|
|
865
850
|
dependencies = frozenset({SpaceCRUD, ViewCRUD})
|
|
866
851
|
yaml_cls = DataModelYAML
|
|
@@ -937,13 +922,13 @@ class DataModelCRUD(ResourceCRUD[DataModelId, DataModelApply, DataModel, DataMod
|
|
|
937
922
|
return diff_list_identifiable(local, cdf, get_identifier=dm_identifier)
|
|
938
923
|
return super().diff_list(local, cdf, json_path)
|
|
939
924
|
|
|
940
|
-
def create(self, items:
|
|
925
|
+
def create(self, items: Sequence[DataModelApply]) -> DataModelList:
|
|
941
926
|
return self.client.data_modeling.data_models.apply(items)
|
|
942
927
|
|
|
943
928
|
def retrieve(self, ids: SequenceNotStr[DataModelId]) -> DataModelList:
|
|
944
929
|
return self.client.data_modeling.data_models.retrieve(cast(Sequence, ids))
|
|
945
930
|
|
|
946
|
-
def update(self, items:
|
|
931
|
+
def update(self, items: Sequence[DataModelApply]) -> DataModelList:
|
|
947
932
|
updated = self.create(items)
|
|
948
933
|
# There is a bug in the API not raising an exception if view is removed from a data model.
|
|
949
934
|
# So we check here that the update was fixed.
|
|
@@ -987,13 +972,11 @@ class DataModelCRUD(ResourceCRUD[DataModelId, DataModelApply, DataModel, DataMod
|
|
|
987
972
|
|
|
988
973
|
|
|
989
974
|
@final
|
|
990
|
-
class NodeCRUD(ResourceContainerCRUD[NodeId, NodeApply, Node
|
|
975
|
+
class NodeCRUD(ResourceContainerCRUD[NodeId, NodeApply, Node]):
|
|
991
976
|
item_name = "nodes"
|
|
992
977
|
folder_name = "data_modeling"
|
|
993
978
|
resource_cls = Node
|
|
994
979
|
resource_write_cls = NodeApply
|
|
995
|
-
list_cls = NodeList
|
|
996
|
-
list_write_cls = NodeApplyList
|
|
997
980
|
kind = "Node"
|
|
998
981
|
yaml_cls = NodeYAML
|
|
999
982
|
dependencies = frozenset({SpaceCRUD, ViewCRUD, ContainerCRUD})
|
|
@@ -1094,7 +1077,7 @@ class NodeCRUD(ResourceContainerCRUD[NodeId, NodeApply, Node, NodeApplyList, Nod
|
|
|
1094
1077
|
|
|
1095
1078
|
return dumped
|
|
1096
1079
|
|
|
1097
|
-
def create(self, items:
|
|
1080
|
+
def create(self, items: Sequence[NodeApply]) -> NodeApplyResultList:
|
|
1098
1081
|
result = self.client.data_modeling.instances.apply(
|
|
1099
1082
|
# Note replace should never be relevant as Toolkit always checks whether the node exists before applying.
|
|
1100
1083
|
nodes=items,
|
|
@@ -1106,7 +1089,7 @@ class NodeCRUD(ResourceContainerCRUD[NodeId, NodeApply, Node, NodeApplyList, Nod
|
|
|
1106
1089
|
def retrieve(self, ids: SequenceNotStr[NodeId]) -> NodeList:
|
|
1107
1090
|
return self.client.data_modeling.instances.retrieve(nodes=cast(Sequence, ids), sources=self.view_id).nodes
|
|
1108
1091
|
|
|
1109
|
-
def update(self, items:
|
|
1092
|
+
def update(self, items: Sequence[NodeApply]) -> NodeApplyResultList:
|
|
1110
1093
|
result = self.client.data_modeling.instances.apply(
|
|
1111
1094
|
nodes=items, auto_create_direct_relations=True, replace=False
|
|
1112
1095
|
)
|
|
@@ -1143,16 +1126,10 @@ class NodeCRUD(ResourceContainerCRUD[NodeId, NodeApply, Node, NodeApplyList, Nod
|
|
|
1143
1126
|
return sanitize_filename(f"{id.space}_{id.external_id}")
|
|
1144
1127
|
|
|
1145
1128
|
|
|
1146
|
-
class GraphQLCRUD(
|
|
1147
|
-
ResourceContainerCRUD[
|
|
1148
|
-
DataModelId, GraphQLDataModelWrite, GraphQLDataModel, GraphQLDataModelWriteList, GraphQLDataModelList
|
|
1149
|
-
]
|
|
1150
|
-
):
|
|
1129
|
+
class GraphQLCRUD(ResourceContainerCRUD[DataModelId, GraphQLDataModelWrite, GraphQLDataModel]):
|
|
1151
1130
|
folder_name = "data_modeling"
|
|
1152
1131
|
resource_cls = GraphQLDataModel
|
|
1153
1132
|
resource_write_cls = GraphQLDataModelWrite
|
|
1154
|
-
list_cls = GraphQLDataModelList
|
|
1155
|
-
list_write_cls = GraphQLDataModelWriteList
|
|
1156
1133
|
kind = "GraphQLSchema"
|
|
1157
1134
|
dependencies = frozenset({SpaceCRUD, ContainerCRUD})
|
|
1158
1135
|
item_name = "views"
|
|
@@ -1266,7 +1243,7 @@ class GraphQLCRUD(
|
|
|
1266
1243
|
dumped["graphqlFile"] = match.group(3)
|
|
1267
1244
|
return dumped
|
|
1268
1245
|
|
|
1269
|
-
def create(self, items:
|
|
1246
|
+
def create(self, items: Sequence[GraphQLDataModelWrite]) -> list[DMLApplyResult]:
|
|
1270
1247
|
creation_order = self._topological_sort(items)
|
|
1271
1248
|
|
|
1272
1249
|
created_list: list[DMLApplyResult] = []
|
|
@@ -1297,7 +1274,7 @@ class GraphQLCRUD(
|
|
|
1297
1274
|
result = self.client.data_modeling.data_models.retrieve(list(ids), inline_views=False)
|
|
1298
1275
|
return GraphQLDataModelList([GraphQLDataModel._load(d.dump()) for d in result])
|
|
1299
1276
|
|
|
1300
|
-
def update(self, items:
|
|
1277
|
+
def update(self, items: Sequence[GraphQLDataModelWrite]) -> list[DMLApplyResult]:
|
|
1301
1278
|
return self.create(items)
|
|
1302
1279
|
|
|
1303
1280
|
def delete(self, ids: SequenceNotStr[DataModelId]) -> int:
|
|
@@ -1322,7 +1299,7 @@ class GraphQLCRUD(
|
|
|
1322
1299
|
def drop_data(self, ids: SequenceNotStr[DataModelId]) -> int:
|
|
1323
1300
|
return self.delete(ids)
|
|
1324
1301
|
|
|
1325
|
-
def _topological_sort(self, items:
|
|
1302
|
+
def _topological_sort(self, items: Sequence[GraphQLDataModelWrite]) -> list[GraphQLDataModelWrite]:
|
|
1326
1303
|
to_sort = {item.as_id(): item for item in items}
|
|
1327
1304
|
dependencies: dict[DataModelId, set[DataModelId]] = {}
|
|
1328
1305
|
for item in items:
|
|
@@ -1345,13 +1322,11 @@ class GraphQLCRUD(
|
|
|
1345
1322
|
|
|
1346
1323
|
|
|
1347
1324
|
@final
|
|
1348
|
-
class EdgeCRUD(ResourceContainerCRUD[EdgeId, EdgeApply, Edge
|
|
1325
|
+
class EdgeCRUD(ResourceContainerCRUD[EdgeId, EdgeApply, Edge]):
|
|
1349
1326
|
item_name = "edges"
|
|
1350
1327
|
folder_name = "data_modeling"
|
|
1351
1328
|
resource_cls = Edge
|
|
1352
1329
|
resource_write_cls = EdgeApply
|
|
1353
|
-
list_cls = EdgeList
|
|
1354
|
-
list_write_cls = EdgeApplyList
|
|
1355
1330
|
kind = "Edge"
|
|
1356
1331
|
yaml_cls = EdgeYAML
|
|
1357
1332
|
dependencies = frozenset({SpaceCRUD, ViewCRUD, ContainerCRUD, NodeCRUD})
|
|
@@ -1442,7 +1417,7 @@ class EdgeCRUD(ResourceContainerCRUD[EdgeId, EdgeApply, Edge, EdgeApplyList, Edg
|
|
|
1442
1417
|
|
|
1443
1418
|
return dumped
|
|
1444
1419
|
|
|
1445
|
-
def create(self, items:
|
|
1420
|
+
def create(self, items: Sequence[EdgeApply]) -> EdgeApplyResultList:
|
|
1446
1421
|
result = self.client.data_modeling.instances.apply(
|
|
1447
1422
|
edges=items, auto_create_direct_relations=True, replace=False
|
|
1448
1423
|
)
|
|
@@ -1451,7 +1426,7 @@ class EdgeCRUD(ResourceContainerCRUD[EdgeId, EdgeApply, Edge, EdgeApplyList, Edg
|
|
|
1451
1426
|
def retrieve(self, ids: SequenceNotStr[EdgeId]) -> EdgeList:
|
|
1452
1427
|
return self.client.data_modeling.instances.retrieve(nodes=cast(Sequence, ids)).edges
|
|
1453
1428
|
|
|
1454
|
-
def update(self, items:
|
|
1429
|
+
def update(self, items: Sequence[EdgeApply]) -> EdgeApplyResultList:
|
|
1455
1430
|
result = self.client.data_modeling.instances.apply(
|
|
1456
1431
|
edges=items, auto_create_direct_relations=False, replace=True
|
|
1457
1432
|
)
|
|
@@ -30,9 +30,7 @@ from cognite.client.data_classes.capabilities import (
|
|
|
30
30
|
from cognite.client.data_classes.extractionpipelines import (
|
|
31
31
|
ExtractionPipelineConfigList,
|
|
32
32
|
ExtractionPipelineConfigWrite,
|
|
33
|
-
ExtractionPipelineConfigWriteList,
|
|
34
33
|
ExtractionPipelineWrite,
|
|
35
|
-
ExtractionPipelineWriteList,
|
|
36
34
|
)
|
|
37
35
|
from cognite.client.exceptions import CogniteAPIError, CogniteDuplicatedError, CogniteNotFoundError
|
|
38
36
|
from cognite.client.utils.useful_types import SequenceNotStr
|
|
@@ -61,14 +59,10 @@ from .raw import RawDatabaseCRUD, RawTableCRUD
|
|
|
61
59
|
|
|
62
60
|
|
|
63
61
|
@final
|
|
64
|
-
class ExtractionPipelineCRUD(
|
|
65
|
-
ResourceCRUD[str, ExtractionPipelineWrite, ExtractionPipeline, ExtractionPipelineWriteList, ExtractionPipelineList]
|
|
66
|
-
):
|
|
62
|
+
class ExtractionPipelineCRUD(ResourceCRUD[str, ExtractionPipelineWrite, ExtractionPipeline]):
|
|
67
63
|
folder_name = "extraction_pipelines"
|
|
68
64
|
resource_cls = ExtractionPipeline
|
|
69
65
|
resource_write_cls = ExtractionPipelineWrite
|
|
70
|
-
list_cls = ExtractionPipelineList
|
|
71
|
-
list_write_cls = ExtractionPipelineWriteList
|
|
72
66
|
kind = "ExtractionPipeline"
|
|
73
67
|
dependencies = frozenset({DataSetsCRUD, RawDatabaseCRUD, RawTableCRUD, GroupAllScopedCRUD})
|
|
74
68
|
yaml_cls = ExtractionPipelineYAML
|
|
@@ -176,7 +170,7 @@ class ExtractionPipelineCRUD(
|
|
|
176
170
|
def retrieve(self, ids: SequenceNotStr[str]) -> ExtractionPipelineList:
|
|
177
171
|
return self.client.extraction_pipelines.retrieve_multiple(external_ids=ids, ignore_unknown_ids=True)
|
|
178
172
|
|
|
179
|
-
def update(self, items:
|
|
173
|
+
def update(self, items: Sequence[ExtractionPipelineWrite]) -> ExtractionPipelineList:
|
|
180
174
|
# Bug in SDK overload so need the ignore.
|
|
181
175
|
return self.client.extraction_pipelines.update(items, mode="replace") # type: ignore[call-overload]
|
|
182
176
|
|
|
@@ -217,15 +211,11 @@ class ExtractionPipelineConfigCRUD(
|
|
|
217
211
|
str,
|
|
218
212
|
ExtractionPipelineConfigWrite,
|
|
219
213
|
ExtractionPipelineConfig,
|
|
220
|
-
ExtractionPipelineConfigWriteList,
|
|
221
|
-
ExtractionPipelineConfigList,
|
|
222
214
|
]
|
|
223
215
|
):
|
|
224
216
|
folder_name = "extraction_pipelines"
|
|
225
217
|
resource_cls = ExtractionPipelineConfig
|
|
226
218
|
resource_write_cls = ExtractionPipelineConfigWrite
|
|
227
|
-
list_cls = ExtractionPipelineConfigList
|
|
228
|
-
list_write_cls = ExtractionPipelineConfigWriteList
|
|
229
219
|
kind = "Config"
|
|
230
220
|
dependencies = frozenset({ExtractionPipelineCRUD})
|
|
231
221
|
_doc_url = "Extraction-Pipelines-Config/operation/createExtPipeConfig"
|
|
@@ -345,18 +335,18 @@ class ExtractionPipelineConfigCRUD(
|
|
|
345
335
|
return diff_list_force_hashable(local, cdf)
|
|
346
336
|
return super().diff_list(local, cdf, json_path)
|
|
347
337
|
|
|
348
|
-
def _upsert(self, items:
|
|
338
|
+
def _upsert(self, items: Sequence[ExtractionPipelineConfigWrite]) -> ExtractionPipelineConfigList:
|
|
349
339
|
upserted = ExtractionPipelineConfigList([])
|
|
350
340
|
for item in items:
|
|
351
341
|
created = self.client.extraction_pipelines.config.create(item)
|
|
352
342
|
upserted.append(created)
|
|
353
343
|
return upserted
|
|
354
344
|
|
|
355
|
-
def create(self, items:
|
|
345
|
+
def create(self, items: Sequence[ExtractionPipelineConfigWrite]) -> ExtractionPipelineConfigList:
|
|
356
346
|
return self._upsert(items)
|
|
357
347
|
|
|
358
348
|
# configs cannot be updated, instead new revision is created
|
|
359
|
-
def update(self, items:
|
|
349
|
+
def update(self, items: Sequence[ExtractionPipelineConfigWrite]) -> ExtractionPipelineConfigList:
|
|
360
350
|
return self._upsert(items)
|
|
361
351
|
|
|
362
352
|
def retrieve(self, ids: SequenceNotStr[str]) -> ExtractionPipelineConfigList:
|