cognite-neat 0.85.4__tar.gz → 0.85.6__tar.gz
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.
Potentially problematic release.
This version of cognite-neat might be problematic. Click here for more details.
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/PKG-INFO +1 -1
- cognite_neat-0.85.6/cognite/neat/_version.py +1 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/constants.py +0 -8
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/loaders/_rdf2dms.py +12 -4
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/examples/__init__.py +3 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/_dexpi.py +2 -2
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/rdf_to_assets.py +1 -1
- cognite_neat-0.85.6/cognite/neat/legacy/rules/examples/Rules-Nordic44-to-graphql.xlsx +0 -0
- cognite_neat-0.85.6/cognite/neat/legacy/rules/examples/Rules-Nordic44.xlsx +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/__init__.py +1 -1
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Extract_RDF_Graph_and_Generate_Assets/workflow.yaml +1 -1
- cognite_neat-0.85.6/cognite/neat/rules/analysis/__init__.py +6 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/analysis/_base.py +0 -12
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/analysis/_information_rules.py +116 -27
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_rules2excel.py +11 -3
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_base.py +8 -2
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_inference2rules.py +13 -7
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/spreadsheet.py +46 -6
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_rules.py +3 -1
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_rules_input.py +23 -4
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_validation.py +15 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Extract_RDF_Graph_and_Generate_Assets/workflow.yaml +1 -1
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_store.py +27 -9
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/pyproject.toml +2 -2
- cognite_neat-0.85.4/cognite/neat/_version.py +0 -1
- cognite_neat-0.85.4/cognite/neat/legacy/rules/examples/Rules-Nordic44-to-TNT.xlsx +0 -0
- cognite_neat-0.85.4/cognite/neat/legacy/rules/examples/Rules-Nordic44-to-graphql.xlsx +0 -0
- cognite_neat-0.85.4/cognite/neat/rules/analysis/__init__.py +0 -3
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/LICENSE +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/README.md +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/_shared.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/asgi/metrics.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/configuration.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/context_manager/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/context_manager/manager.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/data_classes/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/data_classes/rest.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/explorer.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/configuration.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/core.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/crud.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/data_exploration.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/metrics.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/routers/workflows.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/utils/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/utils/data_mapping.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/utils/logging.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/api/utils/query_templates.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/main.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/monitoring/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/monitoring/metrics.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/index.html +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/.gitignore +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/README.md +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/asset-manifest.json +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/favicon.ico +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/img/architect-icon.svg +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/img/developer-icon.svg +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/img/sme-icon.svg +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/index.html +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/logo192.png +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/manifest.json +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/robots.txt +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css.map +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js.LICENSE.txt +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js.map +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/app/ui/neat-app/build/static/media/logo.8093b84df9ed36a174c629d6fe0b730d.svg +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/config.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/exceptions.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/_shared.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/_tracking/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/_tracking/base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/_tracking/log.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/examples/Knowledge-Graph-Nordic44.xml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/examples/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/exceptions.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_assets.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_events.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_files.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_labels.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_relationships.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_sequences.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_classic_cdf/_timeseries.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_dexpi.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_mock_graph_generator.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/extractors/_rdf_file.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/issues/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/issues/loader.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/loaders/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/loaders/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/loaders/_rdf2asset.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/models.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/queries/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/queries/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/queries/_construct.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/queries/_shared.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/stores/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/stores/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/stores/_oxrdflib.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/stores/_provenance.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/transformers/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/transformers/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/graph/transformers/_classic_cdf.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/issues.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/examples/Knowledge-Graph-Nordic44.xml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/exceptions.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/_graph_capturing_sheet.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/extractors/_mock_graph_generator.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/_asset_loader.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/_exceptions.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/labels.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/models.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/rdf_to_relationships.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/rdf_to_dms.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/validator.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/models.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_graphdb_store.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_memory_store.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_oxigraph_store.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_oxrdflib.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/stores/_rdf_to_graph.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/entity_matcher.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/query_generator/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/query_generator/sparql.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/transformations/transformer.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/analysis.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/power-grid-containers.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/power-grid-example.xlsx +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/power-grid-model.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/rules-template.xlsx +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/sheet2cdf-transformation-rules.xlsx +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/skos-rules.xlsx +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/source-to-solution-mapping-rules.xlsx +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/examples/wind-energy.owl +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exceptions.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_core/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_core/rules2labels.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2dms.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2excel.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2graphql.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2ontology.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2pydantic_models.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_rules2triples.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/exporters/_validation.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_dict2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_dms2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_graph2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_json2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2classes.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2metadata.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2properties.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_spreadsheet2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_xsd2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/importers/_yaml2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/raw_rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/rdfpath.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/tables.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/rules/models/value_types.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Export_DMS/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Export_Rules_to_Ontology/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Extract_DEXPI_Graph_and_Export_Rules/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Import_DMS/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Ontology_to_Data_Model/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Validate_Rules/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Validate_Solution_Model/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Visualize_Data_Model_Using_Mock_Graph/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/workflows/examples/Visualize_Semantic_Data_Model/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/py.typed +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/_shared.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/examples/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/examples/wind-energy.owl +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exceptions.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_rules2dms.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_rules2ontology.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_rules2yaml.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/exporters/_validation.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dms2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/_unit_lookup.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/dtdl_converter.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/dtdl_importer.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_dtdl2rules/spec.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/_owl2classes.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/_owl2metadata.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/_owl2properties.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_owl2rules/_owl2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_spreadsheet2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_yaml2rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/dms.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/fileread.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/formatters.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/importing.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/issues/spreadsheet_file.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_constants.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_rdfpath.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_types/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_types/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/_types/_field.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_converter.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_rules_input.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_serializer.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/asset/_validation.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/data_types.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_converter.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_exporter.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_rules.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_rules_input.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_schema.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_serializer.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/dms/_validation.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/domain.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/entities.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_converter.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/information/_serializer.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/models/wrapped_entities.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/auth.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/auxiliary.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_classes.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/_base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/_data_modeling.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/_ingestion.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/cdf_loaders/data_classes.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/exceptions.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/spreadsheet.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/text.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/upload.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/utils.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/utils/xml_.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/_exceptions.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/base.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/cdf_store.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Export_DMS/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Export_Rules_to_Ontology/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Extract_DEXPI_Graph_and_Export_Rules/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Import_DMS/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Ontology_to_Data_Model/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Validate_Rules/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Validate_Solution_Model/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Visualize_Data_Model_Using_Mock_Graph/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/examples/Visualize_Semantic_Data_Model/workflow.yaml +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/manager.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/migration/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/migration/steps.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/migration/wf_manifests.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/model.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/data_contracts.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/graph_extractor.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/graph_loader.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/graph_store.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/rules_exporter.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/rules_importer.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/current/rules_validator.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/io/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/io/io_steps.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/__init__.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_contextualization.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_extractor.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_loader.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/graph_transformer.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/rules_exporter.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/lib/legacy/rules_importer.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps/step_model.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/steps_registry.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/tasks.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/triggers.py +0 -0
- {cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/workflows/utils.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.85.6"
|
|
@@ -22,14 +22,6 @@ PREFIXES = {
|
|
|
22
22
|
"owl": OWL._NS,
|
|
23
23
|
"xsd": XSD._NS,
|
|
24
24
|
"pav": Namespace("http://purl.org/pav/"),
|
|
25
|
-
"cim": Namespace("http://iec.ch/TC57/2013/CIM-schema-cim16#"),
|
|
26
|
-
"icim": Namespace("http://iec.ch/TC57/2013/CIM-schema-cim16-info#"),
|
|
27
|
-
"entsoe": Namespace("http://entsoe.eu/CIM/SchemaExtension/3/1#"),
|
|
28
|
-
"entsoe2": Namespace("http://entsoe.eu/CIM/SchemaExtension/3/2#"),
|
|
29
|
-
"md": Namespace("http://iec.ch/TC57/61970-552/ModelDescription/1#"),
|
|
30
|
-
"pti": Namespace("http://www.pti-us.com/PTI_CIM-schema-cim16#"),
|
|
31
|
-
"tnt": Namespace("http://purl.org/cognite/tnt#"),
|
|
32
|
-
"neat": DEFAULT_NAMESPACE,
|
|
33
25
|
}
|
|
34
26
|
|
|
35
27
|
|
|
@@ -82,7 +82,9 @@ class DMSLoader(CDFLoader[dm.InstanceApply]):
|
|
|
82
82
|
except Exception as e:
|
|
83
83
|
issues.append(
|
|
84
84
|
loader_issues.FailedConvertError(
|
|
85
|
-
identifier=rules.metadata.as_identifier(),
|
|
85
|
+
identifier=rules.metadata.as_identifier(),
|
|
86
|
+
target_format="read DMS model",
|
|
87
|
+
reason=str(e),
|
|
86
88
|
)
|
|
87
89
|
)
|
|
88
90
|
return cls(graph_store, data_model, instance_space, {}, issues)
|
|
@@ -199,7 +201,11 @@ class DMSLoader(CDFLoader[dm.InstanceApply]):
|
|
|
199
201
|
return pydantic_cls, edge_by_property, issues
|
|
200
202
|
|
|
201
203
|
def _create_node(
|
|
202
|
-
self,
|
|
204
|
+
self,
|
|
205
|
+
identifier: str,
|
|
206
|
+
properties: dict[str, list[str]],
|
|
207
|
+
pydantic_cls: type[Model],
|
|
208
|
+
view_id: dm.ViewId,
|
|
203
209
|
) -> dm.InstanceApply:
|
|
204
210
|
created = pydantic_cls.model_validate(properties)
|
|
205
211
|
|
|
@@ -233,7 +239,7 @@ class DMSLoader(CDFLoader[dm.InstanceApply]):
|
|
|
233
239
|
external_id = f"{identifier}.{prop}.{target}"
|
|
234
240
|
yield dm.EdgeApply(
|
|
235
241
|
space=self.instance_space,
|
|
236
|
-
external_id=external_id if len(external_id) < 256 else create_sha256_hash(external_id),
|
|
242
|
+
external_id=(external_id if len(external_id) < 256 else create_sha256_hash(external_id)),
|
|
237
243
|
type=edge.type,
|
|
238
244
|
start_node=dm.DirectRelationReference(self.instance_space, identifier),
|
|
239
245
|
end_node=dm.DirectRelationReference(self.instance_space, target),
|
|
@@ -290,5 +296,7 @@ def _triples2dictionary(
|
|
|
290
296
|
"""Converts list of triples to dictionary"""
|
|
291
297
|
values_by_property_by_identifier: dict[str, dict[str, list[str]]] = defaultdict(lambda: defaultdict(list))
|
|
292
298
|
for id_, property_, value in triples:
|
|
293
|
-
|
|
299
|
+
# avoid issue with strings "None", "nan", "null" being treated as values
|
|
300
|
+
if value.lower() not in ["", "None", "nan", "null"]:
|
|
301
|
+
values_by_property_by_identifier[id_][property_].append(value)
|
|
294
302
|
return values_by_property_by_identifier
|
|
@@ -5,3 +5,6 @@ from pathlib import Path
|
|
|
5
5
|
# https://github.com/pydata/xarray/blob/main/xarray/tutorial.py
|
|
6
6
|
# Currently there are simple paths to the examples which are then easily loaded in the notebooks
|
|
7
7
|
nordic44_knowledge_graph = Path(__file__).parent / "Knowledge-Graph-Nordic44.xml"
|
|
8
|
+
nordic44_knowledge_graph_dirty = (
|
|
9
|
+
Path(__file__).parent / "Knowledge-Graph-Nordic44-dirty.xml"
|
|
10
|
+
)
|
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
|
|
3
3
|
|
|
4
4
|
from rdflib import Namespace
|
|
5
5
|
|
|
6
|
-
from cognite.neat.constants import
|
|
6
|
+
from cognite.neat.constants import DEFAULT_NAMESPACE
|
|
7
7
|
from cognite.neat.graph.extractors._dexpi import DexpiExtractor
|
|
8
8
|
from cognite.neat.legacy.graph.models import Triple
|
|
9
9
|
|
|
@@ -31,7 +31,7 @@ class DexpiXML(BaseExtractor):
|
|
|
31
31
|
base_namespace: str | None = None,
|
|
32
32
|
):
|
|
33
33
|
self.filepath = Path(filepath)
|
|
34
|
-
self.namespace = Namespace(base_namespace) if isinstance(base_namespace, str | Namespace) else
|
|
34
|
+
self.namespace = Namespace(base_namespace) if isinstance(base_namespace, str | Namespace) else DEFAULT_NAMESPACE
|
|
35
35
|
|
|
36
36
|
def extract(self) -> set[Triple]:
|
|
37
37
|
"""
|
{cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/legacy/graph/loaders/core/rdf_to_assets.py
RENAMED
|
@@ -271,7 +271,7 @@ def _class2asset_instance(
|
|
|
271
271
|
if "name" in remapped_class_instance and remapped_class_instance["name"] == "":
|
|
272
272
|
remapped_class_instance["name"] = empty_name_default
|
|
273
273
|
# To maintain shape across of all assets of specific type we are adding missing metadata
|
|
274
|
-
# keys as empty strings, this was request by
|
|
274
|
+
# keys as empty strings, this was request by a customer
|
|
275
275
|
# Generally this is bad practice, but more of a workaround of their bad data
|
|
276
276
|
if missing_metadata and add_missing_metadata:
|
|
277
277
|
msg = f"Adding missing metadata keys with values set to empty string for {class_}"
|
|
Binary file
|
|
@@ -12,7 +12,7 @@ power_grid_containers = _EXAMPLES / "power-grid-containers.yaml"
|
|
|
12
12
|
power_grid_data_model = _EXAMPLES / "power-grid-model.yaml"
|
|
13
13
|
simple_example = _EXAMPLES / "sheet2cdf-transformation-rules.xlsx"
|
|
14
14
|
source_to_solution_mapping = _EXAMPLES / "source-to-solution-mapping-rules.xlsx"
|
|
15
|
-
nordic44 = _EXAMPLES / "Rules-Nordic44
|
|
15
|
+
nordic44 = _EXAMPLES / "Rules-Nordic44.xlsx"
|
|
16
16
|
nordic44_graphql = _EXAMPLES / "Rules-Nordic44-to-graphql.xlsx"
|
|
17
17
|
skos = _EXAMPLES / "skos-rules.xlsx"
|
|
18
18
|
wind_energy_ontology = _EXAMPLES / "wind-energy.owl"
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
import sys
|
|
2
1
|
from abc import ABC, abstractmethod
|
|
3
2
|
from typing import Generic, TypeVar
|
|
4
3
|
|
|
5
4
|
from cognite.neat.rules._shared import Rules
|
|
6
5
|
from cognite.neat.rules.models.entities import ClassEntity
|
|
7
6
|
|
|
8
|
-
if sys.version_info >= (3, 11):
|
|
9
|
-
from enum import StrEnum
|
|
10
|
-
else:
|
|
11
|
-
from backports.strenum import StrEnum
|
|
12
|
-
|
|
13
7
|
T_Rules = TypeVar("T_Rules", bound=Rules)
|
|
14
8
|
|
|
15
9
|
|
|
@@ -17,9 +11,3 @@ class BaseAnalysis(ABC, Generic[T_Rules]):
|
|
|
17
11
|
@abstractmethod
|
|
18
12
|
def subset_rules(self, desired_classes: set[ClassEntity]) -> T_Rules:
|
|
19
13
|
raise NotImplementedError()
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class DataModelingScenario(StrEnum):
|
|
23
|
-
from_scratch = "from scratch"
|
|
24
|
-
build_solution = "build solution"
|
|
25
|
-
extend_reference = "extend reference"
|
{cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/analysis/_information_rules.py
RENAMED
|
@@ -2,25 +2,37 @@ import itertools
|
|
|
2
2
|
import logging
|
|
3
3
|
import warnings
|
|
4
4
|
from collections import defaultdict
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any, Generic, TypeVar
|
|
6
6
|
|
|
7
7
|
import pandas as pd
|
|
8
8
|
from pydantic import ValidationError
|
|
9
9
|
|
|
10
10
|
from cognite.neat.rules.models import SchemaCompleteness
|
|
11
11
|
from cognite.neat.rules.models._rdfpath import RDFPath
|
|
12
|
-
from cognite.neat.rules.models.
|
|
13
|
-
from cognite.neat.rules.models.
|
|
12
|
+
from cognite.neat.rules.models.asset import AssetClass, AssetProperty, AssetRules
|
|
13
|
+
from cognite.neat.rules.models.entities import (
|
|
14
|
+
AssetEntity,
|
|
15
|
+
ClassEntity,
|
|
16
|
+
EntityTypes,
|
|
17
|
+
ParentClassEntity,
|
|
18
|
+
ReferenceEntity,
|
|
19
|
+
RelationshipEntity,
|
|
20
|
+
)
|
|
21
|
+
from cognite.neat.rules.models.information import (
|
|
22
|
+
InformationClass,
|
|
23
|
+
InformationProperty,
|
|
24
|
+
InformationRules,
|
|
25
|
+
)
|
|
14
26
|
from cognite.neat.utils.utils import get_inheritance_path
|
|
15
27
|
|
|
16
|
-
|
|
28
|
+
T_Rules = TypeVar("T_Rules", InformationRules, AssetRules)
|
|
29
|
+
T_Property = TypeVar("T_Property", InformationProperty, AssetProperty)
|
|
30
|
+
T_Class = TypeVar("T_Class", InformationClass, AssetClass)
|
|
17
31
|
|
|
18
32
|
|
|
19
|
-
class
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def __init__(self, rules: InformationRules):
|
|
23
|
-
self.rules = rules
|
|
33
|
+
class _SharedAnalysis(Generic[T_Rules, T_Property, T_Class]):
|
|
34
|
+
def __init__(self, rules: T_Rules):
|
|
35
|
+
self.rules: T_Rules = rules
|
|
24
36
|
|
|
25
37
|
@property
|
|
26
38
|
def directly_referred_classes(self) -> set[ClassEntity]:
|
|
@@ -65,9 +77,7 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
|
|
|
65
77
|
|
|
66
78
|
return class_subclass_pairs
|
|
67
79
|
|
|
68
|
-
def classes_with_properties(
|
|
69
|
-
self, consider_inheritance: bool = False
|
|
70
|
-
) -> dict[ClassEntity, list[InformationProperty]]:
|
|
80
|
+
def classes_with_properties(self, consider_inheritance: bool = False) -> dict[ClassEntity, list[T_Property]]:
|
|
71
81
|
"""Returns classes that have been defined in the data model.
|
|
72
82
|
|
|
73
83
|
Args:
|
|
@@ -85,10 +95,10 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
|
|
|
85
95
|
it will not be included in the returned dictionary.
|
|
86
96
|
"""
|
|
87
97
|
|
|
88
|
-
class_property_pairs: dict[ClassEntity, list[
|
|
98
|
+
class_property_pairs: dict[ClassEntity, list[T_Property]] = defaultdict(list)
|
|
89
99
|
|
|
90
100
|
for property_ in self.rules.properties:
|
|
91
|
-
class_property_pairs[property_.class_].append(property_)
|
|
101
|
+
class_property_pairs[property_.class_].append(property_) # type: ignore
|
|
92
102
|
|
|
93
103
|
if consider_inheritance:
|
|
94
104
|
class_parent_pairs = self.class_parent_pairs()
|
|
@@ -106,7 +116,7 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
|
|
|
106
116
|
def _add_inherited_properties(
|
|
107
117
|
cls,
|
|
108
118
|
class_: ClassEntity,
|
|
109
|
-
class_property_pairs: dict[ClassEntity, list[
|
|
119
|
+
class_property_pairs: dict[ClassEntity, list[T_Property]],
|
|
110
120
|
class_parent_pairs: dict[ClassEntity, list[ParentClassEntity]],
|
|
111
121
|
):
|
|
112
122
|
inheritance_path = get_inheritance_path(class_, class_parent_pairs)
|
|
@@ -130,7 +140,7 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
|
|
|
130
140
|
|
|
131
141
|
def class_property_pairs(
|
|
132
142
|
self, only_rdfpath: bool = False, consider_inheritance: bool = False
|
|
133
|
-
) -> dict[ClassEntity, dict[str,
|
|
143
|
+
) -> dict[ClassEntity, dict[str, T_Property]]:
|
|
134
144
|
"""Returns a dictionary of classes with a dictionary of properties associated with them.
|
|
135
145
|
|
|
136
146
|
Args:
|
|
@@ -193,7 +203,14 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
|
|
|
193
203
|
Dataframe with the class linkage of the data model
|
|
194
204
|
"""
|
|
195
205
|
|
|
196
|
-
class_linkage = pd.DataFrame(
|
|
206
|
+
class_linkage = pd.DataFrame(
|
|
207
|
+
columns=[
|
|
208
|
+
"source_class",
|
|
209
|
+
"target_class",
|
|
210
|
+
"connecting_property",
|
|
211
|
+
"max_occurrence",
|
|
212
|
+
]
|
|
213
|
+
)
|
|
197
214
|
|
|
198
215
|
class_property_pairs = self.classes_with_properties(consider_inheritance)
|
|
199
216
|
properties = list(itertools.chain.from_iterable(class_property_pairs.values()))
|
|
@@ -286,21 +303,21 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
|
|
|
286
303
|
|
|
287
304
|
def as_property_dict(
|
|
288
305
|
self,
|
|
289
|
-
) -> dict[str, list[
|
|
306
|
+
) -> dict[str, list[T_Property]]:
|
|
290
307
|
"""This is used to capture all definitions of a property in the data model."""
|
|
291
|
-
property_dict: dict[str, list[
|
|
308
|
+
property_dict: dict[str, list[T_Property]] = defaultdict(list)
|
|
292
309
|
for definition in self.rules.properties:
|
|
293
|
-
property_dict[definition.property_].append(definition)
|
|
310
|
+
property_dict[definition.property_].append(definition) # type: ignore
|
|
294
311
|
return property_dict
|
|
295
312
|
|
|
296
|
-
def as_class_dict(self) -> dict[str,
|
|
313
|
+
def as_class_dict(self) -> dict[str, T_Class]:
|
|
297
314
|
"""This is to simplify access to classes through dict."""
|
|
298
|
-
class_dict: dict[str,
|
|
315
|
+
class_dict: dict[str, T_Class] = {}
|
|
299
316
|
for definition in self.rules.classes:
|
|
300
|
-
class_dict[str(definition.class_.suffix)] = definition
|
|
317
|
+
class_dict[str(definition.class_.suffix)] = definition # type: ignore
|
|
301
318
|
return class_dict
|
|
302
319
|
|
|
303
|
-
def subset_rules(self, desired_classes: set[ClassEntity]) ->
|
|
320
|
+
def subset_rules(self, desired_classes: set[ClassEntity]) -> T_Rules:
|
|
304
321
|
"""
|
|
305
322
|
Subset rules to only include desired classes and their properties.
|
|
306
323
|
|
|
@@ -352,7 +369,8 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
|
|
|
352
369
|
if impossible_classes:
|
|
353
370
|
logging.warning(f"Could not find the following classes defined in the data model: {impossible_classes}")
|
|
354
371
|
warnings.warn(
|
|
355
|
-
f"Could not find the following classes defined in the data model: {impossible_classes}",
|
|
372
|
+
f"Could not find the following classes defined in the data model: {impossible_classes}",
|
|
373
|
+
stacklevel=2,
|
|
356
374
|
)
|
|
357
375
|
|
|
358
376
|
reduced_data_model: dict[str, Any] = {
|
|
@@ -373,8 +391,79 @@ class InformationArchitectRulesAnalysis(BaseAnalysis):
|
|
|
373
391
|
reduced_data_model["properties"].extend(properties)
|
|
374
392
|
|
|
375
393
|
try:
|
|
376
|
-
return
|
|
394
|
+
return type(self.rules)(**reduced_data_model)
|
|
377
395
|
except ValidationError as e:
|
|
378
396
|
warnings.warn(f"Reduced data model is not complete: {e}", stacklevel=2)
|
|
379
397
|
reduced_data_model["metadata"].schema_ = SchemaCompleteness.partial
|
|
380
|
-
return
|
|
398
|
+
return type(self.rules).model_construct(**reduced_data_model)
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
class InformationArchitectRulesAnalysis(_SharedAnalysis[InformationRules, InformationProperty, InformationClass]):
|
|
402
|
+
"""Assumes analysis over only the complete schema"""
|
|
403
|
+
|
|
404
|
+
...
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
class AssetArchitectRulesAnalysis(_SharedAnalysis[AssetRules, AssetProperty, AssetClass]):
|
|
408
|
+
"""Assumes analysis over only the complete schema"""
|
|
409
|
+
|
|
410
|
+
def class_property_pairs(
|
|
411
|
+
self,
|
|
412
|
+
only_rdfpath: bool = False,
|
|
413
|
+
consider_inheritance: bool = False,
|
|
414
|
+
implementation_type: EntityTypes = EntityTypes.asset,
|
|
415
|
+
) -> dict[ClassEntity, dict[str, AssetProperty]]:
|
|
416
|
+
class_property_pairs = {}
|
|
417
|
+
|
|
418
|
+
T_implementation = AssetEntity if implementation_type == EntityTypes.asset else RelationshipEntity
|
|
419
|
+
|
|
420
|
+
for class_, properties in self.classes_with_properties(consider_inheritance).items():
|
|
421
|
+
processed_properties = {}
|
|
422
|
+
for property_ in properties:
|
|
423
|
+
if property_.property_ in processed_properties:
|
|
424
|
+
# TODO: use appropriate Warning class from _exceptions.py
|
|
425
|
+
# if missing make one !
|
|
426
|
+
warnings.warn(
|
|
427
|
+
f"Property {property_.property_} for {class_} has been defined more than once!"
|
|
428
|
+
" Only the first definition will be considered, skipping the rest..",
|
|
429
|
+
stacklevel=2,
|
|
430
|
+
)
|
|
431
|
+
continue
|
|
432
|
+
|
|
433
|
+
if (
|
|
434
|
+
property_.implementation
|
|
435
|
+
and any(isinstance(implementation, T_implementation) for implementation in property_.implementation)
|
|
436
|
+
and (not only_rdfpath or (only_rdfpath and isinstance(property_.transformation, RDFPath)))
|
|
437
|
+
):
|
|
438
|
+
implementation = [
|
|
439
|
+
implementation
|
|
440
|
+
for implementation in property_.implementation
|
|
441
|
+
if isinstance(implementation, T_implementation)
|
|
442
|
+
]
|
|
443
|
+
|
|
444
|
+
processed_properties[property_.property_] = property_.model_copy(
|
|
445
|
+
deep=True, update={"implementation": implementation}
|
|
446
|
+
)
|
|
447
|
+
|
|
448
|
+
if processed_properties:
|
|
449
|
+
class_property_pairs[class_] = processed_properties
|
|
450
|
+
|
|
451
|
+
return class_property_pairs
|
|
452
|
+
|
|
453
|
+
def asset_definition(
|
|
454
|
+
self, only_rdfpath: bool = False, consider_inheritance: bool = False
|
|
455
|
+
) -> dict[ClassEntity, dict[str, AssetProperty]]:
|
|
456
|
+
return self.class_property_pairs(
|
|
457
|
+
consider_inheritance=consider_inheritance,
|
|
458
|
+
only_rdfpath=only_rdfpath,
|
|
459
|
+
implementation_type=EntityTypes.asset,
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
def relationship_definition(
|
|
463
|
+
self, only_rdfpath: bool = False, consider_inheritance: bool = False
|
|
464
|
+
) -> dict[ClassEntity, dict[str, AssetProperty]]:
|
|
465
|
+
return self.class_property_pairs(
|
|
466
|
+
consider_inheritance=consider_inheritance,
|
|
467
|
+
only_rdfpath=only_rdfpath,
|
|
468
|
+
implementation_type=EntityTypes.relationship,
|
|
469
|
+
)
|
|
@@ -143,9 +143,15 @@ class ExcelExporter(BaseExporter[Workbook]):
|
|
|
143
143
|
|
|
144
144
|
return workbook
|
|
145
145
|
|
|
146
|
-
def _write_sheets(
|
|
146
|
+
def _write_sheets(
|
|
147
|
+
self,
|
|
148
|
+
workbook: Workbook,
|
|
149
|
+
dumped_rules: dict[str, Any],
|
|
150
|
+
rules: Rules,
|
|
151
|
+
sheet_prefix: str = "",
|
|
152
|
+
):
|
|
147
153
|
for sheet_name, headers in rules.headers_by_sheet(by_alias=True).items():
|
|
148
|
-
if sheet_name in ("Metadata", "
|
|
154
|
+
if sheet_name in ("Metadata", "Prefixes", "Reference", "Last"):
|
|
149
155
|
continue
|
|
150
156
|
sheet = workbook.create_sheet(f"{sheet_prefix}{sheet_name}")
|
|
151
157
|
|
|
@@ -273,7 +279,9 @@ class _MetadataCreator:
|
|
|
273
279
|
|
|
274
280
|
new_metadata = self._create_new_info(now)
|
|
275
281
|
if isinstance(metadata, DMSMetadata):
|
|
276
|
-
from cognite.neat.rules.models.information._converter import
|
|
282
|
+
from cognite.neat.rules.models.information._converter import (
|
|
283
|
+
_InformationRulesConverter,
|
|
284
|
+
)
|
|
277
285
|
|
|
278
286
|
output_metadata: DMSMetadata | InformationMetadata = _InformationRulesConverter._convert_metadata_to_dms(
|
|
279
287
|
new_metadata
|
|
@@ -10,7 +10,11 @@ from pydantic import ValidationError
|
|
|
10
10
|
from rdflib import Namespace
|
|
11
11
|
|
|
12
12
|
from cognite.neat.rules._shared import Rules
|
|
13
|
-
from cognite.neat.rules.issues.base import
|
|
13
|
+
from cognite.neat.rules.issues.base import (
|
|
14
|
+
IssueList,
|
|
15
|
+
NeatValidationError,
|
|
16
|
+
ValidationWarning,
|
|
17
|
+
)
|
|
14
18
|
from cognite.neat.rules.models import AssetRules, DMSRules, InformationRules, RoleTypes
|
|
15
19
|
from cognite.neat.utils.auxiliary import class_html_doc
|
|
16
20
|
|
|
@@ -30,7 +34,9 @@ class BaseImporter(ABC):
|
|
|
30
34
|
|
|
31
35
|
@abstractmethod
|
|
32
36
|
def to_rules(
|
|
33
|
-
self,
|
|
37
|
+
self,
|
|
38
|
+
errors: Literal["raise", "continue"] = "continue",
|
|
39
|
+
role: RoleTypes | None = None,
|
|
34
40
|
) -> tuple[Rules | None, IssueList] | Rules:
|
|
35
41
|
"""
|
|
36
42
|
Creates `Rules` object from the data for target role.
|
{cognite_neat-0.85.4 → cognite_neat-0.85.6}/cognite/neat/rules/importers/_inference2rules.py
RENAMED
|
@@ -91,7 +91,9 @@ class InferenceImporter(BaseImporter):
|
|
|
91
91
|
) -> tuple[Rules | None, IssueList]: ...
|
|
92
92
|
|
|
93
93
|
def to_rules(
|
|
94
|
-
self,
|
|
94
|
+
self,
|
|
95
|
+
errors: Literal["raise", "continue"] = "continue",
|
|
96
|
+
role: RoleTypes | None = None,
|
|
95
97
|
) -> tuple[Rules | None, IssueList] | Rules:
|
|
96
98
|
"""
|
|
97
99
|
Creates `Rules` object from the data for target role.
|
|
@@ -103,9 +105,6 @@ class InferenceImporter(BaseImporter):
|
|
|
103
105
|
|
|
104
106
|
rules_dict = self._to_rules_components()
|
|
105
107
|
|
|
106
|
-
# adding additional prefix
|
|
107
|
-
rules_dict["prefixes"][rules_dict["metadata"]["prefix"]] = rules_dict["metadata"]["namespace"]
|
|
108
|
-
|
|
109
108
|
with _handle_issues(self.issue_list) as future:
|
|
110
109
|
rules: InformationRules
|
|
111
110
|
rules = InformationRulesInput.load(rules_dict).as_rules()
|
|
@@ -134,7 +133,10 @@ class InferenceImporter(BaseImporter):
|
|
|
134
133
|
"""
|
|
135
134
|
classes: dict[str, dict] = {}
|
|
136
135
|
properties: dict[str, dict] = {}
|
|
137
|
-
prefixes: dict[str, Namespace] = PREFIXES
|
|
136
|
+
prefixes: dict[str, Namespace] = PREFIXES.copy()
|
|
137
|
+
|
|
138
|
+
# Adds default namespace to prefixes
|
|
139
|
+
prefixes[self._default_metadata().prefix] = self._default_metadata().namespace
|
|
138
140
|
|
|
139
141
|
# Infers all the classes in the graph
|
|
140
142
|
for class_uri, no_instances in self.graph.query(ORDERED_CLASSES_QUERY): # type: ignore[misc]
|
|
@@ -246,7 +248,7 @@ class InferenceImporter(BaseImporter):
|
|
|
246
248
|
created=datetime.now(),
|
|
247
249
|
updated=datetime.now(),
|
|
248
250
|
description="Inferred model from knowledge graph",
|
|
249
|
-
prefix="
|
|
251
|
+
prefix="inferred",
|
|
250
252
|
namespace=DEFAULT_NAMESPACE,
|
|
251
253
|
)
|
|
252
254
|
|
|
@@ -262,6 +264,10 @@ class InferenceImporter(BaseImporter):
|
|
|
262
264
|
def _read_value_type_occurrence_from_comment(cls, value_type: str, comment: str) -> int:
|
|
263
265
|
return int(
|
|
264
266
|
cast(
|
|
265
|
-
re.Match,
|
|
267
|
+
re.Match,
|
|
268
|
+
re.search(
|
|
269
|
+
rf"with value type <{value_type}> which occurs <(\d+)> times in the graph",
|
|
270
|
+
comment,
|
|
271
|
+
),
|
|
266
272
|
).group(1)
|
|
267
273
|
)
|
|
@@ -7,6 +7,7 @@ from typing import Any, ClassVar
|
|
|
7
7
|
from cognite.client.data_classes import data_modeling as dm
|
|
8
8
|
from cognite.client.data_classes.data_modeling import ContainerId, ViewId
|
|
9
9
|
from pydantic_core import ErrorDetails
|
|
10
|
+
from rdflib import Namespace
|
|
10
11
|
|
|
11
12
|
from cognite.neat.issues import MultiValueError
|
|
12
13
|
from cognite.neat.utils.spreadsheet import SpreadsheetRead
|
|
@@ -23,6 +24,7 @@ __all__ = [
|
|
|
23
24
|
"InvalidRowError",
|
|
24
25
|
"InvalidPropertyError",
|
|
25
26
|
"InvalidClassError",
|
|
27
|
+
"PrefixNamespaceCollisionError",
|
|
26
28
|
"InvalidContainerError",
|
|
27
29
|
"InvalidViewError",
|
|
28
30
|
"InvalidRowUnknownSheetError",
|
|
@@ -44,13 +46,18 @@ class InvalidSheetError(NeatValidationError, ABC):
|
|
|
44
46
|
@classmethod
|
|
45
47
|
@abstractmethod
|
|
46
48
|
def from_pydantic_error(
|
|
47
|
-
cls,
|
|
49
|
+
cls,
|
|
50
|
+
error: ErrorDetails,
|
|
51
|
+
read_info_by_sheet: dict[str, SpreadsheetRead] | None = None,
|
|
48
52
|
) -> Self:
|
|
49
53
|
raise NotImplementedError
|
|
50
54
|
|
|
51
55
|
@classmethod
|
|
52
56
|
def from_pydantic_errors(
|
|
53
|
-
cls,
|
|
57
|
+
cls,
|
|
58
|
+
errors: list[ErrorDetails],
|
|
59
|
+
read_info_by_sheet: dict[str, SpreadsheetRead] | None = None,
|
|
60
|
+
**kwargs: Any,
|
|
54
61
|
) -> "list[NeatValidationError]":
|
|
55
62
|
output: list[NeatValidationError] = []
|
|
56
63
|
for error in errors:
|
|
@@ -100,16 +107,26 @@ class InvalidRowError(InvalidSheetError, ABC):
|
|
|
100
107
|
def __lt__(self, other: object) -> bool:
|
|
101
108
|
if not isinstance(other, InvalidRowError):
|
|
102
109
|
return NotImplemented
|
|
103
|
-
return (self.sheet_name, self.row, self.column) < (
|
|
110
|
+
return (self.sheet_name, self.row, self.column) < (
|
|
111
|
+
other.sheet_name,
|
|
112
|
+
other.row,
|
|
113
|
+
other.column,
|
|
114
|
+
)
|
|
104
115
|
|
|
105
116
|
def __eq__(self, other: object) -> bool:
|
|
106
117
|
if not isinstance(other, InvalidRowError):
|
|
107
118
|
return NotImplemented
|
|
108
|
-
return (self.sheet_name, self.row, self.column) == (
|
|
119
|
+
return (self.sheet_name, self.row, self.column) == (
|
|
120
|
+
other.sheet_name,
|
|
121
|
+
other.row,
|
|
122
|
+
other.column,
|
|
123
|
+
)
|
|
109
124
|
|
|
110
125
|
@classmethod
|
|
111
126
|
def from_pydantic_error(
|
|
112
|
-
cls,
|
|
127
|
+
cls,
|
|
128
|
+
error: ErrorDetails,
|
|
129
|
+
read_info_by_sheet: dict[str, SpreadsheetRead] | None = None,
|
|
113
130
|
) -> Self:
|
|
114
131
|
sheet_name, _, row, column, *__ = error["loc"]
|
|
115
132
|
reader = (read_info_by_sheet or {}).get(str(sheet_name), SpreadsheetRead())
|
|
@@ -173,7 +190,9 @@ class InvalidRowUnknownSheetError(InvalidRowError):
|
|
|
173
190
|
|
|
174
191
|
@classmethod
|
|
175
192
|
def from_pydantic_error(
|
|
176
|
-
cls,
|
|
193
|
+
cls,
|
|
194
|
+
error: ErrorDetails,
|
|
195
|
+
read_info_by_sheet: dict[str, SpreadsheetRead] | None = None,
|
|
177
196
|
) -> Self:
|
|
178
197
|
sheet_name, _, row, column, *__ = error["loc"]
|
|
179
198
|
reader = (read_info_by_sheet or {}).get(str(sheet_name), SpreadsheetRead())
|
|
@@ -294,6 +313,27 @@ class ParentClassesNotDefinedError(NeatValidationError):
|
|
|
294
313
|
return f"Parent classes {', '.join(self.classes[0])} are not defined. This may be a mistake."
|
|
295
314
|
|
|
296
315
|
|
|
316
|
+
@dataclass(frozen=True)
|
|
317
|
+
class PrefixNamespaceCollisionError(NeatValidationError):
|
|
318
|
+
description = "Same namespaces are assigned to different prefixes."
|
|
319
|
+
fix = "Make sure that each unique namespace is assigned to a unique prefix"
|
|
320
|
+
|
|
321
|
+
namespaces: list[Namespace]
|
|
322
|
+
prefixes: list[str]
|
|
323
|
+
|
|
324
|
+
def dump(self) -> dict[str, list[str]]:
|
|
325
|
+
output = super().dump()
|
|
326
|
+
output["prefixes"] = self.prefixes
|
|
327
|
+
output["namespaces"] = self.namespaces
|
|
328
|
+
return output
|
|
329
|
+
|
|
330
|
+
def message(self) -> str:
|
|
331
|
+
return (
|
|
332
|
+
f"Namespaces {', '.join(self.namespaces)} are assigned multiple times."
|
|
333
|
+
f" Impacted prefixes: {', '.join(self.prefixes)}."
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
|
|
297
337
|
@dataclass(frozen=True)
|
|
298
338
|
class ValueTypeNotDefinedError(NeatValidationError):
|
|
299
339
|
description = "Value types referred by properties are not defined in Rules."
|
|
@@ -259,7 +259,7 @@ class InformationRules(BaseRules):
|
|
|
259
259
|
metadata: InformationMetadata = Field(alias="Metadata")
|
|
260
260
|
properties: SheetList[InformationProperty] = Field(alias="Properties")
|
|
261
261
|
classes: SheetList[InformationClass] = Field(alias="Classes")
|
|
262
|
-
prefixes: dict[str, Namespace] = Field(default_factory=lambda: PREFIXES.copy())
|
|
262
|
+
prefixes: dict[str, Namespace] = Field(default_factory=lambda: PREFIXES.copy(), alias="Prefixes")
|
|
263
263
|
last: "InformationRules | None" = Field(None, alias="Last")
|
|
264
264
|
reference: "InformationRules | None" = Field(None, alias="Reference")
|
|
265
265
|
|
|
@@ -267,6 +267,8 @@ class InformationRules(BaseRules):
|
|
|
267
267
|
def parse_str(cls, values: Any) -> Any:
|
|
268
268
|
if isinstance(values, dict):
|
|
269
269
|
return {key: Namespace(value) if isinstance(value, str) else value for key, value in values.items()}
|
|
270
|
+
elif values is None:
|
|
271
|
+
values = PREFIXES.copy()
|
|
270
272
|
return values
|
|
271
273
|
|
|
272
274
|
@model_validator(mode="after")
|