cognite-neat 0.123.24__py3-none-any.whl → 1.0.22__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/neat/__init__.py +4 -3
- cognite/neat/_client/__init__.py +5 -0
- cognite/neat/_client/api.py +8 -0
- cognite/neat/_client/client.py +21 -0
- cognite/neat/_client/config.py +40 -0
- cognite/neat/_client/containers_api.py +138 -0
- cognite/neat/_client/data_classes.py +44 -0
- cognite/neat/_client/data_model_api.py +115 -0
- cognite/neat/_client/init/credentials.py +70 -0
- cognite/neat/_client/init/env_vars.py +131 -0
- cognite/neat/_client/init/main.py +51 -0
- cognite/neat/_client/spaces_api.py +115 -0
- cognite/neat/_client/statistics_api.py +24 -0
- cognite/neat/_client/views_api.py +144 -0
- cognite/neat/_config.py +266 -0
- cognite/neat/_data_model/_analysis.py +571 -0
- cognite/neat/_data_model/_constants.py +74 -0
- cognite/neat/_data_model/_identifiers.py +61 -0
- cognite/neat/_data_model/_shared.py +41 -0
- cognite/neat/_data_model/_snapshot.py +134 -0
- cognite/neat/_data_model/deployer/_differ.py +140 -0
- cognite/neat/_data_model/deployer/_differ_container.py +360 -0
- cognite/neat/_data_model/deployer/_differ_data_model.py +54 -0
- cognite/neat/_data_model/deployer/_differ_space.py +9 -0
- cognite/neat/_data_model/deployer/_differ_view.py +299 -0
- cognite/neat/_data_model/deployer/data_classes.py +644 -0
- cognite/neat/_data_model/deployer/deployer.py +431 -0
- cognite/neat/_data_model/exporters/__init__.py +15 -0
- cognite/neat/_data_model/exporters/_api_exporter.py +37 -0
- cognite/neat/_data_model/exporters/_base.py +24 -0
- cognite/neat/_data_model/exporters/_table_exporter/exporter.py +128 -0
- cognite/neat/_data_model/exporters/_table_exporter/workbook.py +409 -0
- cognite/neat/_data_model/exporters/_table_exporter/writer.py +480 -0
- cognite/neat/_data_model/importers/__init__.py +5 -0
- cognite/neat/_data_model/importers/_api_importer.py +166 -0
- cognite/neat/_data_model/importers/_base.py +16 -0
- cognite/neat/_data_model/importers/_table_importer/data_classes.py +344 -0
- cognite/neat/_data_model/importers/_table_importer/importer.py +192 -0
- cognite/neat/_data_model/importers/_table_importer/reader.py +1102 -0
- cognite/neat/_data_model/importers/_table_importer/source.py +94 -0
- cognite/neat/_data_model/models/conceptual/_base.py +18 -0
- cognite/neat/_data_model/models/conceptual/_concept.py +67 -0
- cognite/neat/_data_model/models/conceptual/_data_model.py +51 -0
- cognite/neat/_data_model/models/conceptual/_properties.py +104 -0
- cognite/neat/_data_model/models/conceptual/_property.py +105 -0
- cognite/neat/_data_model/models/dms/__init__.py +206 -0
- cognite/neat/_data_model/models/dms/_base.py +31 -0
- cognite/neat/_data_model/models/dms/_constants.py +48 -0
- cognite/neat/_data_model/models/dms/_constraints.py +42 -0
- cognite/neat/_data_model/models/dms/_container.py +159 -0
- cognite/neat/_data_model/models/dms/_data_model.py +95 -0
- cognite/neat/_data_model/models/dms/_data_types.py +195 -0
- cognite/neat/_data_model/models/dms/_http.py +28 -0
- cognite/neat/_data_model/models/dms/_indexes.py +30 -0
- cognite/neat/_data_model/models/dms/_limits.py +96 -0
- cognite/neat/_data_model/models/dms/_references.py +141 -0
- cognite/neat/_data_model/models/dms/_schema.py +18 -0
- cognite/neat/_data_model/models/dms/_space.py +48 -0
- cognite/neat/_data_model/models/dms/_types.py +17 -0
- cognite/neat/_data_model/models/dms/_view_filter.py +310 -0
- cognite/neat/_data_model/models/dms/_view_property.py +235 -0
- cognite/neat/_data_model/models/dms/_views.py +216 -0
- cognite/neat/_data_model/models/entities/__init__.py +50 -0
- cognite/neat/_data_model/models/entities/_base.py +101 -0
- cognite/neat/_data_model/models/entities/_constants.py +22 -0
- cognite/neat/_data_model/models/entities/_data_types.py +144 -0
- cognite/neat/_data_model/models/entities/_identifiers.py +61 -0
- cognite/neat/_data_model/models/entities/_parser.py +226 -0
- cognite/neat/_data_model/validation/dms/__init__.py +75 -0
- cognite/neat/_data_model/validation/dms/_ai_readiness.py +381 -0
- cognite/neat/_data_model/validation/dms/_base.py +25 -0
- cognite/neat/_data_model/validation/dms/_connections.py +681 -0
- cognite/neat/_data_model/validation/dms/_consistency.py +58 -0
- cognite/neat/_data_model/validation/dms/_containers.py +199 -0
- cognite/neat/_data_model/validation/dms/_limits.py +368 -0
- cognite/neat/_data_model/validation/dms/_orchestrator.py +70 -0
- cognite/neat/_data_model/validation/dms/_views.py +164 -0
- cognite/neat/_exceptions.py +68 -0
- cognite/neat/_issues.py +68 -0
- cognite/neat/_session/__init__.py +3 -0
- cognite/neat/_session/_html/_render.py +30 -0
- cognite/neat/_session/_html/static/__init__.py +8 -0
- cognite/neat/_session/_html/static/deployment.css +476 -0
- cognite/neat/_session/_html/static/deployment.js +181 -0
- cognite/neat/_session/_html/static/issues.css +211 -0
- cognite/neat/_session/_html/static/issues.js +168 -0
- cognite/neat/_session/_html/static/shared.css +186 -0
- cognite/neat/_session/_html/templates/__init__.py +4 -0
- cognite/neat/_session/_html/templates/deployment.html +80 -0
- cognite/neat/_session/_html/templates/issues.html +45 -0
- cognite/neat/_session/_issues.py +81 -0
- cognite/neat/_session/_physical.py +294 -0
- cognite/neat/_session/_result/__init__.py +3 -0
- cognite/neat/_session/_result/_deployment/__init__.py +0 -0
- cognite/neat/_session/_result/_deployment/_physical/__init__.py +0 -0
- cognite/neat/_session/_result/_deployment/_physical/_changes.py +196 -0
- cognite/neat/_session/_result/_deployment/_physical/_statistics.py +180 -0
- cognite/neat/_session/_result/_deployment/_physical/serializer.py +35 -0
- cognite/neat/_session/_result/_result.py +31 -0
- cognite/neat/_session/_session.py +81 -0
- cognite/neat/_session/_usage_analytics/__init__.py +0 -0
- cognite/neat/_session/_usage_analytics/_collector.py +131 -0
- cognite/neat/_session/_usage_analytics/_constants.py +23 -0
- cognite/neat/_session/_usage_analytics/_storage.py +240 -0
- cognite/neat/_session/_wrappers.py +101 -0
- cognite/neat/_state_machine/__init__.py +10 -0
- cognite/neat/_state_machine/_base.py +37 -0
- cognite/neat/_state_machine/_states.py +52 -0
- cognite/neat/_store/__init__.py +3 -0
- cognite/neat/_store/_provenance.py +88 -0
- cognite/neat/_store/_store.py +220 -0
- cognite/neat/_utils/__init__.py +0 -0
- cognite/neat/_utils/_reader.py +194 -0
- cognite/neat/_utils/auxiliary.py +49 -0
- cognite/neat/_utils/collection.py +11 -0
- cognite/neat/_utils/http_client/__init__.py +39 -0
- cognite/neat/_utils/http_client/_client.py +245 -0
- cognite/neat/_utils/http_client/_config.py +19 -0
- cognite/neat/_utils/http_client/_data_classes.py +294 -0
- cognite/neat/_utils/http_client/_tracker.py +31 -0
- cognite/neat/_utils/repo.py +19 -0
- cognite/neat/_utils/text.py +71 -0
- cognite/neat/_utils/useful_types.py +37 -0
- cognite/neat/_utils/validation.py +154 -0
- cognite/neat/_v0/__init__.py +0 -0
- cognite/neat/_v0/core/__init__.py +0 -0
- cognite/neat/_v0/core/_client/_api/__init__.py +0 -0
- cognite/neat/{core → _v0/core}/_client/_api/data_modeling_loaders.py +8 -7
- cognite/neat/{core → _v0/core}/_client/_api/neat_instances.py +5 -5
- cognite/neat/{core → _v0/core}/_client/_api/schema.py +5 -5
- cognite/neat/{core → _v0/core}/_client/_api/statistics.py +3 -3
- cognite/neat/{core → _v0/core}/_client/_api_client.py +1 -1
- cognite/neat/_v0/core/_client/data_classes/__init__.py +0 -0
- cognite/neat/{core → _v0/core}/_client/data_classes/schema.py +4 -4
- cognite/neat/{core → _v0/core}/_client/testing.py +1 -1
- cognite/neat/{core → _v0/core}/_constants.py +5 -3
- cognite/neat/_v0/core/_data_model/__init__.py +0 -0
- cognite/neat/{core → _v0/core}/_data_model/_constants.py +7 -0
- cognite/neat/{core → _v0/core}/_data_model/_shared.py +4 -4
- cognite/neat/{core → _v0/core}/_data_model/analysis/_base.py +8 -8
- cognite/neat/{core → _v0/core}/_data_model/exporters/__init__.py +1 -2
- cognite/neat/{core → _v0/core}/_data_model/exporters/_base.py +7 -7
- cognite/neat/{core → _v0/core}/_data_model/exporters/_data_model2dms.py +9 -9
- cognite/neat/{core → _v0/core}/_data_model/exporters/_data_model2excel.py +12 -12
- cognite/neat/{core → _v0/core}/_data_model/exporters/_data_model2instance_template.py +4 -4
- cognite/neat/{core/_data_model/exporters/_data_model2ontology.py → _v0/core/_data_model/exporters/_data_model2semantic_model.py} +126 -116
- cognite/neat/{core → _v0/core}/_data_model/exporters/_data_model2yaml.py +1 -1
- cognite/neat/{core → _v0/core}/_data_model/importers/_base.py +5 -5
- cognite/neat/{core → _v0/core}/_data_model/importers/_base_file_reader.py +2 -2
- cognite/neat/{core → _v0/core}/_data_model/importers/_dict2data_model.py +5 -5
- cognite/neat/{core → _v0/core}/_data_model/importers/_dms2data_model.py +18 -15
- cognite/neat/{core → _v0/core}/_data_model/importers/_graph2data_model.py +12 -12
- cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/_base.py +12 -12
- cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/_inference2rdata_model.py +14 -14
- cognite/neat/_v0/core/_data_model/importers/_rdf/_owl2data_model.py +144 -0
- cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/_shared.py +17 -13
- cognite/neat/{core → _v0/core}/_data_model/importers/_spreadsheet2data_model.py +92 -12
- cognite/neat/{core → _v0/core}/_data_model/models/__init__.py +3 -3
- cognite/neat/{core → _v0/core}/_data_model/models/_base_verified.py +5 -5
- cognite/neat/{core → _v0/core}/_data_model/models/_import_contexts.py +1 -1
- cognite/neat/{core → _v0/core}/_data_model/models/_types.py +5 -5
- cognite/neat/{core → _v0/core}/_data_model/models/conceptual/_unverified.py +16 -10
- cognite/neat/{core → _v0/core}/_data_model/models/conceptual/_validation.py +12 -12
- cognite/neat/{core → _v0/core}/_data_model/models/conceptual/_verified.py +9 -9
- cognite/neat/{core → _v0/core}/_data_model/models/data_types.py +14 -4
- cognite/neat/{core → _v0/core}/_data_model/models/entities/__init__.py +6 -0
- cognite/neat/_v0/core/_data_model/models/entities/_loaders.py +155 -0
- cognite/neat/{core → _v0/core}/_data_model/models/entities/_multi_value.py +2 -2
- cognite/neat/_v0/core/_data_model/models/entities/_restrictions.py +230 -0
- cognite/neat/{core → _v0/core}/_data_model/models/entities/_single_value.py +121 -16
- cognite/neat/{core → _v0/core}/_data_model/models/entities/_types.py +10 -0
- cognite/neat/{core → _v0/core}/_data_model/models/mapping/_classic2core.py +5 -5
- cognite/neat/{core → _v0/core}/_data_model/models/physical/__init__.py +1 -1
- cognite/neat/{core → _v0/core}/_data_model/models/physical/_exporter.py +26 -19
- cognite/neat/{core → _v0/core}/_data_model/models/physical/_unverified.py +133 -37
- cognite/neat/{core → _v0/core}/_data_model/models/physical/_validation.py +24 -20
- cognite/neat/{core → _v0/core}/_data_model/models/physical/_verified.py +95 -24
- cognite/neat/{core → _v0/core}/_data_model/transformers/_base.py +4 -4
- cognite/neat/{core → _v0/core}/_data_model/transformers/_converters.py +35 -28
- cognite/neat/{core → _v0/core}/_data_model/transformers/_mapping.py +7 -7
- cognite/neat/{core → _v0/core}/_data_model/transformers/_union_conceptual.py +5 -5
- cognite/neat/{core → _v0/core}/_data_model/transformers/_verification.py +7 -7
- cognite/neat/_v0/core/_instances/__init__.py +0 -0
- cognite/neat/{core → _v0/core}/_instances/_tracking/base.py +1 -1
- cognite/neat/{core → _v0/core}/_instances/_tracking/log.py +1 -1
- cognite/neat/{core → _v0/core}/_instances/extractors/__init__.py +3 -2
- cognite/neat/{core → _v0/core}/_instances/extractors/_base.py +6 -6
- cognite/neat/_v0/core/_instances/extractors/_classic_cdf/__init__.py +0 -0
- cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_base.py +7 -7
- cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_classic.py +12 -12
- cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_relationships.py +3 -3
- cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_sequences.py +2 -2
- cognite/neat/{core → _v0/core}/_instances/extractors/_dict.py +6 -3
- cognite/neat/{core → _v0/core}/_instances/extractors/_dms.py +6 -6
- cognite/neat/{core → _v0/core}/_instances/extractors/_dms_graph.py +11 -11
- cognite/neat/{core → _v0/core}/_instances/extractors/_mock_graph_generator.py +10 -10
- cognite/neat/{core → _v0/core}/_instances/extractors/_raw.py +3 -3
- cognite/neat/{core → _v0/core}/_instances/extractors/_rdf_file.py +7 -7
- cognite/neat/{core → _v0/core}/_instances/loaders/_base.py +5 -5
- cognite/neat/{core → _v0/core}/_instances/loaders/_rdf2dms.py +17 -17
- cognite/neat/{core → _v0/core}/_instances/loaders/_rdf_to_instance_space.py +11 -11
- cognite/neat/{core → _v0/core}/_instances/queries/_select.py +29 -3
- cognite/neat/{core → _v0/core}/_instances/queries/_update.py +1 -1
- cognite/neat/{core → _v0/core}/_instances/transformers/_base.py +4 -4
- cognite/neat/{core → _v0/core}/_instances/transformers/_classic_cdf.py +6 -6
- cognite/neat/{core → _v0/core}/_instances/transformers/_prune_graph.py +4 -4
- cognite/neat/{core → _v0/core}/_instances/transformers/_rdfpath.py +1 -1
- cognite/neat/{core → _v0/core}/_instances/transformers/_value_type.py +4 -4
- cognite/neat/{core → _v0/core}/_issues/_base.py +5 -5
- cognite/neat/{core → _v0/core}/_issues/_contextmanagers.py +1 -1
- cognite/neat/{core → _v0/core}/_issues/_factory.py +3 -3
- cognite/neat/{core → _v0/core}/_issues/errors/__init__.py +1 -1
- cognite/neat/{core → _v0/core}/_issues/errors/_external.py +1 -1
- cognite/neat/{core → _v0/core}/_issues/errors/_general.py +1 -1
- cognite/neat/{core → _v0/core}/_issues/errors/_properties.py +1 -1
- cognite/neat/{core → _v0/core}/_issues/errors/_resources.py +2 -2
- cognite/neat/{core → _v0/core}/_issues/errors/_wrapper.py +7 -3
- cognite/neat/{core → _v0/core}/_issues/warnings/__init__.py +1 -1
- cognite/neat/{core → _v0/core}/_issues/warnings/_external.py +1 -1
- cognite/neat/{core → _v0/core}/_issues/warnings/_general.py +1 -1
- cognite/neat/{core → _v0/core}/_issues/warnings/_models.py +2 -2
- cognite/neat/{core → _v0/core}/_issues/warnings/_properties.py +2 -2
- cognite/neat/{core → _v0/core}/_issues/warnings/_resources.py +1 -1
- cognite/neat/{core → _v0/core}/_issues/warnings/user_modeling.py +1 -1
- cognite/neat/{core → _v0/core}/_store/_data_model.py +12 -12
- cognite/neat/{core → _v0/core}/_store/_instance.py +43 -10
- cognite/neat/{core → _v0/core}/_store/_provenance.py +3 -3
- cognite/neat/{core → _v0/core}/_store/exceptions.py +4 -4
- cognite/neat/_v0/core/_utils/__init__.py +0 -0
- cognite/neat/{core → _v0/core}/_utils/auth.py +22 -12
- cognite/neat/{core → _v0/core}/_utils/auxiliary.py +1 -1
- cognite/neat/{core → _v0/core}/_utils/collection_.py +2 -2
- cognite/neat/{core → _v0/core}/_utils/graph_transformations_report.py +1 -1
- cognite/neat/{core → _v0/core}/_utils/rdf_.py +1 -1
- cognite/neat/{core → _v0/core}/_utils/reader/_base.py +1 -1
- cognite/neat/{core → _v0/core}/_utils/spreadsheet.py +18 -4
- cognite/neat/{core → _v0/core}/_utils/text.py +1 -1
- cognite/neat/{core → _v0/core}/_utils/upload.py +3 -3
- cognite/neat/{session → _v0}/engine/_load.py +1 -1
- cognite/neat/_v0/plugins/__init__.py +4 -0
- cognite/neat/_v0/plugins/_base.py +9 -0
- cognite/neat/_v0/plugins/_data_model.py +48 -0
- cognite/neat/{plugins → _v0/plugins}/_issues.py +1 -1
- cognite/neat/{plugins → _v0/plugins}/_manager.py +7 -16
- cognite/neat/{session → _v0/session}/_base.py +13 -15
- cognite/neat/{session → _v0/session}/_collector.py +1 -1
- cognite/neat/_v0/session/_diff.py +51 -0
- cognite/neat/{session → _v0/session}/_drop.py +3 -3
- cognite/neat/{session → _v0/session}/_explore.py +2 -2
- cognite/neat/{session → _v0/session}/_fix.py +2 -2
- cognite/neat/{session → _v0/session}/_inspect.py +3 -3
- cognite/neat/{session → _v0/session}/_mapping.py +3 -3
- cognite/neat/{session → _v0/session}/_plugin.py +4 -5
- cognite/neat/{session → _v0/session}/_prepare.py +8 -8
- cognite/neat/{session → _v0/session}/_read.py +34 -21
- cognite/neat/{session → _v0/session}/_set.py +8 -8
- cognite/neat/{session → _v0/session}/_show.py +5 -5
- cognite/neat/{session → _v0/session}/_state.py +10 -10
- cognite/neat/{session → _v0/session}/_subset.py +4 -4
- cognite/neat/{session → _v0/session}/_template.py +11 -11
- cognite/neat/{session → _v0/session}/_to.py +12 -12
- cognite/neat/{session → _v0/session}/_wizard.py +1 -1
- cognite/neat/{session → _v0/session}/exceptions.py +5 -5
- cognite/neat/_version.py +1 -1
- cognite/neat/legacy.py +6 -0
- cognite_neat-1.0.22.dist-info/METADATA +123 -0
- cognite_neat-1.0.22.dist-info/RECORD +329 -0
- cognite_neat-1.0.22.dist-info/WHEEL +4 -0
- cognite/neat/core/_data_model/importers/_rdf/_owl2data_model.py +0 -91
- cognite/neat/core/_data_model/models/entities/_loaders.py +0 -75
- cognite/neat/plugins/__init__.py +0 -3
- cognite/neat/plugins/data_model/importers/__init__.py +0 -5
- cognite/neat/plugins/data_model/importers/_base.py +0 -28
- cognite/neat/session/_session/_data_model/__init__.py +0 -3
- cognite/neat/session/_session/_data_model/_read.py +0 -193
- cognite/neat/session/_session/_data_model/_routes.py +0 -45
- cognite/neat/session/_session/_data_model/_show.py +0 -147
- cognite/neat/session/_session/_data_model/_write.py +0 -335
- cognite_neat-0.123.24.dist-info/METADATA +0 -144
- cognite_neat-0.123.24.dist-info/RECORD +0 -201
- cognite_neat-0.123.24.dist-info/WHEEL +0 -4
- cognite_neat-0.123.24.dist-info/licenses/LICENSE +0 -201
- /cognite/neat/{core → _client/init}/__init__.py +0 -0
- /cognite/neat/{core/_client/_api → _data_model}/__init__.py +0 -0
- /cognite/neat/{core/_client/data_classes → _data_model/deployer}/__init__.py +0 -0
- /cognite/neat/{core/_data_model → _data_model/exporters/_table_exporter}/__init__.py +0 -0
- /cognite/neat/{core/_instances → _data_model/importers/_table_importer}/__init__.py +0 -0
- /cognite/neat/{core/_instances/extractors/_classic_cdf → _data_model/models}/__init__.py +0 -0
- /cognite/neat/{core/_utils → _data_model/models/conceptual}/__init__.py +0 -0
- /cognite/neat/{plugins/data_model → _data_model/validation}/__init__.py +0 -0
- /cognite/neat/{session/_session → _session/_html}/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_client/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_client/data_classes/data_modeling.py +0 -0
- /cognite/neat/{core → _v0/core}/_client/data_classes/neat_sequence.py +0 -0
- /cognite/neat/{core → _v0/core}/_client/data_classes/statistics.py +0 -0
- /cognite/neat/{core → _v0/core}/_config.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/analysis/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/catalog/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/catalog/classic_model.xlsx +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/catalog/conceptual-imf-data-model.xlsx +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/catalog/hello_world_pump.xlsx +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/importers/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/models/_base_unverified.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/models/conceptual/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/models/entities/_constants.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/models/entities/_wrapped.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/models/mapping/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/models/mapping/_classic2core.yaml +0 -0
- /cognite/neat/{core → _v0/core}/_data_model/transformers/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/_shared.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/_tracking/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
- /cognite/neat/{core → _v0/core}/_instances/examples/Knowledge-Graph-Nordic44.xml +0 -0
- /cognite/neat/{core → _v0/core}/_instances/examples/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
- /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_assets.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_data_sets.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_events.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_files.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_labels.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_timeseries.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/loaders/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/queries/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/queries/_base.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/queries/_queries.py +0 -0
- /cognite/neat/{core → _v0/core}/_instances/transformers/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_issues/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_issues/formatters.py +0 -0
- /cognite/neat/{core → _v0/core}/_shared.py +0 -0
- /cognite/neat/{core → _v0/core}/_store/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_utils/io_.py +0 -0
- /cognite/neat/{core → _v0/core}/_utils/reader/__init__.py +0 -0
- /cognite/neat/{core → _v0/core}/_utils/tarjan.py +0 -0
- /cognite/neat/{core → _v0/core}/_utils/time_.py +0 -0
- /cognite/neat/{core → _v0/core}/_utils/xml_.py +0 -0
- /cognite/neat/{session → _v0}/engine/__init__.py +0 -0
- /cognite/neat/{session → _v0}/engine/_import.py +0 -0
- /cognite/neat/{session → _v0}/engine/_interface.py +0 -0
- /cognite/neat/{session → _v0/session}/__init__.py +0 -0
- /cognite/neat/{session → _v0/session}/_experimental.py +0 -0
- /cognite/neat/{session → _v0/session}/_state/README.md +0 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
from cognite.neat._data_model.models.dms import (
|
|
2
|
+
BtreeIndex,
|
|
3
|
+
ConstraintDefinition,
|
|
4
|
+
ContainerPropertyDefinition,
|
|
5
|
+
ContainerRequest,
|
|
6
|
+
EnumProperty,
|
|
7
|
+
EnumValue,
|
|
8
|
+
FloatProperty,
|
|
9
|
+
IndexDefinition,
|
|
10
|
+
ListablePropertyTypeDefinition,
|
|
11
|
+
PropertyTypeDefinition,
|
|
12
|
+
RequiresConstraintDefinition,
|
|
13
|
+
TextProperty,
|
|
14
|
+
UniquenessConstraintDefinition,
|
|
15
|
+
)
|
|
16
|
+
from cognite.neat._data_model.models.dms._data_types import Unit
|
|
17
|
+
|
|
18
|
+
from ._differ import ItemDiffer, ObjectDiffer, field_differences
|
|
19
|
+
from .data_classes import (
|
|
20
|
+
AddedField,
|
|
21
|
+
ChangedField,
|
|
22
|
+
FieldChange,
|
|
23
|
+
FieldChanges,
|
|
24
|
+
RemovedField,
|
|
25
|
+
SeverityType,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ContainerDiffer(ItemDiffer[ContainerRequest]):
|
|
30
|
+
def diff(self, current: ContainerRequest, new: ContainerRequest) -> list[FieldChange]:
|
|
31
|
+
changes = self._diff_name_description(current, new)
|
|
32
|
+
|
|
33
|
+
if current.used_for != new.used_for:
|
|
34
|
+
changes.append(
|
|
35
|
+
ChangedField(
|
|
36
|
+
item_severity=SeverityType.BREAKING,
|
|
37
|
+
field_path=self._get_path("usedFor"),
|
|
38
|
+
current_value=current.used_for,
|
|
39
|
+
new_value=new.used_for,
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
changes.extend(
|
|
43
|
+
field_differences(
|
|
44
|
+
"properties",
|
|
45
|
+
current.properties,
|
|
46
|
+
new.properties,
|
|
47
|
+
add_severity=SeverityType.SAFE,
|
|
48
|
+
remove_severity=SeverityType.BREAKING,
|
|
49
|
+
differ=ContainerPropertyDiffer("properties"),
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
changes.extend(
|
|
53
|
+
# MyPy fails to understand that ConstraintDefinition and Constraint are compatible here
|
|
54
|
+
field_differences( # type: ignore[misc]
|
|
55
|
+
"constraints",
|
|
56
|
+
current.constraints,
|
|
57
|
+
new.constraints,
|
|
58
|
+
add_severity=SeverityType.SAFE,
|
|
59
|
+
remove_severity=SeverityType.WARNING,
|
|
60
|
+
differ=ConstraintDiffer("constraints"),
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
changes.extend(
|
|
64
|
+
# MyPy fails to understand that IndexDefinition and Index are compatible here
|
|
65
|
+
field_differences( # type: ignore[misc]
|
|
66
|
+
"indexes",
|
|
67
|
+
current.indexes,
|
|
68
|
+
new.indexes,
|
|
69
|
+
add_severity=SeverityType.SAFE,
|
|
70
|
+
remove_severity=SeverityType.WARNING,
|
|
71
|
+
differ=IndexDiffer("indexes"),
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
return changes
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class ContainerPropertyDiffer(ObjectDiffer[ContainerPropertyDefinition]):
|
|
79
|
+
def diff(
|
|
80
|
+
self, current: ContainerPropertyDefinition, new: ContainerPropertyDefinition, identifier: str
|
|
81
|
+
) -> list[FieldChange]:
|
|
82
|
+
changes = self._diff_name_description(current, new, identifier=identifier)
|
|
83
|
+
diffs = DataTypeDiffer(self._get_path(f"{identifier}.type")).diff(current.type, new.type)
|
|
84
|
+
if diffs:
|
|
85
|
+
changes.append(FieldChanges(field_path=self._get_path(f"{identifier}.type"), changes=diffs))
|
|
86
|
+
|
|
87
|
+
if current.immutable != new.immutable:
|
|
88
|
+
changes.append(
|
|
89
|
+
ChangedField(
|
|
90
|
+
item_severity=SeverityType.WARNING,
|
|
91
|
+
field_path=self._get_path(f"{identifier}.immutable"),
|
|
92
|
+
current_value=current.immutable,
|
|
93
|
+
new_value=new.immutable,
|
|
94
|
+
)
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
if current.nullable != new.nullable:
|
|
98
|
+
changes.append(
|
|
99
|
+
ChangedField(
|
|
100
|
+
item_severity=SeverityType.BREAKING,
|
|
101
|
+
field_path=self._get_path(f"{identifier}.nullable"),
|
|
102
|
+
current_value=current.nullable,
|
|
103
|
+
new_value=new.nullable,
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
if current.auto_increment != new.auto_increment:
|
|
107
|
+
changes.append(
|
|
108
|
+
ChangedField(
|
|
109
|
+
item_severity=SeverityType.WARNING,
|
|
110
|
+
field_path=self._get_path(f"{identifier}.autoIncrement"),
|
|
111
|
+
current_value=current.auto_increment,
|
|
112
|
+
new_value=new.auto_increment,
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
if current.default_value != new.default_value:
|
|
117
|
+
changes.append(
|
|
118
|
+
ChangedField(
|
|
119
|
+
item_severity=SeverityType.WARNING,
|
|
120
|
+
field_path=self._get_path(f"{identifier}.defaultValue"),
|
|
121
|
+
current_value=str(current.default_value),
|
|
122
|
+
new_value=str(new.default_value),
|
|
123
|
+
)
|
|
124
|
+
)
|
|
125
|
+
return changes
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class ConstraintDiffer(ObjectDiffer[ConstraintDefinition]):
|
|
129
|
+
def diff(self, current: ConstraintDefinition, new: ConstraintDefinition, identifier: str) -> list[FieldChange]:
|
|
130
|
+
changes: list[FieldChange] = []
|
|
131
|
+
if current.constraint_type != new.constraint_type:
|
|
132
|
+
changes.append(
|
|
133
|
+
ChangedField(
|
|
134
|
+
item_severity=SeverityType.BREAKING,
|
|
135
|
+
field_path=self._get_path(f"{identifier}.constraintType"),
|
|
136
|
+
current_value=current.constraint_type,
|
|
137
|
+
new_value=new.constraint_type,
|
|
138
|
+
)
|
|
139
|
+
)
|
|
140
|
+
if (
|
|
141
|
+
isinstance(current, RequiresConstraintDefinition)
|
|
142
|
+
and isinstance(new, RequiresConstraintDefinition)
|
|
143
|
+
and current.require != new.require
|
|
144
|
+
):
|
|
145
|
+
changes.append(
|
|
146
|
+
ChangedField(
|
|
147
|
+
item_severity=SeverityType.BREAKING,
|
|
148
|
+
field_path=self._get_path(f"{identifier}.require"),
|
|
149
|
+
current_value=str(current.require),
|
|
150
|
+
new_value=str(new.require),
|
|
151
|
+
)
|
|
152
|
+
)
|
|
153
|
+
elif isinstance(current, UniquenessConstraintDefinition) and isinstance(new, UniquenessConstraintDefinition):
|
|
154
|
+
# The order of the properties matter.
|
|
155
|
+
if current.properties != new.properties:
|
|
156
|
+
changes.append(
|
|
157
|
+
ChangedField(
|
|
158
|
+
item_severity=SeverityType.BREAKING,
|
|
159
|
+
field_path=self._get_path(f"{identifier}.properties"),
|
|
160
|
+
current_value=str(current.properties),
|
|
161
|
+
new_value=str(new.properties),
|
|
162
|
+
)
|
|
163
|
+
)
|
|
164
|
+
if current.by_space != new.by_space:
|
|
165
|
+
changes.append(
|
|
166
|
+
ChangedField(
|
|
167
|
+
item_severity=SeverityType.BREAKING,
|
|
168
|
+
field_path=self._get_path(f"{identifier}.bySpace"),
|
|
169
|
+
current_value=current.by_space,
|
|
170
|
+
new_value=new.by_space,
|
|
171
|
+
)
|
|
172
|
+
)
|
|
173
|
+
return changes
|
|
174
|
+
return changes
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class IndexDiffer(ObjectDiffer[IndexDefinition]):
|
|
178
|
+
def diff(self, current: IndexDefinition, new: IndexDefinition, identifier: str) -> list[FieldChange]:
|
|
179
|
+
changes: list[FieldChange] = []
|
|
180
|
+
if current.index_type != new.index_type:
|
|
181
|
+
changes.append(
|
|
182
|
+
ChangedField(
|
|
183
|
+
item_severity=SeverityType.BREAKING,
|
|
184
|
+
field_path=self._get_path(f"{identifier}.indexType"),
|
|
185
|
+
current_value=current.index_type,
|
|
186
|
+
new_value=new.index_type,
|
|
187
|
+
)
|
|
188
|
+
)
|
|
189
|
+
else:
|
|
190
|
+
if current.properties != new.properties:
|
|
191
|
+
changes.append(
|
|
192
|
+
ChangedField(
|
|
193
|
+
item_severity=SeverityType.BREAKING,
|
|
194
|
+
field_path=self._get_path(f"{identifier}.properties"),
|
|
195
|
+
current_value=str(current.properties),
|
|
196
|
+
new_value=str(new.properties),
|
|
197
|
+
)
|
|
198
|
+
)
|
|
199
|
+
if isinstance(current, BtreeIndex) and isinstance(new, BtreeIndex):
|
|
200
|
+
if current.cursorable != new.cursorable:
|
|
201
|
+
changes.append(
|
|
202
|
+
ChangedField(
|
|
203
|
+
item_severity=SeverityType.BREAKING,
|
|
204
|
+
field_path=self._get_path(f"{identifier}.cursorable"),
|
|
205
|
+
current_value=current.cursorable,
|
|
206
|
+
new_value=new.cursorable,
|
|
207
|
+
)
|
|
208
|
+
)
|
|
209
|
+
if current.by_space != new.by_space:
|
|
210
|
+
changes.append(
|
|
211
|
+
ChangedField(
|
|
212
|
+
item_severity=SeverityType.BREAKING,
|
|
213
|
+
field_path=self._get_path(f"{identifier}.bySpace"),
|
|
214
|
+
current_value=current.by_space,
|
|
215
|
+
new_value=new.by_space,
|
|
216
|
+
)
|
|
217
|
+
)
|
|
218
|
+
return changes
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class DataTypeDiffer(ItemDiffer[PropertyTypeDefinition]):
|
|
222
|
+
def diff(self, current: PropertyTypeDefinition, new: PropertyTypeDefinition) -> list[FieldChange]:
|
|
223
|
+
changes: list[FieldChange] = []
|
|
224
|
+
if current.type != new.type:
|
|
225
|
+
changes.append(
|
|
226
|
+
ChangedField(
|
|
227
|
+
item_severity=SeverityType.BREAKING,
|
|
228
|
+
field_path=self._get_path("type"),
|
|
229
|
+
current_value=current.type,
|
|
230
|
+
new_value=new.type,
|
|
231
|
+
)
|
|
232
|
+
)
|
|
233
|
+
if isinstance(current, ListablePropertyTypeDefinition) and isinstance(new, ListablePropertyTypeDefinition):
|
|
234
|
+
changes.extend(self._diff_listable_property(current, new))
|
|
235
|
+
|
|
236
|
+
if isinstance(current, TextProperty) and isinstance(new, TextProperty):
|
|
237
|
+
changes.extend(self._diff_text_property(current, new))
|
|
238
|
+
|
|
239
|
+
if isinstance(current, FloatProperty) and isinstance(new, FloatProperty):
|
|
240
|
+
changes.extend(self._diff_float_unit(current.unit, new.unit))
|
|
241
|
+
|
|
242
|
+
if isinstance(current, EnumProperty) and isinstance(new, EnumProperty):
|
|
243
|
+
changes.extend(self._diff_enum_property(current, new))
|
|
244
|
+
|
|
245
|
+
return changes
|
|
246
|
+
|
|
247
|
+
def _diff_listable_property(
|
|
248
|
+
self, current: ListablePropertyTypeDefinition, new: ListablePropertyTypeDefinition
|
|
249
|
+
) -> list[FieldChange]:
|
|
250
|
+
changes: list[FieldChange] = []
|
|
251
|
+
if current.list != new.list:
|
|
252
|
+
changes.append(
|
|
253
|
+
ChangedField(
|
|
254
|
+
item_severity=SeverityType.BREAKING,
|
|
255
|
+
field_path=self._get_path("list"),
|
|
256
|
+
current_value=current.list,
|
|
257
|
+
new_value=new.list,
|
|
258
|
+
)
|
|
259
|
+
)
|
|
260
|
+
if current.max_list_size != new.max_list_size:
|
|
261
|
+
changes.append(
|
|
262
|
+
ChangedField(
|
|
263
|
+
item_severity=SeverityType.BREAKING
|
|
264
|
+
if new.max_list_size is not None
|
|
265
|
+
and current.max_list_size is not None
|
|
266
|
+
and new.max_list_size < current.max_list_size
|
|
267
|
+
else SeverityType.WARNING,
|
|
268
|
+
field_path=self._get_path("maxListSize"),
|
|
269
|
+
current_value=current.max_list_size,
|
|
270
|
+
new_value=new.max_list_size,
|
|
271
|
+
)
|
|
272
|
+
)
|
|
273
|
+
return changes
|
|
274
|
+
|
|
275
|
+
def _diff_float_unit(self, current: Unit | None, new: Unit | None) -> list[FieldChange]:
|
|
276
|
+
if current is not None and new is None:
|
|
277
|
+
return [
|
|
278
|
+
RemovedField(
|
|
279
|
+
field_path=self._get_path("unit"), item_severity=SeverityType.WARNING, current_value=current
|
|
280
|
+
)
|
|
281
|
+
]
|
|
282
|
+
elif current is None and new is not None:
|
|
283
|
+
return [AddedField(field_path=self._get_path("unit"), item_severity=SeverityType.WARNING, new_value=new)]
|
|
284
|
+
elif current is not None and new is not None:
|
|
285
|
+
changes: list[FieldChange] = []
|
|
286
|
+
if current.external_id != new.external_id:
|
|
287
|
+
changes.append(
|
|
288
|
+
ChangedField(
|
|
289
|
+
item_severity=SeverityType.WARNING,
|
|
290
|
+
field_path=self._get_path("unit.externalId"),
|
|
291
|
+
current_value=current.external_id,
|
|
292
|
+
new_value=new.external_id,
|
|
293
|
+
)
|
|
294
|
+
)
|
|
295
|
+
if current.source_unit != new.source_unit:
|
|
296
|
+
changes.append(
|
|
297
|
+
ChangedField(
|
|
298
|
+
item_severity=SeverityType.WARNING,
|
|
299
|
+
field_path=self._get_path("unit.sourceUnit"),
|
|
300
|
+
current_value=current.source_unit,
|
|
301
|
+
new_value=new.source_unit,
|
|
302
|
+
)
|
|
303
|
+
)
|
|
304
|
+
if changes:
|
|
305
|
+
return [FieldChanges(field_path=self._get_path("unit"), changes=changes)]
|
|
306
|
+
return [] # No changes
|
|
307
|
+
|
|
308
|
+
def _diff_text_property(self, current: TextProperty, new: TextProperty) -> list[FieldChange]:
|
|
309
|
+
changes: list[FieldChange] = []
|
|
310
|
+
if current.max_text_size != new.max_text_size:
|
|
311
|
+
changes.append(
|
|
312
|
+
ChangedField(
|
|
313
|
+
item_severity=SeverityType.BREAKING
|
|
314
|
+
if new.max_text_size is not None
|
|
315
|
+
and current.max_text_size is not None
|
|
316
|
+
and new.max_text_size < current.max_text_size
|
|
317
|
+
else SeverityType.WARNING,
|
|
318
|
+
field_path=self._get_path("maxTextSize"),
|
|
319
|
+
current_value=current.max_text_size,
|
|
320
|
+
new_value=new.max_text_size,
|
|
321
|
+
)
|
|
322
|
+
)
|
|
323
|
+
if current.collation != new.collation:
|
|
324
|
+
changes.append(
|
|
325
|
+
ChangedField(
|
|
326
|
+
item_severity=SeverityType.BREAKING,
|
|
327
|
+
field_path=self._get_path("collation"),
|
|
328
|
+
current_value=current.collation,
|
|
329
|
+
new_value=new.collation,
|
|
330
|
+
)
|
|
331
|
+
)
|
|
332
|
+
return changes
|
|
333
|
+
|
|
334
|
+
def _diff_enum_property(self, current: EnumProperty, new: EnumProperty) -> list[FieldChange]:
|
|
335
|
+
changes: list[FieldChange] = []
|
|
336
|
+
if current.unknown_value != new.unknown_value:
|
|
337
|
+
changes.append(
|
|
338
|
+
ChangedField(
|
|
339
|
+
item_severity=SeverityType.WARNING,
|
|
340
|
+
field_path=self._get_path("unknownValue"),
|
|
341
|
+
current_value=current.unknown_value,
|
|
342
|
+
new_value=new.unknown_value,
|
|
343
|
+
)
|
|
344
|
+
)
|
|
345
|
+
changes.extend(
|
|
346
|
+
field_differences(
|
|
347
|
+
self._get_path("values"),
|
|
348
|
+
current.values,
|
|
349
|
+
new.values,
|
|
350
|
+
add_severity=SeverityType.SAFE,
|
|
351
|
+
remove_severity=SeverityType.BREAKING,
|
|
352
|
+
differ=EnumValueDiffer(self._get_path("values")),
|
|
353
|
+
)
|
|
354
|
+
)
|
|
355
|
+
return changes
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
class EnumValueDiffer(ObjectDiffer[EnumValue]):
|
|
359
|
+
def diff(self, current: EnumValue, new: EnumValue, identifier: str) -> list[FieldChange]:
|
|
360
|
+
return self._diff_name_description(current, new, identifier=identifier)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from cognite.neat._data_model.models.dms import (
|
|
2
|
+
DataModelRequest,
|
|
3
|
+
)
|
|
4
|
+
|
|
5
|
+
from ._differ import ItemDiffer
|
|
6
|
+
from .data_classes import (
|
|
7
|
+
AddedField,
|
|
8
|
+
ChangedField,
|
|
9
|
+
FieldChange,
|
|
10
|
+
RemovedField,
|
|
11
|
+
SeverityType,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class DataModelDiffer(ItemDiffer[DataModelRequest]):
|
|
16
|
+
def diff(self, current: DataModelRequest, new: DataModelRequest) -> list[FieldChange]:
|
|
17
|
+
changes: list[FieldChange] = self._diff_name_description(current, new)
|
|
18
|
+
if current.views != new.views:
|
|
19
|
+
# Added views
|
|
20
|
+
current_views = set(current.views or [])
|
|
21
|
+
for new_view in new.views or []:
|
|
22
|
+
if new_view not in current_views:
|
|
23
|
+
changes.append(
|
|
24
|
+
AddedField(
|
|
25
|
+
item_severity=SeverityType.SAFE,
|
|
26
|
+
field_path="views",
|
|
27
|
+
new_value=new_view,
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# Removed views
|
|
32
|
+
new_views = set(new.views or [])
|
|
33
|
+
for current_view in current.views or []:
|
|
34
|
+
if current_view not in new_views:
|
|
35
|
+
changes.append(
|
|
36
|
+
RemovedField(
|
|
37
|
+
item_severity=SeverityType.BREAKING,
|
|
38
|
+
field_path="views",
|
|
39
|
+
current_value=current_view,
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
if not changes:
|
|
44
|
+
# If there are no added or removed views, it means the order has changed
|
|
45
|
+
changes.append(
|
|
46
|
+
ChangedField(
|
|
47
|
+
item_severity=SeverityType.SAFE,
|
|
48
|
+
field_path="views",
|
|
49
|
+
current_value=str(current.views),
|
|
50
|
+
new_value=str(new.views),
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
return changes
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from cognite.neat._data_model.models.dms import SpaceRequest
|
|
2
|
+
|
|
3
|
+
from ._differ import ItemDiffer
|
|
4
|
+
from .data_classes import FieldChange
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class SpaceDiffer(ItemDiffer[SpaceRequest]):
|
|
8
|
+
def diff(self, cdf_space: SpaceRequest, desired_space: SpaceRequest) -> list[FieldChange]:
|
|
9
|
+
return self._diff_name_description(cdf_space, desired_space)
|