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
|
@@ -15,24 +15,23 @@ from cognite.client.data_classes.data_modeling import (
|
|
|
15
15
|
from cognite.client.exceptions import CogniteException
|
|
16
16
|
|
|
17
17
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
18
|
-
from cognite_toolkit._cdf_tk.client.
|
|
18
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.charts_data import (
|
|
19
19
|
ChartCoreTimeseries,
|
|
20
20
|
ChartSource,
|
|
21
21
|
ChartTimeseries,
|
|
22
22
|
)
|
|
23
|
-
from cognite_toolkit._cdf_tk.client.
|
|
24
|
-
from cognite_toolkit._cdf_tk.client.
|
|
23
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.instance_api import InstanceIdentifier, NodeReference
|
|
24
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.canvas import (
|
|
25
25
|
ContainerReferenceApply,
|
|
26
26
|
FdmInstanceContainerReferenceApply,
|
|
27
27
|
IndustrialCanvas,
|
|
28
28
|
IndustrialCanvasApply,
|
|
29
29
|
)
|
|
30
|
-
from cognite_toolkit._cdf_tk.client.
|
|
31
|
-
from cognite_toolkit._cdf_tk.client.
|
|
32
|
-
from cognite_toolkit._cdf_tk.client.
|
|
30
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.charts import Chart, ChartWrite
|
|
31
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.migration import ResourceViewMappingApply
|
|
32
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.three_d import (
|
|
33
|
+
AssetMappingClassicResponse,
|
|
33
34
|
AssetMappingDMRequest,
|
|
34
|
-
AssetMappingResponse,
|
|
35
|
-
NodeReference,
|
|
36
35
|
RevisionStatus,
|
|
37
36
|
ThreeDModelResponse,
|
|
38
37
|
)
|
|
@@ -47,22 +46,26 @@ from cognite_toolkit._cdf_tk.commands._migrate.issues import (
|
|
|
47
46
|
CanvasMigrationIssue,
|
|
48
47
|
ChartMigrationIssue,
|
|
49
48
|
ConversionIssue,
|
|
50
|
-
MigrationIssue,
|
|
51
49
|
ThreeDModelMigrationIssue,
|
|
52
50
|
)
|
|
53
51
|
from cognite_toolkit._cdf_tk.constants import MISSING_INSTANCE_SPACE
|
|
54
52
|
from cognite_toolkit._cdf_tk.exceptions import ToolkitMigrationError, ToolkitValueError
|
|
55
53
|
from cognite_toolkit._cdf_tk.protocols import T_ResourceRequest, T_ResourceResponse
|
|
56
54
|
from cognite_toolkit._cdf_tk.storageio._base import T_Selector
|
|
55
|
+
from cognite_toolkit._cdf_tk.storageio.logger import DataLogger, NoOpLogger
|
|
57
56
|
from cognite_toolkit._cdf_tk.storageio.selectors import CanvasSelector, ChartSelector, ThreeDSelector
|
|
58
57
|
from cognite_toolkit._cdf_tk.utils import humanize_collection
|
|
59
|
-
from cognite_toolkit._cdf_tk.utils.
|
|
58
|
+
from cognite_toolkit._cdf_tk.utils.useful_types2 import T_AssetCentricResourceExtended
|
|
60
59
|
|
|
61
60
|
from .data_classes import AssetCentricMapping
|
|
62
61
|
from .selectors import AssetCentricMigrationSelector
|
|
63
62
|
|
|
64
63
|
|
|
65
64
|
class DataMapper(Generic[T_Selector, T_ResourceResponse, T_ResourceRequest], ABC):
|
|
65
|
+
def __init__(self, client: ToolkitClient) -> None:
|
|
66
|
+
self.client = client
|
|
67
|
+
self.logger: DataLogger = NoOpLogger()
|
|
68
|
+
|
|
66
69
|
def prepare(self, source_selector: T_Selector) -> None:
|
|
67
70
|
"""Prepare the data mapper with the given source selector.
|
|
68
71
|
|
|
@@ -74,14 +77,14 @@ class DataMapper(Generic[T_Selector, T_ResourceResponse, T_ResourceRequest], ABC
|
|
|
74
77
|
pass
|
|
75
78
|
|
|
76
79
|
@abstractmethod
|
|
77
|
-
def map(self, source: Sequence[T_ResourceResponse]) -> Sequence[
|
|
80
|
+
def map(self, source: Sequence[T_ResourceResponse]) -> Sequence[T_ResourceRequest | None]:
|
|
78
81
|
"""Map a chunk of source data to the target format.
|
|
79
82
|
|
|
80
83
|
Args:
|
|
81
84
|
source: The source data chunk to be mapped.
|
|
82
85
|
|
|
83
86
|
Returns:
|
|
84
|
-
A
|
|
87
|
+
A sequence of mapped target data.
|
|
85
88
|
|
|
86
89
|
"""
|
|
87
90
|
raise NotImplementedError("Subclasses must implement this method.")
|
|
@@ -91,7 +94,7 @@ class AssetCentricMapper(
|
|
|
91
94
|
DataMapper[AssetCentricMigrationSelector, AssetCentricMapping[T_AssetCentricResourceExtended], InstanceApply]
|
|
92
95
|
):
|
|
93
96
|
def __init__(self, client: ToolkitClient) -> None:
|
|
94
|
-
|
|
97
|
+
super().__init__(client)
|
|
95
98
|
self._ingestion_view_by_id: dict[ViewId, View] = {}
|
|
96
99
|
self._view_mapping_by_id: dict[str, ResourceViewMappingApply] = {}
|
|
97
100
|
self._direct_relation_cache = DirectRelationCache(client)
|
|
@@ -119,14 +122,37 @@ class AssetCentricMapper(
|
|
|
119
122
|
|
|
120
123
|
def map(
|
|
121
124
|
self, source: Sequence[AssetCentricMapping[T_AssetCentricResourceExtended]]
|
|
122
|
-
) -> Sequence[
|
|
125
|
+
) -> Sequence[InstanceApply | None]:
|
|
123
126
|
"""Map a chunk of asset-centric data to InstanceApplyList format."""
|
|
124
127
|
# We update the direct relation cache in bulk for all resources in the chunk.
|
|
125
128
|
self._direct_relation_cache.update(item.resource for item in source)
|
|
126
|
-
output: list[
|
|
129
|
+
output: list[InstanceApply | None] = []
|
|
130
|
+
issues: list[ConversionIssue] = []
|
|
127
131
|
for item in source:
|
|
128
132
|
instance, conversion_issue = self._map_single_item(item)
|
|
129
|
-
|
|
133
|
+
identifier = str(item.mapping.as_asset_centric_id())
|
|
134
|
+
|
|
135
|
+
if conversion_issue.missing_instance_space:
|
|
136
|
+
self.logger.tracker.add_issue(identifier, "Missing instance space")
|
|
137
|
+
if conversion_issue.failed_conversions:
|
|
138
|
+
self.logger.tracker.add_issue(identifier, "Failed conversions")
|
|
139
|
+
if conversion_issue.invalid_instance_property_types:
|
|
140
|
+
self.logger.tracker.add_issue(identifier, "Invalid instance property types")
|
|
141
|
+
if conversion_issue.missing_asset_centric_properties:
|
|
142
|
+
self.logger.tracker.add_issue(identifier, "Missing asset-centric properties")
|
|
143
|
+
if conversion_issue.missing_instance_properties:
|
|
144
|
+
self.logger.tracker.add_issue(identifier, "Missing instance properties")
|
|
145
|
+
if conversion_issue.ignored_asset_centric_properties:
|
|
146
|
+
self.logger.tracker.add_issue(identifier, "Ignored asset-centric properties")
|
|
147
|
+
|
|
148
|
+
if conversion_issue.has_issues:
|
|
149
|
+
issues.append(conversion_issue)
|
|
150
|
+
|
|
151
|
+
if instance is None:
|
|
152
|
+
self.logger.tracker.finalize_item(identifier, "failure")
|
|
153
|
+
output.append(instance)
|
|
154
|
+
if issues:
|
|
155
|
+
self.logger.log(issues)
|
|
130
156
|
return output
|
|
131
157
|
|
|
132
158
|
def _map_single_item(
|
|
@@ -155,15 +181,29 @@ class AssetCentricMapper(
|
|
|
155
181
|
|
|
156
182
|
|
|
157
183
|
class ChartMapper(DataMapper[ChartSelector, Chart, ChartWrite]):
|
|
158
|
-
def
|
|
159
|
-
self.client = client
|
|
160
|
-
|
|
161
|
-
def map(self, source: Sequence[Chart]) -> Sequence[tuple[ChartWrite | None, MigrationIssue]]:
|
|
184
|
+
def map(self, source: Sequence[Chart]) -> Sequence[ChartWrite | None]:
|
|
162
185
|
self._populate_cache(source)
|
|
163
|
-
output: list[
|
|
186
|
+
output: list[ChartWrite | None] = []
|
|
187
|
+
issues: list[ChartMigrationIssue] = []
|
|
164
188
|
for item in source:
|
|
165
189
|
mapped_item, issue = self._map_single_item(item)
|
|
166
|
-
|
|
190
|
+
identifier = item.external_id
|
|
191
|
+
|
|
192
|
+
if issue.missing_timeseries_ids:
|
|
193
|
+
self.logger.tracker.add_issue(identifier, "Missing timeseries IDs")
|
|
194
|
+
if issue.missing_timeseries_external_ids:
|
|
195
|
+
self.logger.tracker.add_issue(identifier, "Missing timeseries external IDs")
|
|
196
|
+
if issue.missing_timeseries_identifier:
|
|
197
|
+
self.logger.tracker.add_issue(identifier, "Missing timeseries identifier")
|
|
198
|
+
|
|
199
|
+
if issue.has_issues:
|
|
200
|
+
issues.append(issue)
|
|
201
|
+
|
|
202
|
+
if mapped_item is None:
|
|
203
|
+
self.logger.tracker.finalize_item(identifier, "failure")
|
|
204
|
+
output.append(mapped_item)
|
|
205
|
+
if issues:
|
|
206
|
+
self.logger.log(issues)
|
|
167
207
|
return output
|
|
168
208
|
|
|
169
209
|
def _populate_cache(self, source: Sequence[Chart]) -> None:
|
|
@@ -185,7 +225,7 @@ class ChartMapper(DataMapper[ChartSelector, Chart, ChartWrite]):
|
|
|
185
225
|
self.client.migration.lookup.time_series(external_id=list(timeseries_external_ids))
|
|
186
226
|
|
|
187
227
|
def _map_single_item(self, item: Chart) -> tuple[ChartWrite | None, ChartMigrationIssue]:
|
|
188
|
-
issue = ChartMigrationIssue(chart_external_id=item.external_id)
|
|
228
|
+
issue = ChartMigrationIssue(chart_external_id=item.external_id, id=item.external_id)
|
|
189
229
|
time_series_collection = item.data.time_series_collection or []
|
|
190
230
|
timeseries_core_collection = self._create_timeseries_core_collection(time_series_collection, issue)
|
|
191
231
|
if issue.has_issues:
|
|
@@ -281,16 +321,30 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
281
321
|
DEFAULT_TIMESERIES_VIEW = ViewId("cdf_cdm", "CogniteTimeSeries", "v1")
|
|
282
322
|
|
|
283
323
|
def __init__(self, client: ToolkitClient, dry_run: bool, skip_on_missing_ref: bool = False) -> None:
|
|
284
|
-
|
|
324
|
+
super().__init__(client)
|
|
285
325
|
self.dry_run = dry_run
|
|
286
326
|
self.skip_on_missing_ref = skip_on_missing_ref
|
|
287
327
|
|
|
288
|
-
def map(self, source: Sequence[IndustrialCanvas]) -> Sequence[
|
|
328
|
+
def map(self, source: Sequence[IndustrialCanvas]) -> Sequence[IndustrialCanvasApply | None]:
|
|
289
329
|
self._populate_cache(source)
|
|
290
|
-
output: list[
|
|
330
|
+
output: list[IndustrialCanvasApply | None] = []
|
|
331
|
+
issues: list[CanvasMigrationIssue] = []
|
|
291
332
|
for item in source:
|
|
292
333
|
mapped_item, issue = self._map_single_item(item)
|
|
293
|
-
|
|
334
|
+
identifier = item.as_id()
|
|
335
|
+
|
|
336
|
+
if issue.missing_reference_ids:
|
|
337
|
+
self.logger.tracker.add_issue(identifier, "Missing reference IDs")
|
|
338
|
+
|
|
339
|
+
if issue.has_issues:
|
|
340
|
+
issues.append(issue)
|
|
341
|
+
|
|
342
|
+
if mapped_item is None:
|
|
343
|
+
self.logger.tracker.finalize_item(identifier, "failure")
|
|
344
|
+
|
|
345
|
+
output.append(mapped_item)
|
|
346
|
+
if issues:
|
|
347
|
+
self.logger.log(issues)
|
|
294
348
|
return output
|
|
295
349
|
|
|
296
350
|
@property
|
|
@@ -341,10 +395,13 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
341
395
|
|
|
342
396
|
def _map_single_item(self, canvas: IndustrialCanvas) -> tuple[IndustrialCanvasApply | None, CanvasMigrationIssue]:
|
|
343
397
|
update = canvas.as_write()
|
|
344
|
-
issue = CanvasMigrationIssue(
|
|
398
|
+
issue = CanvasMigrationIssue(
|
|
399
|
+
canvas_external_id=canvas.canvas.external_id, canvas_name=canvas.canvas.name, id=canvas.canvas.name
|
|
400
|
+
)
|
|
345
401
|
|
|
346
402
|
remaining_container_references: list[ContainerReferenceApply] = []
|
|
347
403
|
new_fdm_references: list[FdmInstanceContainerReferenceApply] = []
|
|
404
|
+
uuid_generator: dict[str, str] = defaultdict(lambda: str(uuid4()))
|
|
348
405
|
for ref in update.container_references or []:
|
|
349
406
|
if ref.container_reference_type not in self.asset_centric_resource_types:
|
|
350
407
|
remaining_container_references.append(ref)
|
|
@@ -354,7 +411,9 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
354
411
|
issue.missing_reference_ids.append(ref.as_asset_centric_id())
|
|
355
412
|
else:
|
|
356
413
|
consumer_view = self._get_consumer_view_id(ref.resource_id, ref.container_reference_type)
|
|
357
|
-
fdm_ref = self.migrate_container_reference(
|
|
414
|
+
fdm_ref = self.migrate_container_reference(
|
|
415
|
+
ref, canvas.canvas.external_id, node_id, consumer_view, uuid_generator
|
|
416
|
+
)
|
|
358
417
|
new_fdm_references.append(fdm_ref)
|
|
359
418
|
if issue.missing_reference_ids and self.skip_on_missing_ref:
|
|
360
419
|
return None, issue
|
|
@@ -370,14 +429,22 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
370
429
|
f"Failed to create backup for canvas '{canvas.canvas.name}': {e!s}. "
|
|
371
430
|
) from e
|
|
372
431
|
|
|
432
|
+
# There might annotations or other components that reference the old IDs, so we need to update those as well.
|
|
433
|
+
update = update.replace_ids(uuid_generator)
|
|
434
|
+
|
|
373
435
|
return update, issue
|
|
374
436
|
|
|
375
437
|
@classmethod
|
|
376
438
|
def migrate_container_reference(
|
|
377
|
-
cls,
|
|
439
|
+
cls,
|
|
440
|
+
reference: ContainerReferenceApply,
|
|
441
|
+
canvas_external_id: str,
|
|
442
|
+
instance_id: NodeId,
|
|
443
|
+
consumer_view: ViewId,
|
|
444
|
+
uuid_generator: dict[str, str],
|
|
378
445
|
) -> FdmInstanceContainerReferenceApply:
|
|
379
446
|
"""Migrate a single container reference by replacing the asset-centric ID with the data model instance ID."""
|
|
380
|
-
new_id =
|
|
447
|
+
new_id = uuid_generator[reference.id_]
|
|
381
448
|
new_external_id = f"{canvas_external_id}_{new_id}"
|
|
382
449
|
return FdmInstanceContainerReferenceApply(
|
|
383
450
|
external_id=new_external_id,
|
|
@@ -400,17 +467,26 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
400
467
|
|
|
401
468
|
|
|
402
469
|
class ThreeDMapper(DataMapper[ThreeDSelector, ThreeDModelResponse, ThreeDMigrationRequest]):
|
|
403
|
-
def
|
|
404
|
-
self.client = client
|
|
405
|
-
|
|
406
|
-
def map(
|
|
407
|
-
self, source: Sequence[ThreeDModelResponse]
|
|
408
|
-
) -> Sequence[tuple[ThreeDMigrationRequest | None, MigrationIssue]]:
|
|
470
|
+
def map(self, source: Sequence[ThreeDModelResponse]) -> Sequence[ThreeDMigrationRequest | None]:
|
|
409
471
|
self._populate_cache(source)
|
|
410
|
-
output: list[
|
|
472
|
+
output: list[ThreeDMigrationRequest | None] = []
|
|
473
|
+
issues: list[ThreeDModelMigrationIssue] = []
|
|
411
474
|
for item in source:
|
|
412
475
|
mapped_item, issue = self._map_single_item(item)
|
|
413
|
-
|
|
476
|
+
identifier = item.name
|
|
477
|
+
|
|
478
|
+
if issue.error_message:
|
|
479
|
+
for error in issue.error_message:
|
|
480
|
+
self.logger.tracker.add_issue(identifier, error)
|
|
481
|
+
|
|
482
|
+
if issue.has_issues:
|
|
483
|
+
issues.append(issue)
|
|
484
|
+
|
|
485
|
+
if mapped_item is None:
|
|
486
|
+
self.logger.tracker.finalize_item(identifier, "failure")
|
|
487
|
+
output.append(mapped_item)
|
|
488
|
+
if issues:
|
|
489
|
+
self.logger.log(issues)
|
|
414
490
|
return output
|
|
415
491
|
|
|
416
492
|
def _populate_cache(self, source: Sequence[ThreeDModelResponse]) -> None:
|
|
@@ -423,7 +499,7 @@ class ThreeDMapper(DataMapper[ThreeDSelector, ThreeDModelResponse, ThreeDMigrati
|
|
|
423
499
|
def _map_single_item(
|
|
424
500
|
self, item: ThreeDModelResponse
|
|
425
501
|
) -> tuple[ThreeDMigrationRequest | None, ThreeDModelMigrationIssue]:
|
|
426
|
-
issue = ThreeDModelMigrationIssue(model_name=item.name, model_id=item.id)
|
|
502
|
+
issue = ThreeDModelMigrationIssue(model_name=item.name, model_id=item.id, id=item.name)
|
|
427
503
|
instance_space: str | None = None
|
|
428
504
|
last_revision_id: int | None = None
|
|
429
505
|
model_type: Literal["CAD", "PointCloud", "Image360"] | None = None
|
|
@@ -450,15 +526,15 @@ class ThreeDMapper(DataMapper[ThreeDSelector, ThreeDModelResponse, ThreeDMigrati
|
|
|
450
526
|
return None, issue
|
|
451
527
|
|
|
452
528
|
mapped_request = ThreeDMigrationRequest(
|
|
453
|
-
|
|
529
|
+
model_id=item.id,
|
|
454
530
|
type=model_type,
|
|
455
531
|
space=instance_space,
|
|
456
532
|
revision=ThreeDRevisionMigrationRequest(
|
|
457
533
|
space=instance_space,
|
|
458
534
|
type=model_type,
|
|
459
|
-
|
|
535
|
+
revision_id=last_revision_id,
|
|
460
536
|
model=Model(
|
|
461
|
-
|
|
537
|
+
instance_id=InstanceIdentifier(
|
|
462
538
|
space=instance_space,
|
|
463
539
|
external_id=f"cog_3d_model_{item.id!s}",
|
|
464
540
|
)
|
|
@@ -478,21 +554,31 @@ class ThreeDMapper(DataMapper[ThreeDSelector, ThreeDModelResponse, ThreeDMigrati
|
|
|
478
554
|
return None
|
|
479
555
|
|
|
480
556
|
|
|
481
|
-
class ThreeDAssetMapper(DataMapper[ThreeDSelector,
|
|
482
|
-
def
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
def map(
|
|
486
|
-
self, source: Sequence[AssetMappingResponse]
|
|
487
|
-
) -> Sequence[tuple[AssetMappingDMRequest | None, MigrationIssue]]:
|
|
488
|
-
output: list[tuple[AssetMappingDMRequest | None, MigrationIssue]] = []
|
|
557
|
+
class ThreeDAssetMapper(DataMapper[ThreeDSelector, AssetMappingClassicResponse, AssetMappingDMRequest]):
|
|
558
|
+
def map(self, source: Sequence[AssetMappingClassicResponse]) -> Sequence[AssetMappingDMRequest | None]:
|
|
559
|
+
output: list[AssetMappingDMRequest | None] = []
|
|
560
|
+
issues: list[ThreeDModelMigrationIssue] = []
|
|
489
561
|
self._populate_cache(source)
|
|
490
562
|
for item in source:
|
|
491
563
|
mapped_item, issue = self._map_single_item(item)
|
|
492
|
-
|
|
564
|
+
identifier = f"AssetMapping_{item.model_id!s}_{item.revision_id!s}_{item.asset_id!s}"
|
|
565
|
+
|
|
566
|
+
if issue.error_message:
|
|
567
|
+
for error in issue.error_message:
|
|
568
|
+
self.logger.tracker.add_issue(identifier, error)
|
|
569
|
+
|
|
570
|
+
if issue.has_issues:
|
|
571
|
+
issues.append(issue)
|
|
572
|
+
|
|
573
|
+
if mapped_item is None:
|
|
574
|
+
self.logger.tracker.finalize_item(identifier, "failure")
|
|
575
|
+
|
|
576
|
+
output.append(mapped_item)
|
|
577
|
+
if issues:
|
|
578
|
+
self.logger.log(issues)
|
|
493
579
|
return output
|
|
494
580
|
|
|
495
|
-
def _populate_cache(self, source: Sequence[
|
|
581
|
+
def _populate_cache(self, source: Sequence[AssetMappingClassicResponse]) -> None:
|
|
496
582
|
asset_ids: set[int] = set()
|
|
497
583
|
for mapping in source:
|
|
498
584
|
if mapping.asset_id is not None:
|
|
@@ -500,21 +586,26 @@ class ThreeDAssetMapper(DataMapper[ThreeDSelector, AssetMappingResponse, AssetMa
|
|
|
500
586
|
self.client.migration.lookup.assets(list(asset_ids))
|
|
501
587
|
|
|
502
588
|
def _map_single_item(
|
|
503
|
-
self, item:
|
|
589
|
+
self, item: AssetMappingClassicResponse
|
|
504
590
|
) -> tuple[AssetMappingDMRequest | None, ThreeDModelMigrationIssue]:
|
|
505
|
-
issue = ThreeDModelMigrationIssue(
|
|
591
|
+
issue = ThreeDModelMigrationIssue(
|
|
592
|
+
model_name=f"AssetMapping_{item.model_id}", model_id=item.model_id, id=f"AssetMapping_{item.model_id}"
|
|
593
|
+
)
|
|
506
594
|
asset_instance_id = item.asset_instance_id
|
|
507
595
|
if item.asset_id and asset_instance_id is None:
|
|
508
596
|
asset_node_id = self.client.migration.lookup.assets(item.asset_id)
|
|
509
597
|
if asset_node_id is None:
|
|
510
598
|
issue.error_message.append(f"Missing asset instance for asset ID {item.asset_id!r}")
|
|
511
599
|
return None, issue
|
|
512
|
-
asset_instance_id = NodeReference(space=asset_node_id.space,
|
|
600
|
+
asset_instance_id = NodeReference(space=asset_node_id.space, external_id=asset_node_id.external_id)
|
|
513
601
|
|
|
514
602
|
if asset_instance_id is None:
|
|
515
603
|
issue.error_message.append("Neither assetInstanceId nor assetId provided for mapping.")
|
|
516
604
|
return None, issue
|
|
517
605
|
mapped_request = AssetMappingDMRequest(
|
|
518
|
-
|
|
606
|
+
model_id=item.model_id,
|
|
607
|
+
revision_id=item.revision_id,
|
|
608
|
+
node_id=item.node_id,
|
|
609
|
+
asset_instance_id=asset_instance_id,
|
|
519
610
|
)
|
|
520
611
|
return mapped_request, issue
|
|
@@ -2,7 +2,7 @@ from functools import lru_cache
|
|
|
2
2
|
|
|
3
3
|
from cognite.client.data_classes.data_modeling import ViewId
|
|
4
4
|
|
|
5
|
-
from cognite_toolkit._cdf_tk.client.
|
|
5
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.migration import ResourceViewMappingApply
|
|
6
6
|
|
|
7
7
|
ASSET_ID = "cdf_asset_mapping"
|
|
8
8
|
EVENT_ID = "cdf_event_mapping"
|
|
@@ -1,34 +1,27 @@
|
|
|
1
|
-
import
|
|
2
|
-
from typing import Any, ClassVar
|
|
1
|
+
from typing import Any, Literal
|
|
3
2
|
|
|
4
|
-
from cognite.client.data_classes.data_modeling import NodeId
|
|
5
|
-
from cognite.client.utils._identifier import InstanceId
|
|
6
|
-
from cognite.client.utils._text import to_camel_case
|
|
7
3
|
from pydantic import BaseModel, Field, field_serializer
|
|
4
|
+
from pydantic.alias_generators import to_camel
|
|
8
5
|
|
|
9
|
-
from cognite_toolkit._cdf_tk.client.
|
|
10
|
-
from cognite_toolkit._cdf_tk.
|
|
6
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.data_modeling import NodeReference
|
|
7
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.legacy.migration import AssetCentricId
|
|
8
|
+
from cognite_toolkit._cdf_tk.storageio.logger import LogEntry
|
|
11
9
|
|
|
12
10
|
|
|
13
|
-
class
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class MigrationIssue(MigrationObject):
|
|
11
|
+
class MigrationIssue(LogEntry):
|
|
17
12
|
"""Represents an issue encountered during migration."""
|
|
18
13
|
|
|
19
|
-
type:
|
|
20
|
-
|
|
21
|
-
def dump(self) -> dict[str, JsonVal]:
|
|
22
|
-
# Dump json to ensure it is serializable
|
|
23
|
-
dumped = json.loads(self.model_dump_json(by_alias=True))
|
|
24
|
-
dumped["type"] = self.type
|
|
25
|
-
return dumped
|
|
14
|
+
type: str
|
|
26
15
|
|
|
27
16
|
@property
|
|
28
17
|
def has_issues(self) -> bool:
|
|
29
18
|
"""Check if there are any issues recorded in this MigrationIssue."""
|
|
30
19
|
return True
|
|
31
20
|
|
|
21
|
+
def dump(self) -> dict[str, Any]:
|
|
22
|
+
"""Serialize the MigrationIssue to a dictionary."""
|
|
23
|
+
return self.model_dump(by_alias=True)
|
|
24
|
+
|
|
32
25
|
|
|
33
26
|
class ThreeDModelMigrationIssue(MigrationIssue):
|
|
34
27
|
"""Represents a 3D model migration issue encountered during migration.
|
|
@@ -37,7 +30,7 @@ class ThreeDModelMigrationIssue(MigrationIssue):
|
|
|
37
30
|
model_external_id (str): The external ID of the 3D model that could not be migrated.
|
|
38
31
|
"""
|
|
39
32
|
|
|
40
|
-
type:
|
|
33
|
+
type: Literal["threeDModelMigration"] = "threeDModelMigration"
|
|
41
34
|
model_name: str
|
|
42
35
|
model_id: int
|
|
43
36
|
error_message: list[str] = Field(default_factory=list)
|
|
@@ -55,7 +48,7 @@ class ChartMigrationIssue(MigrationIssue):
|
|
|
55
48
|
chart_external_id (str): The external ID of the chart that could not be migrated.
|
|
56
49
|
"""
|
|
57
50
|
|
|
58
|
-
type:
|
|
51
|
+
type: Literal["chartMigration"] = "chartMigration"
|
|
59
52
|
chart_external_id: str
|
|
60
53
|
missing_timeseries_ids: list[int] = Field(default_factory=list)
|
|
61
54
|
missing_timeseries_external_ids: list[str] = Field(default_factory=list)
|
|
@@ -70,7 +63,7 @@ class ChartMigrationIssue(MigrationIssue):
|
|
|
70
63
|
|
|
71
64
|
|
|
72
65
|
class CanvasMigrationIssue(MigrationIssue):
|
|
73
|
-
type:
|
|
66
|
+
type: Literal["canvasMigration"] = "canvasMigration"
|
|
74
67
|
canvas_external_id: str
|
|
75
68
|
canvas_name: str
|
|
76
69
|
missing_reference_ids: list[AssetCentricId] = Field(default_factory=list)
|
|
@@ -84,7 +77,7 @@ class CanvasMigrationIssue(MigrationIssue):
|
|
|
84
77
|
class ReadIssue(MigrationIssue):
|
|
85
78
|
"""Represents a read issue encountered during migration."""
|
|
86
79
|
|
|
87
|
-
|
|
80
|
+
...
|
|
88
81
|
|
|
89
82
|
|
|
90
83
|
class ReadFileIssue(ReadIssue):
|
|
@@ -95,7 +88,7 @@ class ReadFileIssue(ReadIssue):
|
|
|
95
88
|
error (str | None): An optional error message providing additional details about the read issue.
|
|
96
89
|
"""
|
|
97
90
|
|
|
98
|
-
type:
|
|
91
|
+
type: Literal["fileRead"] = "fileRead"
|
|
99
92
|
|
|
100
93
|
row_no: int
|
|
101
94
|
error: str | None = None
|
|
@@ -109,7 +102,7 @@ class ReadAPIIssue(ReadIssue):
|
|
|
109
102
|
error (str | None): An optional error message providing additional details about the read issue.
|
|
110
103
|
"""
|
|
111
104
|
|
|
112
|
-
type:
|
|
105
|
+
type: Literal["apiRead"] = "apiRead"
|
|
113
106
|
asset_centric_id: AssetCentricId
|
|
114
107
|
error: str | None = None
|
|
115
108
|
|
|
@@ -121,7 +114,7 @@ class ReadAPIIssue(ReadIssue):
|
|
|
121
114
|
}
|
|
122
115
|
|
|
123
116
|
|
|
124
|
-
class FailedConversion(
|
|
117
|
+
class FailedConversion(BaseModel, alias_generator=to_camel, extra="ignore", populate_by_name=True):
|
|
125
118
|
"""Represents a property that failed to convert during migration.
|
|
126
119
|
|
|
127
120
|
Attributes:
|
|
@@ -135,7 +128,7 @@ class FailedConversion(MigrationObject):
|
|
|
135
128
|
error: str
|
|
136
129
|
|
|
137
130
|
|
|
138
|
-
class InvalidPropertyDataType(
|
|
131
|
+
class InvalidPropertyDataType(BaseModel, alias_generator=to_camel, extra="ignore", populate_by_name=True):
|
|
139
132
|
"""Represents a property with an invalid type during migration.
|
|
140
133
|
|
|
141
134
|
Attributes:
|
|
@@ -160,9 +153,9 @@ class ConversionIssue(MigrationIssue):
|
|
|
160
153
|
failed_conversions (list[FailedConversion]): List of properties that failed to convert with reasons.
|
|
161
154
|
"""
|
|
162
155
|
|
|
163
|
-
type:
|
|
156
|
+
type: Literal["conversion"] = "conversion"
|
|
164
157
|
asset_centric_id: AssetCentricId
|
|
165
|
-
instance_id:
|
|
158
|
+
instance_id: NodeReference
|
|
166
159
|
missing_asset_centric_properties: list[str] = Field(default_factory=list)
|
|
167
160
|
missing_instance_properties: list[str] = Field(default_factory=list)
|
|
168
161
|
invalid_instance_property_types: list[InvalidPropertyDataType] = Field(default_factory=list)
|
|
@@ -181,10 +174,6 @@ class ConversionIssue(MigrationIssue):
|
|
|
181
174
|
or self.missing_instance_space
|
|
182
175
|
)
|
|
183
176
|
|
|
184
|
-
@field_serializer("instance_id")
|
|
185
|
-
def serialize_instance_id(self, instance_id: NodeId) -> dict[str, str]:
|
|
186
|
-
return instance_id.dump(include_instance_type=True)
|
|
187
|
-
|
|
188
177
|
@field_serializer("asset_centric_id")
|
|
189
178
|
def serialize_asset_centric_id(self, asset_centric_id: AssetCentricId) -> dict[str, Any]:
|
|
190
179
|
return {
|
|
@@ -197,16 +186,10 @@ class WriteIssue(MigrationIssue):
|
|
|
197
186
|
"""Represents a write issue encountered during migration.
|
|
198
187
|
|
|
199
188
|
Attributes:
|
|
200
|
-
instance_id (InstanceId): The InstanceId of the data model instance that could not be written.
|
|
201
189
|
status_code (int): The HTTP status code returned during the write operation.
|
|
202
190
|
message (str | None): An optional message providing additional details about the write issue.
|
|
203
191
|
"""
|
|
204
192
|
|
|
205
|
-
type:
|
|
206
|
-
instance_id: InstanceId
|
|
193
|
+
type: Literal["write"] = "write"
|
|
207
194
|
status_code: int
|
|
208
195
|
message: str | None = None
|
|
209
|
-
|
|
210
|
-
@field_serializer("instance_id")
|
|
211
|
-
def serialize_instance_id(self, instance_id: NodeId) -> dict[str, str]:
|
|
212
|
-
return instance_id.dump(include_instance_type=True)
|