cognite-neat 0.100.1__py3-none-any.whl → 0.101.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.

@@ -68,10 +68,16 @@ class InformationClass(SheetRow):
68
68
  implements: Which classes the current class implements.
69
69
  """
70
70
 
71
- class_: ClassEntityType = Field(alias="Class")
72
- name: str | None = Field(alias="Name", default=None)
73
- description: str | None = Field(alias="Description", default=None)
74
- implements: ClassEntityList | None = Field(alias="Implements", default=None)
71
+ class_: ClassEntityType = Field(
72
+ alias="Class", description="Class id being defined, use strongly advise `PascalCase` usage."
73
+ )
74
+ name: str | None = Field(alias="Name", default=None, description="Human readable name of the class.")
75
+ description: str | None = Field(alias="Description", default=None, description="Short description of the class.")
76
+ implements: ClassEntityList | None = Field(
77
+ alias="Implements",
78
+ default=None,
79
+ description="List of classes (comma separated) that the current class implements (parents).",
80
+ )
75
81
 
76
82
  physical: URIRefType | None = Field(
77
83
  None,
@@ -119,17 +125,40 @@ class InformationProperty(SheetRow):
119
125
  knowledge graph. Defaults to None (no transformation)
120
126
  """
121
127
 
122
- class_: ClassEntityType = Field(alias="Class")
123
- property_: InformationPropertyType = Field(alias="Property")
124
- name: str | None = Field(alias="Name", default=None)
125
- description: str | None = Field(alias="Description", default=None)
128
+ class_: ClassEntityType = Field(
129
+ alias="Class", description="Class id that the property is defined for, strongly advise `PascalCase` usage."
130
+ )
131
+ property_: InformationPropertyType = Field(
132
+ alias="Property", description="Property id, strongly advised to `camelCase` usage."
133
+ )
134
+ name: str | None = Field(alias="Name", default=None, description="Human readable name of the property.")
135
+ description: str | None = Field(alias="Description", default=None, description="Short description of the property.")
126
136
  value_type: DataType | ClassEntityType | MultiValueTypeType | UnknownEntity = Field(
127
- alias="Value Type", union_mode="left_to_right"
137
+ alias="Value Type",
138
+ union_mode="left_to_right",
139
+ description="Value type that the property can hold. It takes either subset of XSD type or a class defined.",
140
+ )
141
+ min_count: int | None = Field(
142
+ alias="Min Count",
143
+ default=None,
144
+ description="Minimum number of values that the property can hold. "
145
+ "If no value is provided, the default value is `0`, "
146
+ "which means that the property is optional.",
147
+ )
148
+ max_count: int | float | None = Field(
149
+ alias="Max Count",
150
+ default=None,
151
+ description="Maximum number of values that the property can hold. "
152
+ "If no value is provided, the default value is `inf`, "
153
+ "which means that the property can hold any number of values (listable).",
154
+ )
155
+ default: Any | None = Field(alias="Default", default=None, description="Default value of the property.")
156
+ transformation: RDFPath | None = Field(
157
+ alias="Transformation",
158
+ default=None,
159
+ description="The rule that is used to populate the data model. "
160
+ "The rule is provided in a RDFPath query syntax which is converted to downstream solution query (e.g. SPARQL).",
128
161
  )
