cognite-neat 0.83.0__tar.gz → 0.84.1__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.83.0 → cognite_neat-0.84.1}/PKG-INFO +1 -1
- cognite_neat-0.84.1/cognite/neat/_shared.py +35 -0
- cognite_neat-0.84.1/cognite/neat/_version.py +1 -0
- cognite_neat-0.84.1/cognite/neat/graph/loaders/_rdf2asset.py +123 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/loaders/_rdf2dms.py +2 -2
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/stores/_base.py +7 -3
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/exporters/_base.py +7 -2
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/exporters/_rules2dms.py +100 -92
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_base.py +3 -3
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/_rdfpath.py +41 -2
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/asset/_rules.py +5 -2
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/information/_converter.py +27 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/information/_rules.py +6 -1
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/cdf_loaders/_base.py +1 -9
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/cdf_loaders/_data_modeling.py +2 -1
- cognite_neat-0.84.1/cognite/neat/utils/upload.py +126 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/current/rules_exporter.py +5 -5
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/pyproject.toml +5 -5
- cognite_neat-0.83.0/cognite/neat/_version.py +0 -1
- cognite_neat-0.83.0/cognite/neat/utils/upload.py +0 -86
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/LICENSE +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/README.md +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/asgi/metrics.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/configuration.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/context_manager/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/context_manager/manager.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/data_classes/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/data_classes/rest.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/explorer.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/routers/configuration.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/routers/core.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/routers/crud.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/routers/data_exploration.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/routers/metrics.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/routers/rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/routers/workflows.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/utils/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/utils/data_mapping.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/utils/logging.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/api/utils/query_templates.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/main.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/monitoring/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/monitoring/metrics.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/index.html +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/.gitignore +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/README.md +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/asset-manifest.json +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/favicon.ico +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/img/architect-icon.svg +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/img/developer-icon.svg +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/img/sme-icon.svg +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/index.html +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/logo192.png +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/manifest.json +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/robots.txt +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css.map +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js.LICENSE.txt +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/static/js/main.ec7f72e2.js.map +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/app/ui/neat-app/build/static/media/logo.8093b84df9ed36a174c629d6fe0b730d.svg +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/config.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/constants.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/exceptions.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/_shared.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/_tracking/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/_tracking/base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/_tracking/log.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/examples/Knowledge-Graph-Nordic44.xml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/examples/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/exceptions.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_classic_cdf/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_classic_cdf/_assets.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_classic_cdf/_events.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_classic_cdf/_files.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_classic_cdf/_labels.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_classic_cdf/_relationships.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_classic_cdf/_sequences.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_classic_cdf/_timeseries.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_dexpi.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_mock_graph_generator.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/extractors/_rdf_file.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/issues/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/issues/loader.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/loaders/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/loaders/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/models.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/queries/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/queries/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/queries/_construct.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/queries/_shared.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/stores/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/stores/_oxrdflib.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/stores/_provenance.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/transformers/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/transformers/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/graph/transformers/_classic_cdf.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/issues.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/examples/Knowledge-Graph-Nordic44.xml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/examples/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/exceptions.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/extractors/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/extractors/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/extractors/_dexpi.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/extractors/_graph_capturing_sheet.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/extractors/_mock_graph_generator.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/_asset_loader.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/_exceptions.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/core/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/core/labels.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/core/models.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/core/rdf_to_assets.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/core/rdf_to_relationships.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/rdf_to_dms.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/loaders/validator.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/models.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/stores/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/stores/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/stores/_graphdb_store.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/stores/_memory_store.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/stores/_oxigraph_store.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/stores/_oxrdflib.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/stores/_rdf_to_graph.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/transformations/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/transformations/entity_matcher.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/transformations/query_generator/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/transformations/query_generator/sparql.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/graph/transformations/transformer.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/analysis.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/Rules-Nordic44-to-TNT.xlsx +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/Rules-Nordic44-to-graphql.xlsx +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/power-grid-containers.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/power-grid-example.xlsx +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/power-grid-model.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/rules-template.xlsx +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/sheet2cdf-transformation-rules.xlsx +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/skos-rules.xlsx +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/source-to-solution-mapping-rules.xlsx +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/examples/wind-energy.owl +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exceptions.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_core/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_core/rules2labels.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_rules2dms.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_rules2excel.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_rules2graphql.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_rules2ontology.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_rules2pydantic_models.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_rules2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_rules2triples.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/exporters/_validation.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_dict2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_dms2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_graph2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_json2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_owl2rules/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2classes.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2metadata.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2properties.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_owl2rules/_owl2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_spreadsheet2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_xsd2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/importers/_yaml2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/models/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/models/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/models/raw_rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/models/rdfpath.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/models/rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/models/tables.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/rules/models/value_types.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Export_DMS/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Export_Rules_to_Ontology/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Extract_DEXPI_Graph_and_Export_Rules/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Extract_RDF_Graph_and_Generate_Assets/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Import_DMS/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Ontology_to_Data_Model/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Validate_Rules/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Validate_Solution_Model/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Visualize_Data_Model_Using_Mock_Graph/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/legacy/workflows/examples/Visualize_Semantic_Data_Model/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/py.typed +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/_shared.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/analysis/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/analysis/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/analysis/_information_rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/examples/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/examples/wind-energy.owl +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/exceptions.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/exporters/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/exporters/_rules2excel.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/exporters/_rules2ontology.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/exporters/_rules2yaml.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/exporters/_validation.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_dms2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_dtdl2rules/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_dtdl2rules/_unit_lookup.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_dtdl2rules/dtdl_converter.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_dtdl2rules/dtdl_importer.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_dtdl2rules/spec.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_inference2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_owl2rules/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_owl2rules/_owl2classes.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_owl2rules/_owl2metadata.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_owl2rules/_owl2properties.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_owl2rules/_owl2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_spreadsheet2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/importers/_yaml2rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/issues/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/issues/base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/issues/dms.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/issues/fileread.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/issues/formatters.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/issues/importing.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/issues/spreadsheet.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/issues/spreadsheet_file.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/_constants.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/_types/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/_types/_base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/_types/_field.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/asset/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/asset/_converter.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/asset/_rules_input.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/asset/_serializer.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/asset/_validation.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/data_types.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/dms/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/dms/_converter.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/dms/_exporter.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/dms/_rules.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/dms/_rules_input.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/dms/_schema.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/dms/_serializer.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/dms/_validation.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/domain.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/entities.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/information/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/information/_rules_input.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/information/_serializer.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/information/_validation.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/rules/models/wrapped_entities.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/auxiliary.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/cdf.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/cdf_classes.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/cdf_loaders/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/cdf_loaders/_ingestion.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/cdf_loaders/data_classes.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/exceptions.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/spreadsheet.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/text.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/utils.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/utils/xml.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/_exceptions.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/base.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/cdf_store.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Export_DMS/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Export_Rules_to_Ontology/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Extract_DEXPI_Graph_and_Export_Rules/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Extract_RDF_Graph_and_Generate_Assets/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Import_DMS/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Ontology_to_Data_Model/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Validate_Rules/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Validate_Solution_Model/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Visualize_Data_Model_Using_Mock_Graph/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/examples/Visualize_Semantic_Data_Model/workflow.yaml +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/manager.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/migration/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/migration/steps.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/migration/wf_manifests.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/model.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/data_contracts.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/current/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/current/graph_extractor.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/current/graph_loader.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/current/graph_store.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/current/rules_importer.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/current/rules_validator.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/io/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/io/io_steps.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/legacy/__init__.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/legacy/graph_contextualization.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/legacy/graph_extractor.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/legacy/graph_loader.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/legacy/graph_store.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/legacy/graph_transformer.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/legacy/rules_exporter.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/lib/legacy/rules_importer.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps/step_model.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/steps_registry.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/tasks.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/triggers.py +0 -0
- {cognite_neat-0.83.0 → cognite_neat-0.84.1}/cognite/neat/workflows/utils.py +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
2
|
+
from collections.abc import Hashable, Sequence
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any, TypeVar
|
|
5
|
+
|
|
6
|
+
import pandas as pd
|
|
7
|
+
|
|
8
|
+
T_ID = TypeVar("T_ID", bound=Hashable)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class NeatObject:
|
|
13
|
+
"""A neat object can be dumped to a dictionary."""
|
|
14
|
+
|
|
15
|
+
@abstractmethod
|
|
16
|
+
def dump(self, aggregate: bool = True) -> dict[str, Any]:
|
|
17
|
+
"""Return a dictionary representation of the object."""
|
|
18
|
+
raise NotImplementedError()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
T_NeatObject = TypeVar("T_NeatObject", bound=NeatObject)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class NeatList(list, Sequence[T_NeatObject]):
|
|
25
|
+
"""A list of neat objects."""
|
|
26
|
+
|
|
27
|
+
def dump(self) -> list[dict[str, Any]]:
|
|
28
|
+
"""Return a list of dictionary representations of the objects."""
|
|
29
|
+
return [obj.dump() for obj in self]
|
|
30
|
+
|
|
31
|
+
def to_pandas(self) -> pd.DataFrame:
|
|
32
|
+
return pd.DataFrame(self.dump())
|
|
33
|
+
|
|
34
|
+
def _repr_html_(self) -> str:
|
|
35
|
+
return self.to_pandas()._repr_html_() # type: ignore[operator]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.84.1"
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
from collections.abc import Sequence
|
|
2
|
+
from dataclasses import dataclass, fields
|
|
3
|
+
|
|
4
|
+
from cognite.client import CogniteClient
|
|
5
|
+
from cognite.client.data_classes import AssetWrite
|
|
6
|
+
|
|
7
|
+
from cognite.neat.graph._tracking.base import Tracker
|
|
8
|
+
from cognite.neat.graph._tracking.log import LogTracker
|
|
9
|
+
from cognite.neat.graph.stores import NeatGraphStore
|
|
10
|
+
from cognite.neat.issues import NeatIssue, NeatIssueList
|
|
11
|
+
from cognite.neat.rules.models import AssetRules
|
|
12
|
+
|
|
13
|
+
from ._base import CDFLoader
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass(frozen=True)
|
|
17
|
+
class AssetLoaderMetadataKeys:
|
|
18
|
+
"""Class holding mapping between NEAT metadata key names and their desired names
|
|
19
|
+
in CDF Asset metadata
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
start_time: Start time key name
|
|
23
|
+
end_time: End time key name
|
|
24
|
+
update_time: Update time key name
|
|
25
|
+
resurrection_time: Resurrection time key name
|
|
26
|
+
identifier: Identifier key name
|
|
27
|
+
active: Active key name
|
|
28
|
+
type: Type key name
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
start_time: str = "start_time"
|
|
32
|
+
end_time: str = "end_time"
|
|
33
|
+
update_time: str = "update_time"
|
|
34
|
+
resurrection_time: str = "resurrection_time"
|
|
35
|
+
identifier: str = "identifier"
|
|
36
|
+
active: str = "active"
|
|
37
|
+
type: str = "type"
|
|
38
|
+
|
|
39
|
+
def as_aliases(self) -> dict[str, str]:
|
|
40
|
+
return {str(field.default): getattr(self, field.name) for field in fields(self)}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class AssetLoader(CDFLoader[AssetWrite]):
|
|
44
|
+
def __init__(
|
|
45
|
+
self,
|
|
46
|
+
rules: AssetRules,
|
|
47
|
+
graph_store: NeatGraphStore,
|
|
48
|
+
data_set_id: int,
|
|
49
|
+
use_orphanage: bool = False,
|
|
50
|
+
use_labels: bool = False,
|
|
51
|
+
asset_external_id_prefix: str | None = None,
|
|
52
|
+
metadata_keys: AssetLoaderMetadataKeys | None = None,
|
|
53
|
+
create_issues: Sequence[NeatIssue] | None = None,
|
|
54
|
+
tracker: type[Tracker] | None = None,
|
|
55
|
+
):
|
|
56
|
+
super().__init__(graph_store)
|
|
57
|
+
|
|
58
|
+
self.rules = rules
|
|
59
|
+
self.data_set_id = data_set_id
|
|
60
|
+
self.use_labels = use_labels
|
|
61
|
+
self.use_orphanage = use_orphanage
|
|
62
|
+
|
|
63
|
+
self.orphanage_external_id = (
|
|
64
|
+
f"{asset_external_id_prefix or ''}orphanage-{data_set_id}" if use_orphanage else None
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
self.asset_external_id_prefix = asset_external_id_prefix
|
|
68
|
+
self.metadata_keys = metadata_keys or AssetLoaderMetadataKeys()
|
|
69
|
+
|
|
70
|
+
self._issues = NeatIssueList[NeatIssue](create_issues or [])
|
|
71
|
+
self._tracker: type[Tracker] = tracker or LogTracker
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def from_rules(
|
|
75
|
+
cls,
|
|
76
|
+
rules: AssetRules,
|
|
77
|
+
graph_store: NeatGraphStore,
|
|
78
|
+
data_set_id: int,
|
|
79
|
+
use_orphanage: bool = False,
|
|
80
|
+
use_labels: bool = False,
|
|
81
|
+
asset_external_id_prefix: str | None = None,
|
|
82
|
+
metadata_keys: AssetLoaderMetadataKeys | None = None,
|
|
83
|
+
) -> "AssetLoader":
|
|
84
|
+
issues: list[NeatIssue] = []
|
|
85
|
+
|
|
86
|
+
return cls(
|
|
87
|
+
rules, graph_store, data_set_id, use_orphanage, use_labels, asset_external_id_prefix, metadata_keys, issues
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
def _create_validation_classes(self) -> None:
|
|
91
|
+
# need to get back class-property pairs where are definition of
|
|
92
|
+
# asset implementations, extend InformationRulesAnalysis make it generic
|
|
93
|
+
|
|
94
|
+
# by default if there is not explicitly stated external_id
|
|
95
|
+
# use rdf:type and drop the prefix
|
|
96
|
+
|
|
97
|
+
# based on those create pydantic model AssetDefinition
|
|
98
|
+
# which will have .to_asset_write()
|
|
99
|
+
|
|
100
|
+
raise NotImplementedError("Not implemented yet, this is placeholder")
|
|
101
|
+
|
|
102
|
+
def categorize_assets(self, client: CogniteClient) -> None:
|
|
103
|
+
"""Categorize assets to those to be created, updated, decommissioned, or resurrected"""
|
|
104
|
+
|
|
105
|
+
raise NotImplementedError("Not implemented yet, this is placeholder")
|
|
106
|
+
|
|
107
|
+
def load_to_cdf(self, client: CogniteClient, dry_run: bool = False) -> Sequence[AssetWrite]:
|
|
108
|
+
# generate assets
|
|
109
|
+
# check for circular asset hierarchy
|
|
110
|
+
# check for orphaned assets
|
|
111
|
+
# batch upsert of assets to CDF (otherwise we will hit the API rate limit)
|
|
112
|
+
|
|
113
|
+
raise NotImplementedError("Not implemented yet, this is placeholder")
|
|
114
|
+
|
|
115
|
+
@classmethod
|
|
116
|
+
def _check_for_circular_asset_hierarchy(cls, assets: list[AssetWrite]) -> None:
|
|
117
|
+
"""Check for circular references in the asset rules"""
|
|
118
|
+
raise NotImplementedError("Not implemented yet, this is placeholder")
|
|
119
|
+
|
|
120
|
+
@classmethod
|
|
121
|
+
def _check_for_orphaned_assets(cls, assets: list[AssetWrite]) -> None:
|
|
122
|
+
"""Check for circular references in the asset rules"""
|
|
123
|
+
raise NotImplementedError("Not implemented yet, this is placeholder")
|
|
@@ -34,14 +34,14 @@ class DMSLoader(CDFLoader[dm.InstanceApply]):
|
|
|
34
34
|
data_model: dm.DataModel[dm.View] | None,
|
|
35
35
|
instance_space: str,
|
|
36
36
|
class_by_view_id: dict[ViewId, str] | None = None,
|
|
37
|
-
|
|
37
|
+
create_issues: Sequence[NeatIssue] | None = None,
|
|
38
38
|
tracker: type[Tracker] | None = None,
|
|
39
39
|
):
|
|
40
40
|
super().__init__(graph_store)
|
|
41
41
|
self.data_model = data_model
|
|
42
42
|
self.instance_space = instance_space
|
|
43
43
|
self.class_by_view_id = class_by_view_id or {}
|
|
44
|
-
self._issues = NeatIssueList[NeatIssue](
|
|
44
|
+
self._issues = NeatIssueList[NeatIssue](create_issues or [])
|
|
45
45
|
self._tracker: type[Tracker] = tracker or LogTracker
|
|
46
46
|
|
|
47
47
|
@classmethod
|
|
@@ -14,8 +14,8 @@ from cognite.neat.graph.extractors import RdfFileExtractor, TripleExtractors
|
|
|
14
14
|
from cognite.neat.graph.models import Triple
|
|
15
15
|
from cognite.neat.graph.queries import Queries
|
|
16
16
|
from cognite.neat.graph.transformers import Transformers
|
|
17
|
+
from cognite.neat.rules.models import InformationRules
|
|
17
18
|
from cognite.neat.rules.models.entities import ClassEntity
|
|
18
|
-
from cognite.neat.rules.models.information import InformationRules
|
|
19
19
|
from cognite.neat.utils.auxiliary import local_import
|
|
20
20
|
|
|
21
21
|
from ._provenance import Change, Provenance
|
|
@@ -66,7 +66,8 @@ class NeatGraphStore:
|
|
|
66
66
|
|
|
67
67
|
def add_rules(self, rules: InformationRules) -> None:
|
|
68
68
|
"""This method is used to add rules to the graph store and it is the only correct
|
|
69
|
-
way to add rules to the graph store, after the graph store has been initialized.
|
|
69
|
+
way to add rules to the graph store, after the graph store has been initialized.
|
|
70
|
+
"""
|
|
70
71
|
|
|
71
72
|
self.rules = rules
|
|
72
73
|
self.base_namespace = self.rules.metadata.namespace
|
|
@@ -169,7 +170,10 @@ class NeatGraphStore:
|
|
|
169
170
|
# not yet developed
|
|
170
171
|
|
|
171
172
|
if not self.rules:
|
|
172
|
-
warnings.warn(
|
|
173
|
+
warnings.warn(
|
|
174
|
+
"No rules found for the graph store, returning empty list.",
|
|
175
|
+
stacklevel=2,
|
|
176
|
+
)
|
|
173
177
|
return []
|
|
174
178
|
|
|
175
179
|
class_entity = ClassEntity(prefix=self.rules.metadata.prefix, suffix=class_)
|
|
@@ -7,7 +7,7 @@ from cognite.client import CogniteClient
|
|
|
7
7
|
|
|
8
8
|
from cognite.neat.rules._shared import Rules
|
|
9
9
|
from cognite.neat.rules.models import DMSRules, InformationRules, RoleTypes
|
|
10
|
-
from cognite.neat.utils.upload import
|
|
10
|
+
from cognite.neat.utils.upload import UploadResult, UploadResultList
|
|
11
11
|
|
|
12
12
|
T_Export = TypeVar("T_Export")
|
|
13
13
|
|
|
@@ -37,5 +37,10 @@ class BaseExporter(ABC, Generic[T_Export]):
|
|
|
37
37
|
|
|
38
38
|
class CDFExporter(BaseExporter[T_Export]):
|
|
39
39
|
@abstractmethod
|
|
40
|
-
def
|
|
40
|
+
def export_to_cdf_iterable(
|
|
41
|
+
self, rules: Rules, client: CogniteClient, dry_run: bool = False
|
|
42
|
+
) -> Iterable[UploadResult]:
|
|
41
43
|
raise NotImplementedError
|
|
44
|
+
|
|
45
|
+
def export_to_cdf(self, rules: Rules, client: CogniteClient, dry_run: bool = False) -> UploadResultList:
|
|
46
|
+
return UploadResultList(self.export_to_cdf_iterable(rules, client, dry_run))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import warnings
|
|
2
|
-
from collections.abc import Collection, Iterable
|
|
2
|
+
from collections.abc import Collection, Hashable, Iterable, Sequence
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Literal, TypeAlias, cast
|
|
5
5
|
|
|
@@ -31,7 +31,7 @@ from cognite.neat.utils.cdf_loaders import (
|
|
|
31
31
|
TransformationLoader,
|
|
32
32
|
ViewLoader,
|
|
33
33
|
)
|
|
34
|
-
from cognite.neat.utils.upload import
|
|
34
|
+
from cognite.neat.utils.upload import UploadResult
|
|
35
35
|
|
|
36
36
|
from ._base import CDFExporter
|
|
37
37
|
|
|
@@ -123,109 +123,84 @@ class DMSExporter(CDFExporter[DMSSchema]):
|
|
|
123
123
|
raise ValueError(f"{type(rules).__name__} cannot be exported to DMS")
|
|
124
124
|
return dms_rules.as_schema(include_pipeline=self.export_pipeline, instance_space=self.instance_space)
|
|
125
125
|
|
|
126
|
-
def delete_from_cdf(self, rules: Rules, client: CogniteClient, dry_run: bool = False) -> Iterable[
|
|
127
|
-
|
|
126
|
+
def delete_from_cdf(self, rules: Rules, client: CogniteClient, dry_run: bool = False) -> Iterable[UploadResult]:
|
|
127
|
+
to_export = self._prepare_exporters(rules, client)
|
|
128
128
|
|
|
129
129
|
# we need to reverse order in which we are picking up the items to delete
|
|
130
130
|
# as they are sorted in the order of creation and we need to delete them in reverse order
|
|
131
|
-
for
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
to_delete = []
|
|
138
|
-
|
|
139
|
-
for item in items:
|
|
131
|
+
for items, loader in reversed(to_export):
|
|
132
|
+
item_ids = loader.get_ids(items)
|
|
133
|
+
existing_items = loader.retrieve(item_ids)
|
|
134
|
+
existing_ids = loader.get_ids(existing_items)
|
|
135
|
+
to_delete: list[Hashable] = []
|
|
136
|
+
for item_id in item_ids:
|
|
140
137
|
if (
|
|
141
138
|
isinstance(loader, DataModelingLoader)
|
|
142
139
|
and self.include_space is not None
|
|
143
|
-
and not loader.in_space(
|
|
140
|
+
and not loader.in_space(item_id, self.include_space)
|
|
144
141
|
):
|
|
145
142
|
continue
|
|
146
143
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
to_delete.append(cdf_item)
|
|
150
|
-
|
|
151
|
-
deleted = len(to_delete)
|
|
152
|
-
failed_deleted = 0
|
|
144
|
+
if item_id in existing_ids:
|
|
145
|
+
to_delete.append(item_id)
|
|
153
146
|
|
|
147
|
+
deleted: set[Hashable] = set()
|
|
148
|
+
failed_deleted: set[Hashable] = set()
|
|
154
149
|
error_messages: list[str] = []
|
|
155
|
-
if
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
150
|
+
if dry_run:
|
|
151
|
+
deleted.update(to_delete)
|
|
152
|
+
elif to_delete:
|
|
153
|
+
try:
|
|
154
|
+
loader.delete(to_delete)
|
|
155
|
+
except CogniteAPIError as e:
|
|
156
|
+
failed_deleted.update(loader.get_id(item) for item in e.failed + e.unknown)
|
|
157
|
+
deleted.update(loader.get_id(item) for item in e.successful)
|
|
158
|
+
error_messages.append(f"Failed delete: {e.message}")
|
|
159
|
+
else:
|
|
160
|
+
deleted.update(to_delete)
|
|
163
161
|
|
|
164
|
-
yield
|
|
162
|
+
yield UploadResult(
|
|
165
163
|
name=loader.resource_name,
|
|
166
164
|
deleted=deleted,
|
|
167
|
-
skipped=0,
|
|
168
165
|
failed_deleted=failed_deleted,
|
|
169
166
|
error_messages=error_messages,
|
|
170
167
|
)
|
|
171
168
|
|
|
172
|
-
def
|
|
173
|
-
|
|
169
|
+
def export_to_cdf_iterable(
|
|
170
|
+
self, rules: Rules, client: CogniteClient, dry_run: bool = False
|
|
171
|
+
) -> Iterable[UploadResult]:
|
|
172
|
+
to_export = self._prepare_exporters(rules, client)
|
|
174
173
|
|
|
175
|
-
# The conversion from DMS to GraphQL does not seem to be triggered even if the views
|
|
176
|
-
# are changed. This is a workaround to force the conversion.
|
|
177
174
|
redeploy_data_model = False
|
|
175
|
+
for items, loader in to_export:
|
|
176
|
+
# The conversion from DMS to GraphQL does not seem to be triggered even if the views
|
|
177
|
+
# are changed. This is a workaround to force the conversion.
|
|
178
|
+
is_redeploying = loader is DataModelingLoader and redeploy_data_model
|
|
178
179
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
item_ids = [item_id for item_id in all_item_ids]
|
|
183
|
-
cdf_items = loader.retrieve(item_ids)
|
|
184
|
-
cdf_item_by_id = {loader.get_id(item): item for item in cdf_items}
|
|
185
|
-
items = [item for item in all_items if loader.get_id(item) in item_ids]
|
|
186
|
-
to_create, to_update, unchanged, to_delete = [], [], [], []
|
|
187
|
-
is_redeploying = loader.resource_name == "data_models" and redeploy_data_model
|
|
188
|
-
for item in items:
|
|
189
|
-
if (
|
|
190
|
-
isinstance(loader, DataModelingLoader)
|
|
191
|
-
and self.include_space is not None
|
|
192
|
-
and not loader.in_space(item, self.include_space)
|
|
193
|
-
):
|
|
194
|
-
continue
|
|
195
|
-
|
|
196
|
-
cdf_item = cdf_item_by_id.get(loader.get_id(item))
|
|
197
|
-
if cdf_item is None:
|
|
198
|
-
to_create.append(item)
|
|
199
|
-
elif is_redeploying:
|
|
200
|
-
to_update.append(item)
|
|
201
|
-
to_delete.append(cdf_item)
|
|
202
|
-
elif loader.are_equal(item, cdf_item):
|
|
203
|
-
unchanged.append(item)
|
|
204
|
-
else:
|
|
205
|
-
to_update.append(item)
|
|
206
|
-
|
|
207
|
-
created = len(to_create)
|
|
208
|
-
failed_created = 0
|
|
209
|
-
skipped = 0
|
|
210
|
-
|
|
211
|
-
if self.existing_handling in ["update", "force"]:
|
|
212
|
-
changed = len(to_update)
|
|
213
|
-
failed_changed = 0
|
|
214
|
-
elif self.existing_handling == "skip":
|
|
215
|
-
changed = 0
|
|
216
|
-
failed_changed = 0
|
|
217
|
-
skipped += len(to_update)
|
|
218
|
-
elif self.existing_handling == "fail":
|
|
219
|
-
failed_changed = len(to_update)
|
|
220
|
-
changed = 0
|
|
221
|
-
else:
|
|
222
|
-
raise ValueError(f"Unsupported existing_handling {self.existing_handling}")
|
|
180
|
+
to_create, to_delete, to_update, unchanged = self._categorize_items_for_upload(
|
|
181
|
+
loader, items, is_redeploying
|
|
182
|
+
)
|
|
223
183
|
|
|
184
|
+
issue_list = IssueList()
|
|
224
185
|
warning_list = self._validate(loader, items)
|
|
225
186
|
issue_list.extend(warning_list)
|
|
226
187
|
|
|
188
|
+
created: set[Hashable] = set()
|
|
189
|
+
skipped: set[Hashable] = set()
|
|
190
|
+
changed: set[Hashable] = set()
|
|
191
|
+
failed_created: set[Hashable] = set()
|
|
192
|
+
failed_changed: set[Hashable] = set()
|
|
227
193
|
error_messages: list[str] = []
|
|
228
|
-
if
|
|
194
|
+
if dry_run:
|
|
195
|
+
if self.existing_handling in ["update", "force"]:
|
|
196
|
+
changed.update(loader.get_id(item) for item in to_update)
|
|
197
|
+
elif self.existing_handling == "skip":
|
|
198
|
+
skipped.update(loader.get_id(item) for item in to_update)
|
|
199
|
+
elif self.existing_handling == "fail":
|
|
200
|
+
failed_changed.update(loader.get_id(item) for item in to_update)
|
|
201
|
+
else:
|
|
202
|
+
raise ValueError(f"Unsupported existing_handling {self.existing_handling}")
|
|
203
|
+
else:
|
|
229
204
|
if to_delete:
|
|
230
205
|
try:
|
|
231
206
|
loader.delete(to_delete)
|
|
@@ -238,23 +213,31 @@ class DMSExporter(CDFExporter[DMSSchema]):
|
|
|
238
213
|
try:
|
|
239
214
|
loader.create(to_create)
|
|
240
215
|
except CogniteAPIError as e:
|
|
241
|
-
failed_created
|
|
242
|
-
created
|
|
216
|
+
failed_created.update(loader.get_id(item) for item in e.failed + e.unknown)
|
|
217
|
+
created.update(loader.get_id(item) for item in e.successful)
|
|
243
218
|
error_messages.append(e.message)
|
|
219
|
+
else:
|
|
220
|
+
created.update(loader.get_id(item) for item in to_create)
|
|
244
221
|
|
|
245
222
|
if self.existing_handling in ["update", "force"]:
|
|
246
223
|
try:
|
|
247
224
|
loader.update(to_update)
|
|
248
225
|
except CogniteAPIError as e:
|
|
249
|
-
failed_changed
|
|
250
|
-
changed
|
|
226
|
+
failed_changed.update(loader.get_id(item) for item in e.failed + e.unknown)
|
|
227
|
+
changed.update(loader.get_id(item) for item in e.successful)
|
|
251
228
|
error_messages.append(e.message)
|
|
252
|
-
|
|
253
|
-
|
|
229
|
+
else:
|
|
230
|
+
changed.update(loader.get_id(item) for item in to_update)
|
|
231
|
+
elif self.existing_handling == "skip":
|
|
232
|
+
skipped.update(loader.get_id(item) for item in to_update)
|
|
233
|
+
elif self.existing_handling == "fail":
|
|
234
|
+
failed_changed.update(loader.get_id(item) for item in to_update)
|
|
235
|
+
|
|
236
|
+
yield UploadResult(
|
|
254
237
|
name=loader.resource_name,
|
|
255
238
|
created=created,
|
|
256
239
|
changed=changed,
|
|
257
|
-
unchanged=
|
|
240
|
+
unchanged={loader.get_id(item) for item in unchanged},
|
|
258
241
|
skipped=skipped,
|
|
259
242
|
failed_created=failed_created,
|
|
260
243
|
failed_changed=failed_changed,
|
|
@@ -262,12 +245,37 @@ class DMSExporter(CDFExporter[DMSSchema]):
|
|
|
262
245
|
issues=issue_list,
|
|
263
246
|
)
|
|
264
247
|
|
|
265
|
-
if loader
|
|
248
|
+
if loader is ViewLoader and (created or changed):
|
|
266
249
|
redeploy_data_model = True
|
|
267
250
|
|
|
268
|
-
def
|
|
269
|
-
self,
|
|
270
|
-
) -> tuple[
|
|
251
|
+
def _categorize_items_for_upload(
|
|
252
|
+
self, loader: ResourceLoader, items: Sequence[CogniteResource], is_redeploying
|
|
253
|
+
) -> tuple[list[CogniteResource], list[CogniteResource], list[CogniteResource], list[CogniteResource]]:
|
|
254
|
+
item_ids = loader.get_ids(items)
|
|
255
|
+
cdf_items = loader.retrieve(item_ids)
|
|
256
|
+
cdf_item_by_id = {loader.get_id(item): item for item in cdf_items}
|
|
257
|
+
to_create, to_update, unchanged, to_delete = [], [], [], []
|
|
258
|
+
for item in items:
|
|
259
|
+
if (
|
|
260
|
+
isinstance(loader, DataModelingLoader)
|
|
261
|
+
and self.include_space is not None
|
|
262
|
+
and not loader.in_space(item, self.include_space)
|
|
263
|
+
):
|
|
264
|
+
continue
|
|
265
|
+
|
|
266
|
+
cdf_item = cdf_item_by_id.get(loader.get_id(item))
|
|
267
|
+
if cdf_item is None:
|
|
268
|
+
to_create.append(item)
|
|
269
|
+
elif is_redeploying:
|
|
270
|
+
to_update.append(item)
|
|
271
|
+
to_delete.append(cdf_item)
|
|
272
|
+
elif loader.are_equal(item, cdf_item):
|
|
273
|
+
unchanged.append(item)
|
|
274
|
+
else:
|
|
275
|
+
to_update.append(item)
|
|
276
|
+
return to_create, to_delete, to_update, unchanged
|
|
277
|
+
|
|
278
|
+
def _prepare_exporters(self, rules, client) -> list[tuple[CogniteResourceList, ResourceLoader]]:
|
|
271
279
|
schema = self.export(rules)
|
|
272
280
|
to_export: list[tuple[CogniteResourceList, ResourceLoader]] = []
|
|
273
281
|
if self.export_components.intersection({"all", "spaces"}):
|
|
@@ -282,9 +290,9 @@ class DMSExporter(CDFExporter[DMSSchema]):
|
|
|
282
290
|
to_export.append((schema.databases, RawDatabaseLoader(client)))
|
|
283
291
|
to_export.append((schema.raw_tables, RawTableLoader(client)))
|
|
284
292
|
to_export.append((schema.transformations, TransformationLoader(client)))
|
|
285
|
-
return
|
|
293
|
+
return to_export
|
|
286
294
|
|
|
287
|
-
def _validate(self, loader: ResourceLoader, items:
|
|
295
|
+
def _validate(self, loader: ResourceLoader, items: CogniteResourceList) -> IssueList:
|
|
288
296
|
issue_list = IssueList()
|
|
289
297
|
if isinstance(loader, DataModelLoader):
|
|
290
298
|
models = cast(list[DataModelApply], items)
|
|
@@ -11,7 +11,7 @@ from rdflib import Namespace
|
|
|
11
11
|
|
|
12
12
|
from cognite.neat.rules._shared import Rules
|
|
13
13
|
from cognite.neat.rules.issues.base import IssueList, NeatValidationError, ValidationWarning
|
|
14
|
-
from cognite.neat.rules.models import DMSRules, InformationRules, RoleTypes
|
|
14
|
+
from cognite.neat.rules.models import AssetRules, DMSRules, InformationRules, RoleTypes
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class BaseImporter(ABC):
|
|
@@ -48,9 +48,9 @@ class BaseImporter(ABC):
|
|
|
48
48
|
|
|
49
49
|
if rules.metadata.role is role or role is None:
|
|
50
50
|
output = rules
|
|
51
|
-
elif isinstance(rules, DMSRules) and role is RoleTypes.information_architect:
|
|
51
|
+
elif isinstance(rules, DMSRules) or isinstance(rules, AssetRules) and role is RoleTypes.information_architect:
|
|
52
52
|
output = rules.as_information_architect_rules()
|
|
53
|
-
elif isinstance(rules, InformationRules) and role is RoleTypes.dms_architect:
|
|
53
|
+
elif isinstance(rules, InformationRules) or isinstance(rules, AssetRules) and role is RoleTypes.dms_architect:
|
|
54
54
|
output = rules.as_dms_architect_rules()
|
|
55
55
|
else:
|
|
56
56
|
raise NotImplementedError(f"Role {role} is not supported for {type(rules).__name__} rules")
|
|
@@ -6,7 +6,7 @@ from collections import Counter
|
|
|
6
6
|
from functools import total_ordering
|
|
7
7
|
from typing import ClassVar, Literal
|
|
8
8
|
|
|
9
|
-
from pydantic import BaseModel, field_validator
|
|
9
|
+
from pydantic import BaseModel, field_validator, model_serializer
|
|
10
10
|
|
|
11
11
|
from cognite.neat.rules import exceptions
|
|
12
12
|
|
|
@@ -82,6 +82,7 @@ TABLE_REGEX_COMPILED = re.compile(
|
|
|
82
82
|
|
|
83
83
|
StepDirection = Literal["source", "target", "origin"]
|
|
84
84
|
_direction_by_symbol: dict[str, StepDirection] = {"->": "target", "<-": "source"}
|
|
85
|
+
_symbol_by_direction: dict[StepDirection, str] = {"source": "<-", "target": "->"}
|
|
85
86
|
|
|
86
87
|
Undefined = type(object())
|
|
87
88
|
Unknown = type(object())
|
|
@@ -196,10 +197,29 @@ class Step(BaseModel):
|
|
|
196
197
|
msg += " ->prefix:suffix, <-prefix:suffix, ->prefix:suffix(prefix:suffix) or <-prefix:suffix(prefix:suffix)"
|
|
197
198
|
raise ValueError(msg)
|
|
198
199
|
|
|
200
|
+
def __str__(self) -> str:
|
|
201
|
+
if self.property:
|
|
202
|
+
return f"{self.class_}({self.property})"
|
|
203
|
+
else:
|
|
204
|
+
return f"{_symbol_by_direction[self.direction]}{self.class_}"
|
|
205
|
+
|
|
206
|
+
def __repr__(self) -> str:
|
|
207
|
+
return self.__str__()
|
|
208
|
+
|
|
199
209
|
|
|
200
210
|
class Traversal(BaseModel):
|
|
201
211
|
class_: Entity
|
|
202
212
|
|
|
213
|
+
def __str__(self) -> str:
|
|
214
|
+
return f"{self.class_}"
|
|
215
|
+
|
|
216
|
+
def __repr__(self) -> str:
|
|
217
|
+
return self.__str__()
|
|
218
|
+
|
|
219
|
+
@model_serializer(when_used="unless-none", return_type=str)
|
|
220
|
+
def as_str(self) -> str:
|
|
221
|
+
return str(self)
|
|
222
|
+
|
|
203
223
|
|
|
204
224
|
class SingleProperty(Traversal):
|
|
205
225
|
property: Entity
|
|
@@ -208,6 +228,9 @@ class SingleProperty(Traversal):
|
|
|
208
228
|
def from_string(cls, class_: str, property_: str) -> Self:
|
|
209
229
|
return cls(class_=Entity.from_string(class_), property=Entity.from_string(property_))
|
|
210
230
|
|
|
231
|
+
def __str__(self) -> str:
|
|
232
|
+
return f"{self.class_}({self.property})"
|
|
233
|
+
|
|
211
234
|
|
|
212
235
|
class AllReferences(Traversal):
|
|
213
236
|
@classmethod
|
|
@@ -220,6 +243,9 @@ class AllProperties(Traversal):
|
|
|
220
243
|
def from_string(cls, class_: str) -> Self:
|
|
221
244
|
return cls(class_=Entity.from_string(class_))
|
|
222
245
|
|
|
246
|
+
def __str__(self) -> str:
|
|
247
|
+
return f"{self.class_}(*)"
|
|
248
|
+
|
|
223
249
|
|
|
224
250
|
class Origin(BaseModel):
|
|
225
251
|
class_: Entity
|
|
@@ -245,6 +271,9 @@ class Hop(Traversal):
|
|
|
245
271
|
),
|
|
246
272
|
)
|
|
247
273
|
|
|
274
|
+
def __str__(self) -> str:
|
|
275
|
+
return f"{self.class_}{''.join([str(step) for step in self.traversal])}"
|
|
276
|
+
|
|
248
277
|
|
|
249
278
|
class TableLookup(BaseModel):
|
|
250
279
|
name: str
|
|
@@ -261,7 +290,17 @@ class Query(BaseModel):
|
|
|
261
290
|
|
|
262
291
|
|
|
263
292
|
class RDFPath(Rule):
|
|
264
|
-
traversal:
|
|
293
|
+
traversal: SingleProperty | AllProperties | AllReferences | Hop
|
|
294
|
+
|
|
295
|
+
def __str__(self) -> str:
|
|
296
|
+
return f"{self.traversal}"
|
|
297
|
+
|
|
298
|
+
def __repr__(self) -> str:
|
|
299
|
+
return self.__str__()
|
|
300
|
+
|
|
301
|
+
@model_serializer(when_used="unless-none", return_type=str)
|
|
302
|
+
def as_str(self) -> str:
|
|
303
|
+
return str(self)
|
|
265
304
|
|
|
266
305
|
|
|
267
306
|
class RawLookup(RDFPath):
|
|
@@ -148,9 +148,12 @@ class AssetRules(BaseRules):
|
|
|
148
148
|
def as_domain_rules(self) -> DomainRules:
|
|
149
149
|
from ._converter import _AssetRulesConverter
|
|
150
150
|
|
|
151
|
-
return _AssetRulesConverter(
|
|
151
|
+
return _AssetRulesConverter(self.as_information_architect_rules()).as_domain_rules()
|
|
152
152
|
|
|
153
153
|
def as_dms_architect_rules(self) -> "DMSRules":
|
|
154
154
|
from ._converter import _AssetRulesConverter
|
|
155
155
|
|
|
156
|
-
return _AssetRulesConverter(
|
|
156
|
+
return _AssetRulesConverter(self.as_information_architect_rules()).as_dms_architect_rules()
|
|
157
|
+
|
|
158
|
+
def as_information_architect_rules(self) -> InformationRules:
|
|
159
|
+
return InformationRules.model_validate(self.model_dump())
|