cognite-neat 0.71.0__py3-none-any.whl → 0.72.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cognite-neat might be problematic. Click here for more details.
- cognite/neat/_version.py +1 -1
- cognite/neat/app/api/explorer.py +1 -1
- cognite/neat/app/api/routers/workflows.py +20 -0
- cognite/neat/app/ui/neat-app/build/asset-manifest.json +3 -3
- cognite/neat/app/ui/neat-app/build/index.html +1 -1
- cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css.map +1 -1
- cognite/neat/app/ui/neat-app/build/static/js/{main.ed960141.js → main.2efd96b2.js} +3 -3
- cognite/neat/app/ui/neat-app/build/static/js/{main.ed960141.js.map → main.2efd96b2.js.map} +1 -1
- cognite/neat/graph/stores/_oxigraph_store.py +8 -6
- cognite/neat/rules/importers/_owl2rules/_owl2rules.py +2 -1
- cognite/neat/rules/models/_rules/_types/_value.py +3 -0
- cognite/neat/rules/models/_rules/information_rules.py +1 -0
- cognite/neat/workflows/base.py +16 -0
- cognite/neat/workflows/manager.py +42 -69
- cognite/neat/workflows/model.py +1 -0
- cognite/neat/workflows/steps/lib/graph_store.py +7 -2
- cognite/neat/workflows/steps/lib/v1/graph_store.py +7 -2
- {cognite_neat-0.71.0.dist-info → cognite_neat-0.72.1.dist-info}/METADATA +1 -1
- {cognite_neat-0.71.0.dist-info → cognite_neat-0.72.1.dist-info}/RECORD +23 -23
- /cognite/neat/app/ui/neat-app/build/static/js/{main.ed960141.js.LICENSE.txt → main.2efd96b2.js.LICENSE.txt} +0 -0
- {cognite_neat-0.71.0.dist-info → cognite_neat-0.72.1.dist-info}/LICENSE +0 -0
- {cognite_neat-0.71.0.dist-info → cognite_neat-0.72.1.dist-info}/WHEEL +0 -0
- {cognite_neat-0.71.0.dist-info → cognite_neat-0.72.1.dist-info}/entry_points.txt +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
3
|
import shutil
|
|
4
|
-
import time
|
|
5
4
|
from pathlib import Path
|
|
6
5
|
|
|
7
6
|
from rdflib import Graph, Namespace
|
|
@@ -63,7 +62,7 @@ class OxiGraphStore(NeatGraphStoreBase):
|
|
|
63
62
|
|
|
64
63
|
def close(self):
|
|
65
64
|
"""Closes the graph."""
|
|
66
|
-
if self.graph:
|
|
65
|
+
if self.graph is not None:
|
|
67
66
|
try:
|
|
68
67
|
self.graph.store._inner.flush() # type: ignore[attr-defined]
|
|
69
68
|
self.graph.close(True)
|
|
@@ -102,7 +101,7 @@ class OxiGraphStore(NeatGraphStoreBase):
|
|
|
102
101
|
# after closing the graph and creating a new one
|
|
103
102
|
if self.internal_storage_dir.exists():
|
|
104
103
|
self.storage_dirs_to_delete.append(self.internal_storage_dir)
|
|
105
|
-
self.
|
|
104
|
+
self.garbage_collector()
|
|
106
105
|
|
|
107
106
|
except Exception as e:
|
|
108
107
|
logging.error(f"Error dropping graph : {e}")
|
|
@@ -115,9 +114,12 @@ class OxiGraphStore(NeatGraphStoreBase):
|
|
|
115
114
|
self.storage_dirs_to_delete = []
|
|
116
115
|
|
|
117
116
|
def __del__(self):
|
|
118
|
-
if self.graph:
|
|
119
|
-
if self.graph.store:
|
|
120
|
-
|
|
117
|
+
if self.graph is not None:
|
|
118
|
+
if self.graph.store is not None:
|
|
119
|
+
try:
|
|
120
|
+
self.graph.store._inner.flush()
|
|
121
|
+
except Exception:
|
|
122
|
+
logging.debug("Error flushing graph")
|
|
121
123
|
self.graph.close()
|
|
122
124
|
# It requires more investigation os.remove(self.internal_storage_dir / "LOCK")
|
|
123
125
|
|
|
@@ -11,7 +11,7 @@ from rdflib import DC, DCTERMS, OWL, RDF, RDFS, SKOS, Graph
|
|
|
11
11
|
from cognite.neat.rules.importers._base import BaseImporter, Rules
|
|
12
12
|
from cognite.neat.rules.issues import IssueList
|
|
13
13
|
from cognite.neat.rules.models._rules import InformationRules, RoleTypes
|
|
14
|
-
from cognite.neat.rules.models.
|
|
14
|
+
from cognite.neat.rules.models._rules._types import XSD_VALUE_TYPE_MAPPINGS
|
|
15
15
|
|
|
16
16
|
from ._owl2classes import parse_owl_classes
|
|
17
17
|
from ._owl2metadata import parse_owl_metadata
|
|
@@ -136,6 +136,7 @@ def _add_missing_value_types(components: dict) -> dict:
|
|
|
136
136
|
|
|
137
137
|
# to avoid issue of case sensitivity for xsd types
|
|
138
138
|
value_types_lower = {v.lower() for v in candidate_value_types}
|
|
139
|
+
|
|
139
140
|
xsd_types_lower = {x.lower() for x in xsd_types}
|
|
140
141
|
|
|
141
142
|
# Create a mapping from lowercase strings to original strings
|
|
@@ -90,6 +90,9 @@ _DATA_TYPES: list[dict] = [
|
|
|
90
90
|
{"name": "dateTime", "python": datetime, "GraphQL": "Timestamp", "dms": Timestamp, "SQL": "TIMESTAMP"},
|
|
91
91
|
{"name": "dateTimeStamp", "python": datetime, "GraphQL": "Timestamp", "dms": Timestamp, "SQL": "TIMESTAMP"},
|
|
92
92
|
{"name": "date", "python": date, "GraphQL": "String", "dms": Date, "SQL": "DATE"},
|
|
93
|
+
# Some RDF types which are not in XSD
|
|
94
|
+
{"name": "PlainLiteral", "python": str, "GraphQL": "String", "dms": Text, "SQL": "STRING"},
|
|
95
|
+
{"name": "Literal", "python": str, "GraphQL": "String", "dms": Text, "SQL": "STRING"},
|
|
93
96
|
# CDF specific types, not in XSD
|
|
94
97
|
{
|
|
95
98
|
"name": "timeseries",
|
|
@@ -392,6 +392,7 @@ class _InformationRulesConverter:
|
|
|
392
392
|
class_=cls_.class_,
|
|
393
393
|
view=ViewPropEntity(prefix=cls_.class_.prefix, suffix=cls_.class_.suffix, version=cls_.class_.version),
|
|
394
394
|
description=cls_.description,
|
|
395
|
+
reference=cls_.reference,
|
|
395
396
|
implements=self._get_view_implements(cls_, info_metadata),
|
|
396
397
|
)
|
|
397
398
|
for cls_ in self.information.classes
|
cognite/neat/workflows/base.py
CHANGED
|
@@ -78,6 +78,7 @@ class BaseWorkflow:
|
|
|
78
78
|
self.metrics = NeatMetricsCollector(self.name, self.cdf_client)
|
|
79
79
|
self.resume_event = Event()
|
|
80
80
|
self.is_ephemeral = False # if True, workflow will be deleted after completion
|
|
81
|
+
self.auto_workflow_cleanup = False
|
|
81
82
|
self.step_classes = None
|
|
82
83
|
self.data: dict[str, DataContract | FlowMessage | CdfStore | CogniteClient | None] = {}
|
|
83
84
|
self.steps_registry: StepsRegistry = steps_registry or StepsRegistry()
|
|
@@ -134,8 +135,23 @@ class BaseWorkflow:
|
|
|
134
135
|
timing_metrics.labels(wf_name=self.name, component="workflow", name="workflow").set(self.elapsed_time)
|
|
135
136
|
logging.info(f"Workflow completed in {self.elapsed_time} seconds")
|
|
136
137
|
self.report_workflow_execution()
|
|
138
|
+
if self.auto_workflow_cleanup:
|
|
139
|
+
self.cleanup_workflow_context()
|
|
137
140
|
return self.flow_message
|
|
138
141
|
|
|
142
|
+
def cleanup_workflow_context(self):
|
|
143
|
+
"""
|
|
144
|
+
Cleans up the workflow context by closing and deleting graph stores and other structure.
|
|
145
|
+
It's a for of garbage collection to avoid memory leaks or other issues related to open handlers
|
|
146
|
+
or allocated resources
|
|
147
|
+
|
|
148
|
+
"""
|
|
149
|
+
if "SolutionGraph" in self.data:
|
|
150
|
+
self.data["SolutionGraph"].graph.close()
|
|
151
|
+
if "SourceGraph" in self.data:
|
|
152
|
+
self.data["SourceGraph"].graph.close()
|
|
153
|
+
self.data.clear()
|
|
154
|
+
|
|
139
155
|
def get_transition_step(self, transitions: list[str] | None) -> list[WorkflowStepDefinition]:
|
|
140
156
|
return [stp for stp in self.workflow_steps if stp.id in transitions and stp.enabled] if transitions else []
|
|
141
157
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import importlib
|
|
2
|
-
import inspect
|
|
3
1
|
import logging
|
|
4
2
|
import os
|
|
5
3
|
import shutil
|
|
@@ -88,10 +86,12 @@ class WorkflowManager:
|
|
|
88
86
|
return workflow
|
|
89
87
|
|
|
90
88
|
def delete_workflow(self, name: str):
|
|
89
|
+
workflow = self.get_workflow(name)
|
|
90
|
+
if workflow is not None:
|
|
91
|
+
workflow.cleanup_workflow_context()
|
|
91
92
|
del self.workflow_registry[name]
|
|
92
93
|
full_path = self.workflows_storage_path / name
|
|
93
94
|
shutil.rmtree(full_path)
|
|
94
|
-
# TODO: check if more garbage collection is needed here.
|
|
95
95
|
|
|
96
96
|
def update_workflow(self, name: str, workflow: WorkflowDefinition):
|
|
97
97
|
self.workflow_registry[name].workflow_steps = workflow.steps
|
|
@@ -117,81 +117,54 @@ class WorkflowManager:
|
|
|
117
117
|
self.save_workflow_to_storage(name)
|
|
118
118
|
return workflow_definition
|
|
119
119
|
|
|
120
|
-
def
|
|
120
|
+
def load_single_workflow_from_storage(self, workflow_name: str):
|
|
121
|
+
"""Load single workflow from storage into memory"""
|
|
122
|
+
|
|
123
|
+
# check if workflow is already loaded. If so, perform context cleanup first
|
|
124
|
+
if workflow_name in self.workflow_registry:
|
|
125
|
+
self.workflow_registry[workflow_name].cleanup_workflow_context()
|
|
126
|
+
del self.workflow_registry[workflow_name]
|
|
127
|
+
|
|
128
|
+
workflow_path = self.workflows_storage_path / workflow_name
|
|
129
|
+
# THIS IS WHERE WE LOAD THE WORKFLOW MODULES
|
|
130
|
+
if workflow_path.is_dir():
|
|
131
|
+
logging.info(f"Loading workflow {workflow_name} from {workflow_path}")
|
|
132
|
+
try:
|
|
133
|
+
if (workflow_definition_path := workflow_path / "workflow.yaml").exists():
|
|
134
|
+
with workflow_definition_path.open() as workflow_definition_file:
|
|
135
|
+
workflow_definition: WorkflowDefinition = BaseWorkflow.deserialize_definition(
|
|
136
|
+
workflow_definition_file.read(), output_format="yaml"
|
|
137
|
+
)
|
|
138
|
+
else:
|
|
139
|
+
logging.info(f"Definition file {workflow_definition_path} not found, skipping")
|
|
140
|
+
return
|
|
141
|
+
|
|
142
|
+
# This is convinience feature when user wants to share self contained workflow
|
|
143
|
+
# folder as single zip file.
|
|
144
|
+
if (workflow_path / "rules").exists():
|
|
145
|
+
logging.info(f"Copying rules from {workflow_path / 'rules'} to {self.rules_storage_path} ")
|
|
146
|
+
for rule_file in os.listdir(workflow_path / "rules"):
|
|
147
|
+
shutil.copy(workflow_path / "rules" / rule_file, self.rules_storage_path)
|
|
148
|
+
|
|
149
|
+
self.steps_registry.load_custom_step_classes(workflow_path, workflow_name)
|
|
150
|
+
self.register_workflow(BaseWorkflow, workflow_name, workflow_definition)
|
|
151
|
+
|
|
152
|
+
except Exception as e:
|
|
153
|
+
trace = traceback.format_exc()
|
|
154
|
+
logging.error(f"Error loading workflow {workflow_name}: error: {e} trace : {trace}")
|
|
155
|
+
|
|
156
|
+
def load_workflows_from_storage(self):
|
|
121
157
|
"""Loads workflows from disk/storage into memory, initializes and register them in the workflow registry"""
|
|
122
158
|
|
|
123
159
|
# set workflow storage path
|
|
124
|
-
workflows_storage_path =
|
|
160
|
+
workflows_storage_path = self.workflows_storage_path
|
|
125
161
|
|
|
126
162
|
# set system path to be used when importing individual workflows as python modules
|
|
127
163
|
# via importlib.import_module(...)
|
|
128
164
|
sys.path.append(str(workflows_storage_path))
|
|
129
165
|
|
|
130
166
|
for workflow_name in os.listdir(workflows_storage_path):
|
|
131
|
-
|
|
132
|
-
# THIS IS WHERE WE LOAD THE WORKFLOW MODULES
|
|
133
|
-
if workflow_path.is_dir():
|
|
134
|
-
logging.info(f"Loading workflow {workflow_name} from {workflow_path}")
|
|
135
|
-
try:
|
|
136
|
-
if (workflow_definition_path := workflow_path / "workflow.yaml").exists():
|
|
137
|
-
with workflow_definition_path.open() as workflow_definition_file:
|
|
138
|
-
workflow_definition: WorkflowDefinition = BaseWorkflow.deserialize_definition(
|
|
139
|
-
workflow_definition_file.read(), output_format="yaml"
|
|
140
|
-
)
|
|
141
|
-
else:
|
|
142
|
-
logging.info(f"Definition file {workflow_definition_path} not found, skipping")
|
|
143
|
-
continue
|
|
144
|
-
|
|
145
|
-
# This is convinience feature when user wants to share self contained workflow
|
|
146
|
-
# folder as single zip file.
|
|
147
|
-
if (workflow_path / "rules").exists():
|
|
148
|
-
logging.info(f"Copying rules from {workflow_path / 'rules'} to {self.rules_storage_path} ")
|
|
149
|
-
for rule_file in os.listdir(workflow_path / "rules"):
|
|
150
|
-
shutil.copy(workflow_path / "rules" / rule_file, self.rules_storage_path)
|
|
151
|
-
|
|
152
|
-
# Comment: All our workflows implementation_module is None
|
|
153
|
-
# what is this meant for ?, just to have different name?
|
|
154
|
-
if workflow_definition.implementation_module:
|
|
155
|
-
workflow_name = workflow_definition.implementation_module
|
|
156
|
-
logging.info(f"Loading CUSTOM workflow module {workflow_name}")
|
|
157
|
-
else:
|
|
158
|
-
logging.info(f"Loading workflow module {workflow_name}")
|
|
159
|
-
|
|
160
|
-
full_module_name = f"{workflow_name}.workflow"
|
|
161
|
-
load_user_defined_workflow = False
|
|
162
|
-
if full_module_name in sys.modules:
|
|
163
|
-
logging.info(f"Reloading existing workflow module {workflow_name}")
|
|
164
|
-
module = importlib.reload(sys.modules[full_module_name])
|
|
165
|
-
load_user_defined_workflow = True
|
|
166
|
-
else:
|
|
167
|
-
try:
|
|
168
|
-
module = importlib.import_module(full_module_name)
|
|
169
|
-
load_user_defined_workflow = True
|
|
170
|
-
logging.info(f"Workflow implementation class for {workflow_name} loaded successfully")
|
|
171
|
-
except ModuleNotFoundError:
|
|
172
|
-
pass
|
|
173
|
-
|
|
174
|
-
self.steps_registry.load_custom_step_classes(workflow_path, workflow_name)
|
|
175
|
-
# Dynamically load workflow classes which contain "NeatWorkflow" in their name
|
|
176
|
-
# from workflow.py module in the workflow directory and
|
|
177
|
-
# Instantiate them using the workflow definition loaded
|
|
178
|
-
# from workflow.yaml file
|
|
179
|
-
# WARNING: This will be deprecated in the future.
|
|
180
|
-
if load_user_defined_workflow:
|
|
181
|
-
for name, obj in inspect.getmembers(module):
|
|
182
|
-
if "NeatWorkflow" in name and inspect.isclass(obj):
|
|
183
|
-
logging.info(
|
|
184
|
-
f"Found class {name} in module {workflow_name},"
|
|
185
|
-
f" registering it as '{workflow_name}' in the workflow registry"
|
|
186
|
-
)
|
|
187
|
-
self.register_workflow(obj, workflow_name, workflow_definition)
|
|
188
|
-
return
|
|
189
|
-
else:
|
|
190
|
-
self.register_workflow(BaseWorkflow, workflow_name, workflow_definition)
|
|
191
|
-
|
|
192
|
-
except Exception as e:
|
|
193
|
-
trace = traceback.format_exc()
|
|
194
|
-
logging.error(f"Error loading workflow {workflow_name}: error: {e} trace : {trace}")
|
|
167
|
+
self.load_single_workflow_from_storage(workflow_name)
|
|
195
168
|
|
|
196
169
|
def register_workflow(self, obj, workflow_name, workflow_definition):
|
|
197
170
|
"""Register workflow in the workflow registry
|
cognite/neat/workflows/model.py
CHANGED
|
@@ -94,6 +94,7 @@ class WorkflowStepDefinition(BaseModel):
|
|
|
94
94
|
complex_configs: dict[str, Any] = Field(default_factory=dict) # Complex step configurations
|
|
95
95
|
max_retries: int = 0
|
|
96
96
|
retry_delay: int = 3
|
|
97
|
+
auto_workflow_cleanup: bool = False
|
|
97
98
|
|
|
98
99
|
@field_validator("configs", "params", mode="before")
|
|
99
100
|
def none_as_empty_dict(cls, value):
|
|
@@ -67,6 +67,9 @@ class GraphStoreConfiguration(Step):
|
|
|
67
67
|
if self.configs["Init procedure"] == "reset":
|
|
68
68
|
logging.info("Resetting graph")
|
|
69
69
|
reset_store(store_dir, graph_store.graph if graph_store else None)
|
|
70
|
+
if graph_name in self.flow_context:
|
|
71
|
+
del self.flow_context[graph_name]
|
|
72
|
+
graph_store = None
|
|
70
73
|
logging.info("Graph reset complete")
|
|
71
74
|
|
|
72
75
|
prefixes = rules_data.rules.prefixes if rules_data else PREFIXES.copy()
|
|
@@ -97,8 +100,8 @@ class GraphStoreConfiguration(Step):
|
|
|
97
100
|
def reset_store(data_store_dir: Path | None, graph_store: stores.NeatGraphStoreBase | None = None):
|
|
98
101
|
if isinstance(graph_store, stores.OxiGraphStore):
|
|
99
102
|
if graph_store:
|
|
100
|
-
graph_store.
|
|
101
|
-
graph_store.
|
|
103
|
+
graph_store.close()
|
|
104
|
+
graph_store.drop_graph_store_storage(data_store_dir)
|
|
102
105
|
elif data_store_dir:
|
|
103
106
|
graph_store.drop_graph_store_storage(data_store_dir)
|
|
104
107
|
elif isinstance(graph_store, stores.GraphDBStore):
|
|
@@ -134,6 +137,8 @@ class GraphStoreReset(Step):
|
|
|
134
137
|
graph_store = cast(SourceGraph | SolutionGraph | None, self.flow_context.get(graph_name, None))
|
|
135
138
|
if graph_store is not None:
|
|
136
139
|
reset_store(graph_store.graph.internal_storage_dir, graph_store.graph)
|
|
140
|
+
if graph_name in self.flow_context:
|
|
141
|
+
del self.flow_context[graph_name]
|
|
137
142
|
return FlowMessage(output_text="Reset operation completed")
|
|
138
143
|
else:
|
|
139
144
|
return FlowMessage(output_text="Stores already reset")
|
|
@@ -173,6 +173,8 @@ class ResetGraphStores(Step):
|
|
|
173
173
|
graph_store = cast(SourceGraph | SolutionGraph | None, self.flow_context.get(graph_name, None))
|
|
174
174
|
if graph_store is not None:
|
|
175
175
|
reset_store(graph_store.graph.internal_storage_dir, graph_store.graph)
|
|
176
|
+
if graph_name in self.flow_context:
|
|
177
|
+
del self.flow_context[graph_name]
|
|
176
178
|
return FlowMessage(output_text="Reset operation completed")
|
|
177
179
|
else:
|
|
178
180
|
return FlowMessage(output_text="Stores already reset")
|
|
@@ -237,6 +239,9 @@ class ConfigureGraphStore(Step):
|
|
|
237
239
|
if self.configs["init_procedure"] == "reset":
|
|
238
240
|
logging.info("Resetting graph")
|
|
239
241
|
reset_store(store_dir, graph_store.graph if graph_store else None)
|
|
242
|
+
if graph_name in self.flow_context:
|
|
243
|
+
del self.flow_context[graph_name]
|
|
244
|
+
graph_store = None
|
|
240
245
|
logging.info("Graph reset complete")
|
|
241
246
|
|
|
242
247
|
prefixes = rules_data.rules.prefixes if rules_data else PREFIXES.copy()
|
|
@@ -267,8 +272,8 @@ class ConfigureGraphStore(Step):
|
|
|
267
272
|
def reset_store(data_store_dir: Path | None, graph_store: stores.NeatGraphStoreBase | None = None):
|
|
268
273
|
if isinstance(graph_store, stores.OxiGraphStore):
|
|
269
274
|
if graph_store:
|
|
270
|
-
graph_store.
|
|
271
|
-
graph_store.
|
|
275
|
+
graph_store.close()
|
|
276
|
+
graph_store.drop_graph_store_storage(data_store_dir)
|
|
272
277
|
elif data_store_dir:
|
|
273
278
|
graph_store.drop_graph_store_storage(data_store_dir)
|
|
274
279
|
elif isinstance(graph_store, stores.GraphDBStore):
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
cognite/neat/__init__.py,sha256=v-rRiDOgZ3sQSMQKq0vgUQZvpeOkoHFXissAx6Ktg84,61
|
|
2
|
-
cognite/neat/_version.py,sha256
|
|
2
|
+
cognite/neat/_version.py,sha256=-bsES2AHa1TNyPmsDMRScqqA4ezbJdvAUS3UylEI4rQ,23
|
|
3
3
|
cognite/neat/app/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
cognite/neat/app/api/asgi/metrics.py,sha256=nxFy7L5cChTI0a-zkCiJ59Aq8yLuIJp5c9Dg0wRXtV0,152
|
|
5
5
|
cognite/neat/app/api/configuration.py,sha256=xnKdBE_dtq1nRvKa79YGA_wimI5UhoSRuBQz4LkLzQw,4606
|
|
@@ -8,14 +8,14 @@ cognite/neat/app/api/context_manager/manager.py,sha256=cVwFua80PXXM5k7nOHbynmywr
|
|
|
8
8
|
cognite/neat/app/api/data_classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
cognite/neat/app/api/data_classes/configuration.py,sha256=oBnnX6Zam7TOstiLpQbi3G8smdytypwrJMBTjeW8s18,4208
|
|
10
10
|
cognite/neat/app/api/data_classes/rest.py,sha256=yVWqFkBCDCGooOWaE5nun4No8B-PBa6svdenIjBINdo,1675
|
|
11
|
-
cognite/neat/app/api/explorer.py,sha256=
|
|
11
|
+
cognite/neat/app/api/explorer.py,sha256=OlLI-RbQGjXEuDgtmFfBuTXfnRVemTJDKbL9VvXLr6Y,1891
|
|
12
12
|
cognite/neat/app/api/routers/configuration.py,sha256=tFiEbtFHNVehMwM8T-IvnWpDOL_y-wCt-wd5w-Z4PQk,554
|
|
13
13
|
cognite/neat/app/api/routers/core.py,sha256=OO9M611KG9QAdCVurWQPiU6wj6GVsTzs5DdXlCFA-wI,2191
|
|
14
14
|
cognite/neat/app/api/routers/crud.py,sha256=Cnvw77JWCs_wzeoQYdWwGfFns8LgtYmsYWgKPtud3BA,4646
|
|
15
15
|
cognite/neat/app/api/routers/data_exploration.py,sha256=XlpEbggy1mK1XmwVtLZmrXWulTzdaGQaKAyHs3H04qU,13653
|
|
16
16
|
cognite/neat/app/api/routers/metrics.py,sha256=S_bUQk_GjfQq7WbEhSVdow4MUYBZ_bZNafzgcKogXK8,210
|
|
17
17
|
cognite/neat/app/api/routers/rules.py,sha256=5OarmHILUuCdSiwF5ufCo_CiWXKtuy28X1Nyr9cD4hw,6369
|
|
18
|
-
cognite/neat/app/api/routers/workflows.py,sha256=
|
|
18
|
+
cognite/neat/app/api/routers/workflows.py,sha256=3IALkg1tam9QYVzkYBDuY8wvXHN8KtuSRhnzEq4cxbE,12402
|
|
19
19
|
cognite/neat/app/api/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
20
|
cognite/neat/app/api/utils/data_mapping.py,sha256=ocqRyeCLbk3gS1NrQQnDr0w-q-xbkqV60uLZzsJIdyE,564
|
|
21
21
|
cognite/neat/app/api/utils/logging.py,sha256=WNmwcUOS0RRT_szeVwwu5CZ1dainx8iVXuVdtWT0n-M,806
|
|
@@ -26,17 +26,17 @@ cognite/neat/app/monitoring/metrics.py,sha256=GKNoYEmnQc43FrXNaBC6myQugObxRXrUd6
|
|
|
26
26
|
cognite/neat/app/ui/index.html,sha256=PQtvXjCd-PzogV-QjdaCGwSWz0PNn7T_fqnAznR3CCY,16
|
|
27
27
|
cognite/neat/app/ui/neat-app/.gitignore,sha256=iRXaC85HOaGaxS3OQR8uYGM0ShdU4CpGHR26ThRHUww,312
|
|
28
28
|
cognite/neat/app/ui/neat-app/README.md,sha256=cOr7x6X9RmqjITtafhsqQTg8vl1Ob8X0WC78WL21CdE,3359
|
|
29
|
-
cognite/neat/app/ui/neat-app/build/asset-manifest.json,sha256=
|
|
29
|
+
cognite/neat/app/ui/neat-app/build/asset-manifest.json,sha256=4dv7IeY3FVnA_LS1hwSttDOzHtgUgIeFubAYo7rMh6o,464
|
|
30
30
|
cognite/neat/app/ui/neat-app/build/favicon.ico,sha256=_Bw_morVrDlSHlMFOCjAzaJV1oM0sOLG6djD8HmP9VI,15406
|
|
31
|
-
cognite/neat/app/ui/neat-app/build/index.html,sha256=
|
|
31
|
+
cognite/neat/app/ui/neat-app/build/index.html,sha256=be58JmHxn_Lr2CQiFX4darfvGP41oUivEfR08d03WXs,629
|
|
32
32
|
cognite/neat/app/ui/neat-app/build/logo192.png,sha256=RvR_LqdUJTCcGEshzFi21taYa6RVtLbg5HVzvoURd3I,344557
|
|
33
33
|
cognite/neat/app/ui/neat-app/build/manifest.json,sha256=ULPYw5A68_eNhxuUVXqxT045yhkurKPSz6hjyGcnmhQ,492
|
|
34
34
|
cognite/neat/app/ui/neat-app/build/robots.txt,sha256=kNJLw79pisHhc3OVAimMzKcq3x9WT6sF9IS4xI0crdI,67
|
|
35
35
|
cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css,sha256=iDWBDD9v4kvzKPcNhpr37ZDjsggkJOkYMnCb1_vHyTQ,8524
|
|
36
|
-
cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css.map,sha256=
|
|
37
|
-
cognite/neat/app/ui/neat-app/build/static/js/main.
|
|
38
|
-
cognite/neat/app/ui/neat-app/build/static/js/main.
|
|
39
|
-
cognite/neat/app/ui/neat-app/build/static/js/main.
|
|
36
|
+
cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css.map,sha256=YiacBwqp1mmavnhEeNTOm9j53Q9lI9wcvSwDePvvLWA,13319
|
|
37
|
+
cognite/neat/app/ui/neat-app/build/static/js/main.2efd96b2.js,sha256=7Jlb08MI2Ck34HvzkCKShenLFQuSVSerPWm4J6O223w,1403545
|
|
38
|
+
cognite/neat/app/ui/neat-app/build/static/js/main.2efd96b2.js.LICENSE.txt,sha256=7MyvPDLc3ChJIETthFSLRMt9Q2gwAMd8OYMqRMq-UhQ,2667
|
|
39
|
+
cognite/neat/app/ui/neat-app/build/static/js/main.2efd96b2.js.map,sha256=zUzgUBAKbtIFkXu3E6wz1hL7IKv8Xi86iym_P5OPATU,6234629
|
|
40
40
|
cognite/neat/app/ui/neat-app/build/static/media/logo.8093b84df9ed36a174c629d6fe0b730d.svg,sha256=EYf9q9JoVJ1L1np-XloeEZXCmaibzKmmpXCKn_44xzA,240334
|
|
41
41
|
cognite/neat/config.py,sha256=5_dTuoL5crCmbSdKNuNOMQJVPNGiPy7ib2MlMkgPlOM,1503
|
|
42
42
|
cognite/neat/constants.py,sha256=O3BpKbqfre0jQF6h72Yr-mY0jIByqI_dkbI3rnHdwqM,1228
|
|
@@ -71,7 +71,7 @@ cognite/neat/graph/stores/__init__.py,sha256=ivvk7STSo-4wuP_CpizKUCPKmt_ufpNWRJU
|
|
|
71
71
|
cognite/neat/graph/stores/_base.py,sha256=Bw1T7CbDnl3BlGW2LqOVgmfPh4xJyoRt87cDqKzITcM,14254
|
|
72
72
|
cognite/neat/graph/stores/_graphdb_store.py,sha256=8QM8I4srDKNsR0PddN6htCYUhfkoqlyy-c232Os7C0A,1776
|
|
73
73
|
cognite/neat/graph/stores/_memory_store.py,sha256=GQq19xiyAWU0WQU5txmWnLXBuyP6ywd8plR21UtD3Uw,1420
|
|
74
|
-
cognite/neat/graph/stores/_oxigraph_store.py,sha256=
|
|
74
|
+
cognite/neat/graph/stores/_oxigraph_store.py,sha256=Xj69oE4M-9aqd8bq5CpLCMAhwNjJQAP1AC7lxzDsCn0,5448
|
|
75
75
|
cognite/neat/graph/stores/_oxrdflib.py,sha256=A5zeRm5_e8ui_ihGpgstRDg_N7qcLZ3QZBRGrOXSGI0,9569
|
|
76
76
|
cognite/neat/graph/stores/_rdf_to_graph.py,sha256=1ezWHTPn9UkIsAlxZcYRlqWvj3ixlmB5GGG9NN0ls2Q,1244
|
|
77
77
|
cognite/neat/graph/transformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -144,7 +144,7 @@ cognite/neat/rules/importers/_owl2rules/__init__.py,sha256=tdGcrgtozdQyST-pTlxIa
|
|
|
144
144
|
cognite/neat/rules/importers/_owl2rules/_owl2classes.py,sha256=tCEwwJPCdFLodM0q0gXfbyEe0rZvIG4emDTcUzDYRWI,7597
|
|
145
145
|
cognite/neat/rules/importers/_owl2rules/_owl2metadata.py,sha256=kCTCAbUaUGgSwnH-jgFg01SfxD2VikyPy5L-vgxUjHA,7674
|
|
146
146
|
cognite/neat/rules/importers/_owl2rules/_owl2properties.py,sha256=KNOrOySUXM9Krg6HEPNtiThlHfSEhd0EoQBtu_lczu8,7319
|
|
147
|
-
cognite/neat/rules/importers/_owl2rules/_owl2rules.py,sha256=
|
|
147
|
+
cognite/neat/rules/importers/_owl2rules/_owl2rules.py,sha256=R8Z6f7f-MbKyr9fgKW5sStKlXxvUeOiS4lotjavIx2E,7119
|
|
148
148
|
cognite/neat/rules/importers/_spreadsheet2rules.py,sha256=GVkTtWnQkM8nXkPAOs2UpxKnsPHA6898Tb7aTgcDDPM,10573
|
|
149
149
|
cognite/neat/rules/importers/_yaml2rules.py,sha256=sIaYY3Zo--v1cXSu65n4ZPv47cS-5InvSbpkw3Ahov4,4198
|
|
150
150
|
cognite/neat/rules/issues/__init__.py,sha256=Ms6jgCxCezc5IgTOwCFtXQPtoVFfOvdcXj84_rs917I,563
|
|
@@ -161,12 +161,12 @@ cognite/neat/rules/models/_rules/__init__.py,sha256=jA4kMOAg4GJZjhCW1ovSjUCv-Top
|
|
|
161
161
|
cognite/neat/rules/models/_rules/_types/__init__.py,sha256=Px0uB5fqk-8qH-HRi0ZvgGkLhYcS5A8EJ9QDB2TFwNQ,1299
|
|
162
162
|
cognite/neat/rules/models/_rules/_types/_base.py,sha256=EsTqjXUP0zpuQ-Z_BMP-00rJBy2A2s-lJHzudIDAfqw,17145
|
|
163
163
|
cognite/neat/rules/models/_rules/_types/_field.py,sha256=dOVAU1jWCupFVnrYYwLfI-nNUC4rv4vXHMzpiObtWiw,10295
|
|
164
|
-
cognite/neat/rules/models/_rules/_types/_value.py,sha256=
|
|
164
|
+
cognite/neat/rules/models/_rules/_types/_value.py,sha256=ubyWmU6neyNxx17fqcciIjyB-CIpYNUuM97Xh2sVrYo,6308
|
|
165
165
|
cognite/neat/rules/models/_rules/base.py,sha256=9DgtdCmpz84sMFxZB_stWkalVbjA4HQKsTMpSjjOVLU,10635
|
|
166
166
|
cognite/neat/rules/models/_rules/dms_architect_rules.py,sha256=d4WKTyuSWWw6ioOYCnayTQcTWNGv-dys2LU3PBI8Fuc,49465
|
|
167
167
|
cognite/neat/rules/models/_rules/dms_schema.py,sha256=-ru40beGY2WJvf9_sd5eO2Wh8x2qLQ2UmgzExloBWac,30229
|
|
168
168
|
cognite/neat/rules/models/_rules/domain_rules.py,sha256=mOE4M6wOurmnAehxbnxvP9vIVXsFuKSiyMmD1shXKpA,2051
|
|
169
|
-
cognite/neat/rules/models/_rules/information_rules.py,sha256=
|
|
169
|
+
cognite/neat/rules/models/_rules/information_rules.py,sha256=kETaZ3HsPw0EFXIeU-YhfEZeK4FhAh5RvNQAWbrcE-E,21026
|
|
170
170
|
cognite/neat/rules/models/raw_rules.py,sha256=Y7ZVKyvLhX0s6WdwztbFiYFj4EijGEfjtBmv0ibRmmg,12368
|
|
171
171
|
cognite/neat/rules/models/rdfpath.py,sha256=kk1dqxl3n2W_vSQtpSJri2O4nCXnCDZB2lhLsLV1PN0,7344
|
|
172
172
|
cognite/neat/rules/models/rules.py,sha256=ECKrQEtoiQqtR8W-rKMAWmODpHeHhI8Qzf3TwCa3dy8,51063
|
|
@@ -187,7 +187,7 @@ cognite/neat/utils/utils.py,sha256=E7CmZzPEYmfjsEiAxN9thNrCDCvw16r8PKODUgBR2Fk,1
|
|
|
187
187
|
cognite/neat/utils/xml.py,sha256=ppLT3lQKVp8wOP-m8-tFY8uB2P4R76l7R_-kUtsABng,992
|
|
188
188
|
cognite/neat/workflows/__init__.py,sha256=oiKub_U9f5cA0I1nKl5dFkR4BD8_6Be9eMzQ_50PwP0,396
|
|
189
189
|
cognite/neat/workflows/_exceptions.py,sha256=ugI_X1XNpikAiL8zIggBjcx6q7WvOpRIgvxHrj2Rhr4,1348
|
|
190
|
-
cognite/neat/workflows/base.py,sha256=
|
|
190
|
+
cognite/neat/workflows/base.py,sha256=cIav3ypPpZNj2Uy2ZzhyrcZOx-4VJOP7ImtDzIiMTE4,26857
|
|
191
191
|
cognite/neat/workflows/cdf_store.py,sha256=HCn76PJ7_vrBeTtBv9GDBH77B7wCzVnH13AoS2lu9aA,18016
|
|
192
192
|
cognite/neat/workflows/examples/Export DMS/workflow.yaml,sha256=XmyaUAsZrN-GnoBejg9eXHQBm1U1Z-NhdKc11Wm1ieM,1987
|
|
193
193
|
cognite/neat/workflows/examples/Export Rules to Ontology/workflow.yaml,sha256=ZYLsdLM2SQD3t3aB3JYoK7ps0xjuMavEhqKo49Uy1Ro,3604
|
|
@@ -199,17 +199,17 @@ cognite/neat/workflows/examples/Validate Rules/workflow.yaml,sha256=lmuC-zttewtZ
|
|
|
199
199
|
cognite/neat/workflows/examples/Validate Solution Model/workflow.yaml,sha256=Oy3u9QJ7QZoKZqmY0mRMWtnJZd9agmbRZCrbvf32xis,1326
|
|
200
200
|
cognite/neat/workflows/examples/Visualize Data Model Using Mock Graph/workflow.yaml,sha256=wVWxEGy_L_tTHKr-XxHyoykkya0DnFi99Y1erA96Oxs,2296
|
|
201
201
|
cognite/neat/workflows/examples/Visualize Semantic Data Model/workflow.yaml,sha256=yWVL-NHghKtiNV2kpEX674MJwWqhOUn3j2ZOJiJbprE,2579
|
|
202
|
-
cognite/neat/workflows/manager.py,sha256=
|
|
202
|
+
cognite/neat/workflows/manager.py,sha256=wvVUVDF3WBPhHQ6zxbRP5oF3RATHcFyYRaPnt1Ju_-E,13659
|
|
203
203
|
cognite/neat/workflows/migration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
204
204
|
cognite/neat/workflows/migration/steps.py,sha256=4YCPWwfEqzIgLN4lRNx8Y-nj14ptNxH8-SdLY2HJbvE,3992
|
|
205
205
|
cognite/neat/workflows/migration/wf_manifests.py,sha256=TIJ9q_sbZ1LVJfUYVk8VRYcxrRHlwyktHRag0OJcVrE,1556
|
|
206
|
-
cognite/neat/workflows/model.py,sha256=
|
|
206
|
+
cognite/neat/workflows/model.py,sha256=K6NLlkhkrYSpu20LMOxuIzbJJgnMg0GoZfq6FdLQIyw,6568
|
|
207
207
|
cognite/neat/workflows/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
208
208
|
cognite/neat/workflows/steps/data_contracts.py,sha256=YZVZ8JxIAEvsIlOqJVWBVoubyYMegqO9pXbWCtEqOYI,2994
|
|
209
209
|
cognite/neat/workflows/steps/lib/__init__.py,sha256=PfVnKJOSuYahy0wCserKocdA9oa8185k-OYDpaCkFP8,257
|
|
210
210
|
cognite/neat/workflows/steps/lib/graph_extractor.py,sha256=vW9UpJScx5dFVCSairpOdWRdBdLpkCt2kNh6litbF0o,5161
|
|
211
211
|
cognite/neat/workflows/steps/lib/graph_loader.py,sha256=HfGg1HRZhbV58TFu89FTjKeUxGsbCYLeFJIQFDN_pQM,2341
|
|
212
|
-
cognite/neat/workflows/steps/lib/graph_store.py,sha256=
|
|
212
|
+
cognite/neat/workflows/steps/lib/graph_store.py,sha256=NV5SZFTrbq_gtZZZdoEL8tIohdbsieKmpwrdWAHis-E,6288
|
|
213
213
|
cognite/neat/workflows/steps/lib/io_steps.py,sha256=QAGypoi1vP32BRiIgBZ0B4qsbFMcwhzpRiVUUnWysLA,16874
|
|
214
214
|
cognite/neat/workflows/steps/lib/rules_exporter.py,sha256=qRIdsNvj-gWdGF6ilTfSXBwBeEEwwxVHH9g-gDPKNzY,18272
|
|
215
215
|
cognite/neat/workflows/steps/lib/rules_importer.py,sha256=tckiHIS9Vnqx3df62jdtNwSm-Nk_XQwgo1sM0zKOw_s,7327
|
|
@@ -218,7 +218,7 @@ cognite/neat/workflows/steps/lib/v1/__init__.py,sha256=725aFzVqhE0tbVOAW70zWXTGK
|
|
|
218
218
|
cognite/neat/workflows/steps/lib/v1/graph_contextualization.py,sha256=MJRkXy9uBii3UQFmaABhgFXA8nPKJPU1tNsECJz7V10,3921
|
|
219
219
|
cognite/neat/workflows/steps/lib/v1/graph_extractor.py,sha256=pjN3Hmqj5JCvBGX3Z0L9Pb1wW5MEGA4hZ95dEhpYcK4,29390
|
|
220
220
|
cognite/neat/workflows/steps/lib/v1/graph_loader.py,sha256=ID-tpUUlhIiko5OaA1x2MnK7_TJ23XDBB-YEeIAuMYY,27269
|
|
221
|
-
cognite/neat/workflows/steps/lib/v1/graph_store.py,sha256=
|
|
221
|
+
cognite/neat/workflows/steps/lib/v1/graph_store.py,sha256=8I0RsUipzUPe0KSkglvJLXDH-bwk7iBLEUHQmeajAXU,12522
|
|
222
222
|
cognite/neat/workflows/steps/lib/v1/graph_transformer.py,sha256=cxwYDzhoPn6G7Jt80AFA_jlOLm8GTYGn1lya6McuP0M,2345
|
|
223
223
|
cognite/neat/workflows/steps/lib/v1/rules_exporter.py,sha256=QGFqMe_rs7l_l_27LDs6mW8kBK1hdkI4EaechGBgbUA,20657
|
|
224
224
|
cognite/neat/workflows/steps/lib/v1/rules_importer.py,sha256=G1kBhrNa8wsaCwmRxu3d056zfa2RC0XGEImvGZQjpwo,28072
|
|
@@ -227,8 +227,8 @@ cognite/neat/workflows/steps_registry.py,sha256=PZVoHX4d6Vmjz6XzUFnFFWMCnrVnqkUC
|
|
|
227
227
|
cognite/neat/workflows/tasks.py,sha256=dqlJwKAb0jlkl7abbY8RRz3m7MT4SK8-7cntMWkOYjw,788
|
|
228
228
|
cognite/neat/workflows/triggers.py,sha256=_BLNplzoz0iic367u1mhHMHiUrCwP-SLK6_CZzfODX0,7071
|
|
229
229
|
cognite/neat/workflows/utils.py,sha256=gKdy3RLG7ctRhbCRwaDIWpL9Mi98zm56-d4jfHDqP1E,453
|
|
230
|
-
cognite_neat-0.
|
|
231
|
-
cognite_neat-0.
|
|
232
|
-
cognite_neat-0.
|
|
233
|
-
cognite_neat-0.
|
|
234
|
-
cognite_neat-0.
|
|
230
|
+
cognite_neat-0.72.1.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
|
|
231
|
+
cognite_neat-0.72.1.dist-info/METADATA,sha256=Ow2IjY4oEmsDS2NTfizqbgKBUapUvhV7WDWxBwIA5Ak,9321
|
|
232
|
+
cognite_neat-0.72.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
233
|
+
cognite_neat-0.72.1.dist-info/entry_points.txt,sha256=61FPqiWb25vbqB0KI7znG8nsg_ibLHBvTjYnkPvNFso,50
|
|
234
|
+
cognite_neat-0.72.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|