cognite-neat 0.77.3__py3-none-any.whl → 0.77.4__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/rules/analysis/_information_rules.py +2 -12
- cognite/neat/rules/exporters/_rules2excel.py +4 -4
- cognite/neat/rules/importers/_dms2rules.py +15 -6
- cognite/neat/rules/importers/_dtdl2rules/dtdl_importer.py +1 -0
- cognite/neat/rules/importers/_spreadsheet2rules.py +21 -8
- cognite/neat/rules/issues/spreadsheet.py +60 -5
- cognite/neat/rules/models/_base.py +6 -0
- cognite/neat/rules/models/dms/_converter.py +2 -0
- cognite/neat/rules/models/dms/_exporter.py +2 -1
- cognite/neat/rules/models/dms/_rules.py +3 -2
- cognite/neat/rules/models/dms/_rules_input.py +4 -11
- cognite/neat/rules/models/dms/_schema.py +5 -4
- cognite/neat/rules/models/dms/_serializer.py +1 -1
- cognite/neat/rules/models/dms/_validation.py +27 -60
- cognite/neat/rules/models/information/__init__.py +8 -1
- cognite/neat/rules/models/information/_rules.py +41 -82
- cognite/neat/rules/models/information/_rules_input.py +266 -0
- cognite/neat/rules/models/information/_serializer.py +85 -0
- cognite/neat/rules/models/information/_validation.py +164 -0
- cognite/neat/utils/cdf.py +35 -0
- cognite/neat/workflows/steps/lib/current/rules_exporter.py +30 -7
- cognite/neat/workflows/steps/lib/current/rules_importer.py +21 -2
- {cognite_neat-0.77.3.dist-info → cognite_neat-0.77.4.dist-info}/METADATA +1 -1
- {cognite_neat-0.77.3.dist-info → cognite_neat-0.77.4.dist-info}/RECORD +28 -25
- {cognite_neat-0.77.3.dist-info → cognite_neat-0.77.4.dist-info}/LICENSE +0 -0
- {cognite_neat-0.77.3.dist-info → cognite_neat-0.77.4.dist-info}/WHEEL +0 -0
- {cognite_neat-0.77.3.dist-info → cognite_neat-0.77.4.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import itertools
|
|
2
|
+
from typing import cast
|
|
3
|
+
|
|
4
|
+
from cognite.neat.rules import issues
|
|
5
|
+
from cognite.neat.rules.issues import IssueList
|
|
6
|
+
from cognite.neat.rules.models._base import DataModelType, SchemaCompleteness
|
|
7
|
+
from cognite.neat.rules.models.entities import ClassEntity, EntityTypes, UnknownEntity
|
|
8
|
+
from cognite.neat.utils.utils import get_inheritance_path
|
|
9
|
+
|
|
10
|
+
from ._rules import InformationRules
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class InformationPostValidation:
|
|
14
|
+
"""This class does all the validation of the Information rules that have dependencies
|
|
15
|
+
between components."""
|
|
16
|
+
|
|
17
|
+
def __init__(self, rules: InformationRules):
|
|
18
|
+
self.rules = rules
|
|
19
|
+
self.metadata = rules.metadata
|
|
20
|
+
self.properties = rules.properties
|
|
21
|
+
self.classes = rules.classes
|
|
22
|
+
self.issue_list = IssueList()
|
|
23
|
+
|
|
24
|
+
def validate(self) -> IssueList:
|
|
25
|
+
if self.metadata.schema_ == SchemaCompleteness.partial:
|
|
26
|
+
return self.issue_list
|
|
27
|
+
|
|
28
|
+
if self.metadata.data_model_type == DataModelType.solution and not self.rules.reference:
|
|
29
|
+
raise ValueError("Reference data model is missing")
|
|
30
|
+
|
|
31
|
+
if self.metadata.schema_ == SchemaCompleteness.extended and not self.rules.last:
|
|
32
|
+
raise ValueError("Last version is missing")
|
|
33
|
+
|
|
34
|
+
self._dangling_classes()
|
|
35
|
+
self._referenced_parent_classes_exist()
|
|
36
|
+
self._referenced_classes_exist()
|
|
37
|
+
self._referenced_value_types_exist()
|
|
38
|
+
|
|
39
|
+
return self.issue_list
|
|
40
|
+
|
|
41
|
+
def _dangling_classes(self) -> None:
|
|
42
|
+
# needs to be complete for this validation to pass
|
|
43
|
+
defined_classes = {class_.class_ for class_ in self.classes}
|
|
44
|
+
referred_classes = {property_.class_ for property_ in self.properties}
|
|
45
|
+
class_parent_pairs = self._class_parent_pairs()
|
|
46
|
+
dangling_classes = set()
|
|
47
|
+
|
|
48
|
+
if classes_without_properties := defined_classes.difference(referred_classes):
|
|
49
|
+
for class_ in classes_without_properties:
|
|
50
|
+
# USE CASE: class has no direct properties and no parents
|
|
51
|
+
if class_ not in class_parent_pairs:
|
|
52
|
+
dangling_classes.add(class_)
|
|
53
|
+
# USE CASE: class has no direct properties and no parents with properties
|
|
54
|
+
elif class_ not in class_parent_pairs and not any(
|
|
55
|
+
parent in referred_classes for parent in get_inheritance_path(class_, class_parent_pairs)
|
|
56
|
+
):
|
|
57
|
+
dangling_classes.add(class_)
|
|
58
|
+
|
|
59
|
+
if dangling_classes:
|
|
60
|
+
self.issue_list.append(
|
|
61
|
+
issues.spreadsheet.ClassNoPropertiesNoParentError([class_.versioned_id for class_ in dangling_classes])
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
def _referenced_parent_classes_exist(self) -> None:
|
|
65
|
+
# needs to be complete for this validation to pass
|
|
66
|
+
class_parent_pairs = self._class_parent_pairs()
|
|
67
|
+
classes = set(class_parent_pairs.keys())
|
|
68
|
+
parents = set(itertools.chain.from_iterable(class_parent_pairs.values()))
|
|
69
|
+
|
|
70
|
+
if undefined_parents := parents.difference(classes):
|
|
71
|
+
self.issue_list.append(
|
|
72
|
+
issues.spreadsheet.ParentClassesNotDefinedError([missing.versioned_id for missing in undefined_parents])
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
def _referenced_classes_exist(self) -> None:
|
|
76
|
+
# needs to be complete for this validation to pass
|
|
77
|
+
defined_classes = {class_.class_ for class_ in self.classes}
|
|
78
|
+
referred_classes = {property_.class_ for property_ in self.properties}
|
|
79
|
+
|
|
80
|
+
# USE CASE: models are complete
|
|
81
|
+
if self.metadata.schema_ == SchemaCompleteness.complete and (
|
|
82
|
+
missing_classes := referred_classes.difference(defined_classes)
|
|
83
|
+
):
|
|
84
|
+
self.issue_list.append(
|
|
85
|
+
issues.spreadsheet.PropertiesDefinedForUndefinedClassesError(
|
|
86
|
+
[missing.versioned_id for missing in missing_classes]
|
|
87
|
+
)
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# USE CASE: models are extended (user + last = complete)
|
|
91
|
+
if self.metadata.schema_ == SchemaCompleteness.extended:
|
|
92
|
+
defined_classes |= {class_.class_ for class_ in cast(InformationRules, self.rules.last).classes}
|
|
93
|
+
if missing_classes := referred_classes.difference(defined_classes):
|
|
94
|
+
self.issue_list.append(
|
|
95
|
+
issues.spreadsheet.PropertiesDefinedForUndefinedClassesError(
|
|
96
|
+
[missing.versioned_id for missing in missing_classes]
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
def _referenced_value_types_exist(self) -> None:
|
|
101
|
+
# adding UnknownEntity to the set of defined classes to handle the case where a property references an unknown
|
|
102
|
+
defined_classes = {class_.class_ for class_ in self.classes} | {UnknownEntity()}
|
|
103
|
+
referred_object_types = {
|
|
104
|
+
property_.value_type
|
|
105
|
+
for property_ in self.rules.properties
|
|
106
|
+
if property_.type_ == EntityTypes.object_property
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
# USE CASE: models are complete
|
|
110
|
+
if self.metadata.schema_ == SchemaCompleteness.complete and (
|
|
111
|
+
missing_value_types := referred_object_types.difference(defined_classes)
|
|
112
|
+
):
|
|
113
|
+
self.issue_list.append(
|
|
114
|
+
issues.spreadsheet.ValueTypeNotDefinedError(
|
|
115
|
+
[cast(ClassEntity, missing).versioned_id for missing in missing_value_types]
|
|
116
|
+
)
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# USE CASE: models are extended (user + last = complete)
|
|
120
|
+
if self.metadata.schema_ == SchemaCompleteness.extended:
|
|
121
|
+
defined_classes |= {class_.class_ for class_ in cast(InformationRules, self.rules.last).classes}
|
|
122
|
+
if missing_value_types := referred_object_types.difference(defined_classes):
|
|
123
|
+
self.issue_list.append(
|
|
124
|
+
issues.spreadsheet.ValueTypeNotDefinedError(
|
|
125
|
+
[cast(ClassEntity, missing).versioned_id for missing in missing_value_types]
|
|
126
|
+
)
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
def _class_parent_pairs(self) -> dict[ClassEntity, list[ClassEntity]]:
|
|
130
|
+
class_subclass_pairs: dict[ClassEntity, list[ClassEntity]] = {}
|
|
131
|
+
|
|
132
|
+
classes = self.rules.model_copy(deep=True).classes.data
|
|
133
|
+
|
|
134
|
+
# USE CASE: Solution model being extended (user + last + reference = complete)
|
|
135
|
+
if (
|
|
136
|
+
self.metadata.schema_ == SchemaCompleteness.extended
|
|
137
|
+
and self.metadata.data_model_type == DataModelType.solution
|
|
138
|
+
):
|
|
139
|
+
classes += (
|
|
140
|
+
cast(InformationRules, self.rules.last).model_copy(deep=True).classes.data
|
|
141
|
+
+ cast(InformationRules, self.rules.reference).model_copy(deep=True).classes.data
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# USE CASE: Solution model being created from scratch (user + reference = complete)
|
|
145
|
+
elif (
|
|
146
|
+
self.metadata.schema_ == SchemaCompleteness.complete
|
|
147
|
+
and self.metadata.data_model_type == DataModelType.solution
|
|
148
|
+
):
|
|
149
|
+
classes += cast(InformationRules, self.rules.reference).model_copy(deep=True).classes.data
|
|
150
|
+
|
|
151
|
+
# USE CASE: Enterprise model being extended (user + last = complete)
|
|
152
|
+
elif (
|
|
153
|
+
self.metadata.schema_ == SchemaCompleteness.extended
|
|
154
|
+
and self.metadata.data_model_type == DataModelType.enterprise
|
|
155
|
+
):
|
|
156
|
+
classes += cast(InformationRules, self.rules.last).model_copy(deep=True).classes.data
|
|
157
|
+
|
|
158
|
+
for class_ in classes:
|
|
159
|
+
class_subclass_pairs[class_.class_] = []
|
|
160
|
+
if class_.parent is None:
|
|
161
|
+
continue
|
|
162
|
+
class_subclass_pairs[class_.class_].extend([parent.as_class_entity() for parent in class_.parent])
|
|
163
|
+
|
|
164
|
+
return class_subclass_pairs
|
cognite/neat/utils/cdf.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from cognite.client import CogniteClient
|
|
2
|
+
from cognite.client.data_classes import filters
|
|
1
3
|
from pydantic import BaseModel, field_validator
|
|
2
4
|
|
|
3
5
|
|
|
@@ -22,3 +24,36 @@ class InteractiveCogniteClient(CogniteClientConfig):
|
|
|
22
24
|
class ServiceCogniteClient(CogniteClientConfig):
|
|
23
25
|
token_url: str = "https://login.microsoftonline.com/common/oauth2/token"
|
|
24
26
|
client_secret: str = "secret"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def clean_space(client: CogniteClient, space: str) -> None:
|
|
30
|
+
"""Deletes all data in a space.
|
|
31
|
+
|
|
32
|
+
This means all nodes, edges, views, containers, and data models located in the given space.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
client: Connected CogniteClient
|
|
36
|
+
space: The space to delete.
|
|
37
|
+
|
|
38
|
+
"""
|
|
39
|
+
edges = client.data_modeling.instances.list("edge", limit=-1, filter=filters.Equals(["edge", "space"], space))
|
|
40
|
+
if edges:
|
|
41
|
+
instances = client.data_modeling.instances.delete(edges=edges.as_ids())
|
|
42
|
+
print(f"Deleted {len(instances.edges)} edges")
|
|
43
|
+
nodes = client.data_modeling.instances.list("node", limit=-1, filter=filters.Equals(["node", "space"], space))
|
|
44
|
+
if nodes:
|
|
45
|
+
instances = client.data_modeling.instances.delete(nodes=nodes.as_ids())
|
|
46
|
+
print(f"Deleted {len(instances.nodes)} nodes")
|
|
47
|
+
views = client.data_modeling.views.list(limit=-1, space=space)
|
|
48
|
+
if views:
|
|
49
|
+
deleted_views = client.data_modeling.views.delete(views.as_ids())
|
|
50
|
+
print(f"Deleted {len(deleted_views)} views")
|
|
51
|
+
containers = client.data_modeling.containers.list(limit=-1, space=space)
|
|
52
|
+
if containers:
|
|
53
|
+
deleted_containers = client.data_modeling.containers.delete(containers.as_ids())
|
|
54
|
+
print(f"Deleted {len(deleted_containers)} containers")
|
|
55
|
+
if data_models := client.data_modeling.data_models.list(limit=-1, space=space):
|
|
56
|
+
deleted_data_models = client.data_modeling.data_models.delete(data_models.as_ids())
|
|
57
|
+
print(f"Deleted {len(deleted_data_models)} data models")
|
|
58
|
+
deleted_space = client.data_modeling.spaces.delete(space)
|
|
59
|
+
print(f"Deleted space {deleted_space}")
|
|
@@ -269,10 +269,19 @@ class RulesToExcel(Step):
|
|
|
269
269
|
options=["input", *RoleTypes.__members__.keys()],
|
|
270
270
|
),
|
|
271
271
|
Configurable(
|
|
272
|
-
name="
|
|
273
|
-
value="
|
|
274
|
-
label="
|
|
275
|
-
|
|
272
|
+
name="Dump Format",
|
|
273
|
+
value="user",
|
|
274
|
+
label="How to dump the rules to the Excel file.\n"
|
|
275
|
+
"'user' - just as is.\n'reference' - enterprise model used as basis for a solution model\n"
|
|
276
|
+
"'last' - used when updating a data model.",
|
|
277
|
+
options=list(exporters.ExcelExporter.dump_options),
|
|
278
|
+
),
|
|
279
|
+
Configurable(
|
|
280
|
+
name="New Data Model ID",
|
|
281
|
+
value="",
|
|
282
|
+
label="If you chose Dump Format 'reference', the provided ID will be use in the new medata sheet. "
|
|
283
|
+
"Expected format 'sp_space:my_external_id'.",
|
|
284
|
+
options=list(exporters.ExcelExporter.dump_options),
|
|
276
285
|
),
|
|
277
286
|
Configurable(
|
|
278
287
|
name="File path",
|
|
@@ -285,15 +294,29 @@ class RulesToExcel(Step):
|
|
|
285
294
|
if self.configs is None or self.data_store_path is None:
|
|
286
295
|
raise StepNotInitialized(type(self).__name__)
|
|
287
296
|
|
|
288
|
-
|
|
297
|
+
dump_format = self.configs.get("Dump Format", "user")
|
|
289
298
|
styling = cast(exporters.ExcelExporter.Style, self.configs.get("Styling", "default"))
|
|
290
299
|
role = self.configs.get("Output role format")
|
|
291
300
|
output_role = None
|
|
292
301
|
if role != "input" and role is not None:
|
|
293
302
|
output_role = RoleTypes[role]
|
|
294
303
|
|
|
295
|
-
|
|
296
|
-
|
|
304
|
+
new_model_str = self.configs.get("New Data Model ID")
|
|
305
|
+
new_model_id: tuple[str, str] | None = None
|
|
306
|
+
if new_model_str and ":" in new_model_str:
|
|
307
|
+
new_model_id = tuple(new_model_str.split(":", 1)) # type: ignore[assignment]
|
|
308
|
+
elif new_model_str:
|
|
309
|
+
return FlowMessage(
|
|
310
|
+
error_text="New Data Model ID must be in the format 'sp_space:my_external_id'!",
|
|
311
|
+
step_execution_status=StepExecutionStatus.ABORT_AND_FAIL,
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
excel_exporter = exporters.ExcelExporter(
|
|
315
|
+
styling=styling,
|
|
316
|
+
output_role=output_role,
|
|
317
|
+
dump_as=dump_format, # type: ignore[arg-type]
|
|
318
|
+
new_model_id=new_model_id,
|
|
319
|
+
)
|
|
297
320
|
|
|
298
321
|
rule_instance: Rules
|
|
299
322
|
if rules.domain:
|
|
@@ -3,6 +3,7 @@ from pathlib import Path
|
|
|
3
3
|
from typing import ClassVar
|
|
4
4
|
|
|
5
5
|
from cognite.client import CogniteClient
|
|
6
|
+
from cognite.client.data_classes.data_modeling import DataModelId
|
|
6
7
|
|
|
7
8
|
from cognite.neat.rules import importers
|
|
8
9
|
from cognite.neat.rules.issues.formatters import FORMATTER_BY_NAME
|
|
@@ -184,6 +185,13 @@ class DMSToRules(Step):
|
|
|
184
185
|
type="string",
|
|
185
186
|
required=True,
|
|
186
187
|
),
|
|
188
|
+
Configurable(
|
|
189
|
+
name="Reference data model id",
|
|
190
|
+
value=None,
|
|
191
|
+
label="The ID of the Reference Data Model to import. Written at 'my_space:my_data_model(version=1)'. "
|
|
192
|
+
"This is typically an enterprise data model when you want to import a solution model",
|
|
193
|
+
type="string",
|
|
194
|
+
),
|
|
187
195
|
Configurable(
|
|
188
196
|
name="Report formatter",
|
|
189
197
|
value=next(iter(FORMATTER_BY_NAME.keys())),
|
|
@@ -214,8 +222,19 @@ class DMSToRules(Step):
|
|
|
214
222
|
f"or 'my_space:my_data_model', failed to parse space from {datamodel_id_str}"
|
|
215
223
|
)
|
|
216
224
|
return FlowMessage(error_text=error_text, step_execution_status=StepExecutionStatus.ABORT_AND_FAIL)
|
|
217
|
-
|
|
218
|
-
|
|
225
|
+
ref_datamodel_str = self.configs.get("Reference data model id")
|
|
226
|
+
ref_model_id: DataModelId | None = None
|
|
227
|
+
if ref_datamodel_str is not None:
|
|
228
|
+
ref_model = DataModelEntity.load(ref_datamodel_str)
|
|
229
|
+
if isinstance(ref_model, DMSUnknownEntity):
|
|
230
|
+
error_text = (
|
|
231
|
+
f"Reference data model id should be in the format 'my_space:my_data_model(version=1)' "
|
|
232
|
+
f"or 'my_space:my_data_model', failed to parse space from {ref_datamodel_str}"
|
|
233
|
+
)
|
|
234
|
+
return FlowMessage(error_text=error_text, step_execution_status=StepExecutionStatus.ABORT_AND_FAIL)
|
|
235
|
+
ref_model_id = ref_model.as_id()
|
|
236
|
+
|
|
237
|
+
dms_importer = importers.DMSImporter.from_data_model_id(cdf_client, datamodel_entity.as_id(), ref_model_id)
|
|
219
238
|
|
|
220
239
|
# if role is None, it will be inferred from the rules file
|
|
221
240
|
role = self.configs.get("Role")
|
|
@@ -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=UI_UQyLNbZGZ2bCbRSUVSxQLP1GDhHBmVI29h7BNFAE,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=2U5M6M252swvQPQyooA1EBzFUZNtcTmuSaywfJDgckM,4232
|
|
@@ -158,7 +158,7 @@ cognite/neat/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
|
158
158
|
cognite/neat/rules/_shared.py,sha256=5dc2dfwqjNB_Us27x7oRNkEoEETT0gQChoiIU8mcvyQ,170
|
|
159
159
|
cognite/neat/rules/analysis/__init__.py,sha256=J2yL0QWSvXOWLbaYPyA0HXHh3aqOWmkwobScdgVQpw8,115
|
|
160
160
|
cognite/neat/rules/analysis/_base.py,sha256=PmN5NLgGsovsHtsnvUzc_zuarWl-Xwk1azWcYKKuWdA,669
|
|
161
|
-
cognite/neat/rules/analysis/_information_rules.py,sha256=
|
|
161
|
+
cognite/neat/rules/analysis/_information_rules.py,sha256=F-LBLYyEz6B3J3v1KQ_2G79LzgMXPmcSIw6S8SMGaxs,19179
|
|
162
162
|
cognite/neat/rules/examples/__init__.py,sha256=nxIwueAcHgZhkYriGxnDLQmIyiT8PByPHbScjYKDKe0,374
|
|
163
163
|
cognite/neat/rules/examples/wind-energy.owl,sha256=NuomCA9FuuLF0JlSuG3OKqD4VBcHgSjDKFLV17G1zV8,65934
|
|
164
164
|
cognite/neat/rules/exceptions.py,sha256=YLnsbXXJdDSr_szQoioEtOdqDV8PR7RdQjpMP2SWeCs,123868
|
|
@@ -166,24 +166,24 @@ cognite/neat/rules/exporters/__init__.py,sha256=Gn3CjkVKHJF9Po1ZPH4wAJ-sRW9up7b2
|
|
|
166
166
|
cognite/neat/rules/exporters/_base.py,sha256=m63iw8xjlZbZAxGL8mn7pjGf1pW3rVv8C20_RSiu4t0,1511
|
|
167
167
|
cognite/neat/rules/exporters/_models.py,sha256=vRd0P_YsrZ1eaAGGHfdTeFunaqHdaa0ZtnWiVZBR1nc,1976
|
|
168
168
|
cognite/neat/rules/exporters/_rules2dms.py,sha256=US2IO4YTJSF_CDzau1dTpXyeHntJWVSPkMCQoUoKeC0,13688
|
|
169
|
-
cognite/neat/rules/exporters/_rules2excel.py,sha256=
|
|
169
|
+
cognite/neat/rules/exporters/_rules2excel.py,sha256=GvvjZB2Ayue08s5b6JPB1xGltp-MA7QmNk9rk1a54LE,14244
|
|
170
170
|
cognite/neat/rules/exporters/_rules2ontology.py,sha256=NWS3cn2927LQqW_PdQ-92OLIlmIKGNk7xh5yOMAyj94,20120
|
|
171
171
|
cognite/neat/rules/exporters/_rules2yaml.py,sha256=sOSdnTJ5mXuyAJECdNnNsX6oLvgETptkpgPUQbK0n2w,3026
|
|
172
172
|
cognite/neat/rules/exporters/_validation.py,sha256=OlKIyf4nhSDehJwFHDQ8Zdf6HpNfW7dSe2s67eywHu4,4078
|
|
173
173
|
cognite/neat/rules/importers/__init__.py,sha256=zqNbGpvdVhYkLjWx1i9dJ3FXzYGtuQyTydUYsj-BndQ,408
|
|
174
174
|
cognite/neat/rules/importers/_base.py,sha256=GUiJrYwJ25thI71iS9hCeP_iSZ0Vv8ou3z6MfD07FAk,4274
|
|
175
|
-
cognite/neat/rules/importers/_dms2rules.py,sha256=
|
|
175
|
+
cognite/neat/rules/importers/_dms2rules.py,sha256=5yJGYkM7lAMu-QfO0_r59WE4RGtMu2smMqLm16ohgLQ,18994
|
|
176
176
|
cognite/neat/rules/importers/_dtdl2rules/__init__.py,sha256=CNR-sUihs2mnR1bPMKs3j3L4ds3vFTsrl6YycExZTfU,68
|
|
177
177
|
cognite/neat/rules/importers/_dtdl2rules/_unit_lookup.py,sha256=wW4saKva61Q_i17guY0dc4OseJDQfqHy_QZBtm0OD6g,12134
|
|
178
178
|
cognite/neat/rules/importers/_dtdl2rules/dtdl_converter.py,sha256=ysmWUxZ0npwrTB0uiH5jA0v37sfCwowGaYk17IyxPUU,12663
|
|
179
|
-
cognite/neat/rules/importers/_dtdl2rules/dtdl_importer.py,sha256=
|
|
179
|
+
cognite/neat/rules/importers/_dtdl2rules/dtdl_importer.py,sha256=QDyGt5YBaxzF4v_oCFSgKRSpwVdVruDU3-VW0DEiHbY,6718
|
|
180
180
|
cognite/neat/rules/importers/_dtdl2rules/spec.py,sha256=tim_MfN1J0F3Oeqk3BMgIA82d_MZvhRuRMsLK3B4PYc,11897
|
|
181
181
|
cognite/neat/rules/importers/_owl2rules/__init__.py,sha256=tdGcrgtozdQyST-pTlxIa4cLBNTLvtk1nNYR4vOdFSw,63
|
|
182
182
|
cognite/neat/rules/importers/_owl2rules/_owl2classes.py,sha256=LInFeBq-NbBIuMEAwgWch2a4DbBUt4_OMqPkwehW-sw,7591
|
|
183
183
|
cognite/neat/rules/importers/_owl2rules/_owl2metadata.py,sha256=NdPN0dBB0NYkAcfC0yrYdIrGfdPbl5gfeGnSV3EtUPM,7786
|
|
184
184
|
cognite/neat/rules/importers/_owl2rules/_owl2properties.py,sha256=BLptGmH-Aa5gZu0hDIxSZTrn9GmB2FicWgRYoETLSnQ,7437
|
|
185
185
|
cognite/neat/rules/importers/_owl2rules/_owl2rules.py,sha256=H2Vv56hXGFnq_b0obWGWr5ErDFcoWpT8G2uy89100cU,6925
|
|
186
|
-
cognite/neat/rules/importers/_spreadsheet2rules.py,sha256=
|
|
186
|
+
cognite/neat/rules/importers/_spreadsheet2rules.py,sha256=nKSJyZGoTho0bqQ_5_1XB9Z1C-MwovRgkVrC-AhOuzs,12438
|
|
187
187
|
cognite/neat/rules/importers/_yaml2rules.py,sha256=F0uksSz1A3po5OlRM2152_w5j8D9oYTLB9NFTkSMlWI,4275
|
|
188
188
|
cognite/neat/rules/issues/__init__.py,sha256=Ms6jgCxCezc5IgTOwCFtXQPtoVFfOvdcXj84_rs917I,563
|
|
189
189
|
cognite/neat/rules/issues/base.py,sha256=i2aTC-wq3UVW2bj_7wKeuhYxCpMD06Bd9-m00bWcTBs,6438
|
|
@@ -191,32 +191,35 @@ cognite/neat/rules/issues/dms.py,sha256=CKztcpNu9E_ygbAmiODOhaYKPX6o9eaXeiod7Ak-
|
|
|
191
191
|
cognite/neat/rules/issues/fileread.py,sha256=ao199mtvhPSW0IA8ZQZ0RzuLIIipYtL0jp6fLqxb4_c,5748
|
|
192
192
|
cognite/neat/rules/issues/formatters.py,sha256=_ag2bJ9hncOj8pAGJvTTEPs9kTtxbD7vkqvS9Zcnizc,3385
|
|
193
193
|
cognite/neat/rules/issues/importing.py,sha256=l0VKmOWN-qyvOMukNAVJZrN2WGD2YcGXeCKbxV-G_vA,12726
|
|
194
|
-
cognite/neat/rules/issues/spreadsheet.py,sha256
|
|
194
|
+
cognite/neat/rules/issues/spreadsheet.py,sha256=1NZQ3a_zCtErAoMKzEt5UMJsukaysoOVmW7WUF6JK1s,15825
|
|
195
195
|
cognite/neat/rules/issues/spreadsheet_file.py,sha256=YCp0Pk_TsiqYuOPdWpjUpre-zvi2c5_MvrC_dxw10YY,4964
|
|
196
196
|
cognite/neat/rules/models/__init__.py,sha256=aqhQUidHYgOk5_iqdi6s72s2g8qyMRFXShYzh-ctNpw,782
|
|
197
|
-
cognite/neat/rules/models/_base.py,sha256=
|
|
197
|
+
cognite/neat/rules/models/_base.py,sha256=D9MQElY9baxmf-BJpuLYl3R3h_wIOdrBTufMThRx_Jo,11126
|
|
198
198
|
cognite/neat/rules/models/_rdfpath.py,sha256=RoHnfWufjnDtwJh7UUzWKoJz8luvX7Gb5SDQORfkQTE,11030
|
|
199
199
|
cognite/neat/rules/models/_types/__init__.py,sha256=l1tGxzE7ezNHIL72AoEvNHN2IFuitxOLxiHJG__s6t4,305
|
|
200
200
|
cognite/neat/rules/models/_types/_base.py,sha256=2GhLUE1ukV8X8SGL_JDxpbWGZyAvOnSqAE6JmDh5wbI,929
|
|
201
201
|
cognite/neat/rules/models/_types/_field.py,sha256=74WfCSVbTubpK4n4VsysQqCch6VI8IcPqnHQpvNbFZ8,3197
|
|
202
202
|
cognite/neat/rules/models/data_types.py,sha256=lanwkhwG8iHKfjYfia4v2SBTJrMeXOsqaVkVEP2QMXs,6078
|
|
203
203
|
cognite/neat/rules/models/dms/__init__.py,sha256=Wzyqzz2ZIjpUbDg04CMuuIAw-f2A02DayNeqO9R-2Hw,491
|
|
204
|
-
cognite/neat/rules/models/dms/_converter.py,sha256=
|
|
205
|
-
cognite/neat/rules/models/dms/_exporter.py,sha256=
|
|
206
|
-
cognite/neat/rules/models/dms/_rules.py,sha256=
|
|
207
|
-
cognite/neat/rules/models/dms/_rules_input.py,sha256=
|
|
208
|
-
cognite/neat/rules/models/dms/_schema.py,sha256=
|
|
209
|
-
cognite/neat/rules/models/dms/_serializer.py,sha256=
|
|
210
|
-
cognite/neat/rules/models/dms/_validation.py,sha256
|
|
204
|
+
cognite/neat/rules/models/dms/_converter.py,sha256=QaJT0z0Yo4gkG9tHPZkU8idF8PK7c-tDahbyIT-WJQU,5959
|
|
205
|
+
cognite/neat/rules/models/dms/_exporter.py,sha256=u1E53704ly1cH6-tM3EKT7Vksq1JFlrbTfQI33qR1wc,18984
|
|
206
|
+
cognite/neat/rules/models/dms/_rules.py,sha256=WyaUsIWM0a-SytRZ-5n2f_AFXwyV_brzzHqmq7O_n0I,15690
|
|
207
|
+
cognite/neat/rules/models/dms/_rules_input.py,sha256=apDDTQll9UAyYL5gS2vDxHsujWrGBilTp7lK2kzJWO8,13467
|
|
208
|
+
cognite/neat/rules/models/dms/_schema.py,sha256=A4z8CINmLQgWzHoScxejRPMRo40ngKlyp1gOdPto8yU,43808
|
|
209
|
+
cognite/neat/rules/models/dms/_serializer.py,sha256=JeaTIOERpYY1Demihqg0OHJ1EvBrPMBIF1EPjeOgGDA,6669
|
|
210
|
+
cognite/neat/rules/models/dms/_validation.py,sha256=k2UcLlo_WU6iO-p_wjHToiLExVc22KGLP3lBuW8I_EA,12963
|
|
211
211
|
cognite/neat/rules/models/domain.py,sha256=13OhG-XavE5ipU2ICaYaUhz60volkuVfbJrsp0PhaUU,2993
|
|
212
212
|
cognite/neat/rules/models/entities.py,sha256=iBG84Jr1qQ7PvkMJUJzJ1oWApeONb1IACixdJSztUhk,16395
|
|
213
|
-
cognite/neat/rules/models/information/__init__.py,sha256=
|
|
213
|
+
cognite/neat/rules/models/information/__init__.py,sha256=HR6g8xgyU53U7Ck8pPdbT70817Q4NC1r1pCRq5SA8iw,291
|
|
214
214
|
cognite/neat/rules/models/information/_converter.py,sha256=TxVYzR41Rhejf7ep73oqMRNFPOdxAbamoEWnvsnXbng,8040
|
|
215
|
-
cognite/neat/rules/models/information/_rules.py,sha256=
|
|
215
|
+
cognite/neat/rules/models/information/_rules.py,sha256=JuP0RAmTju5WwDJJAoTI-gogRRBBa8eCf-SE2k8FGlQ,13365
|
|
216
|
+
cognite/neat/rules/models/information/_rules_input.py,sha256=IZp_Wnrac0nVaHKth1YttWQOs-kULGKLMtngNQFY40A,10147
|
|
217
|
+
cognite/neat/rules/models/information/_serializer.py,sha256=M4vOr0tgrD-n_pir-VDHwclgAjbBOu2HKsxt_PTGO7g,3989
|
|
218
|
+
cognite/neat/rules/models/information/_validation.py,sha256=Is2GzL2lZU3A5zPu3NjvlXfmIU2_Y10C5Nxi5Denz4g,7528
|
|
216
219
|
cognite/neat/rules/models/wrapped_entities.py,sha256=ThhjnNNrpgz0HeORIQ8Q894trxP73P7T_TuZj6qH2CU,7157
|
|
217
220
|
cognite/neat/utils/__init__.py,sha256=l5Nyqhqo25bcQXCOb_lk01cr-UXsG8cczz_y_I0u6bg,68
|
|
218
221
|
cognite/neat/utils/auxiliary.py,sha256=E2-YtddzScvN7l7j0kNYIMlfqIUT9NWMqLpcJYPK4rY,309
|
|
219
|
-
cognite/neat/utils/cdf.py,sha256=
|
|
222
|
+
cognite/neat/utils/cdf.py,sha256=piRx-6GRz4cCfBZD5rU0OM6ixQ3cj5TMzI0yCYUveR8,2422
|
|
220
223
|
cognite/neat/utils/cdf_classes.py,sha256=NEmz5UprBlqfqZnqJkRk5xjSpzazwHbhcWsMH_GNxP8,5831
|
|
221
224
|
cognite/neat/utils/cdf_loaders/__init__.py,sha256=s2aPR5XLo6WZ0ybstAJlcGFYkA7CyHW1XO-NYpL0V6o,483
|
|
222
225
|
cognite/neat/utils/cdf_loaders/_base.py,sha256=j85HINIx4poGD-0dN3JPHTqjOS1XhCxv7G9s1gC1GBo,2057
|
|
@@ -254,8 +257,8 @@ cognite/neat/workflows/steps/lib/current/__init__.py,sha256=c22IznGdCSNCpXCi_yon
|
|
|
254
257
|
cognite/neat/workflows/steps/lib/current/graph_extractor.py,sha256=vW9UpJScx5dFVCSairpOdWRdBdLpkCt2kNh6litbF0o,5161
|
|
255
258
|
cognite/neat/workflows/steps/lib/current/graph_loader.py,sha256=HfGg1HRZhbV58TFu89FTjKeUxGsbCYLeFJIQFDN_pQM,2341
|
|
256
259
|
cognite/neat/workflows/steps/lib/current/graph_store.py,sha256=r7VTxdaz8jJQU7FJbnRDMxvEYbSAZFNMABhPyfNwiFk,6295
|
|
257
|
-
cognite/neat/workflows/steps/lib/current/rules_exporter.py,sha256=
|
|
258
|
-
cognite/neat/workflows/steps/lib/current/rules_importer.py,sha256=
|
|
260
|
+
cognite/neat/workflows/steps/lib/current/rules_exporter.py,sha256=BWscuNvTu_u6QQSxkVz4X4A1wAHW2Kfku8lhgrIK51M,23886
|
|
261
|
+
cognite/neat/workflows/steps/lib/current/rules_importer.py,sha256=BmbLsly6ZRhMJ48RAoVXVK7H3JTKRtR40SD9-qcQdi4,11459
|
|
259
262
|
cognite/neat/workflows/steps/lib/current/rules_validator.py,sha256=LwF9lXlnuPOxDSsOMMTHBi2BHc5rk08IF5zahS9yQuw,4844
|
|
260
263
|
cognite/neat/workflows/steps/lib/io/__init__.py,sha256=k7IPbIq3ey19oRc5sA_15F99-O6dxzqbm1LihGRRo5A,32
|
|
261
264
|
cognite/neat/workflows/steps/lib/io/io_steps.py,sha256=QAGypoi1vP32BRiIgBZ0B4qsbFMcwhzpRiVUUnWysLA,16874
|
|
@@ -272,8 +275,8 @@ cognite/neat/workflows/steps_registry.py,sha256=fkTX14ZA7_gkUYfWIlx7A1XbCidvqR23
|
|
|
272
275
|
cognite/neat/workflows/tasks.py,sha256=dqlJwKAb0jlkl7abbY8RRz3m7MT4SK8-7cntMWkOYjw,788
|
|
273
276
|
cognite/neat/workflows/triggers.py,sha256=_BLNplzoz0iic367u1mhHMHiUrCwP-SLK6_CZzfODX0,7071
|
|
274
277
|
cognite/neat/workflows/utils.py,sha256=gKdy3RLG7ctRhbCRwaDIWpL9Mi98zm56-d4jfHDqP1E,453
|
|
275
|
-
cognite_neat-0.77.
|
|
276
|
-
cognite_neat-0.77.
|
|
277
|
-
cognite_neat-0.77.
|
|
278
|
-
cognite_neat-0.77.
|
|
279
|
-
cognite_neat-0.77.
|
|
278
|
+
cognite_neat-0.77.4.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
|
|
279
|
+
cognite_neat-0.77.4.dist-info/METADATA,sha256=WCnAyTXFO9SjdNMcEdoyjwic7YAm8nsAg0kTXDfjsyU,9316
|
|
280
|
+
cognite_neat-0.77.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
281
|
+
cognite_neat-0.77.4.dist-info/entry_points.txt,sha256=61FPqiWb25vbqB0KI7znG8nsg_ibLHBvTjYnkPvNFso,50
|
|
282
|
+
cognite_neat-0.77.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|