cognite-toolkit 0.7.56__py3-none-any.whl → 0.7.58__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/_auth_app.py +2 -2
- cognite_toolkit/_cdf_tk/apps/_core_app.py +4 -4
- cognite_toolkit/_cdf_tk/apps/_dev_app.py +10 -1
- cognite_toolkit/_cdf_tk/apps/_download_app.py +13 -12
- cognite_toolkit/_cdf_tk/apps/_dump_app.py +13 -13
- cognite_toolkit/_cdf_tk/apps/_landing_app.py +10 -1
- cognite_toolkit/_cdf_tk/apps/_migrate_app.py +15 -15
- cognite_toolkit/_cdf_tk/apps/_modules_app.py +29 -5
- cognite_toolkit/_cdf_tk/apps/_profile_app.py +4 -4
- cognite_toolkit/_cdf_tk/apps/_purge.py +4 -5
- cognite_toolkit/_cdf_tk/apps/_repo_app.py +9 -2
- cognite_toolkit/_cdf_tk/apps/_run.py +5 -4
- cognite_toolkit/_cdf_tk/apps/_upload_app.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/agents.py +2 -4
- cognite_toolkit/_cdf_tk/client/api/annotations.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/assets.py +3 -5
- cognite_toolkit/_cdf_tk/client/api/containers.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/data_models.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/datasets.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/events.py +3 -5
- cognite_toolkit/_cdf_tk/client/api/extraction_pipelines.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/filemetadata.py +6 -6
- cognite_toolkit/_cdf_tk/client/api/function_schedules.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/functions.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/graphql_data_models.py +5 -5
- cognite_toolkit/_cdf_tk/client/api/groups.py +5 -7
- cognite_toolkit/_cdf_tk/client/api/hosted_extractor_destinations.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/hosted_extractor_jobs.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/hosted_extractor_mappings.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/hosted_extractor_sources.py +4 -4
- cognite_toolkit/_cdf_tk/client/api/infield.py +8 -8
- cognite_toolkit/_cdf_tk/client/api/instances.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/labels.py +3 -5
- cognite_toolkit/_cdf_tk/client/api/legacy/extended_functions.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/location_filters.py +8 -8
- cognite_toolkit/_cdf_tk/client/api/project.py +14 -2
- cognite_toolkit/_cdf_tk/client/api/raw.py +5 -5
- cognite_toolkit/_cdf_tk/client/api/relationships.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/robotics_capabilities.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/robotics_data_postprocessing.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/robotics_frames.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/robotics_locations.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/robotics_maps.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/robotics_robots.py +3 -5
- cognite_toolkit/_cdf_tk/client/api/search_config.py +5 -5
- cognite_toolkit/_cdf_tk/client/api/security_categories.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/sequences.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/simulator_models.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/spaces.py +2 -4
- cognite_toolkit/_cdf_tk/client/api/streams.py +6 -6
- cognite_toolkit/_cdf_tk/client/api/three_d.py +5 -5
- cognite_toolkit/_cdf_tk/client/api/timeseries.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/transformations.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/views.py +2 -4
- cognite_toolkit/_cdf_tk/client/api/workflow_triggers.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/workflow_versions.py +3 -3
- cognite_toolkit/_cdf_tk/client/api/workflows.py +3 -3
- cognite_toolkit/_cdf_tk/client/cdf_client/api.py +11 -11
- cognite_toolkit/_cdf_tk/client/http_client/__init__.py +23 -23
- cognite_toolkit/_cdf_tk/client/http_client/_client.py +46 -50
- cognite_toolkit/_cdf_tk/client/http_client/{_data_classes2.py → _data_classes.py} +25 -25
- cognite_toolkit/_cdf_tk/client/http_client/_item_classes.py +16 -16
- cognite_toolkit/_cdf_tk/client/resource_classes/project.py +30 -0
- cognite_toolkit/_cdf_tk/commands/_base.py +18 -1
- cognite_toolkit/_cdf_tk/commands/_import_cmd.py +3 -1
- cognite_toolkit/_cdf_tk/commands/_migrate/command.py +7 -7
- cognite_toolkit/_cdf_tk/commands/_migrate/migration_io.py +11 -11
- cognite_toolkit/_cdf_tk/commands/_profile.py +10 -5
- cognite_toolkit/_cdf_tk/commands/_purge.py +17 -21
- cognite_toolkit/_cdf_tk/commands/_upload.py +3 -3
- cognite_toolkit/_cdf_tk/commands/build_cmd.py +2 -1
- cognite_toolkit/_cdf_tk/commands/build_v2/build_cmd.py +8 -2
- cognite_toolkit/_cdf_tk/commands/deploy.py +8 -2
- cognite_toolkit/_cdf_tk/commands/init.py +9 -2
- cognite_toolkit/_cdf_tk/commands/modules.py +3 -1
- cognite_toolkit/_cdf_tk/commands/pull.py +8 -2
- cognite_toolkit/_cdf_tk/commands/repo.py +3 -1
- cognite_toolkit/_cdf_tk/commands/resources.py +0 -3
- cognite_toolkit/_cdf_tk/data_classes/_tracking_info.py +1 -0
- cognite_toolkit/_cdf_tk/storageio/_applications.py +6 -6
- cognite_toolkit/_cdf_tk/storageio/_base.py +2 -2
- cognite_toolkit/_cdf_tk/storageio/_datapoints.py +7 -7
- cognite_toolkit/_cdf_tk/storageio/_file_content.py +22 -22
- cognite_toolkit/_cdf_tk/storageio/_raw.py +2 -2
- 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.56.dist-info → cognite_toolkit-0.7.58.dist-info}/METADATA +1 -1
- {cognite_toolkit-0.7.56.dist-info → cognite_toolkit-0.7.58.dist-info}/RECORD +92 -92
- cognite_toolkit/config.dev.yaml +0 -13
- {cognite_toolkit-0.7.56.dist-info → cognite_toolkit-0.7.58.dist-info}/WHEEL +0 -0
- {cognite_toolkit-0.7.56.dist-info → cognite_toolkit-0.7.58.dist-info}/entry_points.txt +0 -0
|
@@ -5,6 +5,8 @@ from typing import Any
|
|
|
5
5
|
from rich import print
|
|
6
6
|
from rich.console import Console
|
|
7
7
|
|
|
8
|
+
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
9
|
+
from cognite_toolkit._cdf_tk.client.http_client import ToolkitAPIError
|
|
8
10
|
from cognite_toolkit._cdf_tk.data_classes import CommandTrackingInfo
|
|
9
11
|
from cognite_toolkit._cdf_tk.tk_warnings import (
|
|
10
12
|
ToolkitWarning,
|
|
@@ -16,12 +18,27 @@ _HAS_PRINTED_COLLECT_MESSAGE = False
|
|
|
16
18
|
|
|
17
19
|
|
|
18
20
|
class ToolkitCommand:
|
|
19
|
-
def __init__(
|
|
21
|
+
def __init__(
|
|
22
|
+
self,
|
|
23
|
+
print_warning: bool = True,
|
|
24
|
+
skip_tracking: bool = False,
|
|
25
|
+
silent: bool = False,
|
|
26
|
+
client: ToolkitClient | None = None,
|
|
27
|
+
):
|
|
20
28
|
self._print_warning = print_warning
|
|
21
29
|
self.silent = silent
|
|
22
30
|
self.warning_list = WarningList[ToolkitWarning]()
|
|
23
31
|
self.tracker = Tracker(skip_tracking)
|
|
24
32
|
self._additional_tracking_info = CommandTrackingInfo()
|
|
33
|
+
if client is not None:
|
|
34
|
+
self._additional_tracking_info.cluster = client.config.cdf_cluster
|
|
35
|
+
try:
|
|
36
|
+
result = client.project.organization()
|
|
37
|
+
except (ToolkitAPIError, ValueError):
|
|
38
|
+
self._additional_tracking_info.project = client.config.project
|
|
39
|
+
else:
|
|
40
|
+
self._additional_tracking_info.organization = result.organization
|
|
41
|
+
self._additional_tracking_info.project = result.name
|
|
25
42
|
|
|
26
43
|
@property
|
|
27
44
|
def print_warning(self) -> bool:
|
|
@@ -21,8 +21,10 @@ class ImportTransformationCLI(ToolkitCommand):
|
|
|
21
21
|
get_client: Callable[[], ToolkitClient] | None = None,
|
|
22
22
|
print_warning: bool = True,
|
|
23
23
|
skip_tracking: bool = False,
|
|
24
|
+
silent: bool = False,
|
|
25
|
+
client: ToolkitClient | None = None,
|
|
24
26
|
):
|
|
25
|
-
super().__init__(print_warning, skip_tracking)
|
|
27
|
+
super().__init__(print_warning, skip_tracking, silent, get_client() if get_client is not None else client)
|
|
26
28
|
self._dataset_external_id_by_id: dict[int, str] = {}
|
|
27
29
|
# We only initialize the client if we need to look up dataset ids.
|
|
28
30
|
self._client: ToolkitClient | None = None
|
|
@@ -10,9 +10,9 @@ from rich.table import Table
|
|
|
10
10
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
11
11
|
from cognite_toolkit._cdf_tk.client.http_client import (
|
|
12
12
|
HTTPClient,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
ItemsFailedRequest,
|
|
14
|
+
ItemsFailedResponse,
|
|
15
|
+
ItemsSuccessResponse,
|
|
16
16
|
)
|
|
17
17
|
from cognite_toolkit._cdf_tk.commands._base import ToolkitCommand
|
|
18
18
|
from cognite_toolkit._cdf_tk.commands._migrate.creators import MigrationCreator
|
|
@@ -187,20 +187,20 @@ class MigrationCommand(ToolkitCommand):
|
|
|
187
187
|
# Todo: Move logging into the UploadableStorageIO class
|
|
188
188
|
issues: list[WriteIssue] = []
|
|
189
189
|
for item in responses:
|
|
190
|
-
if isinstance(item,
|
|
190
|
+
if isinstance(item, ItemsSuccessResponse):
|
|
191
191
|
target.logger.tracker.finalize_item(item.ids, "success")
|
|
192
192
|
continue
|
|
193
|
-
if isinstance(item,
|
|
193
|
+
if isinstance(item, ItemsFailedResponse):
|
|
194
194
|
error = item.error
|
|
195
195
|
for id_ in item.ids:
|
|
196
196
|
issue = WriteIssue(id=str(id_), status_code=error.code, message=error.message)
|
|
197
197
|
issues.append(issue)
|
|
198
|
-
elif isinstance(item,
|
|
198
|
+
elif isinstance(item, ItemsFailedRequest):
|
|
199
199
|
for id_ in item.ids:
|
|
200
200
|
issue = WriteIssue(id=str(id_), status_code=0, message=item.error_message)
|
|
201
201
|
issues.append(issue)
|
|
202
202
|
|
|
203
|
-
if isinstance(item,
|
|
203
|
+
if isinstance(item, ItemsFailedResponse | ItemsFailedRequest):
|
|
204
204
|
target.logger.tracker.finalize_item(item.ids, "failure")
|
|
205
205
|
if issues:
|
|
206
206
|
target.logger.log(issues)
|
|
@@ -7,14 +7,14 @@ from cognite.client.data_classes.data_modeling import EdgeId, InstanceApply, Nod
|
|
|
7
7
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
8
8
|
from cognite_toolkit._cdf_tk.client.http_client import (
|
|
9
9
|
HTTPClient,
|
|
10
|
-
|
|
10
|
+
RequestMessage,
|
|
11
11
|
ToolkitAPIError,
|
|
12
12
|
)
|
|
13
13
|
from cognite_toolkit._cdf_tk.client.http_client._item_classes import (
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
ItemsFailedResponse,
|
|
15
|
+
ItemsRequest,
|
|
16
16
|
ItemsResultList,
|
|
17
|
-
|
|
17
|
+
ItemsSuccessResponse,
|
|
18
18
|
)
|
|
19
19
|
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.pending_instances_ids import PendingInstanceId
|
|
20
20
|
from cognite_toolkit._cdf_tk.client.resource_classes.three_d import (
|
|
@@ -200,7 +200,7 @@ class AssetCentricMigrationIO(
|
|
|
200
200
|
successful_linked: set[str] = set()
|
|
201
201
|
for batch in chunker_sequence(data_chunk, cls.CHUNK_SIZE):
|
|
202
202
|
batch_results = http_client.request_items_retries(
|
|
203
|
-
message=
|
|
203
|
+
message=ItemsRequest(
|
|
204
204
|
endpoint_url=config.create_api_url(pending_instance_id_endpoint),
|
|
205
205
|
method="POST",
|
|
206
206
|
api_version="alpha",
|
|
@@ -211,7 +211,7 @@ class AssetCentricMigrationIO(
|
|
|
211
211
|
)
|
|
212
212
|
)
|
|
213
213
|
for res in batch_results:
|
|
214
|
-
if isinstance(res,
|
|
214
|
+
if isinstance(res, ItemsSuccessResponse):
|
|
215
215
|
successful_linked.update(res.ids)
|
|
216
216
|
to_upload = [item for item in data_chunk if item.source_id in successful_linked]
|
|
217
217
|
return to_upload
|
|
@@ -450,24 +450,24 @@ class ThreeDMigrationIO(UploadableStorageIO[ThreeDSelector, ThreeDModelResponse,
|
|
|
450
450
|
|
|
451
451
|
results = ItemsResultList()
|
|
452
452
|
responses = http_client.request_items_retries(
|
|
453
|
-
message=
|
|
453
|
+
message=ItemsRequest(
|
|
454
454
|
endpoint_url=self.client.config.create_api_url(self.UPLOAD_ENDPOINT),
|
|
455
455
|
method="POST",
|
|
456
456
|
items=data_chunk,
|
|
457
457
|
)
|
|
458
458
|
)
|
|
459
459
|
if (
|
|
460
|
-
failed_response := next((res for res in responses if isinstance(res,
|
|
460
|
+
failed_response := next((res for res in responses if isinstance(res, ItemsFailedResponse)), None)
|
|
461
461
|
) and failed_response.status_code == 400:
|
|
462
462
|
raise ToolkitAPIError("3D model migration failed. You need to enable the 3D migration alpha feature flag.")
|
|
463
463
|
|
|
464
464
|
results.extend(responses)
|
|
465
|
-
success_ids = {id for res in responses if isinstance(res,
|
|
465
|
+
success_ids = {id for res in responses if isinstance(res, ItemsSuccessResponse) for id in res.ids}
|
|
466
466
|
for data in data_chunk:
|
|
467
467
|
if data.source_id not in success_ids:
|
|
468
468
|
continue
|
|
469
469
|
revision = http_client.request_single_retries(
|
|
470
|
-
message=
|
|
470
|
+
message=RequestMessage(
|
|
471
471
|
endpoint_url=self.client.config.create_api_url(self.REVISION_ENDPOINT),
|
|
472
472
|
method="POST",
|
|
473
473
|
body_content={"items": [data.item.revision.dump(camel_case=True)]},
|
|
@@ -548,7 +548,7 @@ class ThreeDAssetMappingMigrationIO(
|
|
|
548
548
|
revision_id = first.item.revision_id
|
|
549
549
|
endpoint = self.UPLOAD_ENDPOINT.format(modelId=model_id, revisionId=revision_id)
|
|
550
550
|
return http_client.request_items_retries(
|
|
551
|
-
|
|
551
|
+
ItemsRequest(
|
|
552
552
|
endpoint_url=self.client.config.create_api_url(endpoint),
|
|
553
553
|
method="POST",
|
|
554
554
|
items=data_chunk,
|
|
@@ -71,8 +71,9 @@ class ProfileCommand(ToolkitCommand, ABC, Generic[T_Index]):
|
|
|
71
71
|
print_warning: bool = True,
|
|
72
72
|
skip_tracking: bool = False,
|
|
73
73
|
silent: bool = False,
|
|
74
|
+
client: ToolkitClient | None = None,
|
|
74
75
|
) -> None:
|
|
75
|
-
super().__init__(print_warning, skip_tracking, silent)
|
|
76
|
+
super().__init__(print_warning, skip_tracking, silent, client)
|
|
76
77
|
self.table_title = self.__class__.__name__.removesuffix("Command")
|
|
77
78
|
self.output_spreadsheet: Path | None = output_spreadsheet
|
|
78
79
|
if output_spreadsheet is not None:
|
|
@@ -347,8 +348,9 @@ class ProfileAssetCommand(ProfileCommand[AssetIndex]):
|
|
|
347
348
|
print_warning: bool = True,
|
|
348
349
|
skip_tracking: bool = False,
|
|
349
350
|
silent: bool = False,
|
|
351
|
+
client: ToolkitClient | None = None,
|
|
350
352
|
) -> None:
|
|
351
|
-
super().__init__(output_spreadsheet, print_warning, skip_tracking, silent)
|
|
353
|
+
super().__init__(output_spreadsheet, print_warning, skip_tracking, silent, client)
|
|
352
354
|
self.table_title = "Asset Profile for Hierarchy"
|
|
353
355
|
self.hierarchy: str | None = None
|
|
354
356
|
self.aggregators: dict[str, MetadataAggregator] = {}
|
|
@@ -641,8 +643,9 @@ class ProfileAssetCentricCommand(ProfileCommand[str]):
|
|
|
641
643
|
print_warning: bool = True,
|
|
642
644
|
skip_tracking: bool = False,
|
|
643
645
|
silent: bool = False,
|
|
646
|
+
client: ToolkitClient | None = None,
|
|
644
647
|
) -> None:
|
|
645
|
-
super().__init__(output_spreadsheet, print_warning, skip_tracking, silent)
|
|
648
|
+
super().__init__(output_spreadsheet, print_warning, skip_tracking, silent, client)
|
|
646
649
|
self.hierarchy: str | None = None
|
|
647
650
|
self.table_title = "Asset Centric Profile"
|
|
648
651
|
self.aggregators: dict[str, AssetCentricAggregator] = {}
|
|
@@ -742,8 +745,9 @@ class ProfileTransformationCommand(ProfileCommand[str]):
|
|
|
742
745
|
print_warning: bool = True,
|
|
743
746
|
skip_tracking: bool = False,
|
|
744
747
|
silent: bool = False,
|
|
748
|
+
client: ToolkitClient | None = None,
|
|
745
749
|
) -> None:
|
|
746
|
-
super().__init__(output_spreadsheet, print_warning, skip_tracking, silent)
|
|
750
|
+
super().__init__(output_spreadsheet, print_warning, skip_tracking, silent, client)
|
|
747
751
|
self.table_title = "Transformation Profile"
|
|
748
752
|
self.destination_type: AssetCentricDestinationType | None = None
|
|
749
753
|
|
|
@@ -826,8 +830,9 @@ class ProfileRawCommand(ProfileCommand[RawProfileIndex]):
|
|
|
826
830
|
print_warning: bool = True,
|
|
827
831
|
skip_tracking: bool = False,
|
|
828
832
|
silent: bool = False,
|
|
833
|
+
client: ToolkitClient | None = None,
|
|
829
834
|
) -> None:
|
|
830
|
-
super().__init__(output_spreadsheet, print_warning, skip_tracking, silent)
|
|
835
|
+
super().__init__(output_spreadsheet, print_warning, skip_tracking, silent, client)
|
|
831
836
|
self.table_title = "RAW Profile"
|
|
832
837
|
self.destination_type: AssetCentricDestinationType | None = None
|
|
833
838
|
self.client: ToolkitClient | None = None
|
|
@@ -20,8 +20,8 @@ from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
|
20
20
|
from cognite_toolkit._cdf_tk.client._resource_base import RequestItem
|
|
21
21
|
from cognite_toolkit._cdf_tk.client.http_client import (
|
|
22
22
|
HTTPClient,
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
ItemsRequest,
|
|
24
|
+
ItemsSuccessResponse,
|
|
25
25
|
)
|
|
26
26
|
from cognite_toolkit._cdf_tk.client.resource_classes.instance_api import TypedInstanceIdentifier
|
|
27
27
|
from cognite_toolkit._cdf_tk.cruds import (
|
|
@@ -221,7 +221,7 @@ class PurgeCommand(ToolkitCommand):
|
|
|
221
221
|
if not dry_run and not auto_yes:
|
|
222
222
|
confirm = questionary.confirm(
|
|
223
223
|
f"Are you really sure you want to purge the {selected_space!r} space?", default=False
|
|
224
|
-
).
|
|
224
|
+
).ask()
|
|
225
225
|
if not confirm:
|
|
226
226
|
return DeployResults([], "purge", dry_run=dry_run)
|
|
227
227
|
|
|
@@ -372,7 +372,7 @@ class PurgeCommand(ToolkitCommand):
|
|
|
372
372
|
|
|
373
373
|
def process(items: list[JsonVal]) -> None:
|
|
374
374
|
responses = delete_client.request_items_retries(
|
|
375
|
-
|
|
375
|
+
ItemsRequest(
|
|
376
376
|
endpoint_url=delete_url,
|
|
377
377
|
method="POST",
|
|
378
378
|
items=[DeleteItem(item=item, as_id_fun=as_id) for item in items],
|
|
@@ -380,7 +380,7 @@ class PurgeCommand(ToolkitCommand):
|
|
|
380
380
|
)
|
|
381
381
|
)
|
|
382
382
|
for response in responses:
|
|
383
|
-
if isinstance(response,
|
|
383
|
+
if isinstance(response, ItemsSuccessResponse):
|
|
384
384
|
result.deleted += len(response.ids)
|
|
385
385
|
else:
|
|
386
386
|
result.unchanged += len(response.ids)
|
|
@@ -422,7 +422,7 @@ class PurgeCommand(ToolkitCommand):
|
|
|
422
422
|
if not dry_run and not auto_yes:
|
|
423
423
|
confirm = questionary.confirm(
|
|
424
424
|
f"Are you really sure you want to purge the {selected_data_set_external_id!r} dataSet?", default=False
|
|
425
|
-
).
|
|
425
|
+
).ask()
|
|
426
426
|
if not confirm:
|
|
427
427
|
return DeployResults([], "purge", dry_run=dry_run)
|
|
428
428
|
|
|
@@ -594,7 +594,7 @@ class PurgeCommand(ToolkitCommand):
|
|
|
594
594
|
confirm = questionary.confirm(
|
|
595
595
|
f"Are you really sure you want to purge all {total:,} instances in {selector!s}?",
|
|
596
596
|
default=False,
|
|
597
|
-
).
|
|
597
|
+
).ask()
|
|
598
598
|
if not confirm:
|
|
599
599
|
return DeleteResults()
|
|
600
600
|
|
|
@@ -715,14 +715,14 @@ class PurgeCommand(ToolkitCommand):
|
|
|
715
715
|
return
|
|
716
716
|
|
|
717
717
|
responses = delete_client.request_items_retries(
|
|
718
|
-
|
|
718
|
+
ItemsRequest(
|
|
719
719
|
endpoint_url=delete_client.config.create_api_url("/models/instances/delete"),
|
|
720
720
|
method="POST",
|
|
721
721
|
items=[TypedInstanceIdentifier._load(item) for item in items],
|
|
722
722
|
)
|
|
723
723
|
)
|
|
724
724
|
for response in responses:
|
|
725
|
-
if isinstance(response,
|
|
725
|
+
if isinstance(response, ItemsSuccessResponse):
|
|
726
726
|
results.deleted += len(response.ids)
|
|
727
727
|
else:
|
|
728
728
|
results.failed += len(response.ids)
|
|
@@ -734,17 +734,13 @@ class PurgeCommand(ToolkitCommand):
|
|
|
734
734
|
node_ids = [instance for instance in instances if isinstance(instance, NodeId)]
|
|
735
735
|
if node_ids:
|
|
736
736
|
timeseries = client.time_series.retrieve_multiple(instance_ids=node_ids, ignore_unknown_ids=True)
|
|
737
|
-
migrated_timeseries_ids = [
|
|
738
|
-
ts.id
|
|
739
|
-
for ts in timeseries
|
|
740
|
-
if ts.instance_id and ts.pending_instance_id # type: ignore[attr-defined]
|
|
741
|
-
]
|
|
742
737
|
if not dry_run and timeseries:
|
|
738
|
+
migrated_timeseries_ids = [ts.id for ts in timeseries if ts.instance_id and ts.pending_instance_id] # type: ignore[attr-defined]
|
|
743
739
|
client.time_series.unlink_instance_ids(id=migrated_timeseries_ids)
|
|
744
740
|
if verbose:
|
|
745
741
|
console.print(f"Unlinked {len(migrated_timeseries_ids)} timeseries from datapoints.")
|
|
746
742
|
elif verbose and timeseries:
|
|
747
|
-
console.print(f"Would have unlinked {len(
|
|
743
|
+
console.print(f"Would have unlinked {len(timeseries)} timeseries from datapoints.")
|
|
748
744
|
return instances
|
|
749
745
|
|
|
750
746
|
@staticmethod
|
|
@@ -754,15 +750,15 @@ class PurgeCommand(ToolkitCommand):
|
|
|
754
750
|
file_ids = [instance for instance in instances if isinstance(instance, NodeId)]
|
|
755
751
|
if file_ids:
|
|
756
752
|
files = client.files.retrieve_multiple(instance_ids=file_ids, ignore_unknown_ids=True)
|
|
757
|
-
migrated_file_ids = [
|
|
758
|
-
file.id
|
|
759
|
-
for file in files
|
|
760
|
-
if file.instance_id and file.pending_instance_id and file.id is not None # type: ignore[attr-defined]
|
|
761
|
-
]
|
|
762
753
|
if not dry_run and files:
|
|
754
|
+
migrated_file_ids = [
|
|
755
|
+
file.id
|
|
756
|
+
for file in files
|
|
757
|
+
if file.instance_id and file.pending_instance_id and file.id is not None # type: ignore[attr-defined]
|
|
758
|
+
]
|
|
763
759
|
client.files.unlink_instance_ids(id=migrated_file_ids)
|
|
764
760
|
if verbose:
|
|
765
761
|
console.print(f"Unlinked {len(migrated_file_ids)} files from nodes.")
|
|
766
762
|
elif verbose and files:
|
|
767
|
-
console.print(f"Would have unlinked {len(
|
|
763
|
+
console.print(f"Would have unlinked {len(files)} files from their blob content.")
|
|
768
764
|
return instances
|
|
@@ -7,7 +7,7 @@ from cognite.client.data_classes.data_modeling import ViewId
|
|
|
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.http_client import HTTPClient,
|
|
10
|
+
from cognite_toolkit._cdf_tk.client.http_client import HTTPClient, ItemsResultMessage, ItemsSuccessResponse
|
|
11
11
|
from cognite_toolkit._cdf_tk.constants import DATA_MANIFEST_SUFFIX, DATA_RESOURCE_DIR
|
|
12
12
|
from cognite_toolkit._cdf_tk.cruds import ViewCRUD
|
|
13
13
|
from cognite_toolkit._cdf_tk.exceptions import ToolkitValueError
|
|
@@ -277,10 +277,10 @@ class UploadCommand(ToolkitCommand):
|
|
|
277
277
|
return
|
|
278
278
|
results = io.upload_items(data_chunk, upload_client, selector)
|
|
279
279
|
for message in results:
|
|
280
|
-
if isinstance(message,
|
|
280
|
+
if isinstance(message, ItemsSuccessResponse):
|
|
281
281
|
for id_ in message.ids:
|
|
282
282
|
tracker.set_progress(id_, step=cls._UPLOAD, status="success")
|
|
283
|
-
elif isinstance(message,
|
|
283
|
+
elif isinstance(message, ItemsResultMessage):
|
|
284
284
|
for id_ in message.ids:
|
|
285
285
|
tracker.set_progress(id_, step=cls._UPLOAD, status="failed")
|
|
286
286
|
else:
|
|
@@ -99,8 +99,9 @@ class BuildCommand(ToolkitCommand):
|
|
|
99
99
|
print_warning: bool = True,
|
|
100
100
|
skip_tracking: bool = False,
|
|
101
101
|
silent: bool = False,
|
|
102
|
+
client: ToolkitClient | None = None,
|
|
102
103
|
) -> None:
|
|
103
|
-
super().__init__(print_warning, skip_tracking, silent)
|
|
104
|
+
super().__init__(print_warning, skip_tracking, silent, client)
|
|
104
105
|
self.existing_resources_by_loader: dict[type[ResourceCRUD], set[Hashable]] = defaultdict(set)
|
|
105
106
|
self.instantiated_loaders: dict[type[ResourceCRUD], ResourceCRUD] = {}
|
|
106
107
|
|
|
@@ -21,8 +21,14 @@ from cognite_toolkit._version import __version__
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class BuildCommand(ToolkitCommand):
|
|
24
|
-
def __init__(
|
|
25
|
-
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
print_warning: bool = True,
|
|
27
|
+
skip_tracking: bool = False,
|
|
28
|
+
silent: bool = False,
|
|
29
|
+
client: ToolkitClient | None = None,
|
|
30
|
+
) -> None:
|
|
31
|
+
super().__init__(print_warning, skip_tracking, silent, client)
|
|
26
32
|
self.issues = IssueList()
|
|
27
33
|
|
|
28
34
|
def execute(
|
|
@@ -62,8 +62,14 @@ from ._utils import _print_ids_or_length
|
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
class DeployCommand(ToolkitCommand):
|
|
65
|
-
def __init__(
|
|
66
|
-
|
|
65
|
+
def __init__(
|
|
66
|
+
self,
|
|
67
|
+
print_warning: bool = True,
|
|
68
|
+
skip_tracking: bool = False,
|
|
69
|
+
silent: bool = False,
|
|
70
|
+
client: ToolkitClient | None = None,
|
|
71
|
+
) -> None:
|
|
72
|
+
super().__init__(print_warning, skip_tracking, silent, client)
|
|
67
73
|
self._clean_command = CleanCommand(print_warning, skip_tracking=True)
|
|
68
74
|
|
|
69
75
|
def deploy_build_directory(
|
|
@@ -13,6 +13,7 @@ from rich import print
|
|
|
13
13
|
from rich.panel import Panel
|
|
14
14
|
|
|
15
15
|
from cognite_toolkit._cdf_tk.cdf_toml import CDFToml
|
|
16
|
+
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
16
17
|
from cognite_toolkit._cdf_tk.commands._base import ToolkitCommand
|
|
17
18
|
from cognite_toolkit._cdf_tk.commands.auth import AuthCommand
|
|
18
19
|
from cognite_toolkit._cdf_tk.commands.collect import CollectCommand
|
|
@@ -54,8 +55,14 @@ class InitChecklistItem:
|
|
|
54
55
|
class InitCommand(ToolkitCommand):
|
|
55
56
|
organization_dir: Path | None
|
|
56
57
|
|
|
57
|
-
def __init__(
|
|
58
|
-
|
|
58
|
+
def __init__(
|
|
59
|
+
self,
|
|
60
|
+
print_warning: bool = True,
|
|
61
|
+
skip_tracking: bool = False,
|
|
62
|
+
silent: bool = False,
|
|
63
|
+
client: ToolkitClient | None = None,
|
|
64
|
+
) -> None:
|
|
65
|
+
super().__init__(print_warning, skip_tracking, silent, client)
|
|
59
66
|
self.organization_dir = None
|
|
60
67
|
|
|
61
68
|
def execute(self, dry_run: bool = False) -> None:
|
|
@@ -23,6 +23,7 @@ from rich.table import Table
|
|
|
23
23
|
from rich.tree import Tree
|
|
24
24
|
|
|
25
25
|
from cognite_toolkit._cdf_tk.cdf_toml import CDFToml, Library
|
|
26
|
+
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
26
27
|
from cognite_toolkit._cdf_tk.commands import _cli_commands as CLICommands
|
|
27
28
|
from cognite_toolkit._cdf_tk.commands._base import ToolkitCommand
|
|
28
29
|
from cognite_toolkit._cdf_tk.commands._changes import (
|
|
@@ -81,10 +82,11 @@ class ModulesCommand(ToolkitCommand):
|
|
|
81
82
|
print_warning: bool = True,
|
|
82
83
|
skip_tracking: bool = False,
|
|
83
84
|
silent: bool = False,
|
|
85
|
+
client: ToolkitClient | None = None,
|
|
84
86
|
temp_dir_suffix: str | None = None,
|
|
85
87
|
module_source_dir: Path | None = None,
|
|
86
88
|
):
|
|
87
|
-
super().__init__(print_warning, skip_tracking, silent)
|
|
89
|
+
super().__init__(print_warning, skip_tracking, silent, client)
|
|
88
90
|
self._module_source_dir: Path | None = module_source_dir
|
|
89
91
|
# Use suffix to make temp directory unique (useful for parallel test execution)
|
|
90
92
|
modules_dir_name = f"{MODULES}.{temp_dir_suffix}" if temp_dir_suffix else MODULES
|
|
@@ -411,8 +411,14 @@ class TextFileDifference(UserList):
|
|
|
411
411
|
|
|
412
412
|
|
|
413
413
|
class PullCommand(ToolkitCommand):
|
|
414
|
-
def __init__(
|
|
415
|
-
|
|
414
|
+
def __init__(
|
|
415
|
+
self,
|
|
416
|
+
print_warning: bool = True,
|
|
417
|
+
skip_tracking: bool = False,
|
|
418
|
+
silent: bool = False,
|
|
419
|
+
client: ToolkitClient | None = None,
|
|
420
|
+
) -> None:
|
|
421
|
+
super().__init__(print_warning, skip_tracking, silent, client)
|
|
416
422
|
self._clean_command = CleanCommand(print_warning, skip_tracking=True)
|
|
417
423
|
|
|
418
424
|
def pull_module(
|
|
@@ -5,6 +5,7 @@ from pathlib import Path
|
|
|
5
5
|
import questionary
|
|
6
6
|
|
|
7
7
|
import cognite_toolkit
|
|
8
|
+
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
8
9
|
from cognite_toolkit._cdf_tk.constants import REPO_FILES_DIR
|
|
9
10
|
from cognite_toolkit._cdf_tk.exceptions import ToolkitValueError
|
|
10
11
|
from cognite_toolkit._cdf_tk.tk_warnings import LowSeverityWarning, MediumSeverityWarning
|
|
@@ -27,8 +28,9 @@ class RepoCommand(ToolkitCommand):
|
|
|
27
28
|
skip_tracking: bool = False,
|
|
28
29
|
silent: bool = False,
|
|
29
30
|
skip_git_verify: bool = False,
|
|
31
|
+
client: ToolkitClient | None = None,
|
|
30
32
|
) -> None:
|
|
31
|
-
super().__init__(print_warning=print_warning, skip_tracking=skip_tracking, silent=silent)
|
|
33
|
+
super().__init__(print_warning=print_warning, skip_tracking=skip_tracking, silent=silent, client=client)
|
|
32
34
|
self._repo_files = Path(resources.files(cognite_toolkit.__name__)) / REPO_FILES_DIR # type: ignore [arg-type]
|
|
33
35
|
self.skip_git_verify = skip_git_verify
|
|
34
36
|
|
|
@@ -17,9 +17,6 @@ from cognite_toolkit._cdf_tk.utils.file import yaml_safe_dump
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class ResourcesCommand(ToolkitCommand):
|
|
20
|
-
def __init__(self, print_warning: bool = True, skip_tracking: bool = False, silent: bool = False) -> None:
|
|
21
|
-
super().__init__(print_warning, skip_tracking, silent)
|
|
22
|
-
|
|
23
20
|
def _get_or_prompt_module_path(self, module: str | None, organization_dir: Path, verbose: bool) -> Path:
|
|
24
21
|
"""
|
|
25
22
|
Check if the module exists in the organization directory and return the module path.
|
|
@@ -25,6 +25,7 @@ class CommandTrackingInfo(BaseModel):
|
|
|
25
25
|
|
|
26
26
|
project: str | None = Field(default=None)
|
|
27
27
|
cluster: str | None = Field(default=None)
|
|
28
|
+
organization: str | None = Field(default=None)
|
|
28
29
|
module_ids: set[str] = Field(default_factory=set, alias="moduleIds")
|
|
29
30
|
package_ids: set[str] = Field(default_factory=set, alias="packageIds")
|
|
30
31
|
installed_module_ids: set[str] = Field(default_factory=set, alias="installedModuleIds")
|
|
@@ -7,9 +7,9 @@ from pydantic import JsonValue
|
|
|
7
7
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
8
8
|
from cognite_toolkit._cdf_tk.client.http_client import (
|
|
9
9
|
HTTPClient,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
HTTPResult,
|
|
11
|
+
RequestMessage,
|
|
12
|
+
SuccessResponse,
|
|
13
13
|
)
|
|
14
14
|
from cognite_toolkit._cdf_tk.client.http_client._item_classes import ItemsResultList
|
|
15
15
|
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.canvas import (
|
|
@@ -217,7 +217,7 @@ class CanvasIO(UploadableStorageIO[CanvasSelector, IndustrialCanvas, IndustrialC
|
|
|
217
217
|
else:
|
|
218
218
|
to_delete = []
|
|
219
219
|
|
|
220
|
-
last_response:
|
|
220
|
+
last_response: HTTPResult | None = None
|
|
221
221
|
for upsert_chunk, delete_chunk in zip_longest(
|
|
222
222
|
chunker_sequence(upsert_items, 1000), chunker_sequence(to_delete, 1000), fillvalue=None
|
|
223
223
|
):
|
|
@@ -229,13 +229,13 @@ class CanvasIO(UploadableStorageIO[CanvasSelector, IndustrialCanvas, IndustrialC
|
|
|
229
229
|
body_content["delete"] = delete_chunk
|
|
230
230
|
|
|
231
231
|
response = http_client.request_single_retries(
|
|
232
|
-
message=
|
|
232
|
+
message=RequestMessage(
|
|
233
233
|
endpoint_url=config.create_api_url("/models/instances"),
|
|
234
234
|
method="POST",
|
|
235
235
|
body_content=body_content,
|
|
236
236
|
)
|
|
237
237
|
)
|
|
238
|
-
if not isinstance(response,
|
|
238
|
+
if not isinstance(response, SuccessResponse):
|
|
239
239
|
results.append(response.as_item_response(item.source_id))
|
|
240
240
|
last_response = response
|
|
241
241
|
if last_response is not None:
|
|
@@ -8,7 +8,7 @@ from pydantic import ConfigDict
|
|
|
8
8
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
9
9
|
from cognite_toolkit._cdf_tk.client._resource_base import RequestItem
|
|
10
10
|
from cognite_toolkit._cdf_tk.client.http_client import HTTPClient
|
|
11
|
-
from cognite_toolkit._cdf_tk.client.http_client._item_classes import
|
|
11
|
+
from cognite_toolkit._cdf_tk.client.http_client._item_classes import ItemsRequest, ItemsResultList
|
|
12
12
|
from cognite_toolkit._cdf_tk.exceptions import ToolkitNotImplementedError
|
|
13
13
|
from cognite_toolkit._cdf_tk.protocols import T_ResourceRequest, T_ResourceResponse
|
|
14
14
|
from cognite_toolkit._cdf_tk.utils.collection import chunker
|
|
@@ -185,7 +185,7 @@ class UploadableStorageIO(
|
|
|
185
185
|
raise ToolkitNotImplementedError(f"Unsupported UPLOAD_ENDPOINT_TYPE {self.UPLOAD_ENDPOINT_TYPE!r}.")
|
|
186
186
|
|
|
187
187
|
return http_client.request_items_retries(
|
|
188
|
-
message=
|
|
188
|
+
message=ItemsRequest(
|
|
189
189
|
endpoint_url=url,
|
|
190
190
|
method=self.UPLOAD_ENDPOINT_METHOD,
|
|
191
191
|
items=data_chunk,
|
|
@@ -19,8 +19,8 @@ from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
|
19
19
|
from cognite_toolkit._cdf_tk.client._resource_base import Identifier, RequestResource
|
|
20
20
|
from cognite_toolkit._cdf_tk.client.http_client import (
|
|
21
21
|
HTTPClient,
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
RequestMessage,
|
|
23
|
+
SuccessResponse,
|
|
24
24
|
)
|
|
25
25
|
from cognite_toolkit._cdf_tk.client.http_client._item_classes import ItemsResultList
|
|
26
26
|
from cognite_toolkit._cdf_tk.exceptions import ToolkitNotImplementedError
|
|
@@ -132,7 +132,7 @@ class DatapointsIO(
|
|
|
132
132
|
for ts in timeseries
|
|
133
133
|
]
|
|
134
134
|
response = self.client.http_client.request_single_retries(
|
|
135
|
-
|
|
135
|
+
RequestMessage(
|
|
136
136
|
endpoint_url=config.create_api_url("/timeseries/data/list"),
|
|
137
137
|
method="POST",
|
|
138
138
|
accept="application/protobuf",
|
|
@@ -140,7 +140,7 @@ class DatapointsIO(
|
|
|
140
140
|
body_content={"items": items}, # type: ignore[dict-item]
|
|
141
141
|
)
|
|
142
142
|
)
|
|
143
|
-
if not isinstance(response,
|
|
143
|
+
if not isinstance(response, SuccessResponse):
|
|
144
144
|
continue
|
|
145
145
|
aggregate_response: DataPointListResponse = DataPointListResponse.FromString(response.content)
|
|
146
146
|
timeseries_ids_with_data: dict[int, int] = {}
|
|
@@ -190,7 +190,7 @@ class DatapointsIO(
|
|
|
190
190
|
|
|
191
191
|
def _fetch_datapoints_batch(self, batch: list[dict[str, Any]], config: Any) -> Page[DataPointListResponse] | None:
|
|
192
192
|
response = self.client.http_client.request_single_retries(
|
|
193
|
-
|
|
193
|
+
RequestMessage(
|
|
194
194
|
endpoint_url=config.create_api_url("/timeseries/data/list"),
|
|
195
195
|
method="POST",
|
|
196
196
|
accept="application/protobuf",
|
|
@@ -198,7 +198,7 @@ class DatapointsIO(
|
|
|
198
198
|
body_content={"items": batch}, # type: ignore[dict-item]
|
|
199
199
|
)
|
|
200
200
|
)
|
|
201
|
-
if not isinstance(response,
|
|
201
|
+
if not isinstance(response, SuccessResponse):
|
|
202
202
|
return None
|
|
203
203
|
data_response: DataPointListResponse = DataPointListResponse.FromString(response.content)
|
|
204
204
|
return Page("Main", [data_response])
|
|
@@ -257,7 +257,7 @@ class DatapointsIO(
|
|
|
257
257
|
results = ItemsResultList()
|
|
258
258
|
for item in data_chunk:
|
|
259
259
|
response = http_client.request_single_retries(
|
|
260
|
-
|
|
260
|
+
RequestMessage(
|
|
261
261
|
endpoint_url=http_client.config.create_api_url(self.UPLOAD_ENDPOINT),
|
|
262
262
|
method="POST",
|
|
263
263
|
content_type="application/protobuf",
|