cognite-toolkit 0.7.39__py3-none-any.whl → 0.7.51__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/apps/_migrate_app.py +6 -6
- cognite_toolkit/_cdf_tk/builders/_function.py +81 -9
- cognite_toolkit/_cdf_tk/builders/_raw.py +1 -1
- cognite_toolkit/_cdf_tk/client/_resource_base.py +187 -0
- cognite_toolkit/_cdf_tk/client/_toolkit_client.py +37 -5
- 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 +130 -0
- 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 +129 -0
- cognite_toolkit/_cdf_tk/client/api/extraction_pipelines.py +148 -0
- cognite_toolkit/_cdf_tk/client/api/filemetadata.py +176 -0
- 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 +8 -8
- cognite_toolkit/_cdf_tk/client/api/instances.py +139 -0
- cognite_toolkit/_cdf_tk/client/api/labels.py +125 -0
- cognite_toolkit/_cdf_tk/client/api/legacy/canvas.py +3 -3
- 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_functions.py +1 -1
- 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/location_filters.py +177 -0
- cognite_toolkit/_cdf_tk/client/api/migration.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/project.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/raw.py +204 -0
- cognite_toolkit/_cdf_tk/client/api/relationships.py +133 -0
- cognite_toolkit/_cdf_tk/client/api/robotics.py +19 -0
- cognite_toolkit/_cdf_tk/client/api/robotics_capabilities.py +127 -0
- cognite_toolkit/_cdf_tk/client/api/robotics_data_postprocessing.py +138 -0
- cognite_toolkit/_cdf_tk/client/api/robotics_frames.py +122 -0
- cognite_toolkit/_cdf_tk/client/api/robotics_locations.py +127 -0
- cognite_toolkit/_cdf_tk/client/api/robotics_maps.py +122 -0
- cognite_toolkit/_cdf_tk/client/api/robotics_robots.py +122 -0
- cognite_toolkit/_cdf_tk/client/api/search_config.py +101 -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 +154 -0
- cognite_toolkit/_cdf_tk/client/api/simulators.py +8 -0
- cognite_toolkit/_cdf_tk/client/api/spaces.py +117 -0
- cognite_toolkit/_cdf_tk/client/api/streams.py +65 -57
- cognite_toolkit/_cdf_tk/client/api/three_d.py +300 -283
- cognite_toolkit/_cdf_tk/client/api/timeseries.py +137 -0
- 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/__init__.py +10 -0
- cognite_toolkit/_cdf_tk/client/cdf_client/api.py +358 -0
- cognite_toolkit/_cdf_tk/client/cdf_client/responses.py +38 -0
- cognite_toolkit/_cdf_tk/{utils → client}/http_client/__init__.py +9 -7
- cognite_toolkit/_cdf_tk/{utils → client}/http_client/_client.py +23 -14
- cognite_toolkit/_cdf_tk/{utils → client}/http_client/_data_classes.py +12 -2
- cognite_toolkit/_cdf_tk/client/http_client/_data_classes2.py +151 -0
- cognite_toolkit/_cdf_tk/client/http_client/_exception.py +13 -0
- cognite_toolkit/_cdf_tk/client/http_client/_item_classes.py +118 -0
- cognite_toolkit/_cdf_tk/client/request_classes/base.py +19 -0
- cognite_toolkit/_cdf_tk/client/request_classes/filters.py +113 -0
- cognite_toolkit/_cdf_tk/client/request_classes/graphql.py +28 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/agent.py +130 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/annotation.py +79 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/apm_config.py +128 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/asset.py +47 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/charts_data.py +1 -1
- cognite_toolkit/_cdf_tk/client/resource_classes/cognite_file.py +53 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/__init__.py +168 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_constraints.py +37 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_container.py +50 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_data_model.py +73 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_data_types.py +116 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_indexes.py +26 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_instance.py +154 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_references.py +86 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_space.py +26 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_view.py +143 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_view_property.py +152 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/dataset.py +35 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/event.py +40 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/extraction_pipeline.py +59 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/filemetadata.py +52 -0
- 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/resource_classes/hosted_extractor_destination.py +34 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_job.py +134 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_mapping.py +72 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/__init__.py +63 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_auth.py +63 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_base.py +26 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_certificate.py +20 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_eventhub.py +31 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_kafka.py +53 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_mqtt.py +36 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_rest.py +49 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/identifiers.py +59 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/infield.py +1 -1
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/instance_api.py +35 -1
- cognite_toolkit/_cdf_tk/client/resource_classes/label.py +27 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/legacy/__init__.py +0 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/canvas.py +48 -15
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/charts.py +1 -1
- cognite_toolkit/_cdf_tk/client/resource_classes/location_filter.py +84 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/raw.py +44 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/relationship.py +49 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/resource_view_mapping.py +38 -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 +65 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_robot.py +58 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/search_config.py +54 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/securitycategory.py +24 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/sequence.py +45 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/sequence_rows.py +56 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/simulator_model.py +50 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/streamlit_.py +71 -0
- cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/streams.py +9 -26
- cognite_toolkit/_cdf_tk/client/resource_classes/three_d.py +135 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/timeseries.py +52 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/transformation.py +140 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/workflow.py +27 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/workflow_trigger.py +63 -0
- cognite_toolkit/_cdf_tk/client/resource_classes/workflow_version.py +155 -0
- cognite_toolkit/_cdf_tk/client/testing.py +31 -2
- cognite_toolkit/_cdf_tk/commands/_migrate/command.py +103 -108
- cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py +22 -15
- cognite_toolkit/_cdf_tk/commands/_migrate/creators.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_migrate/data_classes.py +11 -10
- cognite_toolkit/_cdf_tk/commands/_migrate/data_mapper.py +148 -57
- cognite_toolkit/_cdf_tk/commands/_migrate/default_mappings.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_migrate/issues.py +22 -39
- cognite_toolkit/_cdf_tk/commands/_migrate/migration_io.py +29 -27
- cognite_toolkit/_cdf_tk/commands/_profile.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_purge.py +8 -8
- cognite_toolkit/_cdf_tk/commands/_upload.py +1 -1
- cognite_toolkit/_cdf_tk/commands/build_cmd.py +12 -2
- cognite_toolkit/_cdf_tk/commands/build_v2/_module_parser.py +138 -0
- cognite_toolkit/_cdf_tk/commands/build_v2/_modules_parser.py +163 -0
- cognite_toolkit/_cdf_tk/commands/build_v2/build_cmd.py +83 -96
- cognite_toolkit/_cdf_tk/commands/build_v2/{build_input.py → build_parameters.py} +8 -22
- cognite_toolkit/_cdf_tk/commands/build_v2/data_classes/_modules.py +27 -0
- cognite_toolkit/_cdf_tk/commands/build_v2/data_classes/_resource.py +22 -0
- cognite_toolkit/_cdf_tk/commands/dump_resource.py +4 -4
- cognite_toolkit/_cdf_tk/commands/pull.py +97 -2
- cognite_toolkit/_cdf_tk/commands/run.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/__init__.py +16 -6
- cognite_toolkit/_cdf_tk/cruds/_data_cruds.py +9 -5
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/__init__.py +2 -0
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/auth.py +6 -2
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/classic.py +70 -89
- 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 +14 -7
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/file.py +50 -59
- 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 +4 -3
- 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 +5 -4
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/robotics.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/simulators.py +122 -0
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/streams.py +15 -31
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/timeseries.py +42 -47
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/transformation.py +1 -1
- cognite_toolkit/_cdf_tk/data_classes/__init__.py +3 -0
- cognite_toolkit/_cdf_tk/data_classes/_issues.py +36 -0
- cognite_toolkit/_cdf_tk/data_classes/_module_directories.py +2 -1
- cognite_toolkit/_cdf_tk/data_classes/_tracking_info.py +4 -0
- cognite_toolkit/_cdf_tk/feature_flags.py +8 -0
- cognite_toolkit/_cdf_tk/resource_classes/__init__.py +2 -0
- 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/resource_classes/simulator_model.py +17 -0
- cognite_toolkit/_cdf_tk/resource_classes/workflow_version.py +13 -4
- cognite_toolkit/_cdf_tk/storageio/_applications.py +53 -15
- cognite_toolkit/_cdf_tk/storageio/_asset_centric.py +117 -107
- cognite_toolkit/_cdf_tk/storageio/_base.py +3 -1
- cognite_toolkit/_cdf_tk/storageio/_datapoints.py +7 -7
- cognite_toolkit/_cdf_tk/storageio/_file_content.py +64 -54
- cognite_toolkit/_cdf_tk/storageio/_instances.py +1 -1
- cognite_toolkit/_cdf_tk/storageio/_raw.py +1 -1
- cognite_toolkit/_cdf_tk/storageio/logger.py +162 -0
- cognite_toolkit/_cdf_tk/tk_warnings/__init__.py +2 -0
- cognite_toolkit/_cdf_tk/tk_warnings/fileread.py +20 -0
- cognite_toolkit/_cdf_tk/utils/__init__.py +11 -1
- cognite_toolkit/_cdf_tk/utils/cdf.py +1 -1
- cognite_toolkit/_cdf_tk/utils/interactive_select.py +8 -6
- cognite_toolkit/_cdf_tk/utils/modules.py +7 -0
- cognite_toolkit/_cdf_tk/utils/pip_validator.py +96 -0
- cognite_toolkit/_cdf_tk/utils/useful_types.py +4 -7
- cognite_toolkit/_cdf_tk/utils/useful_types2.py +14 -0
- 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.39.dist-info → cognite_toolkit-0.7.51.dist-info}/METADATA +13 -3
- cognite_toolkit-0.7.51.dist-info/RECORD +445 -0
- {cognite_toolkit-0.7.39.dist-info → cognite_toolkit-0.7.51.dist-info}/WHEEL +2 -2
- cognite_toolkit/_cdf_tk/client/data_classes/api_classes.py +0 -30
- cognite_toolkit/_cdf_tk/client/data_classes/base.py +0 -67
- cognite_toolkit/_cdf_tk/client/data_classes/three_d.py +0 -112
- cognite_toolkit/_cdf_tk/commands/build_v2/build_issues.py +0 -27
- cognite_toolkit/_cdf_tk/utils/http_client/_data_classes2.py +0 -247
- cognite_toolkit/_cdf_tk/utils/http_client/_exception.py +0 -4
- cognite_toolkit-0.7.39.dist-info/RECORD +0 -322
- /cognite_toolkit/_cdf_tk/{utils → client}/http_client/_tracker.py +0 -0
- /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}/capabilities.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-0.7.39.dist-info → cognite_toolkit-0.7.51.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
from typing import Annotated, Any, Literal
|
|
2
|
+
|
|
3
|
+
from pydantic import Field, JsonValue, field_validator
|
|
4
|
+
from pydantic_core.core_schema import ValidationInfo
|
|
5
|
+
|
|
6
|
+
from cognite_toolkit._cdf_tk.client._resource_base import (
|
|
7
|
+
BaseModelObject,
|
|
8
|
+
RequestResource,
|
|
9
|
+
ResponseResource,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from .identifiers import Identifier, WorkflowVersionId
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TaskId(Identifier):
|
|
16
|
+
external_id: str
|
|
17
|
+
|
|
18
|
+
def __str__(self) -> str:
|
|
19
|
+
return f"externalId='{self.external_id}'"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TaskParameterDefinition(BaseModelObject):
|
|
23
|
+
type: str
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CogniteFunctionRef(BaseModelObject):
|
|
27
|
+
external_id: str
|
|
28
|
+
data: JsonValue | str | None = None
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class FunctionTaskParameters(TaskParameterDefinition):
|
|
32
|
+
type: Literal["function"] = Field("function", exclude=True)
|
|
33
|
+
function: CogniteFunctionRef
|
|
34
|
+
is_async_complete: bool | None = None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class TransformationRef(BaseModelObject):
|
|
38
|
+
external_id: str
|
|
39
|
+
concurrency_policy: Literal["fail", "waitForCurrent", "restartAfterCurrent"] | None = None
|
|
40
|
+
use_transformation_credentials: bool | None = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class TransformationTaskParameters(TaskParameterDefinition):
|
|
44
|
+
type: Literal["transformation"] = Field("transformation", exclude=True)
|
|
45
|
+
transformation: TransformationRef
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class CDFRequest(BaseModelObject):
|
|
49
|
+
resource_path: str
|
|
50
|
+
method: str
|
|
51
|
+
query_parameters: JsonValue | str | None = None
|
|
52
|
+
body: JsonValue | str | None = None
|
|
53
|
+
request_timeout_in_millis: float | str | None = None
|
|
54
|
+
cdf_version_header: str | None = None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class CDFTaskParameters(TaskParameterDefinition):
|
|
58
|
+
type: Literal["cdf"] = Field("cdf", exclude=True)
|
|
59
|
+
cdf_request: CDFRequest
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class DynamicRef(BaseModelObject):
|
|
63
|
+
tasks: str
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class DynamicTaskParameters(TaskParameterDefinition):
|
|
67
|
+
type: Literal["dynamic"] = Field("dynamic", exclude=True)
|
|
68
|
+
dynamic: DynamicRef
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class SubworkflowRef(BaseModelObject):
|
|
72
|
+
tasks: "list[Task]"
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class SubworkflowTaskParameters(TaskParameterDefinition):
|
|
76
|
+
type: Literal["subworkflow"] = Field("subworkflow", exclude=True)
|
|
77
|
+
subworkflow: WorkflowVersionId | SubworkflowRef
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class SimulatorInputUnit(BaseModelObject):
|
|
81
|
+
name: str
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class SimulatorInput(BaseModelObject):
|
|
85
|
+
reference_id: str
|
|
86
|
+
value: str | int | float | list[str] | list[int] | list[float]
|
|
87
|
+
unit: SimulatorInputUnit | None = None
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class SimulationRef(BaseModelObject):
|
|
91
|
+
routine_external_id: str
|
|
92
|
+
run_time: int | None = None
|
|
93
|
+
inputs: list[SimulatorInput] | None = None
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class SimulationTaskParameters(TaskParameterDefinition):
|
|
97
|
+
type: Literal["simulation"] = Field("simulation", exclude=True)
|
|
98
|
+
simulation: SimulationRef
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
Parameter = Annotated[
|
|
102
|
+
FunctionTaskParameters
|
|
103
|
+
| TransformationTaskParameters
|
|
104
|
+
| CDFTaskParameters
|
|
105
|
+
| DynamicTaskParameters
|
|
106
|
+
| SubworkflowTaskParameters
|
|
107
|
+
| SimulationTaskParameters,
|
|
108
|
+
Field(discriminator="type"),
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class Task(BaseModelObject):
|
|
113
|
+
external_id: str
|
|
114
|
+
type: str
|
|
115
|
+
name: str | None = None
|
|
116
|
+
description: str | None = None
|
|
117
|
+
retries: int | None = None
|
|
118
|
+
timeout: int | None = None
|
|
119
|
+
on_failure: Literal["abortWorkflow", "skipTask"] = "abortWorkflow"
|
|
120
|
+
depends_on: list[TaskId] | None = None
|
|
121
|
+
parameters: Parameter | None = None
|
|
122
|
+
|
|
123
|
+
@field_validator("parameters", mode="before")
|
|
124
|
+
@classmethod
|
|
125
|
+
def move_type_to_field(cls, value: Any, info: ValidationInfo) -> Any:
|
|
126
|
+
if not isinstance(value, dict) or "type" not in info.data:
|
|
127
|
+
return value
|
|
128
|
+
value = dict(value)
|
|
129
|
+
value["type"] = info.data["type"]
|
|
130
|
+
return value
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class WorkflowDefinition(BaseModelObject):
|
|
134
|
+
description: str | None = None
|
|
135
|
+
tasks: list[Task]
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class WorkflowVersion(BaseModelObject):
|
|
139
|
+
workflow_external_id: str
|
|
140
|
+
version: str
|
|
141
|
+
workflow_definition: WorkflowDefinition
|
|
142
|
+
|
|
143
|
+
def as_id(self) -> WorkflowVersionId:
|
|
144
|
+
return WorkflowVersionId(workflow_external_id=self.workflow_external_id, version=self.version)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
class WorkflowVersionRequest(WorkflowVersion, RequestResource): ...
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class WorkflowVersionResponse(WorkflowVersion, ResponseResource[WorkflowVersionRequest]):
|
|
151
|
+
created_time: int
|
|
152
|
+
last_updated_time: int
|
|
153
|
+
|
|
154
|
+
def as_request_resource(self) -> WorkflowVersionRequest:
|
|
155
|
+
return WorkflowVersionRequest.model_validate(self.dump(), extra="ignore")
|
|
@@ -7,6 +7,7 @@ from cognite.client._api.datapoints import DatapointsAPI
|
|
|
7
7
|
from cognite.client._api.datapoints_subscriptions import DatapointsSubscriptionAPI
|
|
8
8
|
from cognite.client._api.functions import FunctionCallsAPI, FunctionSchedulesAPI
|
|
9
9
|
from cognite.client._api.raw import RawDatabasesAPI, RawRowsAPI, RawTablesAPI
|
|
10
|
+
from cognite.client._api.simulators import SimulatorModelsAPI, SimulatorsAPI
|
|
10
11
|
from cognite.client._api.synthetic_time_series import SyntheticDatapointsAPI
|
|
11
12
|
from cognite.client.testing import CogniteClientMock
|
|
12
13
|
from rich.console import Console
|
|
@@ -32,7 +33,13 @@ from cognite_toolkit._cdf_tk.client.api.legacy.robotics import LocationsAPI as R
|
|
|
32
33
|
from cognite_toolkit._cdf_tk.client.api.legacy.search_config import SearchConfigurationsAPI
|
|
33
34
|
|
|
34
35
|
from ._toolkit_client import ToolAPI
|
|
36
|
+
from .api.assets import AssetsAPI
|
|
37
|
+
from .api.datasets import DataSetsAPI
|
|
38
|
+
from .api.events import EventsAPI
|
|
39
|
+
from .api.extraction_pipelines import ExtractionPipelinesAPI
|
|
40
|
+
from .api.filemetadata import FileMetadataAPI
|
|
35
41
|
from .api.infield import InfieldAPI, InFieldCDMConfigAPI, InfieldConfigAPI
|
|
42
|
+
from .api.labels import LabelsAPI
|
|
36
43
|
from .api.lookup import (
|
|
37
44
|
AssetLookUpAPI,
|
|
38
45
|
DataSetLookUpAPI,
|
|
@@ -55,10 +62,17 @@ from .api.migration import (
|
|
|
55
62
|
)
|
|
56
63
|
from .api.project import ProjectAPI
|
|
57
64
|
from .api.search import SearchAPI
|
|
65
|
+
from .api.security_categories import SecurityCategoriesAPI
|
|
66
|
+
from .api.sequences import SequencesAPI
|
|
58
67
|
from .api.streams import StreamsAPI
|
|
59
|
-
from .api.three_d import ThreeDAPI,
|
|
68
|
+
from .api.three_d import ThreeDAPI, ThreeDClassicModelsAPI
|
|
69
|
+
from .api.timeseries import TimeSeriesAPI
|
|
60
70
|
from .api.token import TokenAPI
|
|
71
|
+
from .api.transformations import TransformationsAPI
|
|
61
72
|
from .api.verify import VerifyAPI
|
|
73
|
+
from .api.workflow_triggers import WorkflowTriggersAPI
|
|
74
|
+
from .api.workflow_versions import WorkflowVersionsAPI
|
|
75
|
+
from .api.workflows import WorkflowsAPI
|
|
62
76
|
|
|
63
77
|
|
|
64
78
|
class ToolkitClientMock(CogniteClientMock):
|
|
@@ -137,7 +151,22 @@ class ToolkitClientMock(CogniteClientMock):
|
|
|
137
151
|
|
|
138
152
|
self.tool = MagicMock(spec=ToolAPI)
|
|
139
153
|
self.tool.three_d = MagicMock(spec=ThreeDAPI)
|
|
140
|
-
self.tool.three_d.
|
|
154
|
+
self.tool.three_d.models_classic = MagicMock(spec_set=ThreeDClassicModelsAPI)
|
|
155
|
+
self.tool.assets = MagicMock(spec_set=AssetsAPI)
|
|
156
|
+
self.tool.timeseries = MagicMock(spec_set=TimeSeriesAPI)
|
|
157
|
+
self.tool.filemetadata = MagicMock(spec_set=FileMetadataAPI)
|
|
158
|
+
self.tool.events = MagicMock(spec_set=EventsAPI)
|
|
159
|
+
self.tool.simulators = MagicMock(spec=SimulatorsAPI)
|
|
160
|
+
self.tool.simulators.models = MagicMock(spec_set=SimulatorModelsAPI)
|
|
161
|
+
self.tool.datasets = MagicMock(spec_set=DataSetsAPI)
|
|
162
|
+
self.tool.extraction_pipelines = MagicMock(spec_set=ExtractionPipelinesAPI)
|
|
163
|
+
self.tool.labels = MagicMock(spec_set=LabelsAPI)
|
|
164
|
+
self.tool.security_categories = MagicMock(spec_set=SecurityCategoriesAPI)
|
|
165
|
+
self.tool.sequences = MagicMock(spec_set=SequencesAPI)
|
|
166
|
+
self.tool.transformations = MagicMock(spec_set=TransformationsAPI)
|
|
167
|
+
self.tool.workflows = MagicMock(spec=WorkflowsAPI)
|
|
168
|
+
self.tool.workflows.triggers = MagicMock(spec_set=WorkflowTriggersAPI)
|
|
169
|
+
self.tool.workflows.versions = MagicMock(spec_set=WorkflowVersionsAPI)
|
|
141
170
|
|
|
142
171
|
self.streams = MagicMock(spec=StreamsAPI)
|
|
143
172
|
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
from collections.abc import Callable,
|
|
2
|
-
from
|
|
1
|
+
from collections.abc import Callable, Sequence
|
|
2
|
+
from dataclasses import dataclass
|
|
3
3
|
from pathlib import Path
|
|
4
|
+
from typing import get_args
|
|
4
5
|
|
|
5
6
|
from rich import print
|
|
6
7
|
from rich.console import Console
|
|
7
8
|
from rich.table import Table
|
|
8
9
|
|
|
9
10
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
11
|
+
from cognite_toolkit._cdf_tk.client.http_client import (
|
|
12
|
+
FailedRequestItems,
|
|
13
|
+
FailedResponseItems,
|
|
14
|
+
HTTPClient,
|
|
15
|
+
SuccessResponseItems,
|
|
16
|
+
)
|
|
10
17
|
from cognite_toolkit._cdf_tk.commands._base import ToolkitCommand
|
|
11
18
|
from cognite_toolkit._cdf_tk.commands._migrate.creators import MigrationCreator
|
|
12
19
|
from cognite_toolkit._cdf_tk.commands._migrate.data_mapper import DataMapper
|
|
@@ -21,26 +28,30 @@ from cognite_toolkit._cdf_tk.exceptions import (
|
|
|
21
28
|
)
|
|
22
29
|
from cognite_toolkit._cdf_tk.protocols import T_ResourceRequest, T_ResourceResponse
|
|
23
30
|
from cognite_toolkit._cdf_tk.storageio import T_Selector, UploadableStorageIO, UploadItem
|
|
31
|
+
from cognite_toolkit._cdf_tk.storageio.logger import FileDataLogger, OperationStatus
|
|
24
32
|
from cognite_toolkit._cdf_tk.utils import humanize_collection, safe_write, sanitize_filename
|
|
25
33
|
from cognite_toolkit._cdf_tk.utils.file import yaml_safe_dump
|
|
26
|
-
from cognite_toolkit._cdf_tk.utils.fileio import
|
|
27
|
-
from cognite_toolkit._cdf_tk.utils.http_client import HTTPClient, HTTPMessage, ItemMessage, SuccessResponseItems
|
|
34
|
+
from cognite_toolkit._cdf_tk.utils.fileio import NDJsonWriter, Uncompressed
|
|
28
35
|
from cognite_toolkit._cdf_tk.utils.producer_worker import ProducerWorkerExecutor
|
|
29
|
-
from cognite_toolkit._cdf_tk.utils.progress_tracker import AVAILABLE_STATUS, ProgressTracker, Status
|
|
30
36
|
|
|
31
37
|
from .data_model import INSTANCE_SOURCE_VIEW_ID, MODEL_ID, RESOURCE_VIEW_MAPPING_VIEW_ID
|
|
38
|
+
from .issues import WriteIssue
|
|
32
39
|
|
|
33
40
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
@dataclass
|
|
42
|
+
class OperationIssue:
|
|
43
|
+
message: str
|
|
44
|
+
count: int
|
|
45
|
+
|
|
39
46
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
@dataclass
|
|
48
|
+
class MigrationStatusResult:
|
|
49
|
+
status: OperationStatus
|
|
50
|
+
issues: list[OperationIssue]
|
|
51
|
+
count: int
|
|
43
52
|
|
|
53
|
+
|
|
54
|
+
class MigrationCommand(ToolkitCommand):
|
|
44
55
|
def migrate(
|
|
45
56
|
self,
|
|
46
57
|
selected: T_Selector,
|
|
@@ -49,7 +60,7 @@ class MigrationCommand(ToolkitCommand):
|
|
|
49
60
|
log_dir: Path,
|
|
50
61
|
dry_run: bool = False,
|
|
51
62
|
verbose: bool = False,
|
|
52
|
-
) ->
|
|
63
|
+
) -> list[MigrationStatusResult]:
|
|
53
64
|
if log_dir.exists() and any(log_dir.iterdir()):
|
|
54
65
|
raise ToolkitFileExistsError(
|
|
55
66
|
f"Log directory {log_dir} already exists. Please remove it or choose another directory."
|
|
@@ -65,15 +76,18 @@ class MigrationCommand(ToolkitCommand):
|
|
|
65
76
|
self.validate_available_capacity(data.client, total_items)
|
|
66
77
|
|
|
67
78
|
console = Console()
|
|
68
|
-
tracker = ProgressTracker[str](self.Steps.list())
|
|
69
79
|
with (
|
|
70
80
|
NDJsonWriter(log_dir, kind=f"{selected.kind}MigrationIssues", compression=Uncompressed) as log_file,
|
|
71
81
|
HTTPClient(config=data.client.config) as write_client,
|
|
72
82
|
):
|
|
83
|
+
logger = FileDataLogger(log_file)
|
|
84
|
+
data.logger = logger
|
|
85
|
+
mapper.logger = logger
|
|
86
|
+
|
|
73
87
|
executor = ProducerWorkerExecutor[Sequence[T_ResourceResponse], Sequence[UploadItem[T_ResourceRequest]]](
|
|
74
|
-
download_iterable=
|
|
75
|
-
process=self._convert(mapper, data
|
|
76
|
-
write=self._upload(selected, write_client, data,
|
|
88
|
+
download_iterable=(page.items for page in data.stream_data(selected)),
|
|
89
|
+
process=self._convert(mapper, data),
|
|
90
|
+
write=self._upload(selected, write_client, data, dry_run),
|
|
77
91
|
iteration_count=iteration_count,
|
|
78
92
|
max_queue_size=10,
|
|
79
93
|
download_description=f"Downloading {selected.display_name}",
|
|
@@ -86,91 +100,71 @@ class MigrationCommand(ToolkitCommand):
|
|
|
86
100
|
executor.run()
|
|
87
101
|
total = executor.total_items
|
|
88
102
|
|
|
89
|
-
self.
|
|
90
|
-
|
|
103
|
+
results = self._create_status_summary(logger)
|
|
104
|
+
|
|
105
|
+
self._print_rich_tables(results, console)
|
|
106
|
+
self._print_txt(results, log_dir, f"{selected.kind}Items", console)
|
|
91
107
|
executor.raise_on_error()
|
|
92
108
|
action = "Would migrate" if dry_run else "Migrating"
|
|
93
109
|
console.print(f"{action} {total:,} {selected.display_name} to instances.")
|
|
94
|
-
return tracker
|
|
95
110
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
111
|
+
return results
|
|
112
|
+
|
|
113
|
+
# Todo: Move to the logger module
|
|
114
|
+
@classmethod
|
|
115
|
+
def _create_status_summary(cls, logger: FileDataLogger) -> list[MigrationStatusResult]:
|
|
116
|
+
results: list[MigrationStatusResult] = []
|
|
117
|
+
status_counts = logger.tracker.get_status_counts()
|
|
118
|
+
for status in get_args(OperationStatus):
|
|
119
|
+
issue_counts = logger.tracker.get_issue_counts(status)
|
|
120
|
+
issues = [OperationIssue(message=issue, count=count) for issue, count in issue_counts.items()]
|
|
121
|
+
result = MigrationStatusResult(
|
|
122
|
+
status=status,
|
|
123
|
+
issues=issues,
|
|
124
|
+
count=status_counts.get(status, 0),
|
|
101
125
|
)
|
|
126
|
+
results.append(result)
|
|
127
|
+
return results
|
|
102
128
|
|
|
129
|
+
def _print_rich_tables(self, results: list[MigrationStatusResult], console: Console) -> None:
|
|
103
130
|
table = Table(title="Migration Summary", show_lines=True)
|
|
104
|
-
table.add_column("Status", style="
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
for
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
continue
|
|
111
|
-
row = [status]
|
|
112
|
-
for step in self.Steps:
|
|
113
|
-
row.append(str(results.get((step.value, status), 0)))
|
|
114
|
-
table.add_row(*row)
|
|
115
|
-
|
|
131
|
+
table.add_column("Status", style="bold")
|
|
132
|
+
table.add_column("Count", justify="right", style="bold")
|
|
133
|
+
table.add_column("Issues", style="bold")
|
|
134
|
+
for result in results:
|
|
135
|
+
issues_str = "\n".join(f"{issue.message}: {issue.count}" for issue in result.issues) or ""
|
|
136
|
+
table.add_row(result.status, str(result.count), issues_str)
|
|
116
137
|
console.print(table)
|
|
117
138
|
|
|
118
|
-
def
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
SchemaColumn(name="ID", type="string"),
|
|
135
|
-
*(SchemaColumn(name=step, type="string") for step in cls.Steps.list()),
|
|
136
|
-
]
|
|
137
|
-
|
|
138
|
-
def _download_iterable(
|
|
139
|
-
self,
|
|
140
|
-
selected: T_Selector,
|
|
141
|
-
data: UploadableStorageIO[T_Selector, T_ResourceResponse, T_ResourceRequest],
|
|
142
|
-
tracker: ProgressTracker[str],
|
|
143
|
-
) -> Iterable[Sequence[T_ResourceResponse]]:
|
|
144
|
-
for page in data.stream_data(selected):
|
|
145
|
-
for item in page.items:
|
|
146
|
-
tracker.set_progress(data.as_id(item), self.Steps.DOWNLOAD, "success")
|
|
147
|
-
yield page.items
|
|
139
|
+
def _print_txt(self, results: list[MigrationStatusResult], log_dir: Path, kind: str, console: Console) -> None:
|
|
140
|
+
summary_file = log_dir / f"{kind}_migration_summary.txt"
|
|
141
|
+
with summary_file.open("w", encoding="utf-8") as f:
|
|
142
|
+
f.write("Migration Summary\n")
|
|
143
|
+
f.write("=================\n\n")
|
|
144
|
+
for result in results:
|
|
145
|
+
f.write(f"Status: {result.status}\n")
|
|
146
|
+
f.write(f"Count: {result.count}\n")
|
|
147
|
+
f.write("Issues:\n")
|
|
148
|
+
if result.issues:
|
|
149
|
+
for issue in result.issues:
|
|
150
|
+
f.write(f" - {issue.message}: {issue.count}\n")
|
|
151
|
+
else:
|
|
152
|
+
f.write(" None\n")
|
|
153
|
+
f.write("\n")
|
|
154
|
+
console.print(f"Summary written to {log_dir}")
|
|
148
155
|
|
|
156
|
+
@staticmethod
|
|
149
157
|
def _convert(
|
|
150
|
-
self,
|
|
151
158
|
mapper: DataMapper[T_Selector, T_ResourceResponse, T_ResourceRequest],
|
|
152
159
|
data: UploadableStorageIO[T_Selector, T_ResourceResponse, T_ResourceRequest],
|
|
153
|
-
tracker: ProgressTracker[str],
|
|
154
|
-
log_file: NDJsonWriter,
|
|
155
160
|
) -> Callable[[Sequence[T_ResourceResponse]], Sequence[UploadItem[T_ResourceRequest]]]:
|
|
156
161
|
def track_mapping(source: Sequence[T_ResourceResponse]) -> list[UploadItem[T_ResourceRequest]]:
|
|
157
162
|
mapped = mapper.map(source)
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
result: Status = "failed" if target is None else "success"
|
|
164
|
-
tracker.set_progress(id_, step=self.Steps.CONVERT, status=result)
|
|
165
|
-
|
|
166
|
-
if issue.has_issues:
|
|
167
|
-
# MyPy fails to understand that dict[str, JsonVal] is a Chunk
|
|
168
|
-
issues.append(issue.dump()) # type: ignore[arg-type]
|
|
169
|
-
if target is not None:
|
|
170
|
-
targets.append(UploadItem(source_id=id_, item=target))
|
|
171
|
-
if issues:
|
|
172
|
-
log_file.write_chunks(issues)
|
|
173
|
-
return targets
|
|
163
|
+
return [
|
|
164
|
+
UploadItem(source_id=data.as_id(item), item=target)
|
|
165
|
+
for target, item in zip(mapped, source)
|
|
166
|
+
if target is not None
|
|
167
|
+
]
|
|
174
168
|
|
|
175
169
|
return track_mapping
|
|
176
170
|
|
|
@@ -179,36 +173,37 @@ class MigrationCommand(ToolkitCommand):
|
|
|
179
173
|
selected: T_Selector,
|
|
180
174
|
write_client: HTTPClient,
|
|
181
175
|
target: UploadableStorageIO[T_Selector, T_ResourceResponse, T_ResourceRequest],
|
|
182
|
-
tracker: ProgressTracker[str],
|
|
183
|
-
log_file: NDJsonWriter,
|
|
184
176
|
dry_run: bool,
|
|
185
177
|
) -> Callable[[Sequence[UploadItem[T_ResourceRequest]]], None]:
|
|
186
178
|
def upload_items(data_item: Sequence[UploadItem[T_ResourceRequest]]) -> None:
|
|
187
179
|
if not data_item:
|
|
188
180
|
return None
|
|
189
|
-
responses: Sequence[HTTPMessage]
|
|
190
181
|
if dry_run:
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
issues: list[Chunk] = []
|
|
182
|
+
target.logger.tracker.finalize_item([item.source_id for item in data_item], "pending")
|
|
183
|
+
return None
|
|
184
|
+
|
|
185
|
+
responses = target.upload_items(data_chunk=data_item, http_client=write_client, selector=selected)
|
|
186
|
+
|
|
187
|
+
# Todo: Move logging into the UploadableStorageIO class
|
|
188
|
+
issues: list[WriteIssue] = []
|
|
200
189
|
for item in responses:
|
|
201
190
|
if isinstance(item, SuccessResponseItems):
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
191
|
+
target.logger.tracker.finalize_item(item.ids, "success")
|
|
192
|
+
continue
|
|
193
|
+
if isinstance(item, FailedResponseItems):
|
|
194
|
+
error = item.error
|
|
195
|
+
for id_ in item.ids:
|
|
196
|
+
issue = WriteIssue(id=str(id_), status_code=error.code, message=error.message)
|
|
197
|
+
issues.append(issue)
|
|
198
|
+
elif isinstance(item, FailedRequestItems):
|
|
199
|
+
for id_ in item.ids:
|
|
200
|
+
issue = WriteIssue(id=str(id_), status_code=0, message=item.error)
|
|
201
|
+
issues.append(issue)
|
|
202
|
+
|
|
203
|
+
if isinstance(item, FailedResponseItems | FailedRequestItems):
|
|
204
|
+
target.logger.tracker.finalize_item(item.ids, "failure")
|
|
210
205
|
if issues:
|
|
211
|
-
|
|
206
|
+
target.logger.log(issues)
|
|
212
207
|
return None
|
|
213
208
|
|
|
214
209
|
return upload_items
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from collections.abc import Iterable, Mapping, Set
|
|
2
2
|
from typing import Any, ClassVar, cast
|
|
3
3
|
|
|
4
|
-
from cognite.client.data_classes import Annotation
|
|
4
|
+
from cognite.client.data_classes import Annotation
|
|
5
5
|
from cognite.client.data_classes.data_modeling import (
|
|
6
6
|
DirectRelation,
|
|
7
7
|
DirectRelationReference,
|
|
@@ -16,19 +16,22 @@ from cognite.client.data_classes.data_modeling.views import ViewProperty
|
|
|
16
16
|
from cognite.client.utils._identifier import InstanceId
|
|
17
17
|
|
|
18
18
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
19
|
-
from cognite_toolkit._cdf_tk.client.
|
|
19
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.asset import AssetResponse
|
|
20
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.data_modeling import NodeReference
|
|
21
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.event import EventResponse
|
|
22
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.filemetadata import FileMetadataResponse
|
|
23
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.migration import (
|
|
20
24
|
AssetCentricId,
|
|
21
25
|
ResourceViewMappingApply,
|
|
22
26
|
)
|
|
27
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.timeseries import TimeSeriesResponse
|
|
23
28
|
from cognite_toolkit._cdf_tk.utils.collection import flatten_dict_json_path
|
|
24
29
|
from cognite_toolkit._cdf_tk.utils.dtype_conversion import (
|
|
25
30
|
asset_centric_convert_to_primary_property,
|
|
26
31
|
convert_to_primary_property,
|
|
27
32
|
)
|
|
28
|
-
from cognite_toolkit._cdf_tk.utils.useful_types import
|
|
29
|
-
|
|
30
|
-
AssetCentricTypeExtended,
|
|
31
|
-
)
|
|
33
|
+
from cognite_toolkit._cdf_tk.utils.useful_types import AssetCentricTypeExtended
|
|
34
|
+
from cognite_toolkit._cdf_tk.utils.useful_types2 import AssetCentricResourceExtended
|
|
32
35
|
|
|
33
36
|
from .data_model import COGNITE_MIGRATION_SPACE_ID, INSTANCE_SOURCE_VIEW_ID
|
|
34
37
|
from .issues import ConversionIssue, FailedConversion, InvalidPropertyDataType
|
|
@@ -111,22 +114,22 @@ class DirectRelationCache:
|
|
|
111
114
|
file_ids.add(file_id)
|
|
112
115
|
if isinstance(file_external_id := file_ref.get("externalId"), str):
|
|
113
116
|
file_external_ids.add(file_external_id)
|
|
114
|
-
elif isinstance(resource,
|
|
117
|
+
elif isinstance(resource, AssetResponse):
|
|
115
118
|
if resource.source:
|
|
116
119
|
source_ids.add(resource.source)
|
|
117
120
|
if resource.parent_id is not None:
|
|
118
121
|
asset_ids.add(resource.parent_id)
|
|
119
|
-
elif isinstance(resource,
|
|
122
|
+
elif isinstance(resource, FileMetadataResponse):
|
|
120
123
|
if resource.source:
|
|
121
124
|
source_ids.add(resource.source)
|
|
122
125
|
if resource.asset_ids:
|
|
123
126
|
asset_ids.update(resource.asset_ids)
|
|
124
|
-
elif isinstance(resource,
|
|
127
|
+
elif isinstance(resource, EventResponse):
|
|
125
128
|
if resource.source:
|
|
126
129
|
source_ids.add(resource.source)
|
|
127
130
|
if resource.asset_ids:
|
|
128
131
|
asset_ids.update(resource.asset_ids)
|
|
129
|
-
elif isinstance(resource,
|
|
132
|
+
elif isinstance(resource, TimeSeriesResponse):
|
|
130
133
|
if resource.asset_id is not None:
|
|
131
134
|
asset_ids.add(resource.asset_id)
|
|
132
135
|
if asset_ids:
|
|
@@ -196,7 +199,11 @@ def asset_centric_to_dm(
|
|
|
196
199
|
data_set_id = dumped.pop("dataSetId", None)
|
|
197
200
|
external_id = dumped.pop("externalId", None)
|
|
198
201
|
|
|
199
|
-
issue = ConversionIssue(
|
|
202
|
+
issue = ConversionIssue(
|
|
203
|
+
id=str(AssetCentricId(resource_type, id_=id_)),
|
|
204
|
+
asset_centric_id=AssetCentricId(resource_type, id_=id_),
|
|
205
|
+
instance_id=NodeReference(space=instance_id.space, external_id=instance_id.external_id),
|
|
206
|
+
)
|
|
200
207
|
|
|
201
208
|
properties = create_properties(
|
|
202
209
|
dumped,
|
|
@@ -245,13 +252,13 @@ def asset_centric_to_dm(
|
|
|
245
252
|
|
|
246
253
|
|
|
247
254
|
def _lookup_resource_type(resource_type: AssetCentricResourceExtended) -> AssetCentricTypeExtended:
|
|
248
|
-
if isinstance(resource_type,
|
|
255
|
+
if isinstance(resource_type, AssetResponse):
|
|
249
256
|
return "asset"
|
|
250
|
-
elif isinstance(resource_type,
|
|
257
|
+
elif isinstance(resource_type, FileMetadataResponse):
|
|
251
258
|
return "file"
|
|
252
|
-
elif isinstance(resource_type,
|
|
259
|
+
elif isinstance(resource_type, EventResponse):
|
|
253
260
|
return "event"
|
|
254
|
-
elif isinstance(resource_type,
|
|
261
|
+
elif isinstance(resource_type, TimeSeriesResponse):
|
|
255
262
|
return "timeseries"
|
|
256
263
|
elif isinstance(resource_type, Annotation):
|
|
257
264
|
if resource_type.annotated_resource_type == "file" and resource_type.annotation_type in (
|
|
@@ -20,7 +20,7 @@ from cognite.client.data_classes.documents import SourceFileProperty
|
|
|
20
20
|
from cognite.client.data_classes.events import EventProperty
|
|
21
21
|
|
|
22
22
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
23
|
-
from cognite_toolkit._cdf_tk.client.
|
|
23
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.apm_config_v1 import APMConfig, APMConfigList
|
|
24
24
|
from cognite_toolkit._cdf_tk.cruds import NodeCRUD, ResourceCRUD, SpaceCRUD
|
|
25
25
|
from cognite_toolkit._cdf_tk.exceptions import ToolkitMissingResourceError, ToolkitRequiredValueError
|
|
26
26
|
from cognite_toolkit._cdf_tk.utils import humanize_collection
|
|
@@ -11,11 +11,12 @@ from cognite.client.utils._identifier import InstanceId
|
|
|
11
11
|
from cognite.client.utils._text import to_camel_case
|
|
12
12
|
from pydantic import BaseModel, BeforeValidator, Field, field_validator, model_validator
|
|
13
13
|
|
|
14
|
-
from cognite_toolkit._cdf_tk.client.
|
|
15
|
-
from cognite_toolkit._cdf_tk.client.
|
|
16
|
-
from cognite_toolkit._cdf_tk.client.
|
|
17
|
-
from cognite_toolkit._cdf_tk.client.
|
|
18
|
-
from cognite_toolkit._cdf_tk.client.
|
|
14
|
+
from cognite_toolkit._cdf_tk.client._resource_base import BaseModelObject, RequestResource
|
|
15
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.identifiers import InternalId
|
|
16
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.instance_api import InstanceIdentifier
|
|
17
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.instances import InstanceApplyList
|
|
18
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.migration import AssetCentricId
|
|
19
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.pending_instances_ids import PendingInstanceId
|
|
19
20
|
from cognite_toolkit._cdf_tk.commands._migrate.default_mappings import (
|
|
20
21
|
ASSET_ANNOTATIONS_ID,
|
|
21
22
|
FILE_ANNOTATIONS_ID,
|
|
@@ -26,8 +27,8 @@ from cognite_toolkit._cdf_tk.storageio._data_classes import ModelList
|
|
|
26
27
|
from cognite_toolkit._cdf_tk.utils.useful_types import (
|
|
27
28
|
AssetCentricKindExtended,
|
|
28
29
|
JsonVal,
|
|
29
|
-
T_AssetCentricResourceExtended,
|
|
30
30
|
)
|
|
31
|
+
from cognite_toolkit._cdf_tk.utils.useful_types2 import T_AssetCentricResourceExtended
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
class MigrationMapping(BaseModel, alias_generator=to_camel_case, extra="ignore", populate_by_name=True):
|
|
@@ -279,8 +280,8 @@ class ThreeDRevisionMigrationRequest(RequestResource):
|
|
|
279
280
|
revision_id: int
|
|
280
281
|
model: Model
|
|
281
282
|
|
|
282
|
-
def as_id(self) ->
|
|
283
|
-
return self.revision_id
|
|
283
|
+
def as_id(self) -> InternalId:
|
|
284
|
+
return InternalId(id=self.revision_id)
|
|
284
285
|
|
|
285
286
|
|
|
286
287
|
class ThreeDMigrationRequest(RequestResource):
|
|
@@ -290,5 +291,5 @@ class ThreeDMigrationRequest(RequestResource):
|
|
|
290
291
|
thumbnail: Thumbnail | None = None
|
|
291
292
|
revision: ThreeDRevisionMigrationRequest = Field(exclude=True)
|
|
292
293
|
|
|
293
|
-
def as_id(self) ->
|
|
294
|
-
return self.model_id
|
|
294
|
+
def as_id(self) -> InternalId:
|
|
295
|
+
return InternalId(id=self.model_id)
|