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
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
from typing import Annotated, Any, Literal
|
|
2
|
+
|
|
3
|
+
from pydantic import Field, JsonValue, field_validator
|
|
4
|
+
from pydantic_core.core_schema import ValidationInfo
|
|
5
|
+
|
|
6
|
+
from cognite_toolkit._cdf_tk.client._resource_base import (
|
|
7
|
+
BaseModelObject,
|
|
8
|
+
RequestResource,
|
|
9
|
+
ResponseResource,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from .identifiers import Identifier, WorkflowVersionId
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TaskId(Identifier):
|
|
16
|
+
external_id: str
|
|
17
|
+
|
|
18
|
+
def __str__(self) -> str:
|
|
19
|
+
return f"externalId='{self.external_id}'"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TaskParameterDefinition(BaseModelObject):
|
|
23
|
+
type: str
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CogniteFunctionRef(BaseModelObject):
|
|
27
|
+
external_id: str
|
|
28
|
+
data: JsonValue | str | None = None
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class FunctionTaskParameters(TaskParameterDefinition):
|
|
32
|
+
type: Literal["function"] = Field("function", exclude=True)
|
|
33
|
+
function: CogniteFunctionRef
|
|
34
|
+
is_async_complete: bool | None = None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class TransformationRef(BaseModelObject):
|
|
38
|
+
external_id: str
|
|
39
|
+
concurrency_policy: Literal["fail", "waitForCurrent", "restartAfterCurrent"] | None = None
|
|
40
|
+
use_transformation_credentials: bool | None = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class TransformationTaskParameters(TaskParameterDefinition):
|
|
44
|
+
type: Literal["transformation"] = Field("transformation", exclude=True)
|
|
45
|
+
transformation: TransformationRef
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class CDFRequest(BaseModelObject):
|
|
49
|
+
resource_path: str
|
|
50
|
+
method: str
|
|
51
|
+
query_parameters: JsonValue | str | None = None
|
|
52
|
+
body: JsonValue | str | None = None
|
|
53
|
+
request_timeout_in_millis: float | str | None = None
|
|
54
|
+
cdf_version_header: str | None = None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class CDFTaskParameters(TaskParameterDefinition):
|
|
58
|
+
type: Literal["cdf"] = Field("cdf", exclude=True)
|
|
59
|
+
cdf_request: CDFRequest
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class DynamicRef(BaseModelObject):
|
|
63
|
+
tasks: str
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class DynamicTaskParameters(TaskParameterDefinition):
|
|
67
|
+
type: Literal["dynamic"] = Field("dynamic", exclude=True)
|
|
68
|
+
dynamic: DynamicRef
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class SubworkflowRef(BaseModelObject):
|
|
72
|
+
tasks: "list[Task]"
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class SubworkflowTaskParameters(TaskParameterDefinition):
|
|
76
|
+
type: Literal["subworkflow"] = Field("subworkflow", exclude=True)
|
|
77
|
+
subworkflow: WorkflowVersionId | SubworkflowRef
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class SimulatorInputUnit(BaseModelObject):
|
|
81
|
+
name: str
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class SimulatorInput(BaseModelObject):
|
|
85
|
+
reference_id: str
|
|
86
|
+
value: str | int | float | list[str] | list[int] | list[float]
|
|
87
|
+
unit: SimulatorInputUnit | None = None
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class SimulationRef(BaseModelObject):
|
|
91
|
+
routine_external_id: str
|
|
92
|
+
run_time: int | None = None
|
|
93
|
+
inputs: list[SimulatorInput] | None = None
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class SimulationTaskParameters(TaskParameterDefinition):
|
|
97
|
+
type: Literal["simulation"] = Field("simulation", exclude=True)
|
|
98
|
+
simulation: SimulationRef
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
Parameter = Annotated[
|
|
102
|
+
FunctionTaskParameters
|
|
103
|
+
| TransformationTaskParameters
|
|
104
|
+
| CDFTaskParameters
|
|
105
|
+
| DynamicTaskParameters
|
|
106
|
+
| SubworkflowTaskParameters
|
|
107
|
+
| SimulationTaskParameters,
|
|
108
|
+
Field(discriminator="type"),
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class Task(BaseModelObject):
|
|
113
|
+
external_id: str
|
|
114
|
+
type: str
|
|
115
|
+
name: str | None = None
|
|
116
|
+
description: str | None = None
|
|
117
|
+
retries: int | None = None
|
|
118
|
+
timeout: int | None = None
|
|
119
|
+
on_failure: Literal["abortWorkflow", "skipTask"] = "abortWorkflow"
|
|
120
|
+
depends_on: list[TaskId] | None = None
|
|
121
|
+
parameters: Parameter | None = None
|
|
122
|
+
|
|
123
|
+
@field_validator("parameters", mode="before")
|
|
124
|
+
@classmethod
|
|
125
|
+
def move_type_to_field(cls, value: Any, info: ValidationInfo) -> Any:
|
|
126
|
+
if not isinstance(value, dict) or "type" not in info.data:
|
|
127
|
+
return value
|
|
128
|
+
value = dict(value)
|
|
129
|
+
value["type"] = info.data["type"]
|
|
130
|
+
return value
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class WorkflowDefinition(BaseModelObject):
|
|
134
|
+
description: str | None = None
|
|
135
|
+
tasks: list[Task]
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class WorkflowVersion(BaseModelObject):
|
|
139
|
+
workflow_external_id: str
|
|
140
|
+
version: str
|
|
141
|
+
workflow_definition: WorkflowDefinition
|
|
142
|
+
|
|
143
|
+
def as_id(self) -> WorkflowVersionId:
|
|
144
|
+
return WorkflowVersionId(workflow_external_id=self.workflow_external_id, version=self.version)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
class WorkflowVersionRequest(WorkflowVersion, RequestResource): ...
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class WorkflowVersionResponse(WorkflowVersion, ResponseResource[WorkflowVersionRequest]):
|
|
151
|
+
created_time: int
|
|
152
|
+
last_updated_time: int
|
|
153
|
+
|
|
154
|
+
def as_request_resource(self) -> WorkflowVersionRequest:
|
|
155
|
+
return WorkflowVersionRequest.model_validate(self.dump(), extra="ignore")
|
|
@@ -7,22 +7,39 @@ from cognite.client._api.datapoints import DatapointsAPI
|
|
|
7
7
|
from cognite.client._api.datapoints_subscriptions import DatapointsSubscriptionAPI
|
|
8
8
|
from cognite.client._api.functions import FunctionCallsAPI, FunctionSchedulesAPI
|
|
9
9
|
from cognite.client._api.raw import RawDatabasesAPI, RawRowsAPI, RawTablesAPI
|
|
10
|
+
from cognite.client._api.simulators import SimulatorModelsAPI, SimulatorsAPI
|
|
10
11
|
from cognite.client._api.synthetic_time_series import SyntheticDatapointsAPI
|
|
11
12
|
from cognite.client.testing import CogniteClientMock
|
|
12
13
|
from rich.console import Console
|
|
13
14
|
|
|
14
15
|
from cognite_toolkit._cdf_tk.client._toolkit_client import ToolkitClient
|
|
15
|
-
|
|
16
|
-
from .api.
|
|
17
|
-
from .api.
|
|
18
|
-
from .api.
|
|
19
|
-
from .api.
|
|
20
|
-
from .api.
|
|
21
|
-
from .api.
|
|
22
|
-
from .api.
|
|
23
|
-
from .api.
|
|
16
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.canvas import CanvasAPI, IndustrialCanvasAPI
|
|
17
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.charts import ChartsAPI
|
|
18
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.dml import DMLAPI
|
|
19
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.extended_data_modeling import ExtendedInstancesAPI
|
|
20
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.extended_files import ExtendedFileMetadataAPI
|
|
21
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.extended_functions import ExtendedFunctionsAPI
|
|
22
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.extended_raw import ExtendedRawAPI
|
|
23
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.extended_timeseries import ExtendedTimeSeriesAPI
|
|
24
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.location_filters import LocationFiltersAPI
|
|
25
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.robotics import (
|
|
26
|
+
CapabilitiesAPI,
|
|
27
|
+
DataPostProcessingAPI,
|
|
28
|
+
FramesAPI,
|
|
29
|
+
MapsAPI,
|
|
30
|
+
RoboticsAPI,
|
|
31
|
+
)
|
|
32
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.robotics import LocationsAPI as RoboticsLocationsAPI
|
|
33
|
+
from cognite_toolkit._cdf_tk.client.api.legacy.search_config import SearchConfigurationsAPI
|
|
34
|
+
|
|
35
|
+
from ._toolkit_client import ToolAPI
|
|
36
|
+
from .api.assets import AssetsAPI
|
|
37
|
+
from .api.datasets import DataSetsAPI
|
|
38
|
+
from .api.events import EventsAPI
|
|
39
|
+
from .api.extraction_pipelines import ExtractionPipelinesAPI
|
|
40
|
+
from .api.filemetadata import FileMetadataAPI
|
|
24
41
|
from .api.infield import InfieldAPI, InFieldCDMConfigAPI, InfieldConfigAPI
|
|
25
|
-
from .api.
|
|
42
|
+
from .api.labels import LabelsAPI
|
|
26
43
|
from .api.lookup import (
|
|
27
44
|
AssetLookUpAPI,
|
|
28
45
|
DataSetLookUpAPI,
|
|
@@ -44,17 +61,18 @@ from .api.migration import (
|
|
|
44
61
|
ResourceViewMappingAPI,
|
|
45
62
|
)
|
|
46
63
|
from .api.project import ProjectAPI
|
|
47
|
-
from .api.robotics import RoboticsAPI
|
|
48
|
-
from .api.robotics.capabilities import CapabilitiesAPI
|
|
49
|
-
from .api.robotics.data_postprocessing import DataPostProcessingAPI
|
|
50
|
-
from .api.robotics.frames import FramesAPI
|
|
51
|
-
from .api.robotics.locations import LocationsAPI as RoboticsLocationsAPI
|
|
52
|
-
from .api.robotics.maps import MapsAPI
|
|
53
64
|
from .api.search import SearchAPI
|
|
54
|
-
from .api.
|
|
65
|
+
from .api.security_categories import SecurityCategoriesAPI
|
|
66
|
+
from .api.sequences import SequencesAPI
|
|
55
67
|
from .api.streams import StreamsAPI
|
|
68
|
+
from .api.three_d import ThreeDAPI, ThreeDClassicModelsAPI
|
|
69
|
+
from .api.timeseries import TimeSeriesAPI
|
|
56
70
|
from .api.token import TokenAPI
|
|
71
|
+
from .api.transformations import TransformationsAPI
|
|
57
72
|
from .api.verify import VerifyAPI
|
|
73
|
+
from .api.workflow_triggers import WorkflowTriggersAPI
|
|
74
|
+
from .api.workflow_versions import WorkflowVersionsAPI
|
|
75
|
+
from .api.workflows import WorkflowsAPI
|
|
58
76
|
|
|
59
77
|
|
|
60
78
|
class ToolkitClientMock(CogniteClientMock):
|
|
@@ -131,6 +149,25 @@ class ToolkitClientMock(CogniteClientMock):
|
|
|
131
149
|
self.time_series.data.synthetic = MagicMock(spec_set=SyntheticDatapointsAPI)
|
|
132
150
|
self.time_series.subscriptions = MagicMock(spec_set=DatapointsSubscriptionAPI)
|
|
133
151
|
|
|
152
|
+
self.tool = MagicMock(spec=ToolAPI)
|
|
153
|
+
self.tool.three_d = MagicMock(spec=ThreeDAPI)
|
|
154
|
+
self.tool.three_d.models_classic = MagicMock(spec_set=ThreeDClassicModelsAPI)
|
|
155
|
+
self.tool.assets = MagicMock(spec_set=AssetsAPI)
|
|
156
|
+
self.tool.timeseries = MagicMock(spec_set=TimeSeriesAPI)
|
|
157
|
+
self.tool.filemetadata = MagicMock(spec_set=FileMetadataAPI)
|
|
158
|
+
self.tool.events = MagicMock(spec_set=EventsAPI)
|
|
159
|
+
self.tool.simulators = MagicMock(spec=SimulatorsAPI)
|
|
160
|
+
self.tool.simulators.models = MagicMock(spec_set=SimulatorModelsAPI)
|
|
161
|
+
self.tool.datasets = MagicMock(spec_set=DataSetsAPI)
|
|
162
|
+
self.tool.extraction_pipelines = MagicMock(spec_set=ExtractionPipelinesAPI)
|
|
163
|
+
self.tool.labels = MagicMock(spec_set=LabelsAPI)
|
|
164
|
+
self.tool.security_categories = MagicMock(spec_set=SecurityCategoriesAPI)
|
|
165
|
+
self.tool.sequences = MagicMock(spec_set=SequencesAPI)
|
|
166
|
+
self.tool.transformations = MagicMock(spec_set=TransformationsAPI)
|
|
167
|
+
self.tool.workflows = MagicMock(spec=WorkflowsAPI)
|
|
168
|
+
self.tool.workflows.triggers = MagicMock(spec_set=WorkflowTriggersAPI)
|
|
169
|
+
self.tool.workflows.versions = MagicMock(spec_set=WorkflowVersionsAPI)
|
|
170
|
+
|
|
134
171
|
self.streams = MagicMock(spec=StreamsAPI)
|
|
135
172
|
|
|
136
173
|
# This is a helper API, not a real API.
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
from collections.abc import Callable,
|
|
2
|
-
from
|
|
1
|
+
from collections.abc import Callable, Sequence
|
|
2
|
+
from dataclasses import dataclass
|
|
3
3
|
from pathlib import Path
|
|
4
|
+
from typing import get_args
|
|
4
5
|
|
|
5
6
|
from rich import print
|
|
6
7
|
from rich.console import Console
|
|
7
8
|
from rich.table import Table
|
|
8
9
|
|
|
9
10
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
11
|
+
from cognite_toolkit._cdf_tk.client.http_client import (
|
|
12
|
+
FailedRequestItems,
|
|
13
|
+
FailedResponseItems,
|
|
14
|
+
HTTPClient,
|
|
15
|
+
SuccessResponseItems,
|
|
16
|
+
)
|
|
10
17
|
from cognite_toolkit._cdf_tk.commands._base import ToolkitCommand
|
|
11
18
|
from cognite_toolkit._cdf_tk.commands._migrate.creators import MigrationCreator
|
|
12
19
|
from cognite_toolkit._cdf_tk.commands._migrate.data_mapper import DataMapper
|
|
@@ -21,26 +28,30 @@ from cognite_toolkit._cdf_tk.exceptions import (
|
|
|
21
28
|
)
|
|
22
29
|
from cognite_toolkit._cdf_tk.protocols import T_ResourceRequest, T_ResourceResponse
|
|
23
30
|
from cognite_toolkit._cdf_tk.storageio import T_Selector, UploadableStorageIO, UploadItem
|
|
31
|
+
from cognite_toolkit._cdf_tk.storageio.logger import FileDataLogger, OperationStatus
|
|
24
32
|
from cognite_toolkit._cdf_tk.utils import humanize_collection, safe_write, sanitize_filename
|
|
25
33
|
from cognite_toolkit._cdf_tk.utils.file import yaml_safe_dump
|
|
26
|
-
from cognite_toolkit._cdf_tk.utils.fileio import
|
|
27
|
-
from cognite_toolkit._cdf_tk.utils.http_client import HTTPClient, HTTPMessage, ItemMessage, SuccessResponseItems
|
|
34
|
+
from cognite_toolkit._cdf_tk.utils.fileio import NDJsonWriter, Uncompressed
|
|
28
35
|
from cognite_toolkit._cdf_tk.utils.producer_worker import ProducerWorkerExecutor
|
|
29
|
-
from cognite_toolkit._cdf_tk.utils.progress_tracker import AVAILABLE_STATUS, ProgressTracker, Status
|
|
30
36
|
|
|
31
37
|
from .data_model import INSTANCE_SOURCE_VIEW_ID, MODEL_ID, RESOURCE_VIEW_MAPPING_VIEW_ID
|
|
38
|
+
from .issues import WriteIssue
|
|
32
39
|
|
|
33
40
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
@dataclass
|
|
42
|
+
class OperationIssue:
|
|
43
|
+
message: str
|
|
44
|
+
count: int
|
|
45
|
+
|
|
39
46
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
@dataclass
|
|
48
|
+
class MigrationStatusResult:
|
|
49
|
+
status: OperationStatus
|
|
50
|
+
issues: list[OperationIssue]
|
|
51
|
+
count: int
|
|
43
52
|
|
|
53
|
+
|
|
54
|
+
class MigrationCommand(ToolkitCommand):
|
|
44
55
|
def migrate(
|
|
45
56
|
self,
|
|
46
57
|
selected: T_Selector,
|
|
@@ -49,7 +60,7 @@ class MigrationCommand(ToolkitCommand):
|
|
|
49
60
|
log_dir: Path,
|
|
50
61
|
dry_run: bool = False,
|
|
51
62
|
verbose: bool = False,
|
|
52
|
-
) ->
|
|
63
|
+
) -> list[MigrationStatusResult]:
|
|
53
64
|
if log_dir.exists() and any(log_dir.iterdir()):
|
|
54
65
|
raise ToolkitFileExistsError(
|
|
55
66
|
f"Log directory {log_dir} already exists. Please remove it or choose another directory."
|
|
@@ -65,15 +76,18 @@ class MigrationCommand(ToolkitCommand):
|
|
|
65
76
|
self.validate_available_capacity(data.client, total_items)
|
|
66
77
|
|
|
67
78
|
console = Console()
|
|
68
|
-
tracker = ProgressTracker[str](self.Steps.list())
|
|
69
79
|
with (
|
|
70
80
|
NDJsonWriter(log_dir, kind=f"{selected.kind}MigrationIssues", compression=Uncompressed) as log_file,
|
|
71
81
|
HTTPClient(config=data.client.config) as write_client,
|
|
72
82
|
):
|
|
83
|
+
logger = FileDataLogger(log_file)
|
|
84
|
+
data.logger = logger
|
|
85
|
+
mapper.logger = logger
|
|
86
|
+
|
|
73
87
|
executor = ProducerWorkerExecutor[Sequence[T_ResourceResponse], Sequence[UploadItem[T_ResourceRequest]]](
|
|
74
|
-
download_iterable=
|
|
75
|
-
process=self._convert(mapper, data
|
|
76
|
-
write=self._upload(selected, write_client, data,
|
|
88
|
+
download_iterable=(page.items for page in data.stream_data(selected)),
|
|
89
|
+
process=self._convert(mapper, data),
|
|
90
|
+
write=self._upload(selected, write_client, data, dry_run),
|
|
77
91
|
iteration_count=iteration_count,
|
|
78
92
|
max_queue_size=10,
|
|
79
93
|
download_description=f"Downloading {selected.display_name}",
|
|
@@ -86,91 +100,71 @@ class MigrationCommand(ToolkitCommand):
|
|
|
86
100
|
executor.run()
|
|
87
101
|
total = executor.total_items
|
|
88
102
|
|
|
89
|
-
self.
|
|
90
|
-
|
|
103
|
+
results = self._create_status_summary(logger)
|
|
104
|
+
|
|
105
|
+
self._print_rich_tables(results, console)
|
|
106
|
+
self._print_txt(results, log_dir, f"{selected.kind}Items", console)
|
|
91
107
|
executor.raise_on_error()
|
|
92
108
|
action = "Would migrate" if dry_run else "Migrating"
|
|
93
109
|
console.print(f"{action} {total:,} {selected.display_name} to instances.")
|
|
94
|
-
return tracker
|
|
95
110
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
111
|
+
return results
|
|
112
|
+
|
|
113
|
+
# Todo: Move to the logger module
|
|
114
|
+
@classmethod
|
|
115
|
+
def _create_status_summary(cls, logger: FileDataLogger) -> list[MigrationStatusResult]:
|
|
116
|
+
results: list[MigrationStatusResult] = []
|
|
117
|
+
status_counts = logger.tracker.get_status_counts()
|
|
118
|
+
for status in get_args(OperationStatus):
|
|
119
|
+
issue_counts = logger.tracker.get_issue_counts(status)
|
|
120
|
+
issues = [OperationIssue(message=issue, count=count) for issue, count in issue_counts.items()]
|
|
121
|
+
result = MigrationStatusResult(
|
|
122
|
+
status=status,
|
|
123
|
+
issues=issues,
|
|
124
|
+
count=status_counts.get(status, 0),
|
|
101
125
|
)
|
|
126
|
+
results.append(result)
|
|
127
|
+
return results
|
|
102
128
|
|
|
129
|
+
def _print_rich_tables(self, results: list[MigrationStatusResult], console: Console) -> None:
|
|
103
130
|
table = Table(title="Migration Summary", show_lines=True)
|
|
104
|
-
table.add_column("Status", style="
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
for
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
continue
|
|
111
|
-
row = [status]
|
|
112
|
-
for step in self.Steps:
|
|
113
|
-
row.append(str(results.get((step.value, status), 0)))
|
|
114
|
-
table.add_row(*row)
|
|
115
|
-
|
|
131
|
+
table.add_column("Status", style="bold")
|
|
132
|
+
table.add_column("Count", justify="right", style="bold")
|
|
133
|
+
table.add_column("Issues", style="bold")
|
|
134
|
+
for result in results:
|
|
135
|
+
issues_str = "\n".join(f"{issue.message}: {issue.count}" for issue in result.issues) or ""
|
|
136
|
+
table.add_row(result.status, str(result.count), issues_str)
|
|
116
137
|
console.print(table)
|
|
117
138
|
|
|
118
|
-
def
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
SchemaColumn(name="ID", type="string"),
|
|
135
|
-
*(SchemaColumn(name=step, type="string") for step in cls.Steps.list()),
|
|
136
|
-
]
|
|
137
|
-
|
|
138
|
-
def _download_iterable(
|
|
139
|
-
self,
|
|
140
|
-
selected: T_Selector,
|
|
141
|
-
data: UploadableStorageIO[T_Selector, T_ResourceResponse, T_ResourceRequest],
|
|
142
|
-
tracker: ProgressTracker[str],
|
|
143
|
-
) -> Iterable[Sequence[T_ResourceResponse]]:
|
|
144
|
-
for page in data.stream_data(selected):
|
|
145
|
-
for item in page.items:
|
|
146
|
-
tracker.set_progress(data.as_id(item), self.Steps.DOWNLOAD, "success")
|
|
147
|
-
yield page.items
|
|
139
|
+
def _print_txt(self, results: list[MigrationStatusResult], log_dir: Path, kind: str, console: Console) -> None:
|
|
140
|
+
summary_file = log_dir / f"{kind}_migration_summary.txt"
|
|
141
|
+
with summary_file.open("w", encoding="utf-8") as f:
|
|
142
|
+
f.write("Migration Summary\n")
|
|
143
|
+
f.write("=================\n\n")
|
|
144
|
+
for result in results:
|
|
145
|
+
f.write(f"Status: {result.status}\n")
|
|
146
|
+
f.write(f"Count: {result.count}\n")
|
|
147
|
+
f.write("Issues:\n")
|
|
148
|
+
if result.issues:
|
|
149
|
+
for issue in result.issues:
|
|
150
|
+
f.write(f" - {issue.message}: {issue.count}\n")
|
|
151
|
+
else:
|
|
152
|
+
f.write(" None\n")
|
|
153
|
+
f.write("\n")
|
|
154
|
+
console.print(f"Summary written to {log_dir}")
|
|
148
155
|
|
|
156
|
+
@staticmethod
|
|
149
157
|
def _convert(
|
|
150
|
-
self,
|
|
151
158
|
mapper: DataMapper[T_Selector, T_ResourceResponse, T_ResourceRequest],
|
|
152
159
|
data: UploadableStorageIO[T_Selector, T_ResourceResponse, T_ResourceRequest],
|
|
153
|
-
tracker: ProgressTracker[str],
|
|
154
|
-
log_file: NDJsonWriter,
|
|
155
160
|
) -> Callable[[Sequence[T_ResourceResponse]], Sequence[UploadItem[T_ResourceRequest]]]:
|
|
156
161
|
def track_mapping(source: Sequence[T_ResourceResponse]) -> list[UploadItem[T_ResourceRequest]]:
|
|
157
162
|
mapped = mapper.map(source)
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
result: Status = "failed" if target is None else "success"
|
|
164
|
-
tracker.set_progress(id_, step=self.Steps.CONVERT, status=result)
|
|
165
|
-
|
|
166
|
-
if issue.has_issues:
|
|
167
|
-
# MyPy fails to understand that dict[str, JsonVal] is a Chunk
|
|
168
|
-
issues.append(issue.dump()) # type: ignore[arg-type]
|
|
169
|
-
if target is not None:
|
|
170
|
-
targets.append(UploadItem(source_id=id_, item=target))
|
|
171
|
-
if issues:
|
|
172
|
-
log_file.write_chunks(issues)
|
|
173
|
-
return targets
|
|
163
|
+
return [
|
|
164
|
+
UploadItem(source_id=data.as_id(item), item=target)
|
|
165
|
+
for target, item in zip(mapped, source)
|
|
166
|
+
if target is not None
|
|
167
|
+
]
|
|
174
168
|
|
|
175
169
|
return track_mapping
|
|
176
170
|
|
|
@@ -179,36 +173,37 @@ class MigrationCommand(ToolkitCommand):
|
|
|
179
173
|
selected: T_Selector,
|
|
180
174
|
write_client: HTTPClient,
|
|
181
175
|
target: UploadableStorageIO[T_Selector, T_ResourceResponse, T_ResourceRequest],
|
|
182
|
-
tracker: ProgressTracker[str],
|
|
183
|
-
log_file: NDJsonWriter,
|
|
184
176
|
dry_run: bool,
|
|
185
177
|
) -> Callable[[Sequence[UploadItem[T_ResourceRequest]]], None]:
|
|
186
178
|
def upload_items(data_item: Sequence[UploadItem[T_ResourceRequest]]) -> None:
|
|
187
179
|
if not data_item:
|
|
188
180
|
return None
|
|
189
|
-
responses: Sequence[HTTPMessage]
|
|
190
181
|
if dry_run:
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
issues: list[Chunk] = []
|
|
182
|
+
target.logger.tracker.finalize_item([item.source_id for item in data_item], "pending")
|
|
183
|
+
return None
|
|
184
|
+
|
|
185
|
+
responses = target.upload_items(data_chunk=data_item, http_client=write_client, selector=selected)
|
|
186
|
+
|
|
187
|
+
# Todo: Move logging into the UploadableStorageIO class
|
|
188
|
+
issues: list[WriteIssue] = []
|
|
200
189
|
for item in responses:
|
|
201
190
|
if isinstance(item, SuccessResponseItems):
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
191
|
+
target.logger.tracker.finalize_item(item.ids, "success")
|
|
192
|
+
continue
|
|
193
|
+
if isinstance(item, FailedResponseItems):
|
|
194
|
+
error = item.error
|
|
195
|
+
for id_ in item.ids:
|
|
196
|
+
issue = WriteIssue(id=str(id_), status_code=error.code, message=error.message)
|
|
197
|
+
issues.append(issue)
|
|
198
|
+
elif isinstance(item, FailedRequestItems):
|
|
199
|
+
for id_ in item.ids:
|
|
200
|
+
issue = WriteIssue(id=str(id_), status_code=0, message=item.error)
|
|
201
|
+
issues.append(issue)
|
|
202
|
+
|
|
203
|
+
if isinstance(item, FailedResponseItems | FailedRequestItems):
|
|
204
|
+
target.logger.tracker.finalize_item(item.ids, "failure")
|
|
210
205
|
if issues:
|
|
211
|
-
|
|
206
|
+
target.logger.log(issues)
|
|
212
207
|
return None
|
|
213
208
|
|
|
214
209
|
return upload_items
|