cognite-neat 0.123.26__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/{core → _v0/core}/_data_model/importers/_rdf/_owl2data_model.py +41 -21
- cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/_shared.py +9 -9
- 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/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.26.dist-info/METADATA +0 -144
- cognite_neat-0.123.26.dist-info/RECORD +0 -201
- cognite_neat-0.123.26.dist-info/WHEEL +0 -4
- cognite_neat-0.123.26.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,61 @@
|
|
|
1
|
+
from pydantic import HttpUrl, RootModel, ValidationError
|
|
2
|
+
|
|
3
|
+
from cognite.neat._utils.auxiliary import local_import
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class URI(RootModel[str]):
|
|
7
|
+
def __init__(self, value: str):
|
|
8
|
+
try:
|
|
9
|
+
# Use Pydantic's AnyUrl to validate the URI
|
|
10
|
+
_ = HttpUrl(value)
|
|
11
|
+
except ValidationError as e:
|
|
12
|
+
raise ValueError(f"Invalid URI: {value}") from e
|
|
13
|
+
super().__init__(value)
|
|
14
|
+
|
|
15
|
+
def __str__(self) -> str:
|
|
16
|
+
return self.root
|
|
17
|
+
|
|
18
|
+
def __repr__(self) -> str:
|
|
19
|
+
return f"URI({self.root!r})"
|
|
20
|
+
|
|
21
|
+
def as_rdflib_uriref(self): # type: ignore[no-untyped-def]
|
|
22
|
+
# rdflib is an optional dependency, so import here
|
|
23
|
+
local_import("rdflib", "rdflib")
|
|
24
|
+
from rdflib import URIRef
|
|
25
|
+
|
|
26
|
+
return URIRef(self.root)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class NameSpace(RootModel[str]):
|
|
30
|
+
def __init__(self, value: str):
|
|
31
|
+
try:
|
|
32
|
+
# Use Pydantic's AnyUrl to validate the URI
|
|
33
|
+
_ = HttpUrl(value)
|
|
34
|
+
except ValidationError as e:
|
|
35
|
+
raise ValueError(f"Invalid Namespace: {value}") from e
|
|
36
|
+
super().__init__(value)
|
|
37
|
+
|
|
38
|
+
def __str__(self) -> str:
|
|
39
|
+
return self.root
|
|
40
|
+
|
|
41
|
+
def __repr__(self) -> str:
|
|
42
|
+
return f"NameSpace({self.root!r})"
|
|
43
|
+
|
|
44
|
+
def term(self, name: str) -> URI:
|
|
45
|
+
# need to handle slices explicitly because of __getitem__ override
|
|
46
|
+
return URI(self.root + (name if isinstance(name, str) else ""))
|
|
47
|
+
|
|
48
|
+
def __getitem__(self, key: str) -> URI: # type: ignore[override]
|
|
49
|
+
return self.term(key)
|
|
50
|
+
|
|
51
|
+
def __getattr__(self, name: str) -> URI:
|
|
52
|
+
if name.startswith("__"): # ignore any special Python names!
|
|
53
|
+
raise AttributeError
|
|
54
|
+
return self.term(name)
|
|
55
|
+
|
|
56
|
+
def as_rdflib_namespace(self): # type: ignore[no-untyped-def]
|
|
57
|
+
# rdflib is an optional dependency, so import here
|
|
58
|
+
local_import("rdflib", "rdflib")
|
|
59
|
+
from rdflib import Namespace
|
|
60
|
+
|
|
61
|
+
return Namespace(self.root)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from cognite.neat._data_model.deployer.data_classes import DeploymentResult
|
|
5
|
+
from cognite.neat._issues import IssueList
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class OnSuccess(ABC):
|
|
9
|
+
"""Abstract base class for post-activity success handlers."""
|
|
10
|
+
|
|
11
|
+
@abstractmethod
|
|
12
|
+
def run(self, data_model: Any) -> None:
|
|
13
|
+
"""Execute the success handler on the data model."""
|
|
14
|
+
pass
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class OnSuccessIssuesChecker(OnSuccess, ABC):
|
|
18
|
+
"""Abstract base class for post-activity success handlers that check for issues of the data model."""
|
|
19
|
+
|
|
20
|
+
def __init__(self) -> None:
|
|
21
|
+
self._issues = IssueList()
|
|
22
|
+
self._has_run = False
|
|
23
|
+
|
|
24
|
+
@property
|
|
25
|
+
def issues(self) -> IssueList:
|
|
26
|
+
if not self._has_run:
|
|
27
|
+
raise RuntimeError(f"{type(self).__name__} has not been run yet.")
|
|
28
|
+
return IssueList(self._issues)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class OnSuccessResultProducer(OnSuccess, ABC):
|
|
32
|
+
"""Abstract base class for post-activity success handlers that produce desired outcomes using the data model."""
|
|
33
|
+
|
|
34
|
+
def __init__(self) -> None:
|
|
35
|
+
self._results: DeploymentResult | None = None
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def result(self) -> DeploymentResult:
|
|
39
|
+
if self._results is None:
|
|
40
|
+
raise RuntimeError("SchemaDeployer has not been run yet.")
|
|
41
|
+
return self._results
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from datetime import datetime, timezone
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field, field_serializer
|
|
6
|
+
from pydantic_core.core_schema import FieldSerializationInfo
|
|
7
|
+
|
|
8
|
+
from cognite.neat._client import NeatClient
|
|
9
|
+
from cognite.neat._data_model.models.dms import (
|
|
10
|
+
ContainerReference,
|
|
11
|
+
ContainerRequest,
|
|
12
|
+
DataModelReference,
|
|
13
|
+
DataModelRequest,
|
|
14
|
+
NodeReference,
|
|
15
|
+
RequestSchema,
|
|
16
|
+
SpaceReference,
|
|
17
|
+
SpaceRequest,
|
|
18
|
+
ViewReference,
|
|
19
|
+
ViewRequest,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
if sys.version_info >= (3, 11):
|
|
23
|
+
from typing import Self
|
|
24
|
+
else:
|
|
25
|
+
from typing_extensions import Self
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class SchemaSnapshot(BaseModel, extra="ignore"):
|
|
29
|
+
timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|
|
30
|
+
data_model: dict[DataModelReference, DataModelRequest] = Field(default_factory=dict)
|
|
31
|
+
views: dict[ViewReference, ViewRequest] = Field(default_factory=dict)
|
|
32
|
+
containers: dict[ContainerReference, ContainerRequest] = Field(default_factory=dict)
|
|
33
|
+
spaces: dict[SpaceReference, SpaceRequest] = Field(default_factory=dict)
|
|
34
|
+
node_types: dict[NodeReference, NodeReference] = Field(default_factory=dict)
|
|
35
|
+
|
|
36
|
+
@field_serializer("data_model", "views", "containers", "spaces", "node_types", mode="plain")
|
|
37
|
+
@classmethod
|
|
38
|
+
def make_hashable_keys(cls, value: dict, info: FieldSerializationInfo) -> dict[str, Any]:
|
|
39
|
+
output: dict[str, Any] = {}
|
|
40
|
+
for key, val in value.items():
|
|
41
|
+
dumped_value = val.model_dump(**vars(info))
|
|
42
|
+
output[str(key)] = dumped_value
|
|
43
|
+
return output
|
|
44
|
+
|
|
45
|
+
def merge(self, cdf: Self) -> Self:
|
|
46
|
+
"""Merge another SchemaSnapshot into this one, prioritizing this snapshot's data."""
|
|
47
|
+
merged = self.model_copy(deep=True)
|
|
48
|
+
|
|
49
|
+
for model_ref, local_model in merged.data_model.items():
|
|
50
|
+
if model_ref not in cdf.data_model:
|
|
51
|
+
continue
|
|
52
|
+
cdf_model = cdf.data_model[model_ref]
|
|
53
|
+
if new_views := (set(cdf_model.views or []) - set(local_model.views or [])):
|
|
54
|
+
for view_ref in new_views:
|
|
55
|
+
if cdf_view := cdf.views.get(view_ref):
|
|
56
|
+
merged.views[view_ref] = cdf_view
|
|
57
|
+
# We append the local views at the end of the CDF views.
|
|
58
|
+
local_model.views = list(dict.fromkeys((cdf_model.views or []) + (local_model.views or [])).keys())
|
|
59
|
+
|
|
60
|
+
# Update local views with additional properties and implements from CDF views
|
|
61
|
+
for view_ref, view in merged.views.items():
|
|
62
|
+
if cdf_view := cdf.views.get(view_ref):
|
|
63
|
+
if cdf_only_containers := cdf_view.used_containers - set(view.used_containers):
|
|
64
|
+
for cdf_only_container_ref in cdf_only_containers:
|
|
65
|
+
if (
|
|
66
|
+
cdf_container := cdf.containers.get(cdf_only_container_ref)
|
|
67
|
+
) and cdf_only_container_ref not in merged.containers:
|
|
68
|
+
merged.containers[cdf_only_container_ref] = cdf_container
|
|
69
|
+
|
|
70
|
+
view.properties = {**cdf_view.properties, **view.properties}
|
|
71
|
+
|
|
72
|
+
# update implements
|
|
73
|
+
if cdf_view.implements:
|
|
74
|
+
view.implements = list(dict.fromkeys(cdf_view.implements + (view.implements or [])).keys())
|
|
75
|
+
|
|
76
|
+
for container_ref, container in merged.containers.items():
|
|
77
|
+
if cdf_container := cdf.containers.get(container_ref):
|
|
78
|
+
container.properties = {**cdf_container.properties, **container.properties}
|
|
79
|
+
container.constraints = {**(cdf_container.constraints or {}), **(container.constraints or {})} or None
|
|
80
|
+
|
|
81
|
+
return merged
|
|
82
|
+
|
|
83
|
+
@classmethod
|
|
84
|
+
def fetch_cdf_data_model(cls, client: NeatClient, data_model: RequestSchema) -> Self:
|
|
85
|
+
"""Fetch the latest data model, views, containers, and spaces from CDF based on the provided RequestSchema."""
|
|
86
|
+
now = datetime.now(timezone.utc)
|
|
87
|
+
space_ids = [space.as_reference() for space in data_model.spaces]
|
|
88
|
+
cdf_spaces = client.spaces.retrieve(space_ids)
|
|
89
|
+
|
|
90
|
+
container_refs = [c.as_reference() for c in data_model.containers]
|
|
91
|
+
cdf_containers = client.containers.retrieve(container_refs)
|
|
92
|
+
|
|
93
|
+
view_refs = [v.as_reference() for v in data_model.views]
|
|
94
|
+
cdf_views = client.views.retrieve(view_refs)
|
|
95
|
+
|
|
96
|
+
dm_ref = data_model.data_model.as_reference()
|
|
97
|
+
cdf_data_models = client.data_models.retrieve([dm_ref])
|
|
98
|
+
|
|
99
|
+
nodes = [node_type for view in cdf_views for node_type in view.node_types]
|
|
100
|
+
return cls(
|
|
101
|
+
timestamp=now,
|
|
102
|
+
data_model={dm.as_reference(): dm.as_request() for dm in cdf_data_models},
|
|
103
|
+
views={view.as_reference(): view.as_request() for view in cdf_views},
|
|
104
|
+
containers={container.as_reference(): container.as_request() for container in cdf_containers},
|
|
105
|
+
spaces={space.as_reference(): space.as_request() for space in cdf_spaces},
|
|
106
|
+
node_types={node: node for node in nodes},
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
@classmethod
|
|
110
|
+
def fetch_entire_cdf(cls, client: NeatClient) -> Self:
|
|
111
|
+
"""Fetch the entire data model, views, containers, and spaces from CDF."""
|
|
112
|
+
now = datetime.now(timezone.utc)
|
|
113
|
+
all_views = client.views.list(
|
|
114
|
+
all_versions=True, include_global=True, include_inherited_properties=False, limit=None
|
|
115
|
+
)
|
|
116
|
+
nodes = [node_type for view in all_views for node_type in view.node_types]
|
|
117
|
+
return cls(
|
|
118
|
+
# TODO: spaces and data_models should be update after updating list methods for unlimited no
|
|
119
|
+
spaces={
|
|
120
|
+
response.as_reference(): response.as_request()
|
|
121
|
+
for response in client.spaces.list(include_global=True, limit=1000)
|
|
122
|
+
},
|
|
123
|
+
data_model={
|
|
124
|
+
response.as_reference(): response.as_request()
|
|
125
|
+
for response in client.data_models.list(all_versions=True, include_global=True, limit=1000)
|
|
126
|
+
},
|
|
127
|
+
views={response.as_reference(): response.as_request() for response in all_views},
|
|
128
|
+
containers={
|
|
129
|
+
response.as_reference(): response.as_request()
|
|
130
|
+
for response in client.containers.list(include_global=True, limit=None)
|
|
131
|
+
},
|
|
132
|
+
node_types={node_type: node_type for node_type in nodes},
|
|
133
|
+
timestamp=now,
|
|
134
|
+
)
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from typing import Generic
|
|
3
|
+
|
|
4
|
+
from cognite.neat._utils.useful_types import T_Item
|
|
5
|
+
|
|
6
|
+
from .data_classes import (
|
|
7
|
+
AddedField,
|
|
8
|
+
ChangedField,
|
|
9
|
+
FieldChange,
|
|
10
|
+
FieldChanges,
|
|
11
|
+
RemovedField,
|
|
12
|
+
SeverityType,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Differ(Generic[T_Item], ABC):
|
|
17
|
+
def __init__(self, parent_path: str | None = None) -> None:
|
|
18
|
+
self.parent_path = parent_path
|
|
19
|
+
|
|
20
|
+
def _get_path(self, field: str) -> str:
|
|
21
|
+
if self.parent_path:
|
|
22
|
+
return f"{self.parent_path}.{field}"
|
|
23
|
+
return field
|
|
24
|
+
|
|
25
|
+
def _diff_name_description(self, current: T_Item, new: T_Item, identifier: str | None = None) -> list[FieldChange]:
|
|
26
|
+
changes: list[FieldChange] = []
|
|
27
|
+
if hasattr(current, "name") and hasattr(new, "name"):
|
|
28
|
+
if current.name != new.name:
|
|
29
|
+
field_path = self._get_path(f"{identifier}.name" if identifier else "name")
|
|
30
|
+
changes.append(
|
|
31
|
+
ChangedField(
|
|
32
|
+
item_severity=SeverityType.SAFE,
|
|
33
|
+
field_path=field_path,
|
|
34
|
+
current_value=current.name,
|
|
35
|
+
new_value=new.name,
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
if hasattr(current, "description") and hasattr(new, "description"):
|
|
39
|
+
if current.description != new.description:
|
|
40
|
+
field_path = self._get_path(f"{identifier}.description" if identifier else "description")
|
|
41
|
+
changes.append(
|
|
42
|
+
ChangedField(
|
|
43
|
+
item_severity=SeverityType.SAFE,
|
|
44
|
+
field_path=field_path,
|
|
45
|
+
current_value=current.description,
|
|
46
|
+
new_value=new.description,
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
return changes
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class ItemDiffer(Differ[T_Item], ABC):
|
|
53
|
+
"""A generic class for comparing two items of the same type and reporting the differences."""
|
|
54
|
+
|
|
55
|
+
@abstractmethod
|
|
56
|
+
def diff(self, current: T_Item, new: T_Item) -> list[FieldChange]:
|
|
57
|
+
"""Compare two items and return a list of changes.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
current: The resource as it is in CDF.
|
|
61
|
+
new: The resource as it is desired to be.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
A list of changes between the two resources.
|
|
65
|
+
"""
|
|
66
|
+
raise NotImplementedError()
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class ObjectDiffer(Differ[T_Item], ABC):
|
|
70
|
+
@abstractmethod
|
|
71
|
+
def diff(self, current: T_Item, new: T_Item, identifier: str) -> list[FieldChange]:
|
|
72
|
+
"""Compare two dict-like objects and return a list of changes.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
current: The resource as it is in CDF.
|
|
76
|
+
new: The resource as it is desired to be.
|
|
77
|
+
identifier: The field used to identify individual items within the objects.
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
A list of changes between the two resources.
|
|
81
|
+
"""
|
|
82
|
+
raise NotImplementedError()
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def field_differences(
|
|
86
|
+
parent_path: str,
|
|
87
|
+
current: dict[str, T_Item] | None,
|
|
88
|
+
new: dict[str, T_Item] | None,
|
|
89
|
+
add_severity: SeverityType,
|
|
90
|
+
remove_severity: SeverityType,
|
|
91
|
+
differ: ObjectDiffer[T_Item],
|
|
92
|
+
) -> list[FieldChange]:
|
|
93
|
+
"""Diff two containers of items.
|
|
94
|
+
|
|
95
|
+
A container is for example the properties, constraints, or indexes of a container,
|
|
96
|
+
properties of a space, views of a data model, etc.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
parent_path: The JSON path to the container being compared.
|
|
100
|
+
current: The items as they are in CDF.
|
|
101
|
+
new: The items as they are desired to be.
|
|
102
|
+
add_severity: The severity to assign to added items.
|
|
103
|
+
remove_severity: The severity to assign to removed items.
|
|
104
|
+
differ: The differ to use for comparing individual items.
|
|
105
|
+
|
|
106
|
+
"""
|
|
107
|
+
changes: list[FieldChange] = []
|
|
108
|
+
current_map = current or {}
|
|
109
|
+
new_map = new or {}
|
|
110
|
+
current_keys = set(current_map.keys())
|
|
111
|
+
new_keys = set(new_map.keys())
|
|
112
|
+
|
|
113
|
+
for key in sorted(new_keys - current_keys):
|
|
114
|
+
item_path = f"{parent_path}.{key}"
|
|
115
|
+
changes.append(
|
|
116
|
+
AddedField(
|
|
117
|
+
item_severity=add_severity,
|
|
118
|
+
field_path=item_path,
|
|
119
|
+
new_value=new_map[key],
|
|
120
|
+
)
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
for key in sorted(current_keys - new_keys):
|
|
124
|
+
changes.append(
|
|
125
|
+
RemovedField(
|
|
126
|
+
item_severity=remove_severity,
|
|
127
|
+
field_path=f"{parent_path}.{key}",
|
|
128
|
+
current_value=current_map[key],
|
|
129
|
+
)
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
for key in sorted(current_keys & new_keys):
|
|
133
|
+
item_path = f"{parent_path}.{key}"
|
|
134
|
+
cdf_item = current_map[key]
|
|
135
|
+
desired_item = new_map[key]
|
|
136
|
+
diffs = differ.diff(cdf_item, desired_item, identifier=key)
|
|
137
|
+
if diffs:
|
|
138
|
+
changes.append(FieldChanges(field_path=item_path, changes=diffs))
|
|
139
|
+
|
|
140
|
+
return changes
|