cognite-toolkit 0.7.46__py3-none-any.whl → 0.7.48__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 (77) hide show
  1. cognite_toolkit/_cdf_tk/apps/_migrate_app.py +6 -6
  2. cognite_toolkit/_cdf_tk/client/_toolkit_client.py +6 -4
  3. cognite_toolkit/_cdf_tk/client/api/agents.py +107 -0
  4. cognite_toolkit/_cdf_tk/client/api/annotations.py +129 -0
  5. cognite_toolkit/_cdf_tk/client/api/containers.py +132 -0
  6. cognite_toolkit/_cdf_tk/client/api/data_models.py +137 -0
  7. cognite_toolkit/_cdf_tk/client/api/function_schedules.py +115 -0
  8. cognite_toolkit/_cdf_tk/client/api/functions.py +113 -0
  9. cognite_toolkit/_cdf_tk/client/api/graphql_data_models.py +167 -0
  10. cognite_toolkit/_cdf_tk/client/api/groups.py +121 -0
  11. cognite_toolkit/_cdf_tk/client/api/instances.py +139 -0
  12. cognite_toolkit/_cdf_tk/client/api/location_filters.py +177 -0
  13. cognite_toolkit/_cdf_tk/client/api/raw.py +2 -2
  14. cognite_toolkit/_cdf_tk/client/api/relationships.py +133 -0
  15. cognite_toolkit/_cdf_tk/client/api/robotics.py +19 -0
  16. cognite_toolkit/_cdf_tk/client/api/robotics_capabilities.py +127 -0
  17. cognite_toolkit/_cdf_tk/client/api/robotics_data_postprocessing.py +138 -0
  18. cognite_toolkit/_cdf_tk/client/api/robotics_frames.py +122 -0
  19. cognite_toolkit/_cdf_tk/client/api/robotics_locations.py +127 -0
  20. cognite_toolkit/_cdf_tk/client/api/robotics_maps.py +122 -0
  21. cognite_toolkit/_cdf_tk/client/api/robotics_robots.py +122 -0
  22. cognite_toolkit/_cdf_tk/client/api/search_config.py +101 -0
  23. cognite_toolkit/_cdf_tk/client/api/spaces.py +117 -0
  24. cognite_toolkit/_cdf_tk/client/api/streams.py +63 -55
  25. cognite_toolkit/_cdf_tk/client/api/three_d.py +293 -277
  26. cognite_toolkit/_cdf_tk/client/api/views.py +139 -0
  27. cognite_toolkit/_cdf_tk/client/cdf_client/api.py +42 -7
  28. cognite_toolkit/_cdf_tk/client/cdf_client/responses.py +11 -0
  29. cognite_toolkit/_cdf_tk/client/http_client/_client.py +5 -2
  30. cognite_toolkit/_cdf_tk/client/http_client/_data_classes.py +10 -0
  31. cognite_toolkit/_cdf_tk/client/http_client/_data_classes2.py +4 -3
  32. cognite_toolkit/_cdf_tk/client/request_classes/filters.py +75 -0
  33. cognite_toolkit/_cdf_tk/client/request_classes/graphql.py +28 -0
  34. cognite_toolkit/_cdf_tk/client/resource_classes/agent.py +8 -2
  35. cognite_toolkit/_cdf_tk/client/resource_classes/apm_config.py +128 -0
  36. cognite_toolkit/_cdf_tk/client/resource_classes/cognite_file.py +53 -0
  37. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/__init__.py +4 -0
  38. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_instance.py +22 -11
  39. cognite_toolkit/_cdf_tk/client/resource_classes/function_schedule.py +8 -4
  40. cognite_toolkit/_cdf_tk/client/resource_classes/group/group.py +9 -5
  41. cognite_toolkit/_cdf_tk/client/resource_classes/identifiers.py +7 -0
  42. cognite_toolkit/_cdf_tk/client/resource_classes/location_filter.py +9 -2
  43. cognite_toolkit/_cdf_tk/client/resource_classes/relationship.py +9 -3
  44. cognite_toolkit/_cdf_tk/client/resource_classes/resource_view_mapping.py +38 -0
  45. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_map.py +6 -1
  46. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_robot.py +10 -5
  47. cognite_toolkit/_cdf_tk/client/resource_classes/streams.py +1 -20
  48. cognite_toolkit/_cdf_tk/client/resource_classes/three_d.py +30 -9
  49. cognite_toolkit/_cdf_tk/client/testing.py +2 -2
  50. cognite_toolkit/_cdf_tk/commands/_migrate/data_mapper.py +5 -5
  51. cognite_toolkit/_cdf_tk/commands/_migrate/migration_io.py +11 -7
  52. cognite_toolkit/_cdf_tk/commands/build_v2/_module_parser.py +138 -0
  53. cognite_toolkit/_cdf_tk/commands/build_v2/_modules_parser.py +163 -0
  54. cognite_toolkit/_cdf_tk/commands/build_v2/build_cmd.py +83 -96
  55. cognite_toolkit/_cdf_tk/commands/build_v2/{build_input.py → build_parameters.py} +8 -22
  56. cognite_toolkit/_cdf_tk/commands/build_v2/data_classes/_modules.py +27 -0
  57. cognite_toolkit/_cdf_tk/commands/build_v2/data_classes/_resource.py +22 -0
  58. cognite_toolkit/_cdf_tk/cruds/__init__.py +11 -5
  59. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/streams.py +14 -30
  60. cognite_toolkit/_cdf_tk/data_classes/__init__.py +3 -0
  61. cognite_toolkit/_cdf_tk/data_classes/_issues.py +36 -0
  62. cognite_toolkit/_cdf_tk/data_classes/_module_directories.py +2 -1
  63. cognite_toolkit/_cdf_tk/storageio/_base.py +2 -0
  64. cognite_toolkit/_cdf_tk/storageio/logger.py +163 -0
  65. cognite_toolkit/_cdf_tk/utils/__init__.py +8 -1
  66. cognite_toolkit/_cdf_tk/utils/interactive_select.py +3 -1
  67. cognite_toolkit/_cdf_tk/utils/modules.py +7 -0
  68. cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml +1 -1
  69. cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml +1 -1
  70. cognite_toolkit/_resources/cdf.toml +1 -1
  71. cognite_toolkit/_version.py +1 -1
  72. {cognite_toolkit-0.7.46.dist-info → cognite_toolkit-0.7.48.dist-info}/METADATA +1 -1
  73. {cognite_toolkit-0.7.46.dist-info → cognite_toolkit-0.7.48.dist-info}/RECORD +76 -46
  74. cognite_toolkit/_cdf_tk/commands/build_v2/build_issues.py +0 -27
  75. /cognite_toolkit/_cdf_tk/client/resource_classes/{search_config_resource.py → search_config.py} +0 -0
  76. {cognite_toolkit-0.7.46.dist-info → cognite_toolkit-0.7.48.dist-info}/WHEEL +0 -0
  77. {cognite_toolkit-0.7.46.dist-info → cognite_toolkit-0.7.48.dist-info}/entry_points.txt +0 -0
@@ -868,13 +868,13 @@ class MigrateApp(typer.Typer):
868
868
  "performed to select the Canvas to migrate."
869
869
  ),
870
870
  ] = None,
871
- skip_on_missing_ref: Annotated[
871
+ allow_missing_ref: Annotated[
872
872
  bool,
873
873
  typer.Option(
874
- "--skip-on-missing-ref",
875
- "-s",
876
- help="If set, the migration will skip Canvases that reference resources that have not been migrated to data modeling. "
877
- "If not set, the migration will continue but the result will exclude the missing references.",
874
+ "--allow-missing-ref",
875
+ "-a",
876
+ help="If set, the command will migrate Canvases that reference resources that have not been migrated to data modeling. "
877
+ "If not set, the migration will fail if any referenced resource are missing.",
878
878
  ),
879
879
  ] = False,
880
880
  log_dir: Annotated[
@@ -926,7 +926,7 @@ class MigrateApp(typer.Typer):
926
926
  lambda: cmd.migrate(
927
927
  selected=selector,
928
928
  data=CanvasIO(client, exclude_existing_version=True),
929
- mapper=CanvasMapper(client, dry_run=dry_run, skip_on_missing_ref=skip_on_missing_ref),
929
+ mapper=CanvasMapper(client, dry_run=dry_run, skip_on_missing_ref=not allow_missing_ref),
930
930
  log_dir=log_dir,
931
931
  dry_run=dry_run,
932
932
  verbose=verbose,
@@ -11,7 +11,7 @@ from cognite_toolkit._cdf_tk.client.api.legacy.extended_files import ExtendedFil
11
11
  from cognite_toolkit._cdf_tk.client.api.legacy.extended_functions import ExtendedFunctionsAPI
12
12
  from cognite_toolkit._cdf_tk.client.api.legacy.extended_raw import ExtendedRawAPI
13
13
  from cognite_toolkit._cdf_tk.client.api.legacy.extended_timeseries import ExtendedTimeSeriesAPI
14
- from cognite_toolkit._cdf_tk.client.api.legacy.robotics import RoboticsAPI
14
+ from cognite_toolkit._cdf_tk.client.api.legacy.robotics import RoboticsAPI as RoboticsLegacyAPI
15
15
  from cognite_toolkit._cdf_tk.client.http_client import HTTPClient
16
16
 
17
17
  from .api.assets import AssetsAPI
@@ -26,6 +26,7 @@ from .api.lookup import LookUpGroup
26
26
  from .api.migration import MigrationAPI
27
27
  from .api.project import ProjectAPI
28
28
  from .api.raw import RawAPI
29
+ from .api.robotics import RoboticsAPI
29
30
  from .api.search import SearchAPI
30
31
  from .api.security_categories import SecurityCategoriesAPI
31
32
  from .api.sequences import SequencesAPI
@@ -53,10 +54,11 @@ class ToolAPI:
53
54
  self.labels = LabelsAPI(http_client)
54
55
  self.filemetadata = FileMetadataAPI(http_client)
55
56
  self.raw = RawAPI(http_client)
57
+ self.robotics = RoboticsAPI(http_client)
56
58
  self.security_categories = SecurityCategoriesAPI(http_client)
57
59
  self.sequences = SequencesAPI(http_client)
58
60
  self.simulators = SimulatorsAPI(http_client)
59
- self.three_d = ThreeDAPI(http_client, console)
61
+ self.three_d = ThreeDAPI(http_client)
60
62
  self.timeseries = TimeSeriesAPI(http_client)
61
63
  self.transformations = TransformationsAPI(http_client)
62
64
  self.workflows = WorkflowsAPI(http_client)
@@ -76,7 +78,7 @@ class ToolkitClient(CogniteClient):
76
78
  self.console = console or Console()
77
79
  self.tool = ToolAPI(http_client, self.console)
78
80
  self.search = SearchAPI(self._config, self._API_VERSION, self)
79
- self.robotics = RoboticsAPI(self._config, self._API_VERSION, self)
81
+ self.robotics = RoboticsLegacyAPI(self._config, self._API_VERSION, self)
80
82
  self.dml = DMLAPI(self._config, self._API_VERSION, self)
81
83
  self.verify = VerifyAPI(self._config, self._API_VERSION, self)
82
84
  self.lookup = LookUpGroup(self._config, self._API_VERSION, self, self.console)
@@ -94,7 +96,7 @@ class ToolkitClient(CogniteClient):
94
96
  self.charts = ChartsAPI(self._config, self._API_VERSION, self)
95
97
  self.project = ProjectAPI(config=toolkit_config, cognite_client=self)
96
98
  self.infield = InfieldAPI(http_client, self.console)
97
- self.streams = StreamsAPI(http_client, self.console)
99
+ self.streams = StreamsAPI(http_client)
98
100
 
99
101
  @property
100
102
  def config(self) -> ToolkitClientConfig:
@@ -0,0 +1,107 @@
1
+ """Agents API for managing CDF AI agents.
2
+
3
+ Based on the API specification at:
4
+ https://api-docs.cognite.com/20230101-alpha/tag/Agents/operation/main_ai_agents_post
5
+
6
+ Note: This is an alpha API and may change in future releases.
7
+ """
8
+
9
+ from collections.abc import Iterable, Sequence
10
+
11
+ from cognite_toolkit._cdf_tk.client.cdf_client import CDFResourceAPI, Endpoint, PagedResponse
12
+ from cognite_toolkit._cdf_tk.client.http_client import HTTPClient, ItemsSuccessResponse2, SuccessResponse2
13
+ from cognite_toolkit._cdf_tk.client.resource_classes.agent import AgentRequest, AgentResponse
14
+ from cognite_toolkit._cdf_tk.client.resource_classes.identifiers import ExternalId
15
+
16
+
17
+ class AgentsAPI(CDFResourceAPI[ExternalId, AgentRequest, AgentResponse]):
18
+ """API for managing CDF AI agents.
19
+
20
+ Note: This is an alpha API and may change in future releases.
21
+ """
22
+
23
+ def __init__(self, http_client: HTTPClient) -> None:
24
+ super().__init__(
25
+ http_client=http_client,
26
+ method_endpoint_map={
27
+ "upsert": Endpoint(method="POST", path="/ai/agents", item_limit=1),
28
+ "retrieve": Endpoint(method="POST", path="/ai/agents/byids", item_limit=100),
29
+ "delete": Endpoint(method="POST", path="/ai/agents/delete", item_limit=1),
30
+ "list": Endpoint(method="GET", path="/ai/agents", item_limit=1000),
31
+ },
32
+ )
33
+
34
+ def _validate_page_response(
35
+ self, response: SuccessResponse2 | ItemsSuccessResponse2
36
+ ) -> PagedResponse[AgentResponse]:
37
+ return PagedResponse[AgentResponse].model_validate_json(response.body)
38
+
39
+ def create(self, items: Sequence[AgentRequest]) -> list[AgentResponse]:
40
+ """Apply (create or update) agents in CDF.
41
+
42
+ Args:
43
+ items: List of AgentRequest objects to apply.
44
+
45
+ Returns:
46
+ List of applied AgentResponse objects.
47
+ """
48
+ return self._request_item_response(items, "upsert")
49
+
50
+ def update(self, items: Sequence[AgentRequest]) -> list[AgentResponse]:
51
+ """Update agents in CDF.
52
+
53
+ Args:
54
+ items: List of AgentRequest objects to update.
55
+ Returns:
56
+ List of updated AgentResponse objects.
57
+ """
58
+ # Implemented as an alias to create (upsert) to have a standardized interface.
59
+ return self._request_item_response(items, "upsert")
60
+
61
+ def retrieve(self, items: Sequence[ExternalId], ignore_unknown_ids: bool = False) -> list[AgentResponse]:
62
+ """Retrieve agents from CDF by external ID.
63
+
64
+ Args:
65
+ items: List of ExternalId objects to retrieve.
66
+ ignore_unknown_ids: Whether to ignore unknown IDs.
67
+
68
+ Returns:
69
+ List of retrieved AgentResponse objects.
70
+ """
71
+ return self._request_item_response(
72
+ items, method="retrieve", extra_body={"ignoreUnknownIds": ignore_unknown_ids}
73
+ )
74
+
75
+ def delete(self, items: Sequence[ExternalId], ignore_unknown_ids: bool = False) -> None:
76
+ """Delete agents from CDF.
77
+
78
+ Args:
79
+ items: List of ExternalId objects to delete.
80
+ ignore_unknown_ids: Whether to ignore unknown IDs.
81
+ """
82
+ self._request_no_response(items, "delete", extra_body={"ignoreUnknownIds": ignore_unknown_ids})
83
+
84
+ def iterate(
85
+ self,
86
+ limit: int | None = None,
87
+ ) -> Iterable[list[AgentResponse]]:
88
+ """Iterate over all agents in CDF.
89
+
90
+ Args:
91
+ limit: Maximum total number of agents to return.
92
+
93
+ Returns:
94
+ Iterable of lists of AgentResponse objects.
95
+ """
96
+ return self._iterate(limit=limit)
97
+
98
+ def list(self, limit: int | None = None) -> list[AgentResponse]:
99
+ """List all agents in CDF.
100
+
101
+ Args:
102
+ limit: Maximum total number of agents to return.
103
+
104
+ Returns:
105
+ List of AgentResponse objects.
106
+ """
107
+ return self._list(limit=limit)
@@ -0,0 +1,129 @@
1
+ """Annotations API for managing CDF annotations.
2
+
3
+ Based on the API specification at:
4
+ https://api-docs.cognite.com/20230101/tag/Annotations/operation/annotationsCreate
5
+ """
6
+
7
+ from collections.abc import Iterable, Sequence
8
+ from typing import Literal
9
+
10
+ from cognite_toolkit._cdf_tk.client.cdf_client import CDFResourceAPI, Endpoint, PagedResponse
11
+ from cognite_toolkit._cdf_tk.client.http_client import HTTPClient, ItemsSuccessResponse2, SuccessResponse2
12
+ from cognite_toolkit._cdf_tk.client.request_classes.filters import AnnotationFilter
13
+ from cognite_toolkit._cdf_tk.client.resource_classes.annotation import AnnotationRequest, AnnotationResponse
14
+ from cognite_toolkit._cdf_tk.client.resource_classes.identifiers import InternalId
15
+
16
+
17
+ class AnnotationsAPI(CDFResourceAPI[InternalId, AnnotationRequest, AnnotationResponse]):
18
+ """API for managing CDF annotations."""
19
+
20
+ def __init__(self, http_client: HTTPClient) -> None:
21
+ super().__init__(
22
+ http_client=http_client,
23
+ method_endpoint_map={
24
+ "create": Endpoint(method="POST", path="/annotations", item_limit=1000),
25
+ "retrieve": Endpoint(method="POST", path="/annotations/byids", item_limit=1000),
26
+ "update": Endpoint(method="POST", path="/annotations/update", item_limit=1000),
27
+ "delete": Endpoint(method="POST", path="/annotations/delete", item_limit=1000),
28
+ "list": Endpoint(method="POST", path="/annotations/list", item_limit=1000),
29
+ },
30
+ )
31
+
32
+ def _validate_page_response(
33
+ self, response: SuccessResponse2 | ItemsSuccessResponse2
34
+ ) -> PagedResponse[AnnotationResponse]:
35
+ return PagedResponse[AnnotationResponse].model_validate_json(response.body)
36
+
37
+ def create(self, items: Sequence[AnnotationRequest]) -> list[AnnotationResponse]:
38
+ """Create annotations in CDF.
39
+
40
+ Args:
41
+ items: List of AnnotationRequest objects to create.
42
+
43
+ Returns:
44
+ List of created AnnotationResponse objects.
45
+ """
46
+ return self._request_item_response(items, "create")
47
+
48
+ def retrieve(self, items: Sequence[InternalId]) -> list[AnnotationResponse]:
49
+ """Retrieve annotations from CDF by ID.
50
+
51
+ Args:
52
+ items: List of InternalId objects to retrieve.
53
+
54
+ Returns:
55
+ List of retrieved AnnotationResponse objects.
56
+ """
57
+ return self._request_item_response(items, method="retrieve")
58
+
59
+ def update(
60
+ self, items: Sequence[AnnotationRequest], mode: Literal["patch", "replace"] = "replace"
61
+ ) -> list[AnnotationResponse]:
62
+ """Update annotations in CDF.
63
+
64
+ Args:
65
+ items: List of AnnotationRequest objects to update.
66
+ mode: Update mode, either "patch" or "replace".
67
+
68
+ Returns:
69
+ List of updated AnnotationResponse objects.
70
+ """
71
+ return self._update(items, mode=mode)
72
+
73
+ def delete(self, items: Sequence[InternalId]) -> None:
74
+ """Delete annotations from CDF.
75
+
76
+ Args:
77
+ items: List of InternalId objects to delete.
78
+ """
79
+ self._request_no_response(items, "delete")
80
+
81
+ def paginate(
82
+ self,
83
+ filter: AnnotationFilter,
84
+ limit: int = 100,
85
+ cursor: str | None = None,
86
+ ) -> PagedResponse[AnnotationResponse]:
87
+ """Get a page of annotations from CDF.
88
+
89
+ Args:
90
+ filter: AnnotationFilter to filter annotations.
91
+ limit: Maximum number of annotations to return.
92
+ cursor: Cursor for pagination.
93
+
94
+ Returns:
95
+ PagedResponse of AnnotationResponse objects.
96
+ """
97
+ return self._paginate(cursor=cursor, limit=limit, body=filter.dump())
98
+
99
+ def iterate(
100
+ self,
101
+ filter: AnnotationFilter,
102
+ limit: int | None = None,
103
+ ) -> Iterable[list[AnnotationResponse]]:
104
+ """Iterate over all annotations in CDF.
105
+
106
+ Args:
107
+ filter: AnnotationFilter to filter annotations.
108
+ limit: Maximum total number of annotations to return.
109
+
110
+ Returns:
111
+ Iterable of lists of AnnotationResponse objects.
112
+ """
113
+ return self._iterate(limit=limit, body=filter.dump())
114
+
115
+ def list(
116
+ self,
117
+ filter: AnnotationFilter,
118
+ limit: int | None = None,
119
+ ) -> list[AnnotationResponse]:
120
+ """List all annotations in CDF.
121
+
122
+ Args:
123
+ filter: AnnotationFilter to filter annotations.
124
+ limit: Maximum total number of annotations to return.
125
+
126
+ Returns:
127
+ List of AnnotationResponse objects.
128
+ """
129
+ return self._list(limit=limit, body=filter.dump())
@@ -0,0 +1,132 @@
1
+ """Containers API for managing CDF data modeling containers.
2
+
3
+ Based on the API specification at:
4
+ https://api-docs.cognite.com/20230101/tag/Containers/operation/ApplyContainers
5
+ """
6
+
7
+ from collections.abc import Iterable, Sequence
8
+
9
+ from cognite_toolkit._cdf_tk.client.cdf_client import CDFResourceAPI, Endpoint, PagedResponse
10
+ from cognite_toolkit._cdf_tk.client.http_client import HTTPClient, ItemsSuccessResponse2, SuccessResponse2
11
+ from cognite_toolkit._cdf_tk.client.request_classes.filters import ContainerFilter
12
+ from cognite_toolkit._cdf_tk.client.resource_classes.data_modeling import (
13
+ ContainerReference,
14
+ ContainerRequest,
15
+ ContainerResponse,
16
+ )
17
+
18
+
19
+ class ContainersAPI(CDFResourceAPI[ContainerReference, ContainerRequest, ContainerResponse]):
20
+ """API for managing CDF data modeling containers.
21
+
22
+ Containers use an apply/upsert pattern for create and update operations.
23
+ """
24
+
25
+ def __init__(self, http_client: HTTPClient) -> None:
26
+ super().__init__(
27
+ http_client=http_client,
28
+ method_endpoint_map={
29
+ "upsert": Endpoint(method="POST", path="/models/containers", item_limit=100),
30
+ "retrieve": Endpoint(method="POST", path="/models/containers/byids", item_limit=100),
31
+ "delete": Endpoint(method="POST", path="/models/containers/delete", item_limit=100),
32
+ "list": Endpoint(method="GET", path="/models/containers", item_limit=1000),
33
+ },
34
+ )
35
+
36
+ def _validate_page_response(
37
+ self, response: SuccessResponse2 | ItemsSuccessResponse2
38
+ ) -> PagedResponse[ContainerResponse]:
39
+ return PagedResponse[ContainerResponse].model_validate_json(response.body)
40
+
41
+ def create(self, items: Sequence[ContainerRequest]) -> list[ContainerResponse]:
42
+ """Create (create or update) containers in CDF.
43
+
44
+ Args:
45
+ items: List of ContainerRequest objects to apply.
46
+
47
+ Returns:
48
+ List of applied ContainerResponse objects.
49
+ """
50
+ return self._request_item_response(items, "upsert")
51
+
52
+ def update(self, items: Sequence[ContainerRequest]) -> list[ContainerResponse]:
53
+ """Update (create or update) containers in CDF.
54
+
55
+ Args:
56
+ items: List of ContainerRequest objects to apply.
57
+ Returns:
58
+ List of applied ContainerResponse objects.
59
+ """
60
+ return self._request_item_response(items, "upsert")
61
+
62
+ def retrieve(self, items: Sequence[ContainerReference]) -> list[ContainerResponse]:
63
+ """Retrieve containers from CDF.
64
+
65
+ Args:
66
+ items: List of ContainerReference objects to retrieve.
67
+
68
+ Returns:
69
+ List of retrieved ContainerResponse objects.
70
+ """
71
+ return self._request_item_response(items, method="retrieve")
72
+
73
+ def delete(self, items: Sequence[ContainerReference]) -> None:
74
+ """Delete containers from CDF.
75
+
76
+ Args:
77
+ items: List of ContainerReference objects to delete.
78
+ """
79
+ self._request_no_response(items, "delete")
80
+
81
+ def paginate(
82
+ self,
83
+ filter: ContainerFilter | None = None,
84
+ limit: int = 100,
85
+ cursor: str | None = None,
86
+ ) -> PagedResponse[ContainerResponse]:
87
+ """Get a page of containers from CDF.
88
+
89
+ Args:
90
+ filter: ContainerFilter to filter containers.
91
+ limit: Maximum number of containers to return.
92
+ cursor: Cursor for pagination.
93
+
94
+ Returns:
95
+ PagedResponse of ContainerResponse objects.
96
+ """
97
+ return self._paginate(
98
+ cursor=cursor,
99
+ limit=limit,
100
+ params=filter.dump() if filter else None,
101
+ )
102
+
103
+ def iterate(
104
+ self,
105
+ filter: ContainerFilter | None = None,
106
+ limit: int | None = None,
107
+ ) -> Iterable[list[ContainerResponse]]:
108
+ """Iterate over all containers in CDF.
109
+
110
+ Args:
111
+ filter: ContainerFilter to filter containers.
112
+ limit: Maximum total number of containers to return.
113
+
114
+ Returns:
115
+ Iterable of lists of ContainerResponse objects.
116
+ """
117
+ return self._iterate(
118
+ limit=limit,
119
+ params=filter.dump() if filter else None,
120
+ )
121
+
122
+ def list(self, filter: ContainerFilter | None = None, limit: int | None = None) -> list[ContainerResponse]:
123
+ """List all containers in CDF.
124
+
125
+ Args:
126
+ filter: ContainerFilter to filter containers.
127
+ limit: Maximum total number of containers to return.
128
+
129
+ Returns:
130
+ List of ContainerResponse objects.
131
+ """
132
+ return self._list(limit=limit, params=filter.dump() if filter else None)
@@ -0,0 +1,137 @@
1
+ """Data Models API for managing CDF data models.
2
+
3
+ Based on the API specification at:
4
+ https://api-docs.cognite.com/20230101/tag/Data-models/operation/createDataModels
5
+ """
6
+
7
+ from collections.abc import Iterable, Sequence
8
+
9
+ from cognite_toolkit._cdf_tk.client.cdf_client import CDFResourceAPI, Endpoint, PagedResponse
10
+ from cognite_toolkit._cdf_tk.client.http_client import HTTPClient, ItemsSuccessResponse2, SuccessResponse2
11
+ from cognite_toolkit._cdf_tk.client.request_classes.filters import DataModelFilter
12
+ from cognite_toolkit._cdf_tk.client.resource_classes.data_modeling import (
13
+ DataModelReference,
14
+ DataModelRequest,
15
+ DataModelResponse,
16
+ )
17
+
18
+
19
+ class DataModelsAPI(CDFResourceAPI[DataModelReference, DataModelRequest, DataModelResponse]):
20
+ """API for managing CDF data models.
21
+
22
+ Data models use an apply/upsert pattern for create and update operations.
23
+ """
24
+
25
+ def __init__(self, http_client: HTTPClient) -> None:
26
+ super().__init__(
27
+ http_client=http_client,
28
+ method_endpoint_map={
29
+ "upsert": Endpoint(method="POST", path="/models/datamodels", item_limit=100),
30
+ "retrieve": Endpoint(method="POST", path="/models/datamodels/byids", item_limit=100),
31
+ "delete": Endpoint(method="POST", path="/models/datamodels/delete", item_limit=100),
32
+ "list": Endpoint(method="GET", path="/models/datamodels", item_limit=1000),
33
+ },
34
+ )
35
+
36
+ def _validate_page_response(
37
+ self, response: SuccessResponse2 | ItemsSuccessResponse2
38
+ ) -> PagedResponse[DataModelResponse]:
39
+ return PagedResponse[DataModelResponse].model_validate_json(response.body)
40
+
41
+ def create(self, items: Sequence[DataModelRequest]) -> list[DataModelResponse]:
42
+ """Apply (create or update) data models in CDF.
43
+
44
+ Args:
45
+ items: List of DataModelRequest objects to apply.
46
+
47
+ Returns:
48
+ List of applied DataModelResponse objects.
49
+ """
50
+ return self._request_item_response(items, "upsert")
51
+
52
+ def update(self, items: Sequence[DataModelRequest]) -> list[DataModelResponse]:
53
+ """Apply (create or update) data models in CDF.
54
+
55
+ Args:
56
+ items: List of DataModelRequest objects to apply.
57
+ Returns:
58
+ List of applied DataModelResponse objects.
59
+ """
60
+ return self._request_item_response(items, "upsert")
61
+
62
+ def retrieve(self, items: Sequence[DataModelReference], inline_views: bool = False) -> list[DataModelResponse]:
63
+ """Retrieve data models from CDF.
64
+
65
+ Args:
66
+ items: List of DataModelReference objects to retrieve.
67
+ inline_views: Whether to include full view definitions in the response.
68
+
69
+ Returns:
70
+ List of retrieved DataModelResponse objects.
71
+ """
72
+ return self._request_item_response(items, method="retrieve", extra_body={"inlineViews": inline_views})
73
+
74
+ def delete(self, items: Sequence[DataModelReference]) -> None:
75
+ """Delete data models from CDF.
76
+
77
+ Args:
78
+ items: List of DataModelReference objects to delete.
79
+ """
80
+ self._request_no_response(items, "delete")
81
+
82
+ def paginate(
83
+ self,
84
+ filter: DataModelFilter | None = None,
85
+ limit: int = 100,
86
+ cursor: str | None = None,
87
+ ) -> PagedResponse[DataModelResponse]:
88
+ """Get a page of data models from CDF.
89
+
90
+ Args:
91
+ filter: DataModelFilter to filter data models.
92
+ limit: Maximum number of data models to return.
93
+ cursor: Cursor for pagination.
94
+
95
+ Returns:
96
+ PagedResponse of DataModelResponse objects.
97
+ """
98
+ return self._paginate(
99
+ cursor=cursor,
100
+ limit=limit,
101
+ params=filter.dump() if filter else None,
102
+ )
103
+
104
+ def iterate(
105
+ self,
106
+ filter: DataModelFilter | None = None,
107
+ limit: int | None = None,
108
+ ) -> Iterable[list[DataModelResponse]]:
109
+ """Iterate over all data models in CDF.
110
+
111
+ Args:
112
+ filter: DataModelFilter to filter data models.
113
+ limit: Maximum total number of data models to return.
114
+
115
+ Returns:
116
+ Iterable of lists of DataModelResponse objects.
117
+ """
118
+ return self._iterate(
119
+ limit=limit,
120
+ params=filter.dump() if filter else None,
121
+ )
122
+
123
+ def list(
124
+ self,
125
+ filter: DataModelFilter | None = None,
126
+ limit: int | None = None,
127
+ ) -> list[DataModelResponse]:
128
+ """List all data models in CDF.
129
+
130
+ Args:
131
+ filter: DataModelFilter to filter data models.
132
+ limit: Maximum total number of data models to return.
133
+
134
+ Returns:
135
+ List of DataModelResponse objects.
136
+ """
137
+ return self._list(limit=limit, params=filter.dump() if filter else None)