cognite-toolkit 0.7.30__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.py +5 -6
- cognite_toolkit/_cdf_tk/apps/__init__.py +2 -0
- cognite_toolkit/_cdf_tk/apps/_core_app.py +7 -1
- cognite_toolkit/_cdf_tk/apps/_download_app.py +2 -2
- cognite_toolkit/_cdf_tk/apps/_dump_app.py +1 -1
- cognite_toolkit/_cdf_tk/apps/_import_app.py +41 -0
- cognite_toolkit/_cdf_tk/apps/_migrate_app.py +183 -8
- 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 +44 -12
- 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 +40 -35
- 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/{canvas.py → legacy/canvas.py} +16 -8
- cognite_toolkit/_cdf_tk/client/api/{charts.py → legacy/charts.py} +1 -1
- cognite_toolkit/_cdf_tk/client/api/{extended_data_modeling.py → legacy/extended_data_modeling.py} +1 -1
- cognite_toolkit/_cdf_tk/client/api/{extended_files.py → legacy/extended_files.py} +2 -2
- cognite_toolkit/_cdf_tk/client/api/{extended_functions.py → legacy/extended_functions.py} +9 -9
- cognite_toolkit/_cdf_tk/client/api/{extended_raw.py → legacy/extended_raw.py} +1 -1
- cognite_toolkit/_cdf_tk/client/api/{extended_timeseries.py → legacy/extended_timeseries.py} +5 -2
- cognite_toolkit/_cdf_tk/client/api/legacy/location_filters.py +112 -0
- cognite_toolkit/_cdf_tk/client/api/legacy/robotics/__init__.py +8 -0
- cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/capabilities.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/data_postprocessing.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/frames.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/locations.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/maps.py +1 -1
- cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/robots.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/legacy/search_config.py +53 -0
- cognite_toolkit/_cdf_tk/client/api/location_filters.py +140 -75
- cognite_toolkit/_cdf_tk/client/api/migration.py +2 -3
- cognite_toolkit/_cdf_tk/client/api/project.py +9 -8
- 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.py +2 -2
- cognite_toolkit/_cdf_tk/client/api/search_config.py +83 -31
- 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 +68 -56
- cognite_toolkit/_cdf_tk/client/api/three_d.py +385 -34
- 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 +30 -0
- cognite_toolkit/_cdf_tk/{utils → client}/http_client/_client.py +26 -16
- cognite_toolkit/_cdf_tk/{utils → client}/http_client/_data_classes.py +18 -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/{utils → client}/http_client/_tracker.py +5 -2
- 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/__init__.py +0 -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 +53 -14
- 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 +54 -17
- cognite_toolkit/_cdf_tk/commands/__init__.py +1 -0
- cognite_toolkit/_cdf_tk/commands/_migrate/command.py +103 -108
- cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py +29 -16
- cognite_toolkit/_cdf_tk/commands/_migrate/creators.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_migrate/data_classes.py +38 -6
- cognite_toolkit/_cdf_tk/commands/_migrate/data_mapper.py +262 -36
- cognite_toolkit/_cdf_tk/commands/_migrate/data_model.py +1 -0
- cognite_toolkit/_cdf_tk/commands/_migrate/default_mappings.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_migrate/issues.py +39 -38
- cognite_toolkit/_cdf_tk/commands/_migrate/migration_io.py +227 -8
- cognite_toolkit/_cdf_tk/commands/_profile.py +1 -1
- cognite_toolkit/_cdf_tk/commands/_purge.py +14 -16
- 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/__init__.py +0 -0
- 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 +228 -0
- cognite_toolkit/_cdf_tk/commands/build_v2/build_parameters.py +71 -0
- 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 +34 -25
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/file.py +50 -59
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/function.py +14 -2
- 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 +49 -14
- 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/_module_toml.py +1 -0
- 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 +173 -5
- 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 +65 -56
- 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/storageio/selectors/__init__.py +10 -1
- cognite_toolkit/_cdf_tk/storageio/selectors/_three_d.py +34 -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 +53 -4
- 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/_cdf_tk/validation.py +4 -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.30.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.30.dist-info → cognite_toolkit-0.7.51.dist-info}/WHEEL +2 -2
- cognite_toolkit/_cdf_tk/client/api/robotics/__init__.py +0 -3
- cognite_toolkit/_cdf_tk/client/data_classes/api_classes.py +0 -17
- cognite_toolkit/_cdf_tk/client/data_classes/base.py +0 -87
- cognite_toolkit/_cdf_tk/client/data_classes/three_d.py +0 -47
- cognite_toolkit/_cdf_tk/prototypes/import_app.py +0 -41
- cognite_toolkit/_cdf_tk/utils/http_client/_data_classes2.py +0 -187
- cognite_toolkit/_cdf_tk/utils/http_client/_exception.py +0 -4
- cognite_toolkit-0.7.30.dist-info/RECORD +0 -316
- /cognite_toolkit/_cdf_tk/client/{data_classes → api/legacy}/__init__.py +0 -0
- /cognite_toolkit/_cdf_tk/client/api/{dml.py → legacy/dml.py} +0 -0
- /cognite_toolkit/_cdf_tk/client/api/{fixed_transformations.py → legacy/fixed_transformations.py} +0 -0
- /cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/api.py +0 -0
- /cognite_toolkit/_cdf_tk/client/api/{robotics → legacy/robotics}/utlis.py +0 -0
- /cognite_toolkit/_cdf_tk/{prototypes/commands → client/request_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/_cdf_tk/{prototypes/commands/import_.py → commands/_import_cmd.py} +0 -0
- {cognite_toolkit-0.7.30.dist-info → cognite_toolkit-0.7.51.dist-info}/entry_points.txt +0 -0
|
@@ -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,
|
|
@@ -9,27 +9,31 @@ from cognite.client.data_classes.data_modeling import (
|
|
|
9
9
|
MappedProperty,
|
|
10
10
|
NodeApply,
|
|
11
11
|
NodeId,
|
|
12
|
+
ViewId,
|
|
12
13
|
)
|
|
13
14
|
from cognite.client.data_classes.data_modeling.instances import EdgeApply, NodeOrEdgeData, PropertyValueWrite
|
|
14
15
|
from cognite.client.data_classes.data_modeling.views import ViewProperty
|
|
15
16
|
from cognite.client.utils._identifier import InstanceId
|
|
16
17
|
|
|
17
18
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
18
|
-
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 (
|
|
19
24
|
AssetCentricId,
|
|
20
25
|
ResourceViewMappingApply,
|
|
21
26
|
)
|
|
27
|
+
from cognite_toolkit._cdf_tk.client.resource_classes.timeseries import TimeSeriesResponse
|
|
22
28
|
from cognite_toolkit._cdf_tk.utils.collection import flatten_dict_json_path
|
|
23
29
|
from cognite_toolkit._cdf_tk.utils.dtype_conversion import (
|
|
24
30
|
asset_centric_convert_to_primary_property,
|
|
25
31
|
convert_to_primary_property,
|
|
26
32
|
)
|
|
27
|
-
from cognite_toolkit._cdf_tk.utils.useful_types import
|
|
28
|
-
|
|
29
|
-
AssetCentricTypeExtended,
|
|
30
|
-
)
|
|
33
|
+
from cognite_toolkit._cdf_tk.utils.useful_types import AssetCentricTypeExtended
|
|
34
|
+
from cognite_toolkit._cdf_tk.utils.useful_types2 import AssetCentricResourceExtended
|
|
31
35
|
|
|
32
|
-
from .data_model import INSTANCE_SOURCE_VIEW_ID
|
|
36
|
+
from .data_model import COGNITE_MIGRATION_SPACE_ID, INSTANCE_SOURCE_VIEW_ID
|
|
33
37
|
from .issues import ConversionIssue, FailedConversion, InvalidPropertyDataType
|
|
34
38
|
|
|
35
39
|
|
|
@@ -110,22 +114,22 @@ class DirectRelationCache:
|
|
|
110
114
|
file_ids.add(file_id)
|
|
111
115
|
if isinstance(file_external_id := file_ref.get("externalId"), str):
|
|
112
116
|
file_external_ids.add(file_external_id)
|
|
113
|
-
elif isinstance(resource,
|
|
117
|
+
elif isinstance(resource, AssetResponse):
|
|
114
118
|
if resource.source:
|
|
115
119
|
source_ids.add(resource.source)
|
|
116
120
|
if resource.parent_id is not None:
|
|
117
121
|
asset_ids.add(resource.parent_id)
|
|
118
|
-
elif isinstance(resource,
|
|
122
|
+
elif isinstance(resource, FileMetadataResponse):
|
|
119
123
|
if resource.source:
|
|
120
124
|
source_ids.add(resource.source)
|
|
121
125
|
if resource.asset_ids:
|
|
122
126
|
asset_ids.update(resource.asset_ids)
|
|
123
|
-
elif isinstance(resource,
|
|
127
|
+
elif isinstance(resource, EventResponse):
|
|
124
128
|
if resource.source:
|
|
125
129
|
source_ids.add(resource.source)
|
|
126
130
|
if resource.asset_ids:
|
|
127
131
|
asset_ids.update(resource.asset_ids)
|
|
128
|
-
elif isinstance(resource,
|
|
132
|
+
elif isinstance(resource, TimeSeriesResponse):
|
|
129
133
|
if resource.asset_id is not None:
|
|
130
134
|
asset_ids.add(resource.asset_id)
|
|
131
135
|
if asset_ids:
|
|
@@ -169,6 +173,7 @@ def asset_centric_to_dm(
|
|
|
169
173
|
view_source: ResourceViewMappingApply,
|
|
170
174
|
view_properties: dict[str, ViewProperty],
|
|
171
175
|
direct_relation_cache: DirectRelationCache,
|
|
176
|
+
preferred_consumer_view: ViewId | None = None,
|
|
172
177
|
) -> tuple[NodeApply | EdgeApply | None, ConversionIssue]:
|
|
173
178
|
"""Convert an asset-centric resource to a data model instance.
|
|
174
179
|
|
|
@@ -178,6 +183,7 @@ def asset_centric_to_dm(
|
|
|
178
183
|
view_source (ResourceViewMappingApply): The view source defining how to map the resource to the data model.
|
|
179
184
|
view_properties (dict[str, ViewProperty]): The defined properties referenced in the view source mapping.
|
|
180
185
|
direct_relation_cache (DirectRelationCache): Cache for direct relation references.
|
|
186
|
+
preferred_consumer_view (ViewId | None): The preferred consumer view for the instance.
|
|
181
187
|
|
|
182
188
|
Returns:
|
|
183
189
|
tuple[NodeApply | EdgeApply, ConversionIssue]: A tuple containing the converted NodeApply and any ConversionIssue encountered.
|
|
@@ -193,7 +199,11 @@ def asset_centric_to_dm(
|
|
|
193
199
|
data_set_id = dumped.pop("dataSetId", None)
|
|
194
200
|
external_id = dumped.pop("externalId", None)
|
|
195
201
|
|
|
196
|
-
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
|
+
)
|
|
197
207
|
|
|
198
208
|
properties = create_properties(
|
|
199
209
|
dumped,
|
|
@@ -213,7 +223,10 @@ def asset_centric_to_dm(
|
|
|
213
223
|
"id": id_,
|
|
214
224
|
"dataSetId": data_set_id,
|
|
215
225
|
"classicExternalId": external_id,
|
|
226
|
+
"resourceViewMapping": {"space": COGNITE_MIGRATION_SPACE_ID, "externalId": view_source.external_id},
|
|
216
227
|
}
|
|
228
|
+
if preferred_consumer_view:
|
|
229
|
+
instance_source_properties["preferredConsumerViewId"] = preferred_consumer_view.dump()
|
|
217
230
|
sources.append(NodeOrEdgeData(source=INSTANCE_SOURCE_VIEW_ID, properties=instance_source_properties))
|
|
218
231
|
|
|
219
232
|
instance: NodeApply | EdgeApply
|
|
@@ -239,13 +252,13 @@ def asset_centric_to_dm(
|
|
|
239
252
|
|
|
240
253
|
|
|
241
254
|
def _lookup_resource_type(resource_type: AssetCentricResourceExtended) -> AssetCentricTypeExtended:
|
|
242
|
-
if isinstance(resource_type,
|
|
255
|
+
if isinstance(resource_type, AssetResponse):
|
|
243
256
|
return "asset"
|
|
244
|
-
elif isinstance(resource_type,
|
|
257
|
+
elif isinstance(resource_type, FileMetadataResponse):
|
|
245
258
|
return "file"
|
|
246
|
-
elif isinstance(resource_type,
|
|
259
|
+
elif isinstance(resource_type, EventResponse):
|
|
247
260
|
return "event"
|
|
248
|
-
elif isinstance(resource_type,
|
|
261
|
+
elif isinstance(resource_type, TimeSeriesResponse):
|
|
249
262
|
return "timeseries"
|
|
250
263
|
elif isinstance(resource_type, Annotation):
|
|
251
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
|
|
@@ -9,11 +9,14 @@ from cognite.client.data_classes._base import (
|
|
|
9
9
|
from cognite.client.data_classes.data_modeling import EdgeId, InstanceApply, NodeId, ViewId
|
|
10
10
|
from cognite.client.utils._identifier import InstanceId
|
|
11
11
|
from cognite.client.utils._text import to_camel_case
|
|
12
|
-
from pydantic import BaseModel, BeforeValidator, field_validator, model_validator
|
|
13
|
-
|
|
14
|
-
from cognite_toolkit._cdf_tk.client.
|
|
15
|
-
from cognite_toolkit._cdf_tk.client.
|
|
16
|
-
from cognite_toolkit._cdf_tk.client.
|
|
12
|
+
from pydantic import BaseModel, BeforeValidator, Field, field_validator, model_validator
|
|
13
|
+
|
|
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
|
|
17
20
|
from cognite_toolkit._cdf_tk.commands._migrate.default_mappings import (
|
|
18
21
|
ASSET_ANNOTATIONS_ID,
|
|
19
22
|
FILE_ANNOTATIONS_ID,
|
|
@@ -24,8 +27,8 @@ from cognite_toolkit._cdf_tk.storageio._data_classes import ModelList
|
|
|
24
27
|
from cognite_toolkit._cdf_tk.utils.useful_types import (
|
|
25
28
|
AssetCentricKindExtended,
|
|
26
29
|
JsonVal,
|
|
27
|
-
T_AssetCentricResourceExtended,
|
|
28
30
|
)
|
|
31
|
+
from cognite_toolkit._cdf_tk.utils.useful_types2 import T_AssetCentricResourceExtended
|
|
29
32
|
|
|
30
33
|
|
|
31
34
|
class MigrationMapping(BaseModel, alias_generator=to_camel_case, extra="ignore", populate_by_name=True):
|
|
@@ -261,3 +264,32 @@ class AssetCentricMappingList(
|
|
|
261
264
|
|
|
262
265
|
def as_write(self) -> InstanceApplyList:
|
|
263
266
|
return InstanceApplyList([item.as_write() for item in self])
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class Model(BaseModelObject):
|
|
270
|
+
instance_id: InstanceIdentifier
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
class Thumbnail(BaseModelObject):
|
|
274
|
+
instance_id: InstanceIdentifier
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
class ThreeDRevisionMigrationRequest(RequestResource):
|
|
278
|
+
space: str
|
|
279
|
+
type: Literal["CAD", "PointCloud", "Image360"]
|
|
280
|
+
revision_id: int
|
|
281
|
+
model: Model
|
|
282
|
+
|
|
283
|
+
def as_id(self) -> InternalId:
|
|
284
|
+
return InternalId(id=self.revision_id)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
class ThreeDMigrationRequest(RequestResource):
|
|
288
|
+
model_id: int
|
|
289
|
+
type: Literal["CAD", "PointCloud", "Image360"]
|
|
290
|
+
space: str
|
|
291
|
+
thumbnail: Thumbnail | None = None
|
|
292
|
+
revision: ThreeDRevisionMigrationRequest = Field(exclude=True)
|
|
293
|
+
|
|
294
|
+
def as_id(self) -> InternalId:
|
|
295
|
+
return InternalId(id=self.model_id)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
2
|
from collections import defaultdict
|
|
3
3
|
from collections.abc import Callable, Sequence
|
|
4
|
-
from typing import Generic, cast
|
|
4
|
+
from typing import Generic, Literal, cast
|
|
5
5
|
from uuid import uuid4
|
|
6
6
|
|
|
7
7
|
from cognite.client.data_classes.data_modeling import (
|
|
@@ -15,41 +15,57 @@ 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
|
+
ChartCoreTimeseries,
|
|
20
|
+
ChartSource,
|
|
21
|
+
ChartTimeseries,
|
|
22
|
+
)
|
|
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 (
|
|
19
25
|
ContainerReferenceApply,
|
|
20
26
|
FdmInstanceContainerReferenceApply,
|
|
21
27
|
IndustrialCanvas,
|
|
22
28
|
IndustrialCanvasApply,
|
|
23
29
|
)
|
|
24
|
-
from cognite_toolkit._cdf_tk.client.
|
|
25
|
-
from cognite_toolkit._cdf_tk.client.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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,
|
|
34
|
+
AssetMappingDMRequest,
|
|
35
|
+
RevisionStatus,
|
|
36
|
+
ThreeDModelResponse,
|
|
29
37
|
)
|
|
30
|
-
from cognite_toolkit._cdf_tk.client.data_classes.migration import ResourceViewMappingApply
|
|
31
38
|
from cognite_toolkit._cdf_tk.commands._migrate.conversion import DirectRelationCache, asset_centric_to_dm
|
|
32
|
-
from cognite_toolkit._cdf_tk.commands._migrate.data_classes import
|
|
39
|
+
from cognite_toolkit._cdf_tk.commands._migrate.data_classes import (
|
|
40
|
+
Model,
|
|
41
|
+
ThreeDMigrationRequest,
|
|
42
|
+
ThreeDRevisionMigrationRequest,
|
|
43
|
+
)
|
|
33
44
|
from cognite_toolkit._cdf_tk.commands._migrate.default_mappings import create_default_mappings
|
|
34
45
|
from cognite_toolkit._cdf_tk.commands._migrate.issues import (
|
|
35
46
|
CanvasMigrationIssue,
|
|
36
47
|
ChartMigrationIssue,
|
|
37
48
|
ConversionIssue,
|
|
38
|
-
|
|
49
|
+
ThreeDModelMigrationIssue,
|
|
39
50
|
)
|
|
40
|
-
from cognite_toolkit._cdf_tk.commands._migrate.selectors import AssetCentricMigrationSelector
|
|
41
51
|
from cognite_toolkit._cdf_tk.constants import MISSING_INSTANCE_SPACE
|
|
42
52
|
from cognite_toolkit._cdf_tk.exceptions import ToolkitMigrationError, ToolkitValueError
|
|
43
53
|
from cognite_toolkit._cdf_tk.protocols import T_ResourceRequest, T_ResourceResponse
|
|
44
54
|
from cognite_toolkit._cdf_tk.storageio._base import T_Selector
|
|
45
|
-
from cognite_toolkit._cdf_tk.storageio.
|
|
55
|
+
from cognite_toolkit._cdf_tk.storageio.logger import DataLogger, NoOpLogger
|
|
56
|
+
from cognite_toolkit._cdf_tk.storageio.selectors import CanvasSelector, ChartSelector, ThreeDSelector
|
|
46
57
|
from cognite_toolkit._cdf_tk.utils import humanize_collection
|
|
47
|
-
from cognite_toolkit._cdf_tk.utils.
|
|
48
|
-
|
|
49
|
-
|
|
58
|
+
from cognite_toolkit._cdf_tk.utils.useful_types2 import T_AssetCentricResourceExtended
|
|
59
|
+
|
|
60
|
+
from .data_classes import AssetCentricMapping
|
|
61
|
+
from .selectors import AssetCentricMigrationSelector
|
|
50
62
|
|
|
51
63
|
|
|
52
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
|
+
|
|
53
69
|
def prepare(self, source_selector: T_Selector) -> None:
|
|
54
70
|
"""Prepare the data mapper with the given source selector.
|
|
55
71
|
|
|
@@ -61,14 +77,14 @@ class DataMapper(Generic[T_Selector, T_ResourceResponse, T_ResourceRequest], ABC
|
|
|
61
77
|
pass
|
|
62
78
|
|
|
63
79
|
@abstractmethod
|
|
64
|
-
def map(self, source: Sequence[T_ResourceResponse]) -> Sequence[
|
|
80
|
+
def map(self, source: Sequence[T_ResourceResponse]) -> Sequence[T_ResourceRequest | None]:
|
|
65
81
|
"""Map a chunk of source data to the target format.
|
|
66
82
|
|
|
67
83
|
Args:
|
|
68
84
|
source: The source data chunk to be mapped.
|
|
69
85
|
|
|
70
86
|
Returns:
|
|
71
|
-
A
|
|
87
|
+
A sequence of mapped target data.
|
|
72
88
|
|
|
73
89
|
"""
|
|
74
90
|
raise NotImplementedError("Subclasses must implement this method.")
|
|
@@ -78,7 +94,7 @@ class AssetCentricMapper(
|
|
|
78
94
|
DataMapper[AssetCentricMigrationSelector, AssetCentricMapping[T_AssetCentricResourceExtended], InstanceApply]
|
|
79
95
|
):
|
|
80
96
|
def __init__(self, client: ToolkitClient) -> None:
|
|
81
|
-
|
|
97
|
+
super().__init__(client)
|
|
82
98
|
self._ingestion_view_by_id: dict[ViewId, View] = {}
|
|
83
99
|
self._view_mapping_by_id: dict[str, ResourceViewMappingApply] = {}
|
|
84
100
|
self._direct_relation_cache = DirectRelationCache(client)
|
|
@@ -106,14 +122,37 @@ class AssetCentricMapper(
|
|
|
106
122
|
|
|
107
123
|
def map(
|
|
108
124
|
self, source: Sequence[AssetCentricMapping[T_AssetCentricResourceExtended]]
|
|
109
|
-
) -> Sequence[
|
|
125
|
+
) -> Sequence[InstanceApply | None]:
|
|
110
126
|
"""Map a chunk of asset-centric data to InstanceApplyList format."""
|
|
111
127
|
# We update the direct relation cache in bulk for all resources in the chunk.
|
|
112
128
|
self._direct_relation_cache.update(item.resource for item in source)
|
|
113
|
-
output: list[
|
|
129
|
+
output: list[InstanceApply | None] = []
|
|
130
|
+
issues: list[ConversionIssue] = []
|
|
114
131
|
for item in source:
|
|
115
132
|
instance, conversion_issue = self._map_single_item(item)
|
|
116
|
-
|
|
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)
|
|
117
156
|
return output
|
|
118
157
|
|
|
119
158
|
def _map_single_item(
|
|
@@ -134,6 +173,7 @@ class AssetCentricMapper(
|
|
|
134
173
|
view_source=view_source,
|
|
135
174
|
view_properties=view_properties,
|
|
136
175
|
direct_relation_cache=self._direct_relation_cache,
|
|
176
|
+
preferred_consumer_view=mapping.preferred_consumer_view,
|
|
137
177
|
)
|
|
138
178
|
if mapping.instance_id.space == MISSING_INSTANCE_SPACE:
|
|
139
179
|
conversion_issue.missing_instance_space = f"Missing instance space for dataset ID {mapping.data_set_id!r}"
|
|
@@ -141,15 +181,29 @@ class AssetCentricMapper(
|
|
|
141
181
|
|
|
142
182
|
|
|
143
183
|
class ChartMapper(DataMapper[ChartSelector, Chart, ChartWrite]):
|
|
144
|
-
def
|
|
145
|
-
self.client = client
|
|
146
|
-
|
|
147
|
-
def map(self, source: Sequence[Chart]) -> Sequence[tuple[ChartWrite | None, MigrationIssue]]:
|
|
184
|
+
def map(self, source: Sequence[Chart]) -> Sequence[ChartWrite | None]:
|
|
148
185
|
self._populate_cache(source)
|
|
149
|
-
output: list[
|
|
186
|
+
output: list[ChartWrite | None] = []
|
|
187
|
+
issues: list[ChartMigrationIssue] = []
|
|
150
188
|
for item in source:
|
|
151
189
|
mapped_item, issue = self._map_single_item(item)
|
|
152
|
-
|
|
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)
|
|
153
207
|
return output
|
|
154
208
|
|
|
155
209
|
def _populate_cache(self, source: Sequence[Chart]) -> None:
|
|
@@ -171,7 +225,7 @@ class ChartMapper(DataMapper[ChartSelector, Chart, ChartWrite]):
|
|
|
171
225
|
self.client.migration.lookup.time_series(external_id=list(timeseries_external_ids))
|
|
172
226
|
|
|
173
227
|
def _map_single_item(self, item: Chart) -> tuple[ChartWrite | None, ChartMigrationIssue]:
|
|
174
|
-
issue = ChartMigrationIssue(chart_external_id=item.external_id)
|
|
228
|
+
issue = ChartMigrationIssue(chart_external_id=item.external_id, id=item.external_id)
|
|
175
229
|
time_series_collection = item.data.time_series_collection or []
|
|
176
230
|
timeseries_core_collection = self._create_timeseries_core_collection(time_series_collection, issue)
|
|
177
231
|
if issue.has_issues:
|
|
@@ -267,16 +321,30 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
267
321
|
DEFAULT_TIMESERIES_VIEW = ViewId("cdf_cdm", "CogniteTimeSeries", "v1")
|
|
268
322
|
|
|
269
323
|
def __init__(self, client: ToolkitClient, dry_run: bool, skip_on_missing_ref: bool = False) -> None:
|
|
270
|
-
|
|
324
|
+
super().__init__(client)
|
|
271
325
|
self.dry_run = dry_run
|
|
272
326
|
self.skip_on_missing_ref = skip_on_missing_ref
|
|
273
327
|
|
|
274
|
-
def map(self, source: Sequence[IndustrialCanvas]) -> Sequence[
|
|
328
|
+
def map(self, source: Sequence[IndustrialCanvas]) -> Sequence[IndustrialCanvasApply | None]:
|
|
275
329
|
self._populate_cache(source)
|
|
276
|
-
output: list[
|
|
330
|
+
output: list[IndustrialCanvasApply | None] = []
|
|
331
|
+
issues: list[CanvasMigrationIssue] = []
|
|
277
332
|
for item in source:
|
|
278
333
|
mapped_item, issue = self._map_single_item(item)
|
|
279
|
-
|
|
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)
|
|
280
348
|
return output
|
|
281
349
|
|
|
282
350
|
@property
|
|
@@ -327,10 +395,13 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
327
395
|
|
|
328
396
|
def _map_single_item(self, canvas: IndustrialCanvas) -> tuple[IndustrialCanvasApply | None, CanvasMigrationIssue]:
|
|
329
397
|
update = canvas.as_write()
|
|
330
|
-
issue = CanvasMigrationIssue(
|
|
398
|
+
issue = CanvasMigrationIssue(
|
|
399
|
+
canvas_external_id=canvas.canvas.external_id, canvas_name=canvas.canvas.name, id=canvas.canvas.name
|
|
400
|
+
)
|
|
331
401
|
|
|
332
402
|
remaining_container_references: list[ContainerReferenceApply] = []
|
|
333
403
|
new_fdm_references: list[FdmInstanceContainerReferenceApply] = []
|
|
404
|
+
uuid_generator: dict[str, str] = defaultdict(lambda: str(uuid4()))
|
|
334
405
|
for ref in update.container_references or []:
|
|
335
406
|
if ref.container_reference_type not in self.asset_centric_resource_types:
|
|
336
407
|
remaining_container_references.append(ref)
|
|
@@ -340,7 +411,9 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
340
411
|
issue.missing_reference_ids.append(ref.as_asset_centric_id())
|
|
341
412
|
else:
|
|
342
413
|
consumer_view = self._get_consumer_view_id(ref.resource_id, ref.container_reference_type)
|
|
343
|
-
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
|
+
)
|
|
344
417
|
new_fdm_references.append(fdm_ref)
|
|
345
418
|
if issue.missing_reference_ids and self.skip_on_missing_ref:
|
|
346
419
|
return None, issue
|
|
@@ -356,14 +429,22 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
356
429
|
f"Failed to create backup for canvas '{canvas.canvas.name}': {e!s}. "
|
|
357
430
|
) from e
|
|
358
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
|
+
|
|
359
435
|
return update, issue
|
|
360
436
|
|
|
361
437
|
@classmethod
|
|
362
438
|
def migrate_container_reference(
|
|
363
|
-
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],
|
|
364
445
|
) -> FdmInstanceContainerReferenceApply:
|
|
365
446
|
"""Migrate a single container reference by replacing the asset-centric ID with the data model instance ID."""
|
|
366
|
-
new_id =
|
|
447
|
+
new_id = uuid_generator[reference.id_]
|
|
367
448
|
new_external_id = f"{canvas_external_id}_{new_id}"
|
|
368
449
|
return FdmInstanceContainerReferenceApply(
|
|
369
450
|
external_id=new_external_id,
|
|
@@ -383,3 +464,148 @@ class CanvasMapper(DataMapper[CanvasSelector, IndustrialCanvas, IndustrialCanvas
|
|
|
383
464
|
max_width=reference.max_width,
|
|
384
465
|
max_height=reference.max_height,
|
|
385
466
|
)
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
class ThreeDMapper(DataMapper[ThreeDSelector, ThreeDModelResponse, ThreeDMigrationRequest]):
|
|
470
|
+
def map(self, source: Sequence[ThreeDModelResponse]) -> Sequence[ThreeDMigrationRequest | None]:
|
|
471
|
+
self._populate_cache(source)
|
|
472
|
+
output: list[ThreeDMigrationRequest | None] = []
|
|
473
|
+
issues: list[ThreeDModelMigrationIssue] = []
|
|
474
|
+
for item in source:
|
|
475
|
+
mapped_item, issue = self._map_single_item(item)
|
|
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)
|
|
490
|
+
return output
|
|
491
|
+
|
|
492
|
+
def _populate_cache(self, source: Sequence[ThreeDModelResponse]) -> None:
|
|
493
|
+
dataset_ids: set[int] = set()
|
|
494
|
+
for model in source:
|
|
495
|
+
if model.data_set_id is not None:
|
|
496
|
+
dataset_ids.add(model.data_set_id)
|
|
497
|
+
self.client.migration.space_source.retrieve(list(dataset_ids))
|
|
498
|
+
|
|
499
|
+
def _map_single_item(
|
|
500
|
+
self, item: ThreeDModelResponse
|
|
501
|
+
) -> tuple[ThreeDMigrationRequest | None, ThreeDModelMigrationIssue]:
|
|
502
|
+
issue = ThreeDModelMigrationIssue(model_name=item.name, model_id=item.id, id=item.name)
|
|
503
|
+
instance_space: str | None = None
|
|
504
|
+
last_revision_id: int | None = None
|
|
505
|
+
model_type: Literal["CAD", "PointCloud", "Image360"] | None = None
|
|
506
|
+
if item.data_set_id is None:
|
|
507
|
+
issue.error_message.append("3D model is not associated with any dataset.")
|
|
508
|
+
else:
|
|
509
|
+
space_source = self.client.migration.space_source.retrieve(item.data_set_id)
|
|
510
|
+
if space_source is not None:
|
|
511
|
+
instance_space = space_source.instance_space
|
|
512
|
+
if instance_space is None and item.data_set_id is not None:
|
|
513
|
+
issue.error_message.append(f"Missing instance space for dataset ID {item.data_set_id!r}")
|
|
514
|
+
if item.last_revision_info is None:
|
|
515
|
+
issue.error_message.append("3D model has no revisions.")
|
|
516
|
+
else:
|
|
517
|
+
model_type = self._get_type(item.last_revision_info)
|
|
518
|
+
last_revision_id = item.last_revision_info.revision_id
|
|
519
|
+
if last_revision_id is None:
|
|
520
|
+
issue.error_message.append("3D model's last revision has no revision ID.")
|
|
521
|
+
|
|
522
|
+
if model_type is None:
|
|
523
|
+
issue.error_message.append("3D model's last revision has no recognized type.")
|
|
524
|
+
|
|
525
|
+
if instance_space is None or last_revision_id is None or model_type is None or issue.has_issues:
|
|
526
|
+
return None, issue
|
|
527
|
+
|
|
528
|
+
mapped_request = ThreeDMigrationRequest(
|
|
529
|
+
model_id=item.id,
|
|
530
|
+
type=model_type,
|
|
531
|
+
space=instance_space,
|
|
532
|
+
revision=ThreeDRevisionMigrationRequest(
|
|
533
|
+
space=instance_space,
|
|
534
|
+
type=model_type,
|
|
535
|
+
revision_id=last_revision_id,
|
|
536
|
+
model=Model(
|
|
537
|
+
instance_id=InstanceIdentifier(
|
|
538
|
+
space=instance_space,
|
|
539
|
+
external_id=f"cog_3d_model_{item.id!s}",
|
|
540
|
+
)
|
|
541
|
+
),
|
|
542
|
+
),
|
|
543
|
+
)
|
|
544
|
+
return mapped_request, issue
|
|
545
|
+
|
|
546
|
+
@staticmethod
|
|
547
|
+
def _get_type(revision: RevisionStatus) -> Literal["CAD", "PointCloud", "Image360"] | None:
|
|
548
|
+
types = revision.types or []
|
|
549
|
+
if any("gltf-directory" in t for t in types):
|
|
550
|
+
return "CAD"
|
|
551
|
+
elif any("ept-pointcloud" in t for t in types):
|
|
552
|
+
return "PointCloud"
|
|
553
|
+
else:
|
|
554
|
+
return None
|
|
555
|
+
|
|
556
|
+
|
|
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] = []
|
|
561
|
+
self._populate_cache(source)
|
|
562
|
+
for item in source:
|
|
563
|
+
mapped_item, issue = self._map_single_item(item)
|
|
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)
|
|
579
|
+
return output
|
|
580
|
+
|
|
581
|
+
def _populate_cache(self, source: Sequence[AssetMappingClassicResponse]) -> None:
|
|
582
|
+
asset_ids: set[int] = set()
|
|
583
|
+
for mapping in source:
|
|
584
|
+
if mapping.asset_id is not None:
|
|
585
|
+
asset_ids.add(mapping.asset_id)
|
|
586
|
+
self.client.migration.lookup.assets(list(asset_ids))
|
|
587
|
+
|
|
588
|
+
def _map_single_item(
|
|
589
|
+
self, item: AssetMappingClassicResponse
|
|
590
|
+
) -> tuple[AssetMappingDMRequest | None, ThreeDModelMigrationIssue]:
|
|
591
|
+
issue = ThreeDModelMigrationIssue(
|
|
592
|
+
model_name=f"AssetMapping_{item.model_id}", model_id=item.model_id, id=f"AssetMapping_{item.model_id}"
|
|
593
|
+
)
|
|
594
|
+
asset_instance_id = item.asset_instance_id
|
|
595
|
+
if item.asset_id and asset_instance_id is None:
|
|
596
|
+
asset_node_id = self.client.migration.lookup.assets(item.asset_id)
|
|
597
|
+
if asset_node_id is None:
|
|
598
|
+
issue.error_message.append(f"Missing asset instance for asset ID {item.asset_id!r}")
|
|
599
|
+
return None, issue
|
|
600
|
+
asset_instance_id = NodeReference(space=asset_node_id.space, external_id=asset_node_id.external_id)
|
|
601
|
+
|
|
602
|
+
if asset_instance_id is None:
|
|
603
|
+
issue.error_message.append("Neither assetInstanceId nor assetId provided for mapping.")
|
|
604
|
+
return None, issue
|
|
605
|
+
mapped_request = AssetMappingDMRequest(
|
|
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,
|
|
610
|
+
)
|
|
611
|
+
return mapped_request, issue
|
|
@@ -4,6 +4,7 @@ from cognite.client.data_classes.data_modeling.containers import BTreeIndex
|
|
|
4
4
|
SPACE = dm.SpaceApply(
|
|
5
5
|
"cognite_migration", description="Space for the asset-centric to data modeling migration", name="cdf_migration"
|
|
6
6
|
)
|
|
7
|
+
COGNITE_MIGRATION_SPACE_ID = SPACE.space
|
|
7
8
|
|
|
8
9
|
RESOURCE_VIEW_MAPPING = dm.ContainerApply(
|
|
9
10
|
space=SPACE.space,
|
|
@@ -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"
|