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.

Files changed (23) hide show
  1. cognite/neat/_version.py +1 -1
  2. cognite/neat/app/api/explorer.py +1 -1
  3. cognite/neat/app/api/routers/workflows.py +20 -0
  4. cognite/neat/app/ui/neat-app/build/asset-manifest.json +3 -3
  5. cognite/neat/app/ui/neat-app/build/index.html +1 -1
  6. cognite/neat/app/ui/neat-app/build/static/css/main.38a62222.css.map +1 -1
  7. cognite/neat/app/ui/neat-app/build/static/js/{main.ed960141.js → main.2efd96b2.js} +3 -3
  8. cognite/neat/app/ui/neat-app/build/static/js/{main.ed960141.js.map → main.2efd96b2.js.map} +1 -1
  9. cognite/neat/graph/stores/_oxigraph_store.py +8 -6
  10. cognite/neat/rules/importers/_owl2rules/_owl2rules.py +2 -1
  11. cognite/neat/rules/models/_rules/_types/_value.py +3 -0
  12. cognite/neat/rules/models/_rules/information_rules.py +1 -0
  13. cognite/neat/workflows/base.py +16 -0
  14. cognite/neat/workflows/manager.py +42 -69
  15. cognite/neat/workflows/model.py +1 -0
  16. cognite/neat/workflows/steps/lib/graph_store.py +7 -2
  17. cognite/neat/workflows/steps/lib/v1/graph_store.py +7 -2
  18. {cognite_neat-0.71.0.dist-info → cognite_neat-0.72.1.dist-info}/METADATA +1 -1
  19. {cognite_neat-0.71.0.dist-info → cognite_neat-0.72.1.dist-info}/RECORD +23 -23
  20. /cognite/neat/app/ui/neat-app/build/static/js/{main.ed960141.js.LICENSE.txt → main.2efd96b2.js.LICENSE.txt} +0 -0
  21. {cognite_neat-0.71.0.dist-info → cognite_neat-0.72.1.dist-info}/LICENSE +0 -0
  22. {cognite_neat-0.71.0.dist-info → cognite_neat-0.72.1.dist-info}/WHEEL +0 -0
  23. {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.internal_storage_dir = Path(str(self.internal_storage_dir_orig) + "_" + str(time.time()))
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
- self.graph.store._inner.flush()
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.value_types import XSD_VALUE_TYPE_MAPPINGS
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
@@ -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 load_workflows_from_storage(self, workflows_storage_path: str | Path | None = None):
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 = Path(workflows_storage_path) if workflows_storage_path else self.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
- workflow_path = workflows_storage_path / workflow_name
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
@@ -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.drop()
101
- graph_store.reinitialize_graph()
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.drop()
271
- graph_store.reinitialize_graph()
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cognite-neat
3
- Version: 0.71.0
3
+ Version: 0.72.1
4
4
  Summary: Knowledge graph transformation
5
5
  Home-page: https://cognite-neat.readthedocs-hosted.com/
6
6
  License: Apache-2.0
@@ -1,5 +1,5 @@
1
1
  cognite/neat/__init__.py,sha256=v-rRiDOgZ3sQSMQKq0vgUQZvpeOkoHFXissAx6Ktg84,61
2
- cognite/neat/_version.py,sha256=mNejnumd8tVE1XGXnMJ_BwjG-FRuO9U5tz0dQVo3UpU,23
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=EqIhxeFAF_5UgIP5VIZ4i5EA1br2OrkBRwRoMC6dOXk,1893
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=jtma77RsOngaPH8YmOK4f0x1bDZ87tdAz4sIDb19OrQ,11564
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=32i2ocVLhj3tHAz5Bz1aogb0jBFSFrDmLQuRWBGVUnw,464
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=p84L-dp-DI3rwEjjKFY4Zb4xx7Xca4bo-WYez1xfZj4,629
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=9g9kGfi5g_dvs4eKDBOIT7dg2YTTqtNFLgwsN-YQ1zU,13345
37
- cognite/neat/app/ui/neat-app/build/static/js/main.ed960141.js,sha256=_fBqIbEfvAaioglNmF6Zx0Az3yuDH7v8rRRQQ66zJ3g,1403536
38
- cognite/neat/app/ui/neat-app/build/static/js/main.ed960141.js.LICENSE.txt,sha256=7MyvPDLc3ChJIETthFSLRMt9Q2gwAMd8OYMqRMq-UhQ,2667
39
- cognite/neat/app/ui/neat-app/build/static/js/main.ed960141.js.map,sha256=CqHRR3M_zVZXt4wrNl_KuNOaiqSudiuSQ-Dj8Hr0YEE,6235494
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=ZmA-jXXUN32OdiZ0AbJpSqedYuGQWVR9IfJ90kyfMmY,5377
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=0QplDQnDslqwZ7B8-TuJWJkC30C7MAGyG81YhHdvasQ,7116
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=I7Ke388M2NOi0U5F9kAzOjE0O4ZXbIxefupgDAjnISM,6079
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=e_SesgvMbzgC9WMFx0b_6qrpOIQvoQ_kXUiXrSYC9RI,20984
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=uYdpW2swxVgklwjohiRJqbhaMgmtBT_jVk15SZ8chWI,26223
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=_lZEDTqXwQhI6dBsuOKvgiwVJCgvlQSl6SocOryK3H0,15674
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=J0Gjk-9UH068tqkZPNViXN6La24WZ_YPOth2yT57b40,6528
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=OXdajC0bDbEzq1G-goYOl5AT9CB3-pD8r0sj1HOUE7o,6040
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=P5NVD0j1zMwM7UI16TEMgQ6WyA3w4E1R_2oWoqPkIVw,12274
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.71.0.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
231
- cognite_neat-0.71.0.dist-info/METADATA,sha256=NDGLBrex1U-BWEJbvEf-lAVJ-xHSnWHQOC8F2Ob5ejM,9321
232
- cognite_neat-0.71.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
233
- cognite_neat-0.71.0.dist-info/entry_points.txt,sha256=61FPqiWb25vbqB0KI7znG8nsg_ibLHBvTjYnkPvNFso,50
234
- cognite_neat-0.71.0.dist-info/RECORD,,
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,,