cognite-toolkit 0.7.45__py3-none-any.whl → 0.7.47__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cognite_toolkit/_cdf_tk/apps/_download_app.py +1 -1
- cognite_toolkit/_cdf_tk/apps/_dump_app.py +1 -1
- cognite_toolkit/_cdf_tk/builders/_raw.py +1 -1
- cognite_toolkit/_cdf_tk/client/_toolkit_client.py +19 -3
- cognite_toolkit/_cdf_tk/client/api/agents.py +107 -0
- cognite_toolkit/_cdf_tk/client/api/annotations.py +129 -0
- cognite_toolkit/_cdf_tk/client/api/assets.py +30 -18
- cognite_toolkit/_cdf_tk/client/api/containers.py +132 -0
- cognite_toolkit/_cdf_tk/client/api/data_models.py +137 -0
- cognite_toolkit/_cdf_tk/client/api/datasets.py +141 -0
- cognite_toolkit/_cdf_tk/client/api/events.py +31 -17
- cognite_toolkit/_cdf_tk/client/api/extraction_pipelines.py +148 -0
- cognite_toolkit/_cdf_tk/client/api/filemetadata.py +42 -16
- cognite_toolkit/_cdf_tk/client/api/function_schedules.py +115 -0
- cognite_toolkit/_cdf_tk/client/api/functions.py +113 -0
- cognite_toolkit/_cdf_tk/client/api/graphql_data_models.py +167 -0
- cognite_toolkit/_cdf_tk/client/api/groups.py +121 -0
- cognite_toolkit/_cdf_tk/client/api/hosted_extractor_destinations.py +131 -0
- cognite_toolkit/_cdf_tk/client/api/hosted_extractor_jobs.py +122 -0
- cognite_toolkit/_cdf_tk/client/api/hosted_extractor_mappings.py +129 -0
- cognite_toolkit/_cdf_tk/client/api/hosted_extractor_sources.py +136 -0
- cognite_toolkit/_cdf_tk/client/api/hosted_extractors.py +23 -0
- cognite_toolkit/_cdf_tk/client/api/infield.py +7 -7
- cognite_toolkit/_cdf_tk/client/api/labels.py +125 -0
- cognite_toolkit/_cdf_tk/client/api/legacy/canvas.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/legacy/charts.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/extended_data_modeling.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/extended_files.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/legacy/extended_raw.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/extended_timeseries.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/legacy/location_filters.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/robotics/capabilities.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/robotics/data_postprocessing.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/robotics/frames.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/robotics/locations.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/robotics/maps.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/robotics/robots.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/legacy/search_config.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/migration.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/project.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/raw.py +38 -8
- cognite_toolkit/_cdf_tk/client/api/relationships.py +133 -0
- cognite_toolkit/_cdf_tk/client/api/security_categories.py +94 -0
- cognite_toolkit/_cdf_tk/client/api/sequences.py +133 -0
- cognite_toolkit/_cdf_tk/client/api/simulator_models.py +32 -6
- cognite_toolkit/_cdf_tk/client/api/spaces.py +117 -0
- cognite_toolkit/_cdf_tk/client/api/streams.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/three_d.py +11 -11
- cognite_toolkit/_cdf_tk/client/api/timeseries.py +31 -17
- cognite_toolkit/_cdf_tk/client/api/token.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/transformations.py +146 -0
- cognite_toolkit/_cdf_tk/client/api/views.py +139 -0
- cognite_toolkit/_cdf_tk/client/api/workflow_triggers.py +128 -0
- cognite_toolkit/_cdf_tk/client/api/workflow_versions.py +138 -0
- cognite_toolkit/_cdf_tk/client/api/workflows.py +119 -0
- cognite_toolkit/_cdf_tk/client/cdf_client/api.py +44 -40
- cognite_toolkit/_cdf_tk/client/cdf_client/responses.py +11 -0
- cognite_toolkit/_cdf_tk/client/http_client/_data_classes.py +10 -0
- cognite_toolkit/_cdf_tk/client/http_client/_data_classes2.py +5 -7
- cognite_toolkit/_cdf_tk/client/http_client/_exception.py +10 -1
- cognite_toolkit/_cdf_tk/client/request_classes/base.py +19 -0
- cognite_toolkit/_cdf_tk/client/request_classes/filters.py +69 -0
- cognite_toolkit/_cdf_tk/client/request_classes/graphql.py +28 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/agent.py +9 -3
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/annotation.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/asset.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_constraints.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_container.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_data_model.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_data_types.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_indexes.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_instance.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_references.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_space.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_view.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/_view_property.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/dataset.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/event.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/extraction_pipeline.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/filemetadata.py +1 -1
- cognite_toolkit/_cdf_tk/client/resource_classes/function.py +53 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/function_schedule.py +65 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/graphql_data_model.py +40 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/group/__init__.py +187 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/group/_constants.py +2 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/group/acls.py +653 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/group/capability.py +56 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/group/group.py +63 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/group/scopes.py +166 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_destination.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_job.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_mapping.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_source/_auth.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_source/_base.py +2 -2
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_source/_certificate.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_source/_eventhub.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_source/_kafka.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_source/_mqtt.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_source/_rest.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/identifiers.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/label.py +1 -1
- cognite_toolkit/_cdf_tk/client/resource_classes/legacy/__init__.py +0 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/canvas.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/charts.py +1 -1
- cognite_toolkit/_cdf_tk/client/resource_classes/location_filter.py +77 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/raw.py +1 -1
- cognite_toolkit/_cdf_tk/client/resource_classes/relationship.py +49 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/robotics/__init__.py +37 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_capability.py +53 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_common.py +34 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_data_post_processing.py +49 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_frame.py +46 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_location.py +36 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_map.py +60 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_robot.py +53 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/search_config_resource.py +54 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/securitycategory.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/sequence.py +1 -1
- cognite_toolkit/_cdf_tk/client/resource_classes/sequence_rows.py +56 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/simulator_model.py +1 -1
- cognite_toolkit/_cdf_tk/client/resource_classes/streamlit_.py +71 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/streams.py +6 -5
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/timeseries.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/transformation.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/workflow.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/workflow_trigger.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/workflow_version.py +1 -1
- cognite_toolkit/_cdf_tk/client/testing.py +20 -2
- cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py +5 -5
- cognite_toolkit/_cdf_tk/commands/_migrate/creators.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_migrate/data_classes.py +6 -6
- cognite_toolkit/_cdf_tk/commands/_migrate/data_mapper.py +6 -6
- cognite_toolkit/_cdf_tk/commands/_migrate/default_mappings.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_migrate/issues.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_migrate/migration_io.py +8 -8
- cognite_toolkit/_cdf_tk/commands/_profile.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_purge.py +1 -1
- cognite_toolkit/_cdf_tk/commands/build_cmd.py +1 -1
- cognite_toolkit/_cdf_tk/commands/dump_resource.py +4 -4
- cognite_toolkit/_cdf_tk/commands/run.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_data_cruds.py +3 -3
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/auth.py +2 -2
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/classic.py +11 -27
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/configuration.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/datamodel.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/extraction_pipeline.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/fieldops.py +4 -4
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/file.py +7 -14
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/function.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/industrial_tool.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/location.py +2 -2
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/migration.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/raw.py +6 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/relationship.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/robotics.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/simulators.py +6 -3
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/streams.py +2 -2
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/timeseries.py +6 -13
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/transformation.py +1 -1
- cognite_toolkit/_cdf_tk/resource_classes/capabilities.py +6 -0
- cognite_toolkit/_cdf_tk/resource_classes/search_config.py +1 -1
- cognite_toolkit/_cdf_tk/storageio/_applications.py +3 -3
- cognite_toolkit/_cdf_tk/storageio/_asset_centric.py +21 -27
- cognite_toolkit/_cdf_tk/storageio/_file_content.py +2 -2
- cognite_toolkit/_cdf_tk/storageio/_instances.py +1 -1
- cognite_toolkit/_cdf_tk/utils/cdf.py +1 -1
- cognite_toolkit/_cdf_tk/utils/interactive_select.py +5 -5
- cognite_toolkit/_cdf_tk/utils/useful_types2.py +3 -3
- cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml +1 -1
- cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml +1 -1
- cognite_toolkit/_resources/cdf.toml +1 -1
- cognite_toolkit/_version.py +1 -1
- {cognite_toolkit-0.7.45.dist-info → cognite_toolkit-0.7.47.dist-info}/METADATA +3 -3
- {cognite_toolkit-0.7.45.dist-info → cognite_toolkit-0.7.47.dist-info}/RECORD +203 -152
- {cognite_toolkit-0.7.45.dist-info → cognite_toolkit-0.7.47.dist-info}/WHEEL +2 -2
- /cognite_toolkit/_cdf_tk/client/{data_classes → request_classes}/__init__.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes/legacy → resource_classes}/__init__.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/base.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/capabilities.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/charts_data.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/data_modeling/__init__.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/hosted_extractor_source/__init__.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/infield.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/instance_api.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/apm_config_v1.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/extendable_cognite_file.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/extended_filemetadata.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/extended_filemetdata.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/extended_timeseries.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/functions.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/graphql_data_models.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/instances.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/location_filters.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/migration.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/pending_instances_ids.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/project.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/raw.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/robotics.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/search_config.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/sequences.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/streamlit_.py +0 -0
- /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/three_d.py +0 -0
- {cognite_toolkit-0.7.45.dist-info → cognite_toolkit-0.7.47.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
from collections.abc import Iterable, Sequence
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from cognite_toolkit._cdf_tk.client.cdf_client import CDFResourceAPI, PagedResponse, ResponseItems
|
|
5
|
+
from cognite_toolkit._cdf_tk.client.cdf_client.api import Endpoint
|
|
6
|
+
from cognite_toolkit._cdf_tk.client.http_client import HTTPClient, ItemsSuccessResponse2, SuccessResponse2
|
|
7
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.identifiers import WorkflowVersionId
|
|
8
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.workflow_version import (
|
|
9
|
+
WorkflowVersionRequest,
|
|
10
|
+
WorkflowVersionResponse,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class WorkflowVersionsAPI(CDFResourceAPI[WorkflowVersionId, WorkflowVersionRequest, WorkflowVersionResponse]):
|
|
15
|
+
def __init__(self, http_client: HTTPClient) -> None:
|
|
16
|
+
super().__init__(
|
|
17
|
+
http_client=http_client,
|
|
18
|
+
method_endpoint_map={
|
|
19
|
+
"upsert": Endpoint(method="POST", path="/workflows/versions", item_limit=1),
|
|
20
|
+
"retrieve": Endpoint(
|
|
21
|
+
method="GET", path="/workflow/{workflowExternalId}/versions/{version}", item_limit=1
|
|
22
|
+
),
|
|
23
|
+
"delete": Endpoint(method="POST", path="/workflows/versions/delete", item_limit=100),
|
|
24
|
+
"list": Endpoint(method="POST", path="/workflows/versions/list", item_limit=1000),
|
|
25
|
+
},
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
def _validate_page_response(
|
|
29
|
+
self, response: SuccessResponse2 | ItemsSuccessResponse2
|
|
30
|
+
) -> PagedResponse[WorkflowVersionResponse]:
|
|
31
|
+
return PagedResponse[WorkflowVersionResponse].model_validate_json(response.body)
|
|
32
|
+
|
|
33
|
+
def _reference_response(self, response: SuccessResponse2) -> ResponseItems[WorkflowVersionId]:
|
|
34
|
+
return ResponseItems[WorkflowVersionId].model_validate_json(response.body)
|
|
35
|
+
|
|
36
|
+
def create(self, items: Sequence[WorkflowVersionRequest]) -> list[WorkflowVersionResponse]:
|
|
37
|
+
"""Create or update workflow versions in CDF.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
items: List of WorkflowVersionRequest objects to create or update.
|
|
41
|
+
Returns:
|
|
42
|
+
List of created/updated WorkflowVersionResponse objects.
|
|
43
|
+
"""
|
|
44
|
+
return self._request_item_response(items, "upsert")
|
|
45
|
+
|
|
46
|
+
# This is a duplicate of the create method, included to standardize the API interface.
|
|
47
|
+
def update(self, items: Sequence[WorkflowVersionRequest]) -> list[WorkflowVersionResponse]:
|
|
48
|
+
"""Create or update workflow versions in CDF.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
items: List of WorkflowVersionRequest objects to create or update.
|
|
52
|
+
Returns:
|
|
53
|
+
List of created/updated WorkflowVersionResponse objects.
|
|
54
|
+
"""
|
|
55
|
+
return self.create(items)
|
|
56
|
+
|
|
57
|
+
def retrieve(self, items: Sequence[WorkflowVersionId]) -> list[WorkflowVersionResponse]:
|
|
58
|
+
"""Retrieve workflow versions from CDF.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
items: List of WorkflowVersionId objects to retrieve.
|
|
62
|
+
Returns:
|
|
63
|
+
List of retrieved WorkflowVersionResponse objects.
|
|
64
|
+
"""
|
|
65
|
+
result: list[WorkflowVersionResponse] = []
|
|
66
|
+
for item in items:
|
|
67
|
+
endpoint = f"/workflows/{item.workflow_external_id}/versions/{item.version}"
|
|
68
|
+
retrieved = self._request_item_response([item], "retrieve", endpoint=endpoint)
|
|
69
|
+
result.extend(retrieved)
|
|
70
|
+
return result
|
|
71
|
+
|
|
72
|
+
def delete(self, items: Sequence[WorkflowVersionId]) -> None:
|
|
73
|
+
"""Delete workflow versions from CDF.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
items: List of WorkflowVersionId objects to delete.
|
|
77
|
+
"""
|
|
78
|
+
self._request_no_response(items, "delete")
|
|
79
|
+
|
|
80
|
+
def paginate(
|
|
81
|
+
self,
|
|
82
|
+
workflow_external_id: str | None = None,
|
|
83
|
+
limit: int = 100,
|
|
84
|
+
cursor: str | None = None,
|
|
85
|
+
) -> PagedResponse[WorkflowVersionResponse]:
|
|
86
|
+
"""Iterate over all workflow versions in CDF.
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
workflow_external_id: Filter by workflow external ID.
|
|
90
|
+
limit: Maximum number of items to return.
|
|
91
|
+
cursor: Cursor for pagination.
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
PagedResponse of WorkflowVersionResponse objects.
|
|
95
|
+
"""
|
|
96
|
+
body: dict[str, Any] = {}
|
|
97
|
+
if workflow_external_id:
|
|
98
|
+
body["workflowExternalId"] = workflow_external_id
|
|
99
|
+
|
|
100
|
+
return self._paginate(
|
|
101
|
+
cursor=cursor,
|
|
102
|
+
limit=limit,
|
|
103
|
+
body=body,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
def iterate(
|
|
107
|
+
self,
|
|
108
|
+
workflow_external_id: str | None = None,
|
|
109
|
+
limit: int = 100,
|
|
110
|
+
) -> Iterable[list[WorkflowVersionResponse]]:
|
|
111
|
+
"""Iterate over all workflow versions in CDF.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
workflow_external_id: Filter by workflow external ID.
|
|
115
|
+
limit: Maximum number of items to return per page.
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
Iterable of lists of WorkflowVersionResponse objects.
|
|
119
|
+
"""
|
|
120
|
+
body: dict[str, Any] = {}
|
|
121
|
+
if workflow_external_id:
|
|
122
|
+
body["workflowExternalId"] = workflow_external_id
|
|
123
|
+
|
|
124
|
+
return self._iterate(
|
|
125
|
+
limit=limit,
|
|
126
|
+
body=body,
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
def list(
|
|
130
|
+
self,
|
|
131
|
+
limit: int | None = 100,
|
|
132
|
+
) -> list[WorkflowVersionResponse]:
|
|
133
|
+
"""List all workflow versions in CDF.
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
List of WorkflowVersionResponse objects.
|
|
137
|
+
"""
|
|
138
|
+
return self._list(limit=limit)
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
from collections.abc import Iterable, Sequence
|
|
2
|
+
|
|
3
|
+
from cognite_toolkit._cdf_tk.client.cdf_client import CDFResourceAPI, PagedResponse, ResponseItems
|
|
4
|
+
from cognite_toolkit._cdf_tk.client.cdf_client.api import Endpoint
|
|
5
|
+
from cognite_toolkit._cdf_tk.client.http_client import HTTPClient, ItemsSuccessResponse2, SuccessResponse2
|
|
6
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.identifiers import ExternalId
|
|
7
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.workflow import WorkflowRequest, WorkflowResponse
|
|
8
|
+
|
|
9
|
+
from .workflow_triggers import WorkflowTriggersAPI
|
|
10
|
+
from .workflow_versions import WorkflowVersionsAPI
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class WorkflowsAPI(CDFResourceAPI[ExternalId, WorkflowRequest, WorkflowResponse]):
|
|
14
|
+
def __init__(self, http_client: HTTPClient) -> None:
|
|
15
|
+
super().__init__(
|
|
16
|
+
http_client=http_client,
|
|
17
|
+
method_endpoint_map={
|
|
18
|
+
"upsert": Endpoint(method="POST", path="/workflows", item_limit=1),
|
|
19
|
+
"retrieve": Endpoint(method="GET", path="/workflows/{workflowExternalId}", item_limit=1),
|
|
20
|
+
"delete": Endpoint(method="POST", path="/workflows/delete", item_limit=100),
|
|
21
|
+
"list": Endpoint(method="GET", path="/workflows", item_limit=100),
|
|
22
|
+
},
|
|
23
|
+
)
|
|
24
|
+
self.versions = WorkflowVersionsAPI(http_client)
|
|
25
|
+
self.triggers = WorkflowTriggersAPI(http_client)
|
|
26
|
+
|
|
27
|
+
def _validate_page_response(
|
|
28
|
+
self, response: SuccessResponse2 | ItemsSuccessResponse2
|
|
29
|
+
) -> PagedResponse[WorkflowResponse]:
|
|
30
|
+
return PagedResponse[WorkflowResponse].model_validate_json(response.body)
|
|
31
|
+
|
|
32
|
+
def _reference_response(self, response: SuccessResponse2) -> ResponseItems[ExternalId]:
|
|
33
|
+
return ResponseItems[ExternalId].model_validate_json(response.body)
|
|
34
|
+
|
|
35
|
+
def create(self, items: Sequence[WorkflowRequest]) -> list[WorkflowResponse]:
|
|
36
|
+
"""Create or update workflows in CDF.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
items: List of WorkflowRequest objects to create or update.
|
|
40
|
+
Returns:
|
|
41
|
+
List of created/updated WorkflowResponse objects.
|
|
42
|
+
"""
|
|
43
|
+
return self._request_item_response(items, "upsert")
|
|
44
|
+
|
|
45
|
+
# This is a duplicate of the create method, included to standardize the API interface.
|
|
46
|
+
def update(self, items: Sequence[WorkflowRequest]) -> list[WorkflowResponse]:
|
|
47
|
+
"""Create or update workflows in CDF.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
items: List of WorkflowRequest objects to create or update.
|
|
51
|
+
Returns:
|
|
52
|
+
List of created/updated WorkflowResponse objects.
|
|
53
|
+
"""
|
|
54
|
+
return self.create(items)
|
|
55
|
+
|
|
56
|
+
def retrieve(self, items: Sequence[ExternalId]) -> list[WorkflowResponse]:
|
|
57
|
+
"""Retrieve a workflow from CDF by external ID.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
items: List of ExternalId objects to retrieve.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
The retrieved WorkflowResponse object, or None if not found.
|
|
64
|
+
"""
|
|
65
|
+
result: list[WorkflowResponse] = []
|
|
66
|
+
for item in items:
|
|
67
|
+
endpoint = f"/workflows/{item.external_id}"
|
|
68
|
+
retrieved = self._request_item_response([item], "retrieve", endpoint=endpoint)
|
|
69
|
+
result.extend(retrieved)
|
|
70
|
+
return result
|
|
71
|
+
|
|
72
|
+
def delete(self, items: Sequence[ExternalId]) -> None:
|
|
73
|
+
"""Delete workflows from CDF.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
items: List of ExternalId objects to delete.
|
|
77
|
+
"""
|
|
78
|
+
self._request_no_response(items, "delete")
|
|
79
|
+
|
|
80
|
+
def paginate(
|
|
81
|
+
self,
|
|
82
|
+
limit: int = 100,
|
|
83
|
+
cursor: str | None = None,
|
|
84
|
+
) -> PagedResponse[WorkflowResponse]:
|
|
85
|
+
"""Iterate over all workflows in CDF.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
limit: Maximum number of items to return.
|
|
89
|
+
cursor: Cursor for pagination.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
PagedResponse of WorkflowResponse objects.
|
|
93
|
+
"""
|
|
94
|
+
return self._paginate(cursor=cursor, limit=limit)
|
|
95
|
+
|
|
96
|
+
def iterate(
|
|
97
|
+
self,
|
|
98
|
+
limit: int = 100,
|
|
99
|
+
) -> Iterable[list[WorkflowResponse]]:
|
|
100
|
+
"""Iterate over all workflows in CDF.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
limit: Maximum number of items to return per page.
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
Iterable of lists of WorkflowResponse objects.
|
|
107
|
+
"""
|
|
108
|
+
return self._iterate(limit=limit)
|
|
109
|
+
|
|
110
|
+
def list(
|
|
111
|
+
self,
|
|
112
|
+
limit: int | None = 100,
|
|
113
|
+
) -> list[WorkflowResponse]:
|
|
114
|
+
"""List all workflows in CDF.
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
List of WorkflowResponse objects.
|
|
118
|
+
"""
|
|
119
|
+
return self._list(limit=limit)
|
|
@@ -13,12 +13,6 @@ from typing import Any, Generic, Literal, TypeAlias, TypeVar
|
|
|
13
13
|
|
|
14
14
|
from pydantic import BaseModel, JsonValue
|
|
15
15
|
|
|
16
|
-
from cognite_toolkit._cdf_tk.client.data_classes.base import (
|
|
17
|
-
RequestUpdateable,
|
|
18
|
-
T_Identifier,
|
|
19
|
-
T_RequestResource,
|
|
20
|
-
T_ResponseResource,
|
|
21
|
-
)
|
|
22
16
|
from cognite_toolkit._cdf_tk.client.http_client import (
|
|
23
17
|
HTTPClient,
|
|
24
18
|
ItemsRequest2,
|
|
@@ -26,9 +20,15 @@ from cognite_toolkit._cdf_tk.client.http_client import (
|
|
|
26
20
|
RequestMessage2,
|
|
27
21
|
SuccessResponse2,
|
|
28
22
|
)
|
|
23
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.base import (
|
|
24
|
+
RequestUpdateable,
|
|
25
|
+
T_Identifier,
|
|
26
|
+
T_RequestResource,
|
|
27
|
+
T_ResponseResource,
|
|
28
|
+
)
|
|
29
29
|
from cognite_toolkit._cdf_tk.utils.collection import chunker_sequence
|
|
30
30
|
|
|
31
|
-
from .responses import PagedResponse
|
|
31
|
+
from .responses import PagedResponse
|
|
32
32
|
|
|
33
33
|
_T_BaseModel = TypeVar("_T_BaseModel", bound=BaseModel)
|
|
34
34
|
|
|
@@ -41,7 +41,7 @@ class Endpoint:
|
|
|
41
41
|
concurrency_max_workers: int = 1
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
APIMethod: TypeAlias = Literal["create", "retrieve", "update", "delete", "list"]
|
|
44
|
+
APIMethod: TypeAlias = Literal["create", "retrieve", "update", "delete", "list", "upsert"]
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
class CDFResourceAPI(Generic[T_Identifier, T_RequestResource, T_ResponseResource], ABC):
|
|
@@ -74,15 +74,12 @@ class CDFResourceAPI(Generic[T_Identifier, T_RequestResource, T_ResponseResource
|
|
|
74
74
|
return [item.as_update(mode=mode) for item in items]
|
|
75
75
|
|
|
76
76
|
@abstractmethod
|
|
77
|
-
def
|
|
77
|
+
def _validate_page_response(
|
|
78
|
+
self, response: SuccessResponse2 | ItemsSuccessResponse2
|
|
79
|
+
) -> PagedResponse[T_ResponseResource]:
|
|
78
80
|
"""Parse a single item response."""
|
|
79
81
|
raise NotImplementedError()
|
|
80
82
|
|
|
81
|
-
@abstractmethod
|
|
82
|
-
def _reference_response(self, response: SuccessResponse2) -> ResponseItems[T_Identifier]:
|
|
83
|
-
"""Parse a reference response."""
|
|
84
|
-
raise NotImplementedError()
|
|
85
|
-
|
|
86
83
|
def _make_url(self, path: str = "") -> str:
|
|
87
84
|
"""Create the full URL for this resource endpoint."""
|
|
88
85
|
return self._http_client.config.create_api_url(path)
|
|
@@ -95,7 +92,7 @@ class CDFResourceAPI(Generic[T_Identifier, T_RequestResource, T_ResponseResource
|
|
|
95
92
|
for response in self._chunk_requests(
|
|
96
93
|
items, "update", serialization=partial(self._serialize_updates, mode=mode)
|
|
97
94
|
):
|
|
98
|
-
response_items.extend(self.
|
|
95
|
+
response_items.extend(self._validate_page_response(response).items)
|
|
99
96
|
return response_items
|
|
100
97
|
|
|
101
98
|
def _request_item_response(
|
|
@@ -108,21 +105,9 @@ class CDFResourceAPI(Generic[T_Identifier, T_RequestResource, T_ResponseResource
|
|
|
108
105
|
) -> list[T_ResponseResource]:
|
|
109
106
|
response_items: list[T_ResponseResource] = []
|
|
110
107
|
for response in self._chunk_requests(items, method, self._serialize_items, params, extra_body, endpoint):
|
|
111
|
-
response_items.extend(self.
|
|
108
|
+
response_items.extend(self._validate_page_response(response).items)
|
|
112
109
|
return response_items
|
|
113
110
|
|
|
114
|
-
def _request_reference_response(
|
|
115
|
-
self,
|
|
116
|
-
items: Sequence[BaseModel],
|
|
117
|
-
method: APIMethod,
|
|
118
|
-
params: dict[str, Any] | None = None,
|
|
119
|
-
extra_body: dict[str, Any] | None = None,
|
|
120
|
-
) -> list[T_Identifier]:
|
|
121
|
-
all_ids: list[T_Identifier] = []
|
|
122
|
-
for response in self._chunk_requests(items, method, self._serialize_items, params, extra_body):
|
|
123
|
-
all_ids.extend(self._reference_response(response).items)
|
|
124
|
-
return all_ids
|
|
125
|
-
|
|
126
111
|
def _request_no_response(
|
|
127
112
|
self,
|
|
128
113
|
items: Sequence[BaseModel],
|
|
@@ -192,7 +177,7 @@ class CDFResourceAPI(Generic[T_Identifier, T_RequestResource, T_ResponseResource
|
|
|
192
177
|
"""
|
|
193
178
|
response_items: list[T_ResponseResource] = []
|
|
194
179
|
for response in self._chunk_requests_items_split_retries(items, method, params, extra_body):
|
|
195
|
-
response_items.extend(self.
|
|
180
|
+
response_items.extend(self._validate_page_response(response).items)
|
|
196
181
|
return response_items
|
|
197
182
|
|
|
198
183
|
def _chunk_requests_items_split_retries(
|
|
@@ -254,7 +239,7 @@ class CDFResourceAPI(Generic[T_Identifier, T_RequestResource, T_ResponseResource
|
|
|
254
239
|
grouped_items[key].append(item)
|
|
255
240
|
return grouped_items
|
|
256
241
|
|
|
257
|
-
def
|
|
242
|
+
def _paginate(
|
|
258
243
|
self,
|
|
259
244
|
limit: int,
|
|
260
245
|
cursor: str | None = None,
|
|
@@ -305,22 +290,41 @@ class CDFResourceAPI(Generic[T_Identifier, T_RequestResource, T_ResponseResource
|
|
|
305
290
|
)
|
|
306
291
|
result = self._http_client.request_single_retries(request)
|
|
307
292
|
response = result.get_success_or_raise()
|
|
308
|
-
return self.
|
|
293
|
+
return self._validate_page_response(response)
|
|
309
294
|
|
|
310
|
-
def
|
|
311
|
-
self,
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
295
|
+
def _iterate(
|
|
296
|
+
self,
|
|
297
|
+
limit: int | None = None,
|
|
298
|
+
cursor: str | None = None,
|
|
299
|
+
params: dict[str, Any] | None = None,
|
|
300
|
+
body: dict[str, Any] | None = None,
|
|
301
|
+
endpoint_path: str | None = None,
|
|
302
|
+
) -> Iterable[list[T_ResponseResource]]:
|
|
303
|
+
"""Iterate over all resources, handling pagination automatically."""
|
|
304
|
+
next_cursor = cursor
|
|
316
305
|
total = 0
|
|
317
306
|
endpoint = self._method_endpoint_map["list"]
|
|
318
307
|
while True:
|
|
319
308
|
page_limit = endpoint.item_limit if limit is None else min(limit - total, endpoint.item_limit)
|
|
320
|
-
page = self.
|
|
321
|
-
|
|
309
|
+
page = self._paginate(
|
|
310
|
+
limit=page_limit, cursor=next_cursor, params=params, body=body, endpoint_path=endpoint_path
|
|
311
|
+
)
|
|
312
|
+
yield page.items
|
|
322
313
|
total += len(page.items)
|
|
323
314
|
if page.next_cursor is None or (limit is not None and total >= limit):
|
|
324
315
|
break
|
|
325
316
|
next_cursor = page.next_cursor
|
|
326
|
-
|
|
317
|
+
|
|
318
|
+
def _list(
|
|
319
|
+
self,
|
|
320
|
+
limit: int | None = None,
|
|
321
|
+
params: dict[str, Any] | None = None,
|
|
322
|
+
endpoint_path: str | None = None,
|
|
323
|
+
body: dict[str, Any] | None = None,
|
|
324
|
+
) -> list[T_ResponseResource]:
|
|
325
|
+
"""List all resources, handling pagination automatically."""
|
|
326
|
+
return [
|
|
327
|
+
item
|
|
328
|
+
for batch in self._iterate(limit=limit, params=params, endpoint_path=endpoint_path, body=body)
|
|
329
|
+
for item in batch
|
|
330
|
+
]
|
|
@@ -2,6 +2,8 @@ from typing import Generic, TypeVar
|
|
|
2
2
|
|
|
3
3
|
from pydantic import BaseModel, Field, JsonValue
|
|
4
4
|
|
|
5
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.graphql_data_model import GraphQLDataModelResponse
|
|
6
|
+
|
|
5
7
|
T = TypeVar("T", bound=BaseModel)
|
|
6
8
|
|
|
7
9
|
|
|
@@ -25,3 +27,12 @@ class QueryResponse(BaseModel, Generic[T]):
|
|
|
25
27
|
typing: dict[str, JsonValue] | None = None
|
|
26
28
|
next_cursor: dict[str, str] = Field(alias="nextCursor")
|
|
27
29
|
debug: dict[str, JsonValue] | None = None
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class GraphQLResponse(BaseModel):
|
|
33
|
+
data: GraphQLDataModelResponse
|
|
34
|
+
errors: list[dict[str, JsonValue]] | None = None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class GraphQLUpsertResponse(BaseModel):
|
|
38
|
+
upsert_graph_ql_dml_version: GraphQLResponse = Field(alias="upsertGraphQlDmlVersion")
|
|
@@ -307,6 +307,11 @@ class ItemsRequest(Generic[T_COVARIANT_ID], BodyRequest):
|
|
|
307
307
|
connect_attempt=self.connect_attempt,
|
|
308
308
|
read_attempt=self.read_attempt,
|
|
309
309
|
status_attempt=status_attempts,
|
|
310
|
+
api_version=self.api_version,
|
|
311
|
+
content_type=self.content_type,
|
|
312
|
+
accept=self.accept,
|
|
313
|
+
content_length=self.content_length,
|
|
314
|
+
max_failures_before_abort=self.max_failures_before_abort,
|
|
310
315
|
)
|
|
311
316
|
first_half.tracker = tracker
|
|
312
317
|
second_half = ItemsRequest[T_COVARIANT_ID](
|
|
@@ -317,6 +322,11 @@ class ItemsRequest(Generic[T_COVARIANT_ID], BodyRequest):
|
|
|
317
322
|
connect_attempt=self.connect_attempt,
|
|
318
323
|
read_attempt=self.read_attempt,
|
|
319
324
|
status_attempt=status_attempts,
|
|
325
|
+
api_version=self.api_version,
|
|
326
|
+
content_type=self.content_type,
|
|
327
|
+
accept=self.accept,
|
|
328
|
+
content_length=self.content_length,
|
|
329
|
+
max_failures_before_abort=self.max_failures_before_abort,
|
|
320
330
|
)
|
|
321
331
|
second_half.tracker = tracker
|
|
322
332
|
return [first_half, second_half]
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import gzip
|
|
2
|
-
import sys
|
|
3
2
|
from abc import ABC, abstractmethod
|
|
4
3
|
from collections import UserList
|
|
5
4
|
from collections.abc import Sequence
|
|
@@ -13,11 +12,6 @@ from cognite_toolkit._cdf_tk.client.http_client._exception import ToolkitAPIErro
|
|
|
13
12
|
from cognite_toolkit._cdf_tk.client.http_client._tracker import ItemsRequestTracker
|
|
14
13
|
from cognite_toolkit._cdf_tk.utils.useful_types import PrimitiveType
|
|
15
14
|
|
|
16
|
-
if sys.version_info >= (3, 11):
|
|
17
|
-
pass
|
|
18
|
-
else:
|
|
19
|
-
pass
|
|
20
|
-
|
|
21
15
|
|
|
22
16
|
class HTTPResult2(BaseModel):
|
|
23
17
|
def get_success_or_raise(self) -> "SuccessResponse2":
|
|
@@ -25,7 +19,11 @@ class HTTPResult2(BaseModel):
|
|
|
25
19
|
if isinstance(self, SuccessResponse2):
|
|
26
20
|
return self
|
|
27
21
|
elif isinstance(self, FailedResponse2):
|
|
28
|
-
raise ToolkitAPIError(
|
|
22
|
+
raise ToolkitAPIError(
|
|
23
|
+
f"Request failed with status code {self.status_code}: {self.error.message}",
|
|
24
|
+
missing=self.error.missing, # type: ignore[arg-type]
|
|
25
|
+
duplicated=self.error.duplicated, # type: ignore[arg-type]
|
|
26
|
+
)
|
|
29
27
|
elif isinstance(self, FailedRequest2):
|
|
30
28
|
raise ToolkitAPIError(f"Request failed with error: {self.error}")
|
|
31
29
|
else:
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
|
|
1
4
|
class ToolkitAPIError(Exception):
|
|
2
5
|
"""Base class for all exceptions raised by the Cognite Toolkit API client."""
|
|
3
6
|
|
|
4
|
-
|
|
7
|
+
def __init__(
|
|
8
|
+
self, message: str, missing: list[dict[str, Any]] | None = None, duplicated: list[dict[str, Any]] | None = None
|
|
9
|
+
) -> None:
|
|
10
|
+
super().__init__(message)
|
|
11
|
+
self.message = message
|
|
12
|
+
self.missing = missing
|
|
13
|
+
self.duplicated = duplicated
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict
|
|
4
|
+
from pydantic.alias_generators import to_camel
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class BaseModelRequest(BaseModel):
|
|
8
|
+
"""Base class for all object. This includes resources and nested objects."""
|
|
9
|
+
|
|
10
|
+
model_config = ConfigDict(alias_generator=to_camel, extra="ignore", populate_by_name=True)
|
|
11
|
+
|
|
12
|
+
def dump(self, camel_case: bool = True) -> dict[str, Any]:
|
|
13
|
+
"""Dump the object to a dictionary.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
camel_case (bool): Whether to use camelCase for the keys. Default is True.
|
|
17
|
+
|
|
18
|
+
"""
|
|
19
|
+
return self.model_dump(mode="json", by_alias=camel_case, exclude_unset=True)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from typing import Literal
|
|
3
|
+
|
|
4
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.annotation import AnnotationStatus, AnnotationType
|
|
5
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.identifiers import ExternalId, InternalId
|
|
6
|
+
|
|
7
|
+
from .base import BaseModelRequest
|
|
8
|
+
|
|
9
|
+
if sys.version_info >= (3, 11):
|
|
10
|
+
from typing import Self
|
|
11
|
+
else:
|
|
12
|
+
from typing_extensions import Self
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Filter(BaseModelRequest): ...
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ClassicFilter(Filter):
|
|
19
|
+
asset_subtree_ids: list[ExternalId | InternalId] | None = None
|
|
20
|
+
data_set_ids: list[ExternalId | InternalId] | None = None
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def from_asset_subtree_and_data_sets(
|
|
24
|
+
cls,
|
|
25
|
+
asset_subtree_id: str | int | list[str | int] | None = None,
|
|
26
|
+
data_set_id: str | int | list[str | int] | None = None,
|
|
27
|
+
) -> Self:
|
|
28
|
+
return cls(
|
|
29
|
+
asset_subtree_ids=cls._as_internal_or_external_id_list(asset_subtree_id),
|
|
30
|
+
data_set_ids=cls._as_internal_or_external_id_list(data_set_id),
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def _as_internal_or_external_id_list(
|
|
35
|
+
cls, id: str | int | list[str | int] | None
|
|
36
|
+
) -> list[ExternalId | InternalId] | None:
|
|
37
|
+
if id is None:
|
|
38
|
+
return None
|
|
39
|
+
ids = id if isinstance(id, list) else [id]
|
|
40
|
+
return [ExternalId(external_id=item) if isinstance(item, str) else InternalId(id=item) for item in ids]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class DataModelingFilter(Filter):
|
|
44
|
+
space: str | None = None
|
|
45
|
+
include_global: bool | None = None
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class ContainerFilter(DataModelingFilter):
|
|
49
|
+
used_for: Literal["node", "edge", "record", "all"] | None
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class ViewFilter(DataModelingFilter):
|
|
53
|
+
include_inherited_properties: bool | None = None
|
|
54
|
+
all_versions: bool | None = None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class DataModelFilter(DataModelingFilter):
|
|
58
|
+
inline_views: bool | None = None
|
|
59
|
+
all_versions: bool | None = None
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class AnnotationFilter(Filter):
|
|
63
|
+
annotated_resource_type: Literal["file", "threedmodel"]
|
|
64
|
+
annotated_resource_ids: list[ExternalId | InternalId]
|
|
65
|
+
annotation_type: AnnotationType | None = None
|
|
66
|
+
created_app: str | None = None
|
|
67
|
+
creating_app_version: str | None = None
|
|
68
|
+
creating_user: str | None = None
|
|
69
|
+
status: AnnotationStatus | None = None
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
UPSERT_BODY = """
|
|
2
|
+
mutation UpsertGraphQlDmlVersion($dmCreate: GraphQlDmlVersionUpsert!) {
|
|
3
|
+
upsertGraphQlDmlVersion(graphQlDmlVersion: $dmCreate) {
|
|
4
|
+
errors {
|
|
5
|
+
kind
|
|
6
|
+
message
|
|
7
|
+
hint
|
|
8
|
+
location {
|
|
9
|
+
start {
|
|
10
|
+
line
|
|
11
|
+
column
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
result {
|
|
16
|
+
space
|
|
17
|
+
externalId
|
|
18
|
+
version
|
|
19
|
+
name
|
|
20
|
+
description
|
|
21
|
+
graphQlDml
|
|
22
|
+
isGlobal
|
|
23
|
+
createdTime
|
|
24
|
+
lastUpdatedTime
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
"""
|
|
@@ -2,8 +2,7 @@ from typing import Annotated, Any, Literal
|
|
|
2
2
|
|
|
3
3
|
from pydantic import BeforeValidator, Field
|
|
4
4
|
|
|
5
|
-
from cognite_toolkit._cdf_tk.client.
|
|
6
|
-
from tests.test_unit.test_cdf_tk.test_tk_warnings.test_warnings_metatest import get_all_subclasses
|
|
5
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.base import BaseModelObject, RequestResource, ResponseResource
|
|
7
6
|
|
|
8
7
|
from .identifiers import ExternalId
|
|
9
8
|
|
|
@@ -74,7 +73,14 @@ class UnknownAgentTool(AgentToolDefinition):
|
|
|
74
73
|
...
|
|
75
74
|
|
|
76
75
|
|
|
77
|
-
|
|
76
|
+
# Mapping of known agent tool types to their classes
|
|
77
|
+
KNOWN_TOOLS: dict[str, type[AgentToolDefinition]] = {
|
|
78
|
+
"askDocument": AskDocument,
|
|
79
|
+
"examineDataSemantically": ExamineDataSemantically,
|
|
80
|
+
"queryKnowledgeGraph": QueryKnowledgeGraph,
|
|
81
|
+
"queryTimeSeriesDatapoints": QueryTimeSeriesDatapoints,
|
|
82
|
+
"summarizeDocument": SummarizeDocument,
|
|
83
|
+
}
|
|
78
84
|
|
|
79
85
|
|
|
80
86
|
def _handle_unknown_tool(value: Any) -> Any:
|
|
@@ -2,7 +2,7 @@ from typing import Any, Literal, TypeAlias
|
|
|
2
2
|
|
|
3
3
|
from pydantic import Field, JsonValue
|
|
4
4
|
|
|
5
|
-
from cognite_toolkit._cdf_tk.client.
|
|
5
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.base import BaseModelObject, RequestUpdateable, ResponseResource
|
|
6
6
|
|
|
7
7
|
from .identifiers import InternalId
|
|
8
8
|
|
|
@@ -2,7 +2,7 @@ from typing import ClassVar, Literal
|
|
|
2
2
|
|
|
3
3
|
from pydantic import JsonValue
|
|
4
4
|
|
|
5
|
-
from cognite_toolkit._cdf_tk.client.
|
|
5
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.base import BaseModelObject, RequestUpdateable, ResponseResource
|
|
6
6
|
|
|
7
7
|
from .identifiers import ExternalId
|
|
8
8
|
|