129
- min_count: int | None = Field(alias="Min Count", default=None)
130
- max_count: int | float | None = Field(alias="Max Count", default=None)
131
- default: Any | None = Field(alias="Default", default=None)
132
- transformation: RDFPath | None = Field(alias="Transformation", default=None)
133
162
  inherited: bool = Field(
134
163
  default=False,
135
164
  exclude=True,
@@ -221,10 +250,14 @@ class InformationProperty(SheetRow):
221
250
 
222
251
 
223
252
  class InformationRules(BaseRules):
224
- metadata: InformationMetadata = Field(alias="Metadata")
225
- properties: SheetList[InformationProperty] = Field(alias="Properties")
226
- classes: SheetList[InformationClass] = Field(alias="Classes")
227
- prefixes: dict[str, Namespace] = Field(default_factory=get_default_prefixes, alias="Prefixes")
253
+ metadata: InformationMetadata = Field(alias="Metadata", description="Metadata for the logical data model")
254
+ properties: SheetList[InformationProperty] = Field(alias="Properties", description="List of properties")
255
+ classes: SheetList[InformationClass] = Field(alias="Classes", description="List of classes")
256
+ prefixes: dict[str, Namespace] = Field(
257
+ alias="Prefixes",
258
+ default_factory=get_default_prefixes,
259
+ description="the definition of the prefixes that are used in the semantic data model",
260
+ )
228
261
 
229
262
  @field_validator("prefixes", mode="before")
230
263
  def parse_str(cls, values: Any) -> Any:
@@ -38,6 +38,24 @@ from .exceptions import NeatSessionError, session_class_wrapper
38
38
 
39
39
  @session_class_wrapper
40
40
  class NeatSession:
41
+ """Creates a new NeatSession.
42
+
43
+ This is the main entry point for using Neat. It provides access to the different APIs that can be used to read,
44
+ write, and manipulate data and data models.
45
+
46
+ Args:
47
+ client: The CogniteClient to use for reading and writing data.
48
+ storage: The storage type to use for storing data and data models. Can be either "memory" or "oxigraph".
49
+ In "memory" mode works well for small data sets and when only working with data models. It is works
50
+ well for all notebook environments. In "oxigraph" mode, the data is stored in an Oxigraph database. This
51
+ is more performant for larger data sets and when working with data. Note that this option requires
52
+ additional dependencies to be installed and is not available in CDF Notebooks.
53
+ verbose: Whether to print information about the operations being performed.
54
+ load_engine: Whether to load the Neat Engine. Can be "newest", "cache", or "skip". "newest" will always
55
+ check for the newest version of the engine. "cache" will load the engine if it has been downloaded before.
56
+ "skip" will not load the engine.
57
+ """
58
+
41
59
  def __init__(
42
60
  self,
43
61
  client: CogniteClient | None = None,
@@ -17,7 +17,7 @@ from cognite.neat._rules.importers import BaseImporter
17
17
  from cognite.neat._store._provenance import Activity as ProvenanceActivity
18
18
  from cognite.neat._store._provenance import Change
19
19
  from cognite.neat._store._provenance import Entity as ProvenanceEntity
20
- from cognite.neat._utils.reader import GitHubReader, NeatReader, PathReader
20
+ from cognite.neat._utils.reader import GitHubReader, HttpFileReader, NeatReader, PathReader
21
21
 
22
22
  from ._state import SessionState
23
23
  from ._wizard import NeatObjectType, RDFFileType, XMLFileType, object_wizard, rdf_dm_wizard, xml_format_wizard
@@ -244,9 +244,9 @@ class YamlReadAPI(BaseReadAPI):
244
244
  class CSVReadAPI(BaseReadAPI):
245
245
  def __call__(self, io: Any, type: str, primary_key: str) -> None:
246
246
  reader = NeatReader.create(io)
247
- if isinstance(reader, GitHubReader):
247
+ if isinstance(reader, HttpFileReader):
248
248
  path = Path(tempfile.gettempdir()).resolve() / reader.name
249
- path.write_text(reader.read_text())
249
+ path.write_text(reader.read_text(), encoding="utf-8", newline="\n")
250
250
  elif isinstance(reader, PathReader):
251
251
  path = reader.path
252
252
  else:
@@ -150,7 +150,7 @@ class CDFToAPI:
150
150
  - "skip": If any component already exists, it will be skipped.
151
151
  - "update": If any component already exists, it will be updated.
152
152
  - "force": If any component already exists, and the update fails, it will be deleted and recreated.
153
- - "recreate": All components will be deleted and recreated.
153
+ - "recreate": All components will be deleted and recreated. The exception is spaces, which will be updated.
154
154
 
155
155
  """
156
156
 
@@ -1,3 +1,3 @@
1
- from ._base import GitHubReader, NeatReader, PathReader
1
+ from ._base import GitHubReader, HttpFileReader, NeatReader, PathReader
2
2
 
3
- __all__ = ["NeatReader", "PathReader", "GitHubReader"]
3
+ __all__ = ["NeatReader", "PathReader", "GitHubReader", "HttpFileReader"]
@@ -17,6 +17,8 @@ class NeatReader(ABC):
17
17
  url = urlparse(io)
18
18
  if url.scheme == "https" and url.netloc.endswith("github.com"):
19
19
  return GitHubReader(io)
20
+ elif url.scheme == "https":
21
+ return HttpFileReader(io, url.path)
20
22
 
21
23
  if isinstance(io, str | Path):
22
24
  return PathReader(Path(io))
@@ -94,12 +96,10 @@ class PathReader(NeatReader):
94
96
  return self.path.exists()
95
97
 
96
98
 
97
- class GitHubReader(NeatReader):
98
- raw_url = "https://raw.githubusercontent.com/"
99
-
100
- def __init__(self, raw: str):
101
- self.raw = raw
102
- self.repo, self.path = self._parse_url(raw)
99
+ class HttpFileReader(NeatReader):
100
+ def __init__(self, url: str, path: str):
101
+ self._url = url
102
+ self.path = path
103
103
 
104
104
  @property
105
105
  def name(self) -> str:
@@ -107,9 +107,40 @@ class GitHubReader(NeatReader):
107
107
  return self.path.rsplit("/", maxsplit=1)[-1]
108
108
  return self.path
109
109
 
110
- @property
111
- def _full_url(self) -> str:
112
- return f"{self.raw_url}{self.repo}/main/{self.path}"
110
+ def read_text(self) -> str:
111
+ response = requests.get(self._url)
112
+ response.raise_for_status()
113
+ return response.text
114
+
115
+ def size(self) -> int:
116
+ response = requests.head(self._url)
117
+ response.raise_for_status()
118
+ return int(response.headers["Content-Length"])
119
+
120
+ def iterate(self, chunk_size: int) -> Iterable[str]:
121
+ with requests.get(self._url, stream=True) as response:
122
+ response.raise_for_status()
123
+ for chunk in response.iter_content(chunk_size):
124
+ yield chunk.decode("utf-8")
125
+
126
+ def __enter__(self) -> IO:
127
+ return StringIO(self.read_text())
128
+
129
+ def __str__(self) -> str:
130
+ return self._url
131
+
132
+ def exists(self) -> bool:
133
+ response = requests.head(self._url)
134
+ return 200 <= response.status_code < 400
135
+
136
+
137
+ class GitHubReader(HttpFileReader):
138
+ raw_url = "https://raw.githubusercontent.com/"
139
+
140
+ def __init__(self, raw: str):
141
+ self.raw = raw
142
+ self.repo, path = self._parse_url(raw)
143
+ super().__init__(f"{self.raw_url}{self.repo}/main/{path}", path)
113
144
 
114
145
  @staticmethod
115
146
  def _parse_url(url: str) -> tuple[str, str]:
@@ -134,29 +165,3 @@ class GitHubReader(NeatReader):
134
165
 
135
166
  def __str__(self) -> str:
136
167
  return self.raw
137
-
138
- def read_text(self) -> str:
139
- response = requests.get(self._full_url)
140
- response.raise_for_status()
141
- return response.text
142
-
143
- def size(self) -> int:
144
- response = requests.head(self._full_url)
145
- response.raise_for_status()
146
- return int(response.headers["Content-Length"])
147
-
148
- def iterate(self, chunk_size: int) -> Iterable[str]:
149
- with requests.get(self._full_url, stream=True) as response:
150
- response.raise_for_status()
151
- for chunk in response.iter_content(chunk_size):
152
- yield chunk.decode("utf-8")
153
-
154
- def __enter__(self) -> IO:
155
- return StringIO(self.read_text())
156
-
157
- def __exit__(self, exc_type, exc_value, traceback) -> None:
158
- pass
159
-
160
- def exists(self) -> bool:
161
- response = requests.head(self._full_url)
162
- return 200 <= response.status_code < 400
@@ -106,6 +106,18 @@ def to_snake(string: str) -> str:
106
106
  return "_".join(map(str.lower, words))
107
107
 
108
108
 
109
+ def sentence_or_string_to_camel(string: str) -> str:
110
+ # Could be a combination of kebab and pascal/camel case
111
+ if " " in string:
112
+ parts = string.split(" ")
113
+ try:
114
+ return parts[0].casefold() + "".join(word.capitalize() for word in parts[1:])
115
+ except IndexError:
116
+ return ""
117
+ else:
118
+ return to_camel(string)
119
+
120
+
109
121
  def replace_non_alphanumeric_with_underscore(text: str) -> str:
110
122
  return re.sub(r"\W+", "_", text)
111
123
 
cognite/neat/_version.py CHANGED
@@ -1,2 +1,2 @@
1
- __version__ = "0.100.1"
1
+ __version__ = "0.101.0"
2
2
  __engine__ = "^2.0.1"
@@ -0,0 +1,113 @@
1
+ Metadata-Version: 2.1
2
+ Name: cognite-neat
3
+ Version: 0.101.0
4
+ Summary: Knowledge graph transformation
5
+ Home-page: https://cognite-neat.readthedocs-hosted.com/
6
+ License: Apache-2.0
7
+ Author: Nikola Vasiljevic
8
+ Author-email: nikola.vasiljevic@cognite.com
9
+ Requires-Python: >=3.10,<4.0
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Provides-Extra: all
17
+ Provides-Extra: docs
18
+ Provides-Extra: google
19
+ Provides-Extra: oxi
20
+ Provides-Extra: service
21
+ Requires-Dist: PyYAML
22
+ Requires-Dist: backports.strenum (>=1.2,<2.0) ; python_version < "3.11"
23
+ Requires-Dist: cognite-sdk (>=7.54.6,<8.0.0)
24
+ Requires-Dist: elementpath (>=4.0.0,<5.0.0)
25
+ Requires-Dist: exceptiongroup (>=1.1.3,<2.0.0) ; python_version < "3.11"
26
+ Requires-Dist: fastapi (>=0,<1) ; extra == "service" or extra == "all"
27
+ Requires-Dist: google-api-python-client ; extra == "google"
28
+ Requires-Dist: google-auth-oauthlib ; extra == "google"
29
+ Requires-Dist: gspread ; extra == "google"
30
+ Requires-Dist: jsonpath-python (>=1.0.6,<2.0.0)
31
+ Requires-Dist: lxml (>=5.3.0,<6.0.0) ; extra == "all"
32
+ Requires-Dist: mixpanel (>=4.10.1,<5.0.0)
33
+ Requires-Dist: mkdocs ; extra == "docs"
34
+ Requires-Dist: mkdocs-autorefs (>=0.5.0,<0.6.0) ; extra == "docs"
35
+ Requires-Dist: mkdocs-git-authors-plugin ; extra == "docs"
36
+ Requires-Dist: mkdocs-git-revision-date-localized-plugin ; extra == "docs"
37
+ Requires-Dist: mkdocs-gitbook ; extra == "docs"
38
+ Requires-Dist: mkdocs-glightbox ; extra == "docs"
39
+ Requires-Dist: mkdocs-jupyter ; extra == "docs"
40
+ Requires-Dist: mkdocs-material-extensions ; extra == "docs"
41
+ Requires-Dist: mkdocstrings[python] ; extra == "docs"
42
+ Requires-Dist: networkx (>=3.4.2,<4.0.0)
43
+ Requires-Dist: openpyxl
44
+ Requires-Dist: oxrdflib[oxigraph] (>=0.4.0,<0.5.0) ; extra == "oxi" or extra == "all"
45
+ Requires-Dist: packaging (>=22.0,<25.0)
46
+ Requires-Dist: pandas
47
+ Requires-Dist: prometheus-client (>=0,<1) ; extra == "service" or extra == "all"
48
+ Requires-Dist: pydantic (>=2,<3)
49
+ Requires-Dist: pymdown-extensions ; extra == "docs"
50
+ Requires-Dist: pyoxigraph (==0.4.3) ; extra == "oxi" or extra == "all"
51
+ Requires-Dist: python-multipart (==0.0.9) ; extra == "service" or extra == "all"
52
+ Requires-Dist: pyvis (>=0.3.2,<0.4.0)
53
+ Requires-Dist: rdflib
54
+ Requires-Dist: requests
55
+ Requires-Dist: rich[jupyter] (>=13.7.1,<14.0.0)
56
+ Requires-Dist: schedule (>=1,<2) ; extra == "service" or extra == "all"
57
+ Requires-Dist: tomli (>=2.0.1,<3.0.0) ; python_version < "3.11"
58
+ Requires-Dist: typing_extensions (>=4.8,<5.0) ; python_version < "3.11"
59
+ Requires-Dist: urllib3 (>=2,<3)
60
+ Requires-Dist: uvicorn[standard] (>=0,<1) ; extra == "service" or extra == "all"
61
+ Project-URL: Documentation, https://cognite-neat.readthedocs-hosted.com/
62
+ Project-URL: Repository, https://github.com/cognitedata/neat
63
+ Description-Content-Type: text/markdown
64
+
65
+ # kNowlEdge grAph Transformer (NEAT)
66
+
67
+ [![release](https://img.shields.io/github/actions/workflow/status/cognitedata/neat/release.yaml?style=for-the-badge)](https://github.com/cognitedata/neat/actions/workflows/release.yaml)
68
+ [![Documentation Status](https://readthedocs.com/projects/cognite-neat/badge/?version=latest&style=for-the-badge)](https://cognite-neat.readthedocs-hosted.com/en/latest/?badge=latest)
69
+ [![Github](https://shields.io/badge/github-cognite/neat-green?logo=github&style=for-the-badge)](https://github.com/cognitedata/neat)
70
+ [![PyPI](https://img.shields.io/pypi/v/cognite-neat?style=for-the-badge)](https://pypi.org/project/cognite-neat/)
71
+ [![Downloads](https://img.shields.io/pypi/dm/cognite-neat?style=for-the-badge)](https://pypistats.org/packages/cognite-neat)
72
+ [![Docker Pulls](https://img.shields.io/docker/pulls/cognite/neat?style=for-the-badge)](https://hub.docker.com/r/cognite/neat)
73
+ [![GitHub](https://img.shields.io/github/license/cognitedata/neat?style=for-the-badge)](https://github.com/cognitedata/neat/blob/master/LICENSE)
74
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge)](https://github.com/ambv/black)
75
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json&style=for-the-badge)](https://github.com/astral-sh/ruff)
76
+ [![mypy](https://img.shields.io/badge/mypy-checked-000000.svg?style=for-the-badge&color=blue)](http://mypy-lang.org)
77
+
78
+ NEAT is a domain expert centric and developer friendly solution for rapid:
79
+
80
+ - semantic data modeling
81
+ - creation, transformation and enrichment of knowledge graphs
82
+ - and ingestion of the models and graphs into [Cognite Data Fusion](https://www.cognite.com/en/product/cognite_data_fusion_industrial_dataops_platform)
83
+
84
+ NEAT is using open and globally recognized standards maintained by the [World Wide Web Consortium (W3C)](https://www.w3.org/RDF/).
85
+ NEAT represents an essential tool for creation of standardized, machine-actionable, linked and semantic (meta)data.
86
+
87
+ > NEAT is an acronym derived from k**N**owl**Ed**ge gr**A**ph **T**ransformer hallucinated by GenAI.
88
+
89
+ ## Installation
90
+
91
+ ```bash
92
+ pip install cognite-neat
93
+ ```
94
+
95
+ ## Usage
96
+
97
+ The user interface for `NEAT` is a notebook-based environment. Once you have set up your notebook
98
+ environment, you start by creating a `CogniteClient` and instantiate a `NeatSession` object.
99
+
100
+ ```python
101
+ from cognite.neat import NeatSession, get_cognite_client
102
+
103
+ client = get_cognite_client(".env")
104
+
105
+ neat = NeatSession(client)
106
+
107
+ neat.read.cdf.data_model(("my_space", "MyDataModel", "v1"))
108
+ ```
109
+
110
+ ## Documentation
111
+
112
+ For more information, see the [documentation](https://cognite-neat.readthedocs-hosted.com/en/latest/)
113
+
@@ -110,16 +110,16 @@ cognite/neat/_graph/extractors/_mock_graph_generator.py,sha256=yEqQdbnRQjBXVQIEV
110
110
  cognite/neat/_graph/extractors/_rdf_file.py,sha256=YgPZN4Ayk6UlbwFFjdWn4Yo3P74D8KeNUb3slXg6Ox8,1604
111
111
  cognite/neat/_graph/loaders/__init__.py,sha256=1eam_rG1BXTUJ8iDm8_IYZldEe177vn2GmHihDBi8qk,718
112
112
  cognite/neat/_graph/loaders/_base.py,sha256=tjplRd-vbWhWyys0Ll3KgHR3F3ETlP_dXJ3e8F8w15M,3984
113
- cognite/neat/_graph/loaders/_rdf2dms.py,sha256=KMe0T5jvGbgdo3RQijDtTSeWpU_ovGXWBGR1dZ_IjEM,17472
113
+ cognite/neat/_graph/loaders/_rdf2dms.py,sha256=6EaCnwnnFA8Vye8Ph439yTtbJCP_NGNpBD24XLc7PQA,17437
114
114
  cognite/neat/_graph/queries/__init__.py,sha256=BgDd-037kvtWwAoGAy8eORVNMiZ5-E9sIV0txIpeaN4,50
115
115
  cognite/neat/_graph/queries/_base.py,sha256=dKEk8TDYUxIc71peqD9TfHHoILG9cKzjkFp7CAkbF78,14246
116
116
  cognite/neat/_graph/queries/_construct.py,sha256=CW8uHtXXACUXDj1AcEjROXtvoiuyx0CTgZ0bURY5Neo,7213
117
117
  cognite/neat/_graph/queries/_shared.py,sha256=K3svLkvw-DWPZUwIwpJRjPKg5UIRKFCn5jBLpuJjiHc,5330
118
- cognite/neat/_graph/transformers/__init__.py,sha256=SJtcfzztdy6f_D1X5OowLO4Huv4HO_wRKizSY3orrV0,978
118
+ cognite/neat/_graph/transformers/__init__.py,sha256=82a7rV6bGhOc5iAznBOtlQOMWxgi0KpGXYV4zh4HnsE,1187
119
119
  cognite/neat/_graph/transformers/_base.py,sha256=b37Ek-9njuM5pTR_3XhnxCMrg_ip_2BMwM7ZhKpAAlw,328
120
120
  cognite/neat/_graph/transformers/_classic_cdf.py,sha256=8vzvoHH2YJMg2mMTEH_ASGWn1Maars1N1RZ9jWhLTkY,19291
121
- cognite/neat/_graph/transformers/_iodd.py,sha256=yH-BvVQUswM8RmV2VvOPQAgwudhBJdxDLHW1RKxuuAY,729
122
- cognite/neat/_graph/transformers/_prune_graph.py,sha256=jmmnihEr8ONEgLye_81hyIzrY_TdtDIbMZNrfZQ7zGA,5270
121
+ cognite/neat/_graph/transformers/_iodd.py,sha256=AajIWbCzQcR5ZNz6qSb2dKoNEJOedgEB7L2se94u6qw,863
122
+ cognite/neat/_graph/transformers/_prune_graph.py,sha256=i0YnpfcFq_y_bZIlZJRRZDRzoj5ya9qpnozgUqKOD8o,8220
123
123
  cognite/neat/_graph/transformers/_rdfpath.py,sha256=0ZH7d62kfdCyWGrCyY2oJSnGEPsHQd0sMrZAsTibCCI,4155
124
124
  cognite/neat/_graph/transformers/_value_type.py,sha256=JorH-AgDXVZUkG_GCcwn51Mw0M2WIOV834t0kF_Nwvo,2614
125
125
  cognite/neat/_issues/__init__.py,sha256=IEZBpvL88hdghX7JgndhxcZcxreZowuoQFIXuSeIKDs,556
@@ -149,7 +149,7 @@ cognite/neat/_rules/catalog/__init__.py,sha256=dzx-DYYJDc861aFiOI5o1FsySD9F1agY8
149
149
  cognite/neat/_rules/catalog/info-rules-imf.xlsx,sha256=7odm5CoAU72-VTZk_z1u7GbycIb-X-8Yy3mtBGLjhE4,55511
150
150
  cognite/neat/_rules/exporters/__init__.py,sha256=jCwXAeyZJv7GNJ3hGG-80gb8LAidozsyFMzdNIsGt_Y,1204
151
151
  cognite/neat/_rules/exporters/_base.py,sha256=vadYWb5hVbjiPIhVIzlY6ARisoqhtJa6Ce0ysNHPXQc,1328
152
- cognite/neat/_rules/exporters/_rules2dms.py,sha256=csaFRdebr8WzqjUcUpjnKkTfbPctk_5D-w-G0p_WtsA,15812
152
+ cognite/neat/_rules/exporters/_rules2dms.py,sha256=pwqy0wzLpSh-BNukLOOB12gTVNeCHEPefX5idtTp2sI,17198
153
153
  cognite/neat/_rules/exporters/_rules2excel.py,sha256=puFgIf_dolxv38Lkgzl9lDDREWDPdTApqgYCu9H-hf4,11689
154
154
  cognite/neat/_rules/exporters/_rules2instance_template.py,sha256=8HM1SkzcucaEYpQi96ncMnL8STArX9Oe09JBhJJAN4I,5810
155
155
  cognite/neat/_rules/exporters/_rules2ontology.py,sha256=ioMi1GUhnbvcfVOPb3Z0a24mIEe74AfxySETWMDS9Lc,21776
@@ -173,13 +173,13 @@ cognite/neat/_rules/importers/_spreadsheet2rules.py,sha256=TI92l_qddRW2JWk3Jbmsv
173
173
  cognite/neat/_rules/importers/_yaml2rules.py,sha256=5DsEMYo6JVHC_mBOaaR3J6on1rXSpk82plCsrOq5_l8,3144
174
174
  cognite/neat/_rules/models/__init__.py,sha256=z1LoPY2X-M8Og8bKcjae2JwQB9yW8Y_ASnkL3Tjwqyg,1024
175
175
  cognite/neat/_rules/models/_base_input.py,sha256=qJrxobZLqpc28adEUJTKdJ8hDUZ67SVDFkUJnGjcPOc,6647
176
- cognite/neat/_rules/models/_base_rules.py,sha256=JZkpV3l7gWGmDMluIFtc3qFBOc6edtSTfBMErj_ZzR4,14453
176
+ cognite/neat/_rules/models/_base_rules.py,sha256=4JP9jnJFP93kQ1otJSop-xIljTpHmZgNX9RfsQvEBfY,14820
177
177
  cognite/neat/_rules/models/_rdfpath.py,sha256=hqUMZCMeI8ESdJltu7FifuUhna5JNN_Heup2aYkV56Y,11882
178
178
  cognite/neat/_rules/models/_types.py,sha256=7rh4PVaqI58OTXtoIgZKitmwa5hZlVtk8uX4czlSGFY,5261
179
179
  cognite/neat/_rules/models/data_types.py,sha256=LJuWUbStlZM4hUJGExOJIJXmAA4uiA0tvO9zKqLUrQg,9805
180
180
  cognite/neat/_rules/models/dms/__init__.py,sha256=r2XGwAjTsAZs-n-oimg40hLUKVpqFGVuAPmfEUCwwRs,695
181
181
  cognite/neat/_rules/models/dms/_exporter.py,sha256=eB5uDX06XYkQkON96eykSk7ZCegb9a5dCxTmTIr252c,28020
182
- cognite/neat/_rules/models/dms/_rules.py,sha256=4Nstw6iVKil7oz4VkYM6q07-O7Gjrw8oT9ktZnqw5pI,16842
182
+ cognite/neat/_rules/models/dms/_rules.py,sha256=xQ8NoSE9D4tMjcEwKn4z7HdF9l_3OR-1xRlH3uamQPM,20186
183
183
  cognite/neat/_rules/models/dms/_rules_input.py,sha256=mVW-gHrjjlqFuq82qTkxIaMZ7OlzQFxjopxdlwQergY,12949
184
184
  cognite/neat/_rules/models/dms/_validation.py,sha256=TAgNg1rur3PRVPcsm4-BXKV9AHX8AtahN0OhRx3PgyM,27262
185
185
  cognite/neat/_rules/models/entities/__init__.py,sha256=QD-h79HhjqCsgscNU5kuf1ieRCE94dOfpujLuzYbtHk,1469
@@ -190,7 +190,7 @@ cognite/neat/_rules/models/entities/_single_value.py,sha256=dVfqIx3_Agi_LddhsqPO
190
190
  cognite/neat/_rules/models/entities/_types.py,sha256=df9rnXJJKciv2Bp-Ve2q4xdEJt6WWniq12Z0hW2d6sk,1917
191
191
  cognite/neat/_rules/models/entities/_wrapped.py,sha256=FxC8HztW_tUUtuArAOwxyFfkdJnSEB4bgZoNmmmfiPk,7137
192
192
  cognite/neat/_rules/models/information/__init__.py,sha256=ex9JOyiZYXefFl9oi1VaHhyUOtYjXWytSmwuq4pqKqc,556
193
- cognite/neat/_rules/models/information/_rules.py,sha256=miQpNmKS6bUfP1zI6GrmuUiKHGe13dW-QA96LqG38hY,10062
193
+ cognite/neat/_rules/models/information/_rules.py,sha256=F8Tjb_ymOEEkt1k2yDjboS7hCthd0PsVYSZzandATwE,11753
194
194
  cognite/neat/_rules/models/information/_rules_input.py,sha256=PdXTPN0QfO4vxN5M4xzaaDwHEQo53RbY_jIr5TfBszY,5443
195
195
  cognite/neat/_rules/models/information/_validation.py,sha256=HbaLShj6uumu-t9I3FUI_iKQfUDiwEkuFENHgWIPfrk,10202
196
196
  cognite/neat/_rules/models/mapping/__init__.py,sha256=T68Hf7rhiXa7b03h4RMwarAmkGnB-Bbhc1H07b2PyC4,100
@@ -203,17 +203,17 @@ cognite/neat/_rules/transformers/_mapping.py,sha256=gMkLHeMWTvQJZV-YLMQm0pirnd2a
203
203
  cognite/neat/_rules/transformers/_pipelines.py,sha256=2y786LkNMedmxoozUyvtd-2bfqf6wkX2H8On-m2Ucsw,2618
204
204
  cognite/neat/_rules/transformers/_verification.py,sha256=M4-Cr3vTm3PZyHSjW-odbOqbY5g0hiRjERDjvLgYbxU,3907
205
205
  cognite/neat/_session/__init__.py,sha256=fxQ5URVlUnmEGYyB8Baw7IDq-uYacqkigbc4b-Pr9Fw,58
206
- cognite/neat/_session/_base.py,sha256=FjQBIk1Td2RWu58Ktd88k6ySzmNr9MVLt0hxgA8Eahg,10502
206
+ cognite/neat/_session/_base.py,sha256=93FJAYYdXvg2cpzL-rVCFdIivFIafb2OtMhr5zrkcyE,11696
207
207
  cognite/neat/_session/_collector.py,sha256=zS5JxLIYnAWV-dBzF6WgUfo662iYSzEyDhtnMv-Zibs,4002
208
208
  cognite/neat/_session/_drop.py,sha256=XlEaKb_HpqI5EQuUuUFjcf3Qx6BfcBBWdqqGdwkGhmE,1137
209
209
  cognite/neat/_session/_inspect.py,sha256=s3R6vz8HbqZSdknyXTSkmA3JvvInlQF5yNKECTA-I1w,7264
210
210
  cognite/neat/_session/_mapping.py,sha256=MZ_xRhapc2mVwM-W3tda2zZGaPncj_ZqnzuasvY05po,6109
211
211
  cognite/neat/_session/_prepare.py,sha256=_jU0TJWLcg727wKh8NK3a-5duVnRkGJrnkNxLO_D83Q,21883
212
- cognite/neat/_session/_read.py,sha256=4G34X_7hNs5V0gCLHPR1ktva6-fyGmwVc1Qu7T5yQdA,15102
212
+ cognite/neat/_session/_read.py,sha256=Kfq1RAT5soXSI7vgxY-HN-GjMzAW5RZQD9E7JiuKBmU,15152
213
213
  cognite/neat/_session/_set.py,sha256=NY0Vz8xD_a-UA8qWE1GFxHdmBl1BkT1KHQehQVKUorI,1914
214
214
  cognite/neat/_session/_show.py,sha256=_ev_Z41rkW4nlvhLf69PmttggKksnkCchOow7CmICyU,14124
215
215
  cognite/neat/_session/_state.py,sha256=rqKHkikagO1pf_fKpY-LZI1X5R_v6AyYpV72_3eSduM,5783
216
- cognite/neat/_session/_to.py,sha256=_NJn8tGTEcAoWpuCI6stquKNBuD8CqHqXLpSKkeT_1g,7365
216
+ cognite/neat/_session/_to.py,sha256=PjS3avL0a4SmarMgfxJrsjAA45gMZ_1wX9RcKSSvKXk,7413
217
217
  cognite/neat/_session/_wizard.py,sha256=O8d0FA87RIoiTOD2KLyTVsxwA2-ewAG2By4JfxXSL84,1474
218
218
  cognite/neat/_session/engine/__init__.py,sha256=aeI5pzljU5n1B-SVu3LwjYVsN1tSVhnJj-4ddflEo4U,120
219
219
  cognite/neat/_session/engine/_import.py,sha256=1QxA2_EK613lXYAHKQbZyw2yjo5P9XuiX4Z6_6-WMNQ,169
@@ -229,14 +229,14 @@ cognite/neat/_utils/auth.py,sha256=UbFNq4BIqxc1459xJtI1FZz91K5XEMkfY5cfpBHyUHU,1
229
229
  cognite/neat/_utils/auxiliary.py,sha256=WFOycFgoYipvDmtGvn6ZNH3H8iNZmHamrfe2kXRb8lM,6667
230
230
  cognite/neat/_utils/collection_.py,sha256=Q_LN1qypr0SeAV3dAR5KLD1szHNohSdYxyA8hr3n4T8,1433
231
231
  cognite/neat/_utils/rdf_.py,sha256=_nmZqo6_Ef7Aep0kXR_uoiRxGQR2u5lMK4g5mxWneeY,8586
232
- cognite/neat/_utils/reader/__init__.py,sha256=KOdEuGd9n9tyqZY7HCTnBKAXk2PUn4n_l7O3ZguSp-w,112
233
- cognite/neat/_utils/reader/_base.py,sha256=PECrAlJqKDlyFzAlBBLfKjyOEyJSgN0sUfjbK-2qWf4,4537
232
+ cognite/neat/_utils/reader/__init__.py,sha256=bTYNMnlcCDSFWAcbj7j_r1pU3CnFM7lXeXXfo6acokA,146
233
+ cognite/neat/_utils/reader/_base.py,sha256=mk_kZDnfg5LcvYJr5IiBosYwbF82mLWo1p1Wq3K2p_Y,4681
234
234
  cognite/neat/_utils/spreadsheet.py,sha256=LI0c7dlW0zXHkHw0NvB-gg6Df6cDcE3FbiaHBYLXdzQ,2714
235
- cognite/neat/_utils/text.py,sha256=PvTEsEjaTu8SE8yYaKUrce4msboMj933dK7-0Eey_rE,3652
235
+ cognite/neat/_utils/text.py,sha256=0IffvBIAmeGh92F4T6xiEdd-vv3B7FOGEMbfuTktO5Y,4017
236
236
  cognite/neat/_utils/time_.py,sha256=O30LUiDH9TdOYz8_a9pFqTtJdg8vEjC3qHCk8xZblG8,345
237
237
  cognite/neat/_utils/upload.py,sha256=iWKmsQgw4EHLv-11NjYu7zAj5LtqTAfNa87a1kWeuaU,5727
238
238
  cognite/neat/_utils/xml_.py,sha256=FQkq84u35MUsnKcL6nTMJ9ajtG9D5i1u4VBnhGqP2DQ,1710
239
- cognite/neat/_version.py,sha256=nA_YK6_YjwJqujTlS_0t_IcLFjNgqEIsI8sSheyAdKI,46
239
+ cognite/neat/_version.py,sha256=YC9egL_60_4y49kwtdUsQ37p_zPCkAdak7ziTTA-JL8,46
240
240
  cognite/neat/_workflows/__init__.py,sha256=S0fZq7kvoqDKodHu1UIPsqcpdvXoefUWRPt1lqeQkQs,420
241
241
  cognite/neat/_workflows/base.py,sha256=O1pcmfbme2gIVF2eOGrKZSUDmhZc8L9rI8UfvLN2YAM,26839
242
242
  cognite/neat/_workflows/cdf_store.py,sha256=3pebnATPo6In4-1srpa3wzstynTOi3T6hwFX5uaie4c,18050
@@ -265,8 +265,8 @@ cognite/neat/_workflows/tasks.py,sha256=dr2xuIb8P5e5e9p_fjzRlvDbKsre2xGYrkc3wnRx
265
265
  cognite/neat/_workflows/triggers.py,sha256=u69xOsaTtM8_WD6ZeIIBB-XKwvlZmPHAsZQh_TnyHcM,7073
266
266
  cognite/neat/_workflows/utils.py,sha256=gKdy3RLG7ctRhbCRwaDIWpL9Mi98zm56-d4jfHDqP1E,453
267
267
  cognite/neat/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
268
- cognite_neat-0.100.1.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
269
- cognite_neat-0.100.1.dist-info/METADATA,sha256=_uca35iR6CWYhSThIO4TX9xD6alAHLmNcjr9Jwda7UE,9699
270
- cognite_neat-0.100.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
271
- cognite_neat-0.100.1.dist-info/entry_points.txt,sha256=SsQlnl8SNMSSjE3acBI835JYFtsIinLSbVmHmMEXv6E,51
272
- cognite_neat-0.100.1.dist-info/RECORD,,
268
+ cognite_neat-0.101.0.dist-info/LICENSE,sha256=W8VmvFia4WHa3Gqxq1Ygrq85McUNqIGDVgtdvzT-XqA,11351
269
+ cognite_neat-0.101.0.dist-info/METADATA,sha256=0qjVPqhZDNDDWTYxyQJS7v2f-JpEu2uQrtbGv4km-7c,5708
270
+ cognite_neat-0.101.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
271
+ cognite_neat-0.101.0.dist-info/entry_points.txt,sha256=SsQlnl8SNMSSjE3acBI835JYFtsIinLSbVmHmMEXv6E,51
272
+ cognite_neat-0.101.0.dist-info/RECORD,,