cognite-toolkit 0.7.34__py3-none-any.whl → 0.7.36__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 (101) hide show
  1. cognite_toolkit/_cdf_tk/apps/_download_app.py +2 -2
  2. cognite_toolkit/_cdf_tk/apps/_dump_app.py +1 -1
  3. cognite_toolkit/_cdf_tk/apps/_migrate_app.py +101 -0
  4. cognite_toolkit/_cdf_tk/builders/_raw.py +1 -1
  5. cognite_toolkit/_cdf_tk/client/_toolkit_client.py +9 -9
  6. cognite_toolkit/_cdf_tk/client/api/infield.py +16 -17
  7. cognite_toolkit/_cdf_tk/client/api/legacy/__init__.py +0 -0
  8. cognite_toolkit/_cdf_tk/client/api/{canvas.py → legacy/canvas.py} +3 -4
  9. cognite_toolkit/_cdf_tk/client/api/{charts.py → legacy/charts.py} +1 -1
  10. cognite_toolkit/_cdf_tk/client/api/{extended_data_modeling.py → legacy/extended_data_modeling.py} +1 -1
  11. cognite_toolkit/_cdf_tk/client/api/{extended_files.py → legacy/extended_files.py} +2 -2
  12. cognite_toolkit/_cdf_tk/client/api/{extended_raw.py → legacy/extended_raw.py} +1 -1
  13. cognite_toolkit/_cdf_tk/client/api/{extended_timeseries.py → legacy/extended_timeseries.py} +5 -2
  14. cognite_toolkit/_cdf_tk/client/api/{location_filters.py → legacy/location_filters.py} +1 -1
  15. cognite_toolkit/_cdf_tk/client/api/legacy/robotics/__init__.py +8 -0
  16. cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/capabilities.py +1 -1
  17. cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/data_postprocessing.py +1 -1
  18. cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/frames.py +1 -1
  19. cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/locations.py +1 -1
  20. cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/maps.py +1 -1
  21. cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/robots.py +2 -2
  22. cognite_toolkit/_cdf_tk/client/api/{search_config.py → legacy/search_config.py} +5 -1
  23. cognite_toolkit/_cdf_tk/client/api/migration.py +2 -3
  24. cognite_toolkit/_cdf_tk/client/api/project.py +1 -1
  25. cognite_toolkit/_cdf_tk/client/api/search.py +2 -2
  26. cognite_toolkit/_cdf_tk/client/api/streams.py +3 -4
  27. cognite_toolkit/_cdf_tk/client/api/three_d.py +266 -13
  28. cognite_toolkit/_cdf_tk/client/data_classes/api_classes.py +13 -0
  29. cognite_toolkit/_cdf_tk/client/data_classes/base.py +6 -10
  30. cognite_toolkit/_cdf_tk/client/data_classes/instance_api.py +7 -7
  31. cognite_toolkit/_cdf_tk/client/data_classes/legacy/__init__.py +0 -0
  32. cognite_toolkit/_cdf_tk/client/data_classes/{canvas.py → legacy/canvas.py} +1 -1
  33. cognite_toolkit/_cdf_tk/client/data_classes/three_d.py +59 -0
  34. cognite_toolkit/_cdf_tk/client/testing.py +18 -16
  35. cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py +1 -1
  36. cognite_toolkit/_cdf_tk/commands/_migrate/creators.py +1 -1
  37. cognite_toolkit/_cdf_tk/commands/_migrate/data_classes.py +3 -3
  38. cognite_toolkit/_cdf_tk/commands/_migrate/data_mapper.py +60 -12
  39. cognite_toolkit/_cdf_tk/commands/_migrate/default_mappings.py +1 -1
  40. cognite_toolkit/_cdf_tk/commands/_migrate/issues.py +1 -1
  41. cognite_toolkit/_cdf_tk/commands/_migrate/migration_io.py +120 -9
  42. cognite_toolkit/_cdf_tk/commands/_profile.py +1 -1
  43. cognite_toolkit/_cdf_tk/commands/_purge.py +9 -11
  44. cognite_toolkit/_cdf_tk/commands/build_cmd.py +1 -1
  45. cognite_toolkit/_cdf_tk/commands/dump_resource.py +4 -4
  46. cognite_toolkit/_cdf_tk/commands/run.py +1 -1
  47. cognite_toolkit/_cdf_tk/cruds/_data_cruds.py +2 -2
  48. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/auth.py +1 -1
  49. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/classic.py +1 -1
  50. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/configuration.py +1 -1
  51. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/datamodel.py +1 -1
  52. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/extraction_pipeline.py +1 -1
  53. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/fieldops.py +22 -20
  54. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/file.py +1 -1
  55. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/function.py +1 -1
  56. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/industrial_tool.py +1 -1
  57. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/location.py +1 -1
  58. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/migration.py +1 -1
  59. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/raw.py +1 -1
  60. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/robotics.py +1 -1
  61. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/transformation.py +1 -1
  62. cognite_toolkit/_cdf_tk/resource_classes/search_config.py +1 -1
  63. cognite_toolkit/_cdf_tk/storageio/_applications.py +2 -2
  64. cognite_toolkit/_cdf_tk/storageio/_file_content.py +1 -2
  65. cognite_toolkit/_cdf_tk/storageio/_instances.py +1 -1
  66. cognite_toolkit/_cdf_tk/utils/cdf.py +1 -1
  67. cognite_toolkit/_cdf_tk/utils/http_client/_data_classes.py +6 -0
  68. cognite_toolkit/_cdf_tk/utils/http_client/_data_classes2.py +1 -3
  69. cognite_toolkit/_cdf_tk/utils/interactive_select.py +4 -4
  70. cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml +1 -1
  71. cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml +1 -1
  72. cognite_toolkit/_resources/cdf.toml +1 -1
  73. cognite_toolkit/_version.py +1 -1
  74. {cognite_toolkit-0.7.34.dist-info → cognite_toolkit-0.7.36.dist-info}/METADATA +1 -1
  75. {cognite_toolkit-0.7.34.dist-info → cognite_toolkit-0.7.36.dist-info}/RECORD +100 -98
  76. cognite_toolkit/_cdf_tk/client/api/robotics/__init__.py +0 -3
  77. /cognite_toolkit/_cdf_tk/client/api/{dml.py → legacy/dml.py} +0 -0
  78. /cognite_toolkit/_cdf_tk/client/api/{extended_functions.py → legacy/extended_functions.py} +0 -0
  79. /cognite_toolkit/_cdf_tk/client/api/{fixed_transformations.py → legacy/fixed_transformations.py} +0 -0
  80. /cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/api.py +0 -0
  81. /cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/utlis.py +0 -0
  82. /cognite_toolkit/_cdf_tk/client/data_classes/{apm_config_v1.py → legacy/apm_config_v1.py} +0 -0
  83. /cognite_toolkit/_cdf_tk/client/data_classes/{charts.py → legacy/charts.py} +0 -0
  84. /cognite_toolkit/_cdf_tk/client/data_classes/{extendable_cognite_file.py → legacy/extendable_cognite_file.py} +0 -0
  85. /cognite_toolkit/_cdf_tk/client/data_classes/{extended_filemetadata.py → legacy/extended_filemetadata.py} +0 -0
  86. /cognite_toolkit/_cdf_tk/client/data_classes/{extended_filemetdata.py → legacy/extended_filemetdata.py} +0 -0
  87. /cognite_toolkit/_cdf_tk/client/data_classes/{extended_timeseries.py → legacy/extended_timeseries.py} +0 -0
  88. /cognite_toolkit/_cdf_tk/client/data_classes/{functions.py → legacy/functions.py} +0 -0
  89. /cognite_toolkit/_cdf_tk/client/data_classes/{graphql_data_models.py → legacy/graphql_data_models.py} +0 -0
  90. /cognite_toolkit/_cdf_tk/client/data_classes/{instances.py → legacy/instances.py} +0 -0
  91. /cognite_toolkit/_cdf_tk/client/data_classes/{location_filters.py → legacy/location_filters.py} +0 -0
  92. /cognite_toolkit/_cdf_tk/client/data_classes/{migration.py → legacy/migration.py} +0 -0
  93. /cognite_toolkit/_cdf_tk/client/data_classes/{pending_instances_ids.py → legacy/pending_instances_ids.py} +0 -0
  94. /cognite_toolkit/_cdf_tk/client/data_classes/{project.py → legacy/project.py} +0 -0
  95. /cognite_toolkit/_cdf_tk/client/data_classes/{raw.py → legacy/raw.py} +0 -0
  96. /cognite_toolkit/_cdf_tk/client/data_classes/{robotics.py → legacy/robotics.py} +0 -0
  97. /cognite_toolkit/_cdf_tk/client/data_classes/{search_config.py → legacy/search_config.py} +0 -0
  98. /cognite_toolkit/_cdf_tk/client/data_classes/{sequences.py → legacy/sequences.py} +0 -0
  99. /cognite_toolkit/_cdf_tk/client/data_classes/{streamlit_.py → legacy/streamlit_.py} +0 -0
  100. {cognite_toolkit-0.7.34.dist-info → cognite_toolkit-0.7.36.dist-info}/WHEEL +0 -0
  101. {cognite_toolkit-0.7.34.dist-info → cognite_toolkit-0.7.36.dist-info}/entry_points.txt +0 -0
@@ -2,7 +2,7 @@ from functools import lru_cache
2
2
 
3
3
  from cognite.client.data_classes.data_modeling import ViewId
4
4
 
5
- from cognite_toolkit._cdf_tk.client.data_classes.migration import ResourceViewMappingApply
5
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.migration import ResourceViewMappingApply
6
6
 
7
7
  ASSET_ID = "cdf_asset_mapping"
8
8
  EVENT_ID = "cdf_event_mapping"
@@ -6,7 +6,7 @@ from cognite.client.utils._identifier import InstanceId
6
6
  from cognite.client.utils._text import to_camel_case
7
7
  from pydantic import BaseModel, Field, field_serializer
8
8
 
9
- from cognite_toolkit._cdf_tk.client.data_classes.migration import AssetCentricId
9
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.migration import AssetCentricId
10
10
  from cognite_toolkit._cdf_tk.utils.useful_types import JsonVal
11
11
 
12
12
 
@@ -1,12 +1,16 @@
1
1
  from collections.abc import Iterable, Iterator, Mapping, Sequence
2
- from typing import ClassVar, cast
2
+ from typing import ClassVar, Literal, cast
3
3
 
4
4
  from cognite.client.data_classes import Annotation
5
5
  from cognite.client.data_classes.data_modeling import EdgeId, InstanceApply, NodeId
6
6
 
7
7
  from cognite_toolkit._cdf_tk.client import ToolkitClient
8
- from cognite_toolkit._cdf_tk.client.data_classes.pending_instances_ids import PendingInstanceId
9
- from cognite_toolkit._cdf_tk.client.data_classes.three_d import ThreeDModelResponse
8
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.pending_instances_ids import PendingInstanceId
9
+ from cognite_toolkit._cdf_tk.client.data_classes.three_d import (
10
+ AssetMappingDMRequest,
11
+ AssetMappingResponse,
12
+ ThreeDModelResponse,
13
+ )
10
14
  from cognite_toolkit._cdf_tk.commands._migrate.data_classes import ThreeDMigrationRequest
11
15
  from cognite_toolkit._cdf_tk.constants import MISSING_EXTERNAL_ID, MISSING_INSTANCE_SPACE
12
16
  from cognite_toolkit._cdf_tk.exceptions import ToolkitNotImplementedError, ToolkitValueError
@@ -14,6 +18,7 @@ from cognite_toolkit._cdf_tk.storageio import (
14
18
  AnnotationIO,
15
19
  HierarchyIO,
16
20
  InstanceIO,
21
+ T_Selector,
17
22
  UploadableStorageIO,
18
23
  )
19
24
  from cognite_toolkit._cdf_tk.storageio._base import Page, UploadItem
@@ -366,6 +371,14 @@ class AnnotationMigrationIO(
366
371
 
367
372
 
368
373
  class ThreeDMigrationIO(UploadableStorageIO[ThreeDSelector, ThreeDModelResponse, ThreeDMigrationRequest]):
374
+ """IO class for downloading and migrating 3D models.
375
+
376
+ Args:
377
+ client: The ToolkitClient to use for CDF interactions.
378
+ data_model_type: The type of 3D data model to download. Either "classic" or "DM".
379
+
380
+ """
381
+
369
382
  KIND = "3DMigration"
370
383
  SUPPORTED_DOWNLOAD_FORMATS = frozenset({".ndjson"})
371
384
  SUPPORTED_COMPRESSIONS = frozenset({".gz"})
@@ -375,9 +388,22 @@ class ThreeDMigrationIO(UploadableStorageIO[ThreeDSelector, ThreeDModelResponse,
375
388
  UPLOAD_ENDPOINT = "/3d/migrate/models"
376
389
  REVISION_ENDPOINT = "/3d/migrate/revisions"
377
390
 
391
+ def __init__(self, client: ToolkitClient, data_model_type: Literal["classic", "data modeling"] = "classic") -> None:
392
+ super().__init__(client)
393
+ self.data_model_type = data_model_type
394
+
378
395
  def as_id(self, item: ThreeDModelResponse) -> str:
379
396
  return f"{item.name}_{item.id!s}"
380
397
 
398
+ def _is_selected(self, item: ThreeDModelResponse, included_models: set[int] | None) -> bool:
399
+ return self._is_correct_type(item) and (included_models is None or item.id in included_models)
400
+
401
+ def _is_correct_type(self, item: ThreeDModelResponse) -> bool:
402
+ if self.data_model_type == "classic":
403
+ return item.space is None
404
+ else:
405
+ return item.space is not None
406
+
381
407
  def stream_data(self, selector: ThreeDSelector, limit: int | None = None) -> Iterable[Page[ThreeDModelResponse]]:
382
408
  published: bool | None = None
383
409
  if isinstance(selector, ThreeDModelFilteredSelector):
@@ -392,12 +418,7 @@ class ThreeDMigrationIO(UploadableStorageIO[ThreeDSelector, ThreeDModelResponse,
392
418
  response = self.client.tool.three_d.models.iterate(
393
419
  published=published, include_revision_info=True, limit=request_limit, cursor=cursor
394
420
  )
395
- # Only include asset-centric 3D models
396
- items = [
397
- item
398
- for item in response.items
399
- if item.space is None and (included_models is None or item.id in included_models)
400
- ]
421
+ items = [item for item in response.items if self._is_selected(item, included_models)]
401
422
  total += len(items)
402
423
  if items:
403
424
  yield Page(worker_id="main", items=items, next_cursor=response.next_cursor)
@@ -454,3 +475,93 @@ class ThreeDMigrationIO(UploadableStorageIO[ThreeDSelector, ThreeDModelResponse,
454
475
  )
455
476
  results.extend(revision.as_item_responses(data.source_id))
456
477
  return results
478
+
479
+
480
+ class ThreeDAssetMappingMigrationIO(UploadableStorageIO[ThreeDSelector, AssetMappingResponse, AssetMappingDMRequest]):
481
+ KIND = "3DMigrationAssetMapping"
482
+ SUPPORTED_DOWNLOAD_FORMATS = frozenset({".ndjson"})
483
+ SUPPORTED_COMPRESSIONS = frozenset({".gz"})
484
+ SUPPORTED_READ_FORMATS = frozenset({".ndjson"})
485
+ DOWNLOAD_LIMIT = 1000
486
+ CHUNK_SIZE = 100
487
+ UPLOAD_ENDPOINT = "/3d/models/{modelId}/revisions/{revisionId}/mappings"
488
+
489
+ def __init__(self, client: ToolkitClient, object_3D_space: str, cad_node_space: str) -> None:
490
+ super().__init__(client)
491
+ self.object_3D_space = object_3D_space
492
+ self.cad_node_space = cad_node_space
493
+ # We can only migrate asset mappings for 3D models that are already migrated to data modeling.
494
+ self._3D_io = ThreeDMigrationIO(client, data_model_type="data modeling")
495
+
496
+ def as_id(self, item: AssetMappingResponse) -> str:
497
+ return f"AssetMapping_{item.model_id!s}_{item.revision_id!s}_{item.asset_id!s}"
498
+
499
+ def stream_data(self, selector: ThreeDSelector, limit: int | None = None) -> Iterable[Page[AssetMappingResponse]]:
500
+ total = 0
501
+ for three_d_page in self._3D_io.stream_data(selector, None):
502
+ for model in three_d_page.items:
503
+ if model.last_revision_info is None or model.last_revision_info.revision_id is None:
504
+ # No revisions, so no asset mappings to
505
+ continue
506
+ cursor: str | None = None
507
+ while True:
508
+ request_limit = (
509
+ min(self.DOWNLOAD_LIMIT, limit - total) if limit is not None else self.DOWNLOAD_LIMIT
510
+ )
511
+ if limit is not None and total >= limit:
512
+ return
513
+ response = self.client.tool.three_d.asset_mappings.iterate(
514
+ model_id=model.id,
515
+ revision_id=model.last_revision_info.revision_id,
516
+ cursor=cursor,
517
+ limit=request_limit,
518
+ )
519
+ items = response.items
520
+ total += len(items)
521
+ if items:
522
+ yield Page(worker_id="main", items=items, next_cursor=response.next_cursor)
523
+ if response.next_cursor is None:
524
+ break
525
+ cursor = response.next_cursor
526
+
527
+ def count(self, selector: ThreeDSelector) -> int | None:
528
+ # There is no efficient way to count 3D asset mappings in CDF.
529
+ return None
530
+
531
+ def upload_items(
532
+ self,
533
+ data_chunk: Sequence[UploadItem[AssetMappingDMRequest]],
534
+ http_client: HTTPClient,
535
+ selector: T_Selector | None = None,
536
+ ) -> Sequence[HTTPMessage]:
537
+ """Migrate 3D asset mappings by uploading them to the migrate/asset-mappings endpoint."""
538
+ if not data_chunk:
539
+ return []
540
+ # Assume all items in the chunk belong to the same model and revision, they should
541
+ # if the .stream_data method is used for downloading.
542
+ first = data_chunk[0]
543
+ model_id = first.item.model_id
544
+ revision_id = first.item.revision_id
545
+ endpoint = self.UPLOAD_ENDPOINT.format(modelId=model_id, revisionId=revision_id)
546
+ responses = http_client.request_with_retries(
547
+ ItemsRequest(
548
+ endpoint_url=self.client.config.create_api_url(endpoint),
549
+ method="POST",
550
+ items=list(data_chunk),
551
+ extra_body_fields={
552
+ "dmsContextualizationConfig": {
553
+ "object3DSpace": self.object_3D_space,
554
+ "cadNodeSpace": self.cad_node_space,
555
+ }
556
+ },
557
+ )
558
+ )
559
+ return responses
560
+
561
+ def json_to_resource(self, item_json: dict[str, JsonVal]) -> AssetMappingDMRequest:
562
+ raise NotImplementedError("Deserializing 3D Asset Mappings from JSON is not supported.")
563
+
564
+ def data_to_json_chunk(
565
+ self, data_chunk: Sequence[AssetMappingResponse], selector: ThreeDSelector | None = None
566
+ ) -> list[dict[str, JsonVal]]:
567
+ raise NotImplementedError("Serializing 3D Asset Mappings to JSON is not supported.")
@@ -21,7 +21,7 @@ from rich.spinner import Spinner
21
21
  from rich.table import Table
22
22
 
23
23
  from cognite_toolkit._cdf_tk.client import ToolkitClient
24
- from cognite_toolkit._cdf_tk.client.data_classes.raw import RawProfileResults, RawTable
24
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.raw import RawProfileResults, RawTable
25
25
  from cognite_toolkit._cdf_tk.constants import MAX_ROW_ITERATION_RUN_QUERY
26
26
  from cognite_toolkit._cdf_tk.exceptions import ToolkitMissingDependencyError, ToolkitThrottledError, ToolkitValueError
27
27
  from cognite_toolkit._cdf_tk.utils.aggregators import (
@@ -16,6 +16,7 @@ from rich.console import Console
16
16
  from rich.panel import Panel
17
17
 
18
18
  from cognite_toolkit._cdf_tk.client import ToolkitClient
19
+ from cognite_toolkit._cdf_tk.client.data_classes.instance_api import TypedInstanceIdentifier
19
20
  from cognite_toolkit._cdf_tk.cruds import (
20
21
  AssetCRUD,
21
22
  ContainerCRUD,
@@ -59,10 +60,10 @@ from cognite_toolkit._cdf_tk.utils.aggregators import (
59
60
  TimeSeriesAggregator,
60
61
  )
61
62
  from cognite_toolkit._cdf_tk.utils.http_client import (
62
- FailedRequestItems,
63
- FailedResponseItems,
64
63
  HTTPClient,
65
64
  ItemsRequest,
65
+ ItemsRequest2,
66
+ ItemsSuccessResponse2,
66
67
  SuccessResponseItems,
67
68
  )
68
69
  from cognite_toolkit._cdf_tk.utils.producer_worker import ProducerWorkerExecutor
@@ -714,21 +715,18 @@ class PurgeCommand(ToolkitCommand):
714
715
  results.deleted += len(items)
715
716
  return
716
717
 
717
- responses = delete_client.request_with_retries(
718
- ItemsRequest(
719
- delete_client.config.create_api_url("/models/instances/delete"),
718
+ responses = delete_client.request_items_retries(
719
+ ItemsRequest2(
720
+ endpoint_url=delete_client.config.create_api_url("/models/instances/delete"),
720
721
  method="POST",
721
- # MyPy does not understand that InstanceId.load handles dict[str, JsonVal]
722
- items=[DeleteItem(item=item, as_id_fun=InstanceId.load) for item in items], # type: ignore[arg-type]
722
+ items=[TypedInstanceIdentifier._load(item) for item in items],
723
723
  )
724
724
  )
725
725
  for response in responses:
726
- if isinstance(response, SuccessResponseItems):
726
+ if isinstance(response, ItemsSuccessResponse2):
727
727
  results.deleted += len(response.ids)
728
- elif isinstance(response, FailedResponseItems | FailedRequestItems):
729
- results.failed += len(response.ids)
730
728
  else:
731
- results.failed += len(items)
729
+ results.failed += len(response.ids)
732
730
 
733
731
  @staticmethod
734
732
  def _unlink_timeseries(
@@ -14,7 +14,7 @@ from rich.progress import track
14
14
  from cognite_toolkit._cdf_tk.builders import Builder, create_builder
15
15
  from cognite_toolkit._cdf_tk.cdf_toml import CDFToml
16
16
  from cognite_toolkit._cdf_tk.client import ToolkitClient
17
- from cognite_toolkit._cdf_tk.client.data_classes.raw import RawDatabase
17
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.raw import RawDatabase
18
18
  from cognite_toolkit._cdf_tk.commands._base import ToolkitCommand
19
19
  from cognite_toolkit._cdf_tk.constants import (
20
20
  _RUNNING_IN_BROWSER,
@@ -52,10 +52,10 @@ from rich.console import Console
52
52
  from rich.panel import Panel
53
53
 
54
54
  from cognite_toolkit._cdf_tk.client import ToolkitClient
55
- from cognite_toolkit._cdf_tk.client.data_classes.location_filters import LocationFilterList
56
- from cognite_toolkit._cdf_tk.client.data_classes.search_config import SearchConfigList
57
- from cognite_toolkit._cdf_tk.client.data_classes.search_config import ViewId as SearchConfigViewId
58
- from cognite_toolkit._cdf_tk.client.data_classes.streamlit_ import Streamlit, StreamlitList
55
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.location_filters import LocationFilterList
56
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.search_config import SearchConfigList
57
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.search_config import ViewId as SearchConfigViewId
58
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.streamlit_ import Streamlit, StreamlitList
59
59
  from cognite_toolkit._cdf_tk.cruds import (
60
60
  AgentCRUD,
61
61
  ContainerCRUD,
@@ -30,7 +30,7 @@ from rich.progress import Progress
30
30
  from rich.table import Table
31
31
 
32
32
  from cognite_toolkit._cdf_tk.client import ToolkitClient, ToolkitClientConfig
33
- from cognite_toolkit._cdf_tk.client.data_classes.functions import FunctionScheduleID
33
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.functions import FunctionScheduleID
34
34
  from cognite_toolkit._cdf_tk.constants import _RUNNING_IN_BROWSER
35
35
  from cognite_toolkit._cdf_tk.cruds import FunctionCRUD, FunctionScheduleCRUD, WorkflowVersionCRUD
36
36
  from cognite_toolkit._cdf_tk.cruds._resource_cruds.workflow import WorkflowTriggerCRUD
@@ -6,8 +6,8 @@ from typing import TYPE_CHECKING, cast, final
6
6
  import pandas as pd
7
7
  from cognite.client.data_classes import FileMetadataWrite
8
8
 
9
- from cognite_toolkit._cdf_tk.client.data_classes.extendable_cognite_file import ExtendableCogniteFileApply
10
- from cognite_toolkit._cdf_tk.client.data_classes.raw import RawTable
9
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.extendable_cognite_file import ExtendableCogniteFileApply
10
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.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,
@@ -41,7 +41,7 @@ from rich.console import Console
41
41
  from rich.markup import escape
42
42
 
43
43
  from cognite_toolkit._cdf_tk.client import ToolkitClient
44
- from cognite_toolkit._cdf_tk.client.data_classes.raw import RawDatabase, RawTable
44
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.raw import RawDatabase, RawTable
45
45
  from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceCRUD
46
46
  from cognite_toolkit._cdf_tk.exceptions import ToolkitWrongResourceError
47
47
  from cognite_toolkit._cdf_tk.resource_classes import GroupYAML, SecurityCategoriesYAML
@@ -24,7 +24,7 @@ from cognite.client.utils.useful_types import SequenceNotStr
24
24
  from rich.console import Console
25
25
 
26
26
  from cognite_toolkit._cdf_tk.client import ToolkitClient
27
- from cognite_toolkit._cdf_tk.client.data_classes.sequences import (
27
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.sequences import (
28
28
  ToolkitSequenceRows,
29
29
  ToolkitSequenceRowsList,
30
30
  ToolkitSequenceRowsWrite,
@@ -7,7 +7,7 @@ from cognite.client.utils.useful_types import SequenceNotStr
7
7
  from rich.console import Console
8
8
 
9
9
  from cognite_toolkit._cdf_tk.client import ToolkitClient
10
- from cognite_toolkit._cdf_tk.client.data_classes.search_config import (
10
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.search_config import (
11
11
  SearchConfig,
12
12
  SearchConfigList,
13
13
  SearchConfigWrite,
@@ -73,7 +73,7 @@ from rich.panel import Panel
73
73
 
74
74
  from cognite_toolkit._cdf_tk import constants
75
75
  from cognite_toolkit._cdf_tk.client import ToolkitClient
76
- from cognite_toolkit._cdf_tk.client.data_classes.graphql_data_models import (
76
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.graphql_data_models import (
77
77
  GraphQLDataModel,
78
78
  GraphQLDataModelList,
79
79
  GraphQLDataModelWrite,
@@ -35,7 +35,7 @@ from cognite.client.data_classes.extractionpipelines import (
35
35
  from cognite.client.exceptions import CogniteAPIError, CogniteDuplicatedError, CogniteNotFoundError
36
36
  from cognite.client.utils.useful_types import SequenceNotStr
37
37
 
38
- from cognite_toolkit._cdf_tk.client.data_classes.raw import RawDatabase, RawTable
38
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.raw import RawDatabase, RawTable
39
39
  from cognite_toolkit._cdf_tk.constants import BUILD_FOLDER_ENCODING
40
40
  from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceCRUD
41
41
  from cognite_toolkit._cdf_tk.exceptions import (
@@ -8,17 +8,17 @@ from cognite.client.data_classes.data_modeling import NodeApplyResultList, NodeI
8
8
  from cognite.client.exceptions import CogniteAPIError
9
9
  from cognite.client.utils.useful_types import SequenceNotStr
10
10
 
11
- from cognite_toolkit._cdf_tk.client.data_classes.apm_config_v1 import (
12
- APMConfig,
13
- APMConfigList,
14
- APMConfigWrite,
15
- )
16
11
  from cognite_toolkit._cdf_tk.client.data_classes.infield import (
17
12
  InFieldCDMLocationConfig,
18
13
  InfieldLocationConfig,
19
14
  InfieldLocationConfigList,
20
15
  )
21
- from cognite_toolkit._cdf_tk.client.data_classes.instance_api import InstanceResult, NodeIdentifier
16
+ from cognite_toolkit._cdf_tk.client.data_classes.instance_api import InstanceResult, TypedNodeIdentifier
17
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.apm_config_v1 import (
18
+ APMConfig,
19
+ APMConfigList,
20
+ APMConfigWrite,
21
+ )
22
22
  from cognite_toolkit._cdf_tk.constants import BUILD_FOLDER_ENCODING
23
23
  from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceCRUD
24
24
  from cognite_toolkit._cdf_tk.resource_classes import (
@@ -246,7 +246,7 @@ class InfieldV1CRUD(ResourceCRUD[str, APMConfigWrite, APMConfig]):
246
246
 
247
247
 
248
248
  @final
249
- class InFieldLocationConfigCRUD(ResourceCRUD[NodeIdentifier, InfieldLocationConfig, InfieldLocationConfig]):
249
+ class InFieldLocationConfigCRUD(ResourceCRUD[TypedNodeIdentifier, InfieldLocationConfig, InfieldLocationConfig]):
250
250
  folder_name = "cdf_applications"
251
251
  resource_cls = InfieldLocationConfig
252
252
  resource_write_cls = InfieldLocationConfig
@@ -260,13 +260,13 @@ class InFieldLocationConfigCRUD(ResourceCRUD[NodeIdentifier, InfieldLocationConf
260
260
  return "infield location configs"
261
261
 
262
262
  @classmethod
263
- def get_id(cls, item: InfieldLocationConfig | dict) -> NodeIdentifier:
263
+ def get_id(cls, item: InfieldLocationConfig | dict) -> TypedNodeIdentifier:
264
264
  if isinstance(item, dict):
265
- return NodeIdentifier(space=item["space"], external_id=item["externalId"])
266
- return NodeIdentifier(space=item.space, external_id=item.external_id)
265
+ return TypedNodeIdentifier(space=item["space"], external_id=item["externalId"])
266
+ return TypedNodeIdentifier(space=item.space, external_id=item.external_id)
267
267
 
268
268
  @classmethod
269
- def dump_id(cls, id: NodeIdentifier) -> dict[str, Any]:
269
+ def dump_id(cls, id: TypedNodeIdentifier) -> dict[str, Any]:
270
270
  return id.dump(include_type=False)
271
271
 
272
272
  @classmethod
@@ -308,13 +308,13 @@ class InFieldLocationConfigCRUD(ResourceCRUD[NodeIdentifier, InfieldLocationConf
308
308
  # as we only want to count the infield location configs here.
309
309
  return [res for res in created if res.as_id() in config_ids]
310
310
 
311
- def retrieve(self, ids: SequenceNotStr[NodeIdentifier]) -> InfieldLocationConfigList:
311
+ def retrieve(self, ids: SequenceNotStr[TypedNodeIdentifier]) -> InfieldLocationConfigList:
312
312
  return InfieldLocationConfigList(self.client.infield.config.retrieve(list(ids)))
313
313
 
314
314
  def update(self, items: Sequence[InfieldLocationConfig]) -> Sized:
315
315
  return self.create(items)
316
316
 
317
- def delete(self, ids: SequenceNotStr[NodeIdentifier]) -> int:
317
+ def delete(self, ids: SequenceNotStr[TypedNodeIdentifier]) -> int:
318
318
  # We must retrieve the full resource to get hte DataExplorationConfig linked resource deleted as well.
319
319
  retrieved = self.retrieve(list(ids))
320
320
  # Then, we pass the entire resource to the delete method, which will delete both the InfieldLocationConfig
@@ -345,7 +345,9 @@ class InFieldLocationConfigCRUD(ResourceCRUD[NodeIdentifier, InfieldLocationConf
345
345
 
346
346
 
347
347
  @final
348
- class InFieldCDMLocationConfigCRUD(ResourceCRUD[NodeIdentifier, InFieldCDMLocationConfig, InFieldCDMLocationConfig]):
348
+ class InFieldCDMLocationConfigCRUD(
349
+ ResourceCRUD[TypedNodeIdentifier, InFieldCDMLocationConfig, InFieldCDMLocationConfig]
350
+ ):
349
351
  folder_name = "cdf_applications"
350
352
  resource_cls = InFieldCDMLocationConfig
351
353
  resource_write_cls = InFieldCDMLocationConfig
@@ -359,13 +361,13 @@ class InFieldCDMLocationConfigCRUD(ResourceCRUD[NodeIdentifier, InFieldCDMLocati
359
361
  return "infield CDM location configs"
360
362
 
361
363
  @classmethod
362
- def get_id(cls, item: InFieldCDMLocationConfig | dict) -> NodeIdentifier:
364
+ def get_id(cls, item: InFieldCDMLocationConfig | dict) -> TypedNodeIdentifier:
363
365
  if isinstance(item, dict):
364
- return NodeIdentifier(space=item["space"], external_id=item["externalId"])
365
- return NodeIdentifier(space=item.space, external_id=item.external_id)
366
+ return TypedNodeIdentifier(space=item["space"], external_id=item["externalId"])
367
+ return TypedNodeIdentifier(space=item.space, external_id=item.external_id)
366
368
 
367
369
  @classmethod
368
- def dump_id(cls, id: NodeIdentifier) -> dict[str, Any]:
370
+ def dump_id(cls, id: TypedNodeIdentifier) -> dict[str, Any]:
369
371
  return id.dump(include_type=False)
370
372
 
371
373
  @classmethod
@@ -397,13 +399,13 @@ class InFieldCDMLocationConfigCRUD(ResourceCRUD[NodeIdentifier, InFieldCDMLocati
397
399
  def create(self, items: Sequence[InFieldCDMLocationConfig]) -> list[InstanceResult]:
398
400
  return self.client.infield.cdm_config.apply(items)
399
401
 
400
- def retrieve(self, ids: SequenceNotStr[NodeIdentifier]) -> list[InFieldCDMLocationConfig]:
402
+ def retrieve(self, ids: SequenceNotStr[TypedNodeIdentifier]) -> list[InFieldCDMLocationConfig]:
401
403
  return self.client.infield.cdm_config.retrieve(list(ids))
402
404
 
403
405
  def update(self, items: Sequence[InFieldCDMLocationConfig]) -> Sized:
404
406
  return self.create(items)
405
407
 
406
- def delete(self, ids: SequenceNotStr[NodeIdentifier]) -> int:
408
+ def delete(self, ids: SequenceNotStr[TypedNodeIdentifier]) -> int:
407
409
  # We must retrieve the full resource to delete it.
408
410
  retrieved = self.retrieve(list(ids))
409
411
  _ = self.client.infield.cdm_config.delete(retrieved)
@@ -33,7 +33,7 @@ from cognite.client.utils._time import convert_data_modelling_timestamp
33
33
  from cognite.client.utils.useful_types import SequenceNotStr
34
34
  from rich import print
35
35
 
36
- from cognite_toolkit._cdf_tk.client.data_classes.extendable_cognite_file import (
36
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.extendable_cognite_file import (
37
37
  ExtendableCogniteFile,
38
38
  ExtendableCogniteFileApply,
39
39
  ExtendableCogniteFileList,
@@ -30,7 +30,7 @@ from rich import print
30
30
  from rich.console import Console
31
31
 
32
32
  from cognite_toolkit._cdf_tk.client import ToolkitClient
33
- from cognite_toolkit._cdf_tk.client.data_classes.functions import FunctionScheduleID
33
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.functions import FunctionScheduleID
34
34
  from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceCRUD
35
35
  from cognite_toolkit._cdf_tk.exceptions import (
36
36
  ResourceCreationError,
@@ -14,7 +14,7 @@ from packaging.requirements import Requirement
14
14
  from rich.console import Console
15
15
 
16
16
  from cognite_toolkit._cdf_tk.client import ToolkitClient
17
- from cognite_toolkit._cdf_tk.client.data_classes.streamlit_ import (
17
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.streamlit_ import (
18
18
  Streamlit,
19
19
  StreamlitList,
20
20
  StreamlitWrite,
@@ -7,7 +7,7 @@ from cognite.client.data_classes.capabilities import Capability, LocationFilters
7
7
  from cognite.client.data_classes.data_modeling import DataModelId, ViewId
8
8
  from cognite.client.utils.useful_types import SequenceNotStr
9
9
 
10
- from cognite_toolkit._cdf_tk.client.data_classes.location_filters import (
10
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.location_filters import (
11
11
  LocationFilter,
12
12
  LocationFilterList,
13
13
  LocationFilterWrite,
@@ -6,7 +6,7 @@ from cognite.client.data_classes.capabilities import Capability
6
6
  from cognite.client.data_classes.data_modeling import NodeList, ViewId
7
7
  from cognite.client.utils.useful_types import SequenceNotStr
8
8
 
9
- from cognite_toolkit._cdf_tk.client.data_classes.migration import (
9
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.migration import (
10
10
  ResourceViewMapping,
11
11
  ResourceViewMappingApply,
12
12
  )
@@ -29,7 +29,7 @@ from rich import print
29
29
  from rich.console import Console
30
30
 
31
31
  from cognite_toolkit._cdf_tk.client import ToolkitClient
32
- from cognite_toolkit._cdf_tk.client.data_classes.raw import RawDatabase, RawDatabaseList, RawTable, RawTableList
32
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.raw import RawDatabase, RawDatabaseList, RawTable, RawTableList
33
33
  from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceContainerCRUD, ResourceCRUD
34
34
  from cognite_toolkit._cdf_tk.resource_classes import DatabaseYAML, TableYAML
35
35
 
@@ -9,7 +9,7 @@ from cognite.client.data_classes.capabilities import Capability
9
9
  from cognite.client.exceptions import CogniteAPIError
10
10
  from cognite.client.utils.useful_types import SequenceNotStr
11
11
 
12
- from cognite_toolkit._cdf_tk.client.data_classes.robotics import (
12
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.robotics import (
13
13
  DataPostProcessing,
14
14
  DataPostProcessingList,
15
15
  DataPostProcessingWrite,
@@ -65,7 +65,7 @@ from rich import print
65
65
  from rich.console import Console
66
66
 
67
67
  from cognite_toolkit._cdf_tk.client import ToolkitClient
68
- from cognite_toolkit._cdf_tk.client.data_classes.raw import RawDatabase, RawTable
68
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.raw import RawDatabase, RawTable
69
69
  from cognite_toolkit._cdf_tk.constants import BUILD_FOLDER_ENCODING
70
70
  from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceCRUD
71
71
  from cognite_toolkit._cdf_tk.exceptions import (
@@ -2,7 +2,7 @@ from typing import ClassVar
2
2
 
3
3
  from pydantic import Field
4
4
 
5
- from cognite_toolkit._cdf_tk.client.data_classes.search_config import SearchConfigWrite
5
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.search_config import SearchConfigWrite
6
6
 
7
7
  from .base import BaseModelResource, ToolkitResource
8
8
 
@@ -2,11 +2,11 @@ from collections.abc import Iterable, Sequence
2
2
  from typing import Any
3
3
 
4
4
  from cognite_toolkit._cdf_tk.client import ToolkitClient
5
- from cognite_toolkit._cdf_tk.client.data_classes.canvas import (
5
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.canvas import (
6
6
  IndustrialCanvas,
7
7
  IndustrialCanvasApply,
8
8
  )
9
- from cognite_toolkit._cdf_tk.client.data_classes.charts import Chart, ChartList, ChartWrite
9
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.charts import Chart, ChartList, ChartWrite
10
10
  from cognite_toolkit._cdf_tk.exceptions import ToolkitNotImplementedError
11
11
  from cognite_toolkit._cdf_tk.tk_warnings import HighSeverityWarning, MediumSeverityWarning
12
12
  from cognite_toolkit._cdf_tk.utils.collection import chunker_sequence
@@ -145,8 +145,7 @@ class FileContentIO(UploadableStorageIO[FileContentSelector, MetadataWithFilePat
145
145
  identifiers_map: dict[FileIdentifier, FileMetadata] = {}
146
146
  for item in metadata:
147
147
  if item.id is not None:
148
- # MyPy does cooperate well with Pydantic.
149
- identifiers_map[FileInternalID(internal_id=item.id)] = item # type: ignore[call-arg]
148
+ identifiers_map[FileInternalID(internal_id=item.id)] = item
150
149
  if item.external_id is not None:
151
150
  identifiers_map[FileExternalID(external_id=item.external_id)] = item
152
151
  if item.instance_id is not None:
@@ -17,7 +17,7 @@ from cognite.client.utils._identifier import InstanceId
17
17
 
18
18
  from cognite_toolkit._cdf_tk import constants
19
19
  from cognite_toolkit._cdf_tk.client import ToolkitClient
20
- from cognite_toolkit._cdf_tk.client.data_classes.instances import InstanceList
20
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.instances import InstanceList
21
21
  from cognite_toolkit._cdf_tk.cruds import ContainerCRUD, SpaceCRUD, ViewCRUD
22
22
  from cognite_toolkit._cdf_tk.utils import sanitize_filename
23
23
  from cognite_toolkit._cdf_tk.utils.cdf import iterate_instances
@@ -21,7 +21,7 @@ from filelock import BaseFileLock, FileLock, Timeout
21
21
  from rich.console import Console
22
22
 
23
23
  from cognite_toolkit._cdf_tk.client import ToolkitClient, ToolkitClientConfig
24
- from cognite_toolkit._cdf_tk.client.data_classes.raw import RawTable
24
+ from cognite_toolkit._cdf_tk.client.data_classes.legacy.raw import RawTable
25
25
  from cognite_toolkit._cdf_tk.constants import ENV_VAR_PATTERN, MAX_ROW_ITERATION_RUN_QUERY, MAX_RUN_QUERY_FREQUENCY_MIN
26
26
  from cognite_toolkit._cdf_tk.exceptions import (
27
27
  ToolkitError,
@@ -76,6 +76,9 @@ class ErrorDetails:
76
76
  class FailedRequestMessage(HTTPMessage):
77
77
  error: str
78
78
 
79
+ def __str__(self) -> str:
80
+ return self.error
81
+
79
82
 
80
83
  @dataclass
81
84
  class ResponseMessage(HTTPMessage):
@@ -135,6 +138,9 @@ class FailedResponse(ResponseMessage):
135
138
  output["error"] = self.error.dump()
136
139
  return output
137
140
 
141
+ def __str__(self) -> str:
142
+ return f"{self.error.code} | {self.error.message}"
143
+
138
144
 
139
145
  @dataclass
140
146
  class SimpleRequest(RequestMessage):
@@ -26,9 +26,7 @@ class HTTPResult2(BaseModel):
26
26
  if isinstance(self, SuccessResponse2):
27
27
  return self
28
28
  elif isinstance(self, FailedResponse2):
29
- raise ToolkitAPIError(
30
- f"Request failed with status code {self.status_code}: {self.error.code} - {self.error.message}"
31
- )
29
+ raise ToolkitAPIError(f"Request failed with status code {self.status_code}: {self.error.message}")
32
30
  elif isinstance(self, FailedRequest2):
33
31
  raise ToolkitAPIError(f"Request failed with error: {self.error}")
34
32
  else: