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.
Files changed (48) hide show
  1. cognite_toolkit/_cdf.py +8 -0
  2. cognite_toolkit/_cdf_tk/commands/__init__.py +2 -2
  3. cognite_toolkit/_cdf_tk/commands/_purge.py +27 -28
  4. cognite_toolkit/_cdf_tk/commands/_upload.py +5 -1
  5. cognite_toolkit/_cdf_tk/commands/about.py +221 -0
  6. cognite_toolkit/_cdf_tk/commands/clean.py +11 -13
  7. cognite_toolkit/_cdf_tk/commands/deploy.py +9 -17
  8. cognite_toolkit/_cdf_tk/commands/dump_resource.py +6 -4
  9. cognite_toolkit/_cdf_tk/commands/pull.py +6 -19
  10. cognite_toolkit/_cdf_tk/cruds/_base_cruds.py +7 -25
  11. cognite_toolkit/_cdf_tk/cruds/_data_cruds.py +3 -6
  12. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/agent.py +4 -6
  13. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/auth.py +4 -12
  14. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/classic.py +19 -36
  15. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/configuration.py +4 -10
  16. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/data_organization.py +4 -12
  17. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/datamodel.py +16 -41
  18. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/extraction_pipeline.py +5 -15
  19. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/fieldops.py +8 -21
  20. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/file.py +6 -22
  21. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/function.py +5 -15
  22. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/hosted_extractors.py +12 -26
  23. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/industrial_tool.py +3 -6
  24. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/location.py +3 -14
  25. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/migration.py +4 -8
  26. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/raw.py +4 -8
  27. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/relationship.py +3 -6
  28. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/robotics.py +15 -34
  29. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/streams.py +2 -5
  30. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/three_d_model.py +3 -6
  31. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/timeseries.py +5 -13
  32. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/transformation.py +4 -19
  33. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/workflow.py +20 -37
  34. cognite_toolkit/_cdf_tk/cruds/_worker.py +13 -30
  35. cognite_toolkit/_cdf_tk/feature_flags.py +1 -1
  36. cognite_toolkit/_cdf_tk/storageio/_base.py +23 -0
  37. cognite_toolkit/_cdf_tk/storageio/_file_content.py +4 -0
  38. cognite_toolkit/_cdf_tk/utils/fileio/_readers.py +42 -1
  39. cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml +1 -1
  40. cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml +1 -1
  41. cognite_toolkit/_resources/cdf.toml +1 -1
  42. cognite_toolkit/_version.py +1 -1
  43. {cognite_toolkit-0.7.10.dist-info → cognite_toolkit-0.7.12.dist-info}/METADATA +1 -1
  44. {cognite_toolkit-0.7.10.dist-info → cognite_toolkit-0.7.12.dist-info}/RECORD +47 -47
  45. cognite_toolkit/_cdf_tk/commands/featureflag.py +0 -27
  46. {cognite_toolkit-0.7.10.dist-info → cognite_toolkit-0.7.12.dist-info}/WHEEL +0 -0
  47. {cognite_toolkit-0.7.10.dist-info → cognite_toolkit-0.7.12.dist-info}/entry_points.txt +0 -0
  48. {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: T_ResourceRequestList) -> Sized:
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]) -> T_ResourceResponseList:
191
+ def retrieve(self, ids: SequenceNotStr[T_ID]) -> Sequence[T_ResourceResponse]:
205
192
  raise NotImplementedError
206
193
 
207
- def update(self, items: T_ResourceRequestList) -> Sized:
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 loader.list_write_cls.load(built_content) if loader.get_id(m) == identifier)
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, AgentUpsertList
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, AgentUpsertList, AgentList]):
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: AgentUpsertList) -> AgentList:
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: AgentUpsertList) -> AgentList:
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, GroupWriteList, GroupList]):
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: SecurityCategoryWriteList) -> SecurityCategoryList:
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: SecurityCategoryWriteList) -> SecurityCategoryList:
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, AssetWriteList, AssetList]):
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: AssetWriteList) -> AssetList:
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: AssetWriteList) -> AssetList:
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, Sequence, SequenceWriteList, SequenceList]):
228
+ class SequenceCRUD(ResourceCRUD[str, SequenceWrite, CDFSequence]):
235
229
  folder_name = "classic"
236
- resource_cls = Sequence
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: Sequence | SequenceWrite | dict) -> str:
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: Sequence | dict) -> int:
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: collections.abc.Sequence[SequenceWrite] | None, read_only: bool
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: Sequence, local: dict[str, Any] | None = None) -> dict[str, Any]:
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: SequenceWriteList) -> SequenceList:
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: SequenceWriteList) -> SequenceList:
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[Sequence]:
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: ToolkitSequenceRowsWriteList) -> ToolkitSequenceRowsWriteList:
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, EventWriteList, EventList]):
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: EventWriteList) -> EventList:
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: EventWriteList) -> EventList:
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, SearchConfigWriteList, SearchConfigList]):
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 | SearchConfigWriteList) -> SearchConfigList:
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: SearchConfigWriteList) -> SearchConfigList:
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: SearchConfigWriteList) -> SearchConfigList:
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, DataSetWriteList, DataSetList]):
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: DataSetWriteList) -> DataSetList:
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: LabelDefinitionWriteList) -> LabelDefinitionList:
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: