cognite-neat 0.94.0__py3-none-any.whl → 0.95.0__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.

@@ -5,6 +5,7 @@ from collections.abc import Hashable
5
5
  from datetime import datetime
6
6
  from typing import TYPE_CHECKING, Any, ClassVar, Literal
7
7
 
8
+ import pandas as pd
8
9
  from cognite.client import data_modeling as dm
9
10
  from pydantic import Field, field_serializer, field_validator, model_validator
10
11
  from pydantic_core.core_schema import SerializationInfo, ValidationInfo
@@ -451,3 +452,18 @@ class DMSRules(BaseRules):
451
452
  from ._exporter import _DMSExporter
452
453
 
453
454
  return _DMSExporter(self, include_pipeline, instance_space).to_schema()
455
+
456
+ def _repr_html_(self) -> str:
457
+ summary = {
458
+ "type": "Physical Data Model",
459
+ "intended for": "DMS Architect",
460
+ "name": self.metadata.name,
461
+ "space": self.metadata.space,
462
+ "external_id": self.metadata.external_id,
463
+ "version": self.metadata.version,
464
+ "views": len(self.views),
465
+ "containers": len(self.containers) if self.containers else 0,
466
+ "properties": len(self.properties),
467
+ }
468
+
469
+ return pd.DataFrame([summary]).T.rename(columns={0: ""})._repr_html_() # type: ignore
@@ -3,6 +3,7 @@ from dataclasses import dataclass
3
3
  from datetime import datetime
4
4
  from typing import Any, Literal
5
5
 
6
+ import pandas as pd
6
7
  from cognite.client import data_modeling as dm
7
8
 
8
9
  from cognite.neat._rules.models._base_input import InputComponent, InputRules
@@ -291,3 +292,18 @@ class DMSInputRules(InputRules[DMSRules]):
291
292
  "Last": last,
292
293
  "Reference": reference,
293
294
  }
295
+
296
+ def _repr_html_(self) -> str:
297
+ summary = {
298
+ "type": "Physical Data Model",
299
+ "intended for": "DMS Architect",
300
+ "name": self.metadata.name,
301
+ "space": self.metadata.space,
302
+ "external_id": self.metadata.external_id,
303
+ "version": self.metadata.version,
304
+ "views": len(self.views),
305
+ "containers": len(self.containers) if self.containers else 0,
306
+ "properties": len(self.properties),
307
+ }
308
+
309
+ return pd.DataFrame([summary]).T.rename(columns={0: ""})._repr_html_() # type: ignore
@@ -4,6 +4,7 @@ from collections.abc import Hashable
4
4
  from datetime import datetime
5
5
  from typing import TYPE_CHECKING, Any, ClassVar
6
6
 
7
+ import pandas as pd
7
8
  from pydantic import Field, field_serializer, field_validator, model_validator
8
9
  from pydantic_core.core_schema import SerializationInfo
9
10
  from rdflib import Namespace
@@ -380,3 +381,16 @@ class InformationRules(BaseRules):
380
381
  from cognite.neat._rules.transformers._converters import _InformationRulesConverter
381
382
 
382
383
  return _InformationRulesConverter(self).as_dms_rules()
384
+
385
+ def _repr_html_(self) -> str:
386
+ summary = {
387
+ "type": "Logical Data Model",
388
+ "intended for": "Information Architect",
389
+ "name": self.metadata.name,
390
+ "external_id": self.metadata.prefix,
391
+ "version": self.metadata.version,
392
+ "classes": len(self.classes),
393
+ "properties": len(self.properties),
394
+ }
395
+
396
+ return pd.DataFrame([summary]).T.rename(columns={0: ""})._repr_html_() # type: ignore
@@ -2,6 +2,7 @@ from dataclasses import dataclass, field
2
2
  from datetime import datetime
3
3
  from typing import Any, Literal
4
4
 
5
+ import pandas as pd
5
6
  from rdflib import Namespace
6
7
 
7
8
  from cognite.neat._rules.models._base_input import InputComponent, InputRules
@@ -144,3 +145,16 @@ class InformationInputRules(InputRules[InformationRules]):
144
145
  Last=last,
145
146
  Reference=reference,
146
147
  )
148
+
149
+ def _repr_html_(self) -> str:
150
+ summary = {
151
+ "type": "Logical Data Model",
152
+ "intended for": "Information Architect",
153
+ "name": self.metadata.name,
154
+ "external_id": self.metadata.prefix,
155
+ "version": self.metadata.version,
156
+ "classes": len(self.classes),
157
+ "properties": len(self.properties),
158
+ }
159
+
160
+ return pd.DataFrame([summary]).T.rename(columns={0: ""})._repr_html_() # type: ignore
@@ -1,13 +1,11 @@
1
1
  from typing import Literal, cast
2
2
 
3
- import pandas as pd
4
3
  from cognite.client import CogniteClient
5
4
 
6
5
  from cognite.neat._issues import IssueList
7
6
  from cognite.neat._rules import importers
8
7
  from cognite.neat._rules._shared import ReadRules
9
8
  from cognite.neat._rules.models import DMSRules
10
- from cognite.neat._rules.models._base_input import InputComponent
11
9
  from cognite.neat._rules.models.information._rules import InformationRules
12
10
  from cognite.neat._rules.models.information._rules_input import InformationInputRules
13
11
  from cognite.neat._rules.transformers import ConvertToRules, VerifyAnyRules
@@ -72,13 +70,10 @@ class NeatSession:
72
70
 
73
71
  output = []
74
72
  if state.input_rules and not state.verified_rules:
75
- metadata = cast(InputComponent, state.input_rule.rules.metadata) # type: ignore[union-attr]
76
- table = pd.DataFrame([metadata.dump()]).T._repr_html_() # type: ignore[operator]
77
- output.append(f"<H2>Raw Data Model</H2><br />{table}")
73
+ output.append(f"<H2>Raw Data Model</H2><br />{state.input_rule.rules._repr_html_()}") # type: ignore
78
74
 
79
75
  if state.verified_rules:
80
- table = pd.DataFrame([state.last_verified_rule.metadata.model_dump()]).T._repr_html_() # type: ignore[operator]
81
- output.append(f"<H2>Data Model</H2><br />{table}")
76
+ output.append(f"<H2>Data Model</H2><br />{state.last_verified_rule._repr_html_()}") # type: ignore
82
77
 
83
78
  if state.has_store:
84
79
  output.append(f"<H2>Instances</H2> {state.store._repr_html_()}")
@@ -9,8 +9,10 @@ from cognite.neat._rules.models.information._rules_input import InformationInput
9
9
  from cognite.neat._rules.transformers import ReduceCogniteModel, ToCompliantEntities, ToExtension
10
10
 
11
11
  from ._state import SessionState
12
+ from .exceptions import intercept_session_exceptions
12
13
 
13
14
 
15
+ @intercept_session_exceptions
14
16
  class PrepareAPI:
15
17
  def __init__(self, state: SessionState, verbose: bool) -> None:
16
18
  self._state = state
@@ -18,6 +20,7 @@ class PrepareAPI:
18
20
  self.data_model = DataModelPrepareAPI(state, verbose)
19
21
 
20
22
 
23
+ @intercept_session_exceptions
21
24
  class DataModelPrepareAPI:
22
25
  def __init__(self, state: SessionState, verbose: bool) -> None:
23
26
  self._state = state
@@ -12,8 +12,10 @@ from cognite.neat._rules._shared import ReadRules
12
12
 
13
13
  from ._state import SessionState
14
14
  from ._wizard import NeatObjectType, RDFFileType, object_wizard, rdf_dm_wizard
15
+ from .exceptions import intercept_session_exceptions
15
16
 
16
17
 
18
+ @intercept_session_exceptions
17
19
  class ReadAPI:
18
20
  def __init__(self, state: SessionState, client: CogniteClient | None, verbose: bool) -> None:
19
21
  self._state = state
@@ -23,6 +25,7 @@ class ReadAPI:
23
25
  self.excel = ExcelReadAPI(state, client, verbose)
24
26
 
25
27
 
28
+ @intercept_session_exceptions
26
29
  class BaseReadAPI:
27
30
  def __init__(self, state: SessionState, client: CogniteClient | None, verbose: bool) -> None:
28
31
  self._state = state
@@ -47,6 +50,7 @@ class BaseReadAPI:
47
50
  raise ValueError(f"Expected str or Path, got {type(io)}")
48
51
 
49
52
 
53
+ @intercept_session_exceptions
50
54
  class CDFReadAPI(BaseReadAPI):
51
55
  def data_model(self, data_model_id: DataModelIdentifier) -> IssueList:
52
56
  if self._client is None:
@@ -58,6 +62,7 @@ class CDFReadAPI(BaseReadAPI):
58
62
  return input_rules.issues
59
63
 
60
64
 
65
+ @intercept_session_exceptions
61
66
  class ExcelReadAPI(BaseReadAPI):
62
67
  def __call__(self, io: Any) -> IssueList:
63
68
  filepath = self._return_filepath(io)
@@ -66,6 +71,7 @@ class ExcelReadAPI(BaseReadAPI):
66
71
  return input_rules.issues
67
72
 
68
73
 
74
+ @intercept_session_exceptions
69
75
  class RDFReadAPI(BaseReadAPI):
70
76
  def __init__(self, state: SessionState, client: CogniteClient | None, verbose: bool) -> None:
71
77
  super().__init__(state, client, verbose)
@@ -13,8 +13,10 @@ from cognite.neat._session.exceptions import NeatSessionError
13
13
  from cognite.neat._utils.rdf_ import remove_namespace_from_uri
14
14
 
15
15
  from ._state import SessionState
16
+ from .exceptions import intercept_session_exceptions
16
17
 
17
18
 
19
+ @intercept_session_exceptions
18
20
  class ShowAPI:
19
21
  def __init__(self, state: SessionState) -> None:
20
22
  self._state = state
@@ -22,6 +24,7 @@ class ShowAPI:
22
24
  self.instances = ShowInstanceAPI(self._state)
23
25
 
24
26
 
27
+ @intercept_session_exceptions
25
28
  class ShowInstanceAPI:
26
29
  def __init__(self, state: SessionState) -> None:
27
30
  self._state = state
@@ -134,6 +137,7 @@ class ShowInstanceAPI:
134
137
  return template
135
138
 
136
139
 
140
+ @intercept_session_exceptions
137
141
  class ShowDataModelAPI:
138
142
  def __init__(self, state: SessionState) -> None:
139
143
  self._state = state
@@ -8,8 +8,10 @@ from cognite.neat._rules import exporters
8
8
  from cognite.neat._session._wizard import space_wizard
9
9
 
10
10
  from ._state import SessionState
11
+ from .exceptions import intercept_session_exceptions
11
12
 
12
13
 
14
+ @intercept_session_exceptions
13
15
  class ToAPI:
14
16
  def __init__(self, state: SessionState, client: CogniteClient | None, verbose: bool) -> None:
15
17
  self._state = state
@@ -39,6 +41,7 @@ class ToAPI:
39
41
  return None
40
42
 
41
43
 
44
+ @intercept_session_exceptions
42
45
  class CDFToAPI:
43
46
  def __init__(self, state: SessionState, client: CogniteClient | None, verbose: bool) -> None:
44
47
  self._client = client
@@ -23,6 +23,8 @@ def _intercept_session_exceptions(func: Callable):
23
23
  return func(*args, **kwargs)
24
24
  except NeatSessionError as e:
25
25
  action = func.__name__
26
+ if action == "__call__":
27
+ action = func.__qualname__.removesuffix(".__call__").removesuffix("API")
26
28
  print(f"{_PREFIX} Cannot {action}: {e}")
27
29
 
28
30
  return wrapper
@@ -33,10 +35,11 @@ def intercept_session_exceptions(cls: type):
33
35
  while to_check:
34
36
  cls = to_check.pop()
35
37
  for attr_name in dir(cls):
36
- if not attr_name.startswith("_"):
37
- attr = getattr(cls, attr_name)
38
- if callable(attr):
39
- setattr(cls, attr_name, _intercept_session_exceptions(attr))
40
- elif isinstance(attr, type):
41
- to_check.append(attr)
38
+ if attr_name.startswith("_") and not attr_name == "__call__":
39
+ continue
40
+ attr = getattr(cls, attr_name)
41
+ if callable(attr):
42
+ setattr(cls, attr_name, _intercept_session_exceptions(attr))
43
+ elif isinstance(attr, type):
44
+ to_check.append(attr)
42
45
  return cls
cognite/neat/_version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.94.0"
1
+ __version__ = "0.95.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cognite-neat
3
- Version: 0.94.0
3
+ Version: 0.95.0
4
4
  Summary: Knowledge graph transformation
5
5
  Home-page: https://cognite-neat.readthedocs-hosted.com/
6
6
  License: Apache-2.0
@@ -30,7 +30,7 @@ Requires-Dist: google-auth-oauthlib ; extra == "google"
30
30
  Requires-Dist: gspread ; extra == "google"
31
31
  Requires-Dist: ipycytoscape (>=1.3.3,<2.0.0)
32
32
  Requires-Dist: jinja2 (>=3.1.2,<4.0.0) ; extra == "graphql" or extra == "all"
33
- Requires-Dist: matplotlib (>=3.9.2,<4.0.0)
33
+ Requires-Dist: matplotlib (==3.5.2)
34
34
  Requires-Dist: mkdocs ; extra == "docs"
35
35
  Requires-Dist: mkdocs-autorefs (>=0.5.0,<0.6.0) ; extra == "docs"
36
36
  Requires-Dist: mkdocs-git-authors-plugin ; extra == "docs"
@@ -186,8 +186,8 @@ cognite/neat/_rules/models/asset/_validation.py,sha256=6u86qLlr1ehG1I5kIZhfCYTqU
186
186
  cognite/neat/_rules/models/data_types.py,sha256=ACQjS9vs7EjaNSO8R1kHiiNYbdeVQLCvxJYfZhWF8mM,9620
187
187
  cognite/neat/_rules/models/dms/__init__.py,sha256=CUqUlVjz4yZX_-61F-2ofSoV7N9MlSYx2N7vM-omp7E,640
188
188
  cognite/neat/_rules/models/dms/_exporter.py,sha256=dZAl5439p2K6LsA4yNpwCsEgNsxVkGjcmV9JGL3JAYE,30345
189
- cognite/neat/_rules/models/dms/_rules.py,sha256=8VlGchvUHtBrcaP6DhpkQn6qBgd2zlmeQoakh09axuk,19369
190
- cognite/neat/_rules/models/dms/_rules_input.py,sha256=LgehVseHiKLKfc7Osg3q8n1H64DUIe2iRDayh6Be4io,10919
189
+ cognite/neat/_rules/models/dms/_rules.py,sha256=JCYss9Nqf2tloyZj4gZktaW_45gMCjw7aLf5XeD_kRk,19980
190
+ cognite/neat/_rules/models/dms/_rules_input.py,sha256=MjkkoEa5lRzQE0NUJ7TyQsrelWSoyGCCDFjMVG5pQvc,11530
191
191
  cognite/neat/_rules/models/dms/_schema.py,sha256=HSmSDvOm5S0x4Vb9tH9Jvd5i9tXiiM08E_Sdu6q_iA8,50783
192
192
  cognite/neat/_rules/models/dms/_validation.py,sha256=2KL1_GNnJ5cjsdk9uJTBV691_o8ZehqmgXSiaN5q8aw,15798
193
193
  cognite/neat/_rules/models/domain.py,sha256=HOZ6e6pIWJWWYTTDPDWpuwEHoiUacOdkvjAI81vMdMk,3999
@@ -199,8 +199,8 @@ cognite/neat/_rules/models/entities/_single_value.py,sha256=JLX8t-Uft0qeY_honmv0
199
199
  cognite/neat/_rules/models/entities/_types.py,sha256=df9rnXJJKciv2Bp-Ve2q4xdEJt6WWniq12Z0hW2d6sk,1917
200
200
  cognite/neat/_rules/models/entities/_wrapped.py,sha256=FxC8HztW_tUUtuArAOwxyFfkdJnSEB4bgZoNmmmfiPk,7137
201
201
  cognite/neat/_rules/models/information/__init__.py,sha256=fVvgXt-JuyZCP_mLgIVaeKD9pdAXe2BWUxU_BZs8e5g,480
202
- cognite/neat/_rules/models/information/_rules.py,sha256=myMmtJLJs1nF81Su96wmDTM9-DP7dF-Ezs41RlmqMzk,14869
203
- cognite/neat/_rules/models/information/_rules_input.py,sha256=LqWJM7D4kjPPC3Ok7WbsqwYpbSIk8hQun22JK8gVUFw,5277
202
+ cognite/neat/_rules/models/information/_rules.py,sha256=BXsQvDrtHBrLzLZt9Q9QGHfzW8OeGdJ-M2dT_TcdocE,15370
203
+ cognite/neat/_rules/models/information/_rules_input.py,sha256=c7JPGe0n0srF2LM9x5_5EtMx8-8EPEZ_HDImuR9tV2I,5778
204
204
  cognite/neat/_rules/models/information/_validation.py,sha256=0ntsrXJV28yOFfhhXcKsP9TUr0LwKG_vaYPMHzHbTEI,9252
205
205
  cognite/neat/_rules/models/mapping/__init__.py,sha256=jSn-dCckmVQF0ClSBOBvVacprzNxdhPpdyIlYVajjMY,198
206
206
  cognite/neat/_rules/models/mapping/_base.py,sha256=xDjtbNvDXAh0F93WSvgdwoI_5K9XYu_w9hhG02ZZKtg,5922
@@ -212,14 +212,14 @@ cognite/neat/_rules/transformers/_mapping.py,sha256=RWHKPMaP3JdeCNvoDGu9ZGHxfyeI
212
212
  cognite/neat/_rules/transformers/_pipelines.py,sha256=-E5Hgitnr6ee8R9_3sqtjmWIPJ0w1xaLErG6Fo6ExVU,2603
213
213
  cognite/neat/_rules/transformers/_verification.py,sha256=330I1i3Va7Nau3DK3bTgEEGSHppmLvT-1yBMocDxV1A,4694
214
214
  cognite/neat/_session/__init__.py,sha256=fxQ5URVlUnmEGYyB8Baw7IDq-uYacqkigbc4b-Pr9Fw,58
215
- cognite/neat/_session/_base.py,sha256=9QgOUeizAwG9P7xy5J8zOsRd5cMMkncYgv6PTeWgd_k,3564
216
- cognite/neat/_session/_prepare.py,sha256=u7dJ4nZqB9j6JWoBx6em9ABKc_PA_yaRQWfiI1n3iks,2484
217
- cognite/neat/_session/_read.py,sha256=JQyxG1-QyX8fbiUnwVexKzlgWMg9VUeTJvC0uFgAg_U,4401
218
- cognite/neat/_session/_show.py,sha256=q1cuqpDRaNS1hCwgvpxk-nR1V3pcYPyQdyRn5zUMGWQ,10217
215
+ cognite/neat/_session/_base.py,sha256=VSYrKWCgyzV4RL8X7TESNDEdm-LBs6yz6OKl0EfrxxA,3250
216
+ cognite/neat/_session/_prepare.py,sha256=ZG8bJiLbKsQ5iEwPOnl7rr5pRl0cnVXZ0N-nCSLLrA8,2597
217
+ cognite/neat/_session/_read.py,sha256=ONYiNrGmN6G5iKsk30rg4OgddwLnbPBDMQKamNx3XYA,4604
218
+ cognite/neat/_session/_show.py,sha256=VZfgJIfEmU1lwejxcSW5sax0otLsTXi-waBGATfC6gc,10360
219
219
  cognite/neat/_session/_state.py,sha256=ef7OiCxavk4_asIivENaWrvC3HcXZNV6wGldus55JD0,2488
220
- cognite/neat/_session/_to.py,sha256=u--yGD2y9JKV-sf34PYsMf-nc9Qs2yibpPsv6IG0CLA,2125
220
+ cognite/neat/_session/_to.py,sha256=3StR71QNEb8JKW-O2iI3aNTlT-wRRaabDg6dovMHWRw,2238
221
221
  cognite/neat/_session/_wizard.py,sha256=Rdld2eZ-Q5BYbmAwW8FlfAYebdlw_P6L6V2WSDk-dHI,1306
222
- cognite/neat/_session/exceptions.py,sha256=qT0Mq3h-0NaDatvyr2D476LkSjmvyZtNmmLXtd1SLVg,1106
222
+ cognite/neat/_session/exceptions.py,sha256=tVearBcnz7gq0Wn5f7qssCUML_4oxrEvTCj6QnIcCxo,1265
223
223
  cognite/neat/_shared.py,sha256=RSaHm2eJceTlvb-hMMe4nHgoHdPYDfN3XcxDXo24k3A,1530
224
224
  cognite/neat/_store/__init__.py,sha256=G-VG_YwfRt1kuPao07PDJyZ3w_0-eguzLUM13n-Z_RA,64
225
225
  cognite/neat/_store/_base.py,sha256=xi9uxV12X5XcGW-fzTEeDfaTM6Rkt-KpGaeyLXqep4Q,14205
@@ -240,7 +240,7 @@ cognite/neat/_utils/text.py,sha256=PvTEsEjaTu8SE8yYaKUrce4msboMj933dK7-0Eey_rE,3
240
240
  cognite/neat/_utils/time_.py,sha256=O30LUiDH9TdOYz8_a9pFqTtJdg8vEjC3qHCk8xZblG8,345
241
241
  cognite/neat/_utils/upload.py,sha256=X5GGWHswnW0BrL2ulmm5MnKKtn-t1C8Ps3gb9Byc914,4016
242
242
  cognite/neat/_utils/xml_.py,sha256=FQkq84u35MUsnKcL6nTMJ9ajtG9D5i1u4VBnhGqP2DQ,1710
243
- cognite/neat/_version.py,sha256=BbCpQB0IaKmq_fOtysTb_iVtvqbH-vHS1DoS1eLd4w8,23
243
+ cognite/neat/_version.py,sha256=1KBvo1_4ig2ZeMfCvFApYtfDll8Ysfu6h45ByRERz1E,23
244
244
  cognite/neat/_workflows/__init__.py,sha256=S0fZq7kvoqDKodHu1UIPsqcpdvXoefUWRPt1lqeQkQs,420
245
245
  cognite/neat/_workflows/base.py,sha256=O1pcmfbme2gIVF2eOGrKZSUDmhZc8L9rI8UfvLN2YAM,26839
246
246
  cognite/neat/_workflows/cdf_store.py,sha256=3pebnATPo6In4-1srpa3wzstynTOi3T6hwFX5uaie4c,18050
@@ -269,8 +269,8 @@ cognite/neat/_workflows/tasks.py,sha256=dr2xuIb8P5e5e9p_fjzRlvDbKsre2xGYrkc3wnRx
269
269
  cognite/neat/_workflows/triggers.py,sha256=u69xOsaTtM8_WD6ZeIIBB-XKwvlZmPHAsZQh_TnyHcM,7073
270
270
  cognite/neat/_workflows/utils.py,sha256=gKdy3RLG7ctRhbCRwaDIWpL9Mi98zm56-d4jfHDqP1E,453
271
271
  cognite/neat/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
272
- cognite_neat-0.94.0.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
273
- cognite_neat-0.94.0.dist-info/METADATA,sha256=aKSpijqnnPjjnO0NTC98tdm4YBbP67wwGz8tM_DSnus,9668
274
- cognite_neat-0.94.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
275
- cognite_neat-0.94.0.dist-info/entry_points.txt,sha256=SsQlnl8SNMSSjE3acBI835JYFtsIinLSbVmHmMEXv6E,51
276
- cognite_neat-0.94.0.dist-info/RECORD,,
272
+ cognite_neat-0.95.0.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
273
+ cognite_neat-0.95.0.dist-info/METADATA,sha256=GGSZ4F6EOmFOFIn6ondR3nEJeOe1LLWolqm48mR4wis,9661
274
+ cognite_neat-0.95.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
275
+ cognite_neat-0.95.0.dist-info/entry_points.txt,sha256=SsQlnl8SNMSSjE3acBI835JYFtsIinLSbVmHmMEXv6E,51
276
+ cognite_neat-0.95.0.dist-info/RECORD,,