cognite-neat 0.123.26__py3-none-any.whl → 1.0.22__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.
Files changed (341) hide show
  1. cognite/neat/__init__.py +4 -3
  2. cognite/neat/_client/__init__.py +5 -0
  3. cognite/neat/_client/api.py +8 -0
  4. cognite/neat/_client/client.py +21 -0
  5. cognite/neat/_client/config.py +40 -0
  6. cognite/neat/_client/containers_api.py +138 -0
  7. cognite/neat/_client/data_classes.py +44 -0
  8. cognite/neat/_client/data_model_api.py +115 -0
  9. cognite/neat/_client/init/credentials.py +70 -0
  10. cognite/neat/_client/init/env_vars.py +131 -0
  11. cognite/neat/_client/init/main.py +51 -0
  12. cognite/neat/_client/spaces_api.py +115 -0
  13. cognite/neat/_client/statistics_api.py +24 -0
  14. cognite/neat/_client/views_api.py +144 -0
  15. cognite/neat/_config.py +266 -0
  16. cognite/neat/_data_model/_analysis.py +571 -0
  17. cognite/neat/_data_model/_constants.py +74 -0
  18. cognite/neat/_data_model/_identifiers.py +61 -0
  19. cognite/neat/_data_model/_shared.py +41 -0
  20. cognite/neat/_data_model/_snapshot.py +134 -0
  21. cognite/neat/_data_model/deployer/_differ.py +140 -0
  22. cognite/neat/_data_model/deployer/_differ_container.py +360 -0
  23. cognite/neat/_data_model/deployer/_differ_data_model.py +54 -0
  24. cognite/neat/_data_model/deployer/_differ_space.py +9 -0
  25. cognite/neat/_data_model/deployer/_differ_view.py +299 -0
  26. cognite/neat/_data_model/deployer/data_classes.py +644 -0
  27. cognite/neat/_data_model/deployer/deployer.py +431 -0
  28. cognite/neat/_data_model/exporters/__init__.py +15 -0
  29. cognite/neat/_data_model/exporters/_api_exporter.py +37 -0
  30. cognite/neat/_data_model/exporters/_base.py +24 -0
  31. cognite/neat/_data_model/exporters/_table_exporter/exporter.py +128 -0
  32. cognite/neat/_data_model/exporters/_table_exporter/workbook.py +409 -0
  33. cognite/neat/_data_model/exporters/_table_exporter/writer.py +480 -0
  34. cognite/neat/_data_model/importers/__init__.py +5 -0
  35. cognite/neat/_data_model/importers/_api_importer.py +166 -0
  36. cognite/neat/_data_model/importers/_base.py +16 -0
  37. cognite/neat/_data_model/importers/_table_importer/data_classes.py +344 -0
  38. cognite/neat/_data_model/importers/_table_importer/importer.py +192 -0
  39. cognite/neat/_data_model/importers/_table_importer/reader.py +1102 -0
  40. cognite/neat/_data_model/importers/_table_importer/source.py +94 -0
  41. cognite/neat/_data_model/models/conceptual/_base.py +18 -0
  42. cognite/neat/_data_model/models/conceptual/_concept.py +67 -0
  43. cognite/neat/_data_model/models/conceptual/_data_model.py +51 -0
  44. cognite/neat/_data_model/models/conceptual/_properties.py +104 -0
  45. cognite/neat/_data_model/models/conceptual/_property.py +105 -0
  46. cognite/neat/_data_model/models/dms/__init__.py +206 -0
  47. cognite/neat/_data_model/models/dms/_base.py +31 -0
  48. cognite/neat/_data_model/models/dms/_constants.py +48 -0
  49. cognite/neat/_data_model/models/dms/_constraints.py +42 -0
  50. cognite/neat/_data_model/models/dms/_container.py +159 -0
  51. cognite/neat/_data_model/models/dms/_data_model.py +95 -0
  52. cognite/neat/_data_model/models/dms/_data_types.py +195 -0
  53. cognite/neat/_data_model/models/dms/_http.py +28 -0
  54. cognite/neat/_data_model/models/dms/_indexes.py +30 -0
  55. cognite/neat/_data_model/models/dms/_limits.py +96 -0
  56. cognite/neat/_data_model/models/dms/_references.py +141 -0
  57. cognite/neat/_data_model/models/dms/_schema.py +18 -0
  58. cognite/neat/_data_model/models/dms/_space.py +48 -0
  59. cognite/neat/_data_model/models/dms/_types.py +17 -0
  60. cognite/neat/_data_model/models/dms/_view_filter.py +310 -0
  61. cognite/neat/_data_model/models/dms/_view_property.py +235 -0
  62. cognite/neat/_data_model/models/dms/_views.py +216 -0
  63. cognite/neat/_data_model/models/entities/__init__.py +50 -0
  64. cognite/neat/_data_model/models/entities/_base.py +101 -0
  65. cognite/neat/_data_model/models/entities/_constants.py +22 -0
  66. cognite/neat/_data_model/models/entities/_data_types.py +144 -0
  67. cognite/neat/_data_model/models/entities/_identifiers.py +61 -0
  68. cognite/neat/_data_model/models/entities/_parser.py +226 -0
  69. cognite/neat/_data_model/validation/dms/__init__.py +75 -0
  70. cognite/neat/_data_model/validation/dms/_ai_readiness.py +381 -0
  71. cognite/neat/_data_model/validation/dms/_base.py +25 -0
  72. cognite/neat/_data_model/validation/dms/_connections.py +681 -0
  73. cognite/neat/_data_model/validation/dms/_consistency.py +58 -0
  74. cognite/neat/_data_model/validation/dms/_containers.py +199 -0
  75. cognite/neat/_data_model/validation/dms/_limits.py +368 -0
  76. cognite/neat/_data_model/validation/dms/_orchestrator.py +70 -0
  77. cognite/neat/_data_model/validation/dms/_views.py +164 -0
  78. cognite/neat/_exceptions.py +68 -0
  79. cognite/neat/_issues.py +68 -0
  80. cognite/neat/_session/__init__.py +3 -0
  81. cognite/neat/_session/_html/_render.py +30 -0
  82. cognite/neat/_session/_html/static/__init__.py +8 -0
  83. cognite/neat/_session/_html/static/deployment.css +476 -0
  84. cognite/neat/_session/_html/static/deployment.js +181 -0
  85. cognite/neat/_session/_html/static/issues.css +211 -0
  86. cognite/neat/_session/_html/static/issues.js +168 -0
  87. cognite/neat/_session/_html/static/shared.css +186 -0
  88. cognite/neat/_session/_html/templates/__init__.py +4 -0
  89. cognite/neat/_session/_html/templates/deployment.html +80 -0
  90. cognite/neat/_session/_html/templates/issues.html +45 -0
  91. cognite/neat/_session/_issues.py +81 -0
  92. cognite/neat/_session/_physical.py +294 -0
  93. cognite/neat/_session/_result/__init__.py +3 -0
  94. cognite/neat/_session/_result/_deployment/__init__.py +0 -0
  95. cognite/neat/_session/_result/_deployment/_physical/__init__.py +0 -0
  96. cognite/neat/_session/_result/_deployment/_physical/_changes.py +196 -0
  97. cognite/neat/_session/_result/_deployment/_physical/_statistics.py +180 -0
  98. cognite/neat/_session/_result/_deployment/_physical/serializer.py +35 -0
  99. cognite/neat/_session/_result/_result.py +31 -0
  100. cognite/neat/_session/_session.py +81 -0
  101. cognite/neat/_session/_usage_analytics/__init__.py +0 -0
  102. cognite/neat/_session/_usage_analytics/_collector.py +131 -0
  103. cognite/neat/_session/_usage_analytics/_constants.py +23 -0
  104. cognite/neat/_session/_usage_analytics/_storage.py +240 -0
  105. cognite/neat/_session/_wrappers.py +101 -0
  106. cognite/neat/_state_machine/__init__.py +10 -0
  107. cognite/neat/_state_machine/_base.py +37 -0
  108. cognite/neat/_state_machine/_states.py +52 -0
  109. cognite/neat/_store/__init__.py +3 -0
  110. cognite/neat/_store/_provenance.py +88 -0
  111. cognite/neat/_store/_store.py +220 -0
  112. cognite/neat/_utils/__init__.py +0 -0
  113. cognite/neat/_utils/_reader.py +194 -0
  114. cognite/neat/_utils/auxiliary.py +49 -0
  115. cognite/neat/_utils/collection.py +11 -0
  116. cognite/neat/_utils/http_client/__init__.py +39 -0
  117. cognite/neat/_utils/http_client/_client.py +245 -0
  118. cognite/neat/_utils/http_client/_config.py +19 -0
  119. cognite/neat/_utils/http_client/_data_classes.py +294 -0
  120. cognite/neat/_utils/http_client/_tracker.py +31 -0
  121. cognite/neat/_utils/repo.py +19 -0
  122. cognite/neat/_utils/text.py +71 -0
  123. cognite/neat/_utils/useful_types.py +37 -0
  124. cognite/neat/_utils/validation.py +154 -0
  125. cognite/neat/_v0/__init__.py +0 -0
  126. cognite/neat/_v0/core/__init__.py +0 -0
  127. cognite/neat/_v0/core/_client/_api/__init__.py +0 -0
  128. cognite/neat/{core → _v0/core}/_client/_api/data_modeling_loaders.py +8 -7
  129. cognite/neat/{core → _v0/core}/_client/_api/neat_instances.py +5 -5
  130. cognite/neat/{core → _v0/core}/_client/_api/schema.py +5 -5
  131. cognite/neat/{core → _v0/core}/_client/_api/statistics.py +3 -3
  132. cognite/neat/{core → _v0/core}/_client/_api_client.py +1 -1
  133. cognite/neat/_v0/core/_client/data_classes/__init__.py +0 -0
  134. cognite/neat/{core → _v0/core}/_client/data_classes/schema.py +4 -4
  135. cognite/neat/{core → _v0/core}/_client/testing.py +1 -1
  136. cognite/neat/{core → _v0/core}/_constants.py +5 -3
  137. cognite/neat/_v0/core/_data_model/__init__.py +0 -0
  138. cognite/neat/{core → _v0/core}/_data_model/_constants.py +7 -0
  139. cognite/neat/{core → _v0/core}/_data_model/_shared.py +4 -4
  140. cognite/neat/{core → _v0/core}/_data_model/analysis/_base.py +8 -8
  141. cognite/neat/{core → _v0/core}/_data_model/exporters/__init__.py +1 -2
  142. cognite/neat/{core → _v0/core}/_data_model/exporters/_base.py +7 -7
  143. cognite/neat/{core → _v0/core}/_data_model/exporters/_data_model2dms.py +9 -9
  144. cognite/neat/{core → _v0/core}/_data_model/exporters/_data_model2excel.py +12 -12
  145. cognite/neat/{core → _v0/core}/_data_model/exporters/_data_model2instance_template.py +4 -4
  146. cognite/neat/{core/_data_model/exporters/_data_model2ontology.py → _v0/core/_data_model/exporters/_data_model2semantic_model.py} +126 -116
  147. cognite/neat/{core → _v0/core}/_data_model/exporters/_data_model2yaml.py +1 -1
  148. cognite/neat/{core → _v0/core}/_data_model/importers/_base.py +5 -5
  149. cognite/neat/{core → _v0/core}/_data_model/importers/_base_file_reader.py +2 -2
  150. cognite/neat/{core → _v0/core}/_data_model/importers/_dict2data_model.py +5 -5
  151. cognite/neat/{core → _v0/core}/_data_model/importers/_dms2data_model.py +18 -15
  152. cognite/neat/{core → _v0/core}/_data_model/importers/_graph2data_model.py +12 -12
  153. cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/_base.py +12 -12
  154. cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/_inference2rdata_model.py +14 -14
  155. cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/_owl2data_model.py +41 -21
  156. cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/_shared.py +9 -9
  157. cognite/neat/{core → _v0/core}/_data_model/importers/_spreadsheet2data_model.py +92 -12
  158. cognite/neat/{core → _v0/core}/_data_model/models/__init__.py +3 -3
  159. cognite/neat/{core → _v0/core}/_data_model/models/_base_verified.py +5 -5
  160. cognite/neat/{core → _v0/core}/_data_model/models/_import_contexts.py +1 -1
  161. cognite/neat/{core → _v0/core}/_data_model/models/_types.py +5 -5
  162. cognite/neat/{core → _v0/core}/_data_model/models/conceptual/_unverified.py +16 -10
  163. cognite/neat/{core → _v0/core}/_data_model/models/conceptual/_validation.py +12 -12
  164. cognite/neat/{core → _v0/core}/_data_model/models/conceptual/_verified.py +9 -9
  165. cognite/neat/{core → _v0/core}/_data_model/models/data_types.py +14 -4
  166. cognite/neat/{core → _v0/core}/_data_model/models/entities/__init__.py +6 -0
  167. cognite/neat/_v0/core/_data_model/models/entities/_loaders.py +155 -0
  168. cognite/neat/{core → _v0/core}/_data_model/models/entities/_multi_value.py +2 -2
  169. cognite/neat/_v0/core/_data_model/models/entities/_restrictions.py +230 -0
  170. cognite/neat/{core → _v0/core}/_data_model/models/entities/_single_value.py +121 -16
  171. cognite/neat/{core → _v0/core}/_data_model/models/entities/_types.py +10 -0
  172. cognite/neat/{core → _v0/core}/_data_model/models/mapping/_classic2core.py +5 -5
  173. cognite/neat/{core → _v0/core}/_data_model/models/physical/__init__.py +1 -1
  174. cognite/neat/{core → _v0/core}/_data_model/models/physical/_exporter.py +26 -19
  175. cognite/neat/{core → _v0/core}/_data_model/models/physical/_unverified.py +133 -37
  176. cognite/neat/{core → _v0/core}/_data_model/models/physical/_validation.py +24 -20
  177. cognite/neat/{core → _v0/core}/_data_model/models/physical/_verified.py +95 -24
  178. cognite/neat/{core → _v0/core}/_data_model/transformers/_base.py +4 -4
  179. cognite/neat/{core → _v0/core}/_data_model/transformers/_converters.py +35 -28
  180. cognite/neat/{core → _v0/core}/_data_model/transformers/_mapping.py +7 -7
  181. cognite/neat/{core → _v0/core}/_data_model/transformers/_union_conceptual.py +5 -5
  182. cognite/neat/{core → _v0/core}/_data_model/transformers/_verification.py +7 -7
  183. cognite/neat/_v0/core/_instances/__init__.py +0 -0
  184. cognite/neat/{core → _v0/core}/_instances/_tracking/base.py +1 -1
  185. cognite/neat/{core → _v0/core}/_instances/_tracking/log.py +1 -1
  186. cognite/neat/{core → _v0/core}/_instances/extractors/__init__.py +3 -2
  187. cognite/neat/{core → _v0/core}/_instances/extractors/_base.py +6 -6
  188. cognite/neat/_v0/core/_instances/extractors/_classic_cdf/__init__.py +0 -0
  189. cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_base.py +7 -7
  190. cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_classic.py +12 -12
  191. cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_relationships.py +3 -3
  192. cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_sequences.py +2 -2
  193. cognite/neat/{core → _v0/core}/_instances/extractors/_dict.py +6 -3
  194. cognite/neat/{core → _v0/core}/_instances/extractors/_dms.py +6 -6
  195. cognite/neat/{core → _v0/core}/_instances/extractors/_dms_graph.py +11 -11
  196. cognite/neat/{core → _v0/core}/_instances/extractors/_mock_graph_generator.py +10 -10
  197. cognite/neat/{core → _v0/core}/_instances/extractors/_raw.py +3 -3
  198. cognite/neat/{core → _v0/core}/_instances/extractors/_rdf_file.py +7 -7
  199. cognite/neat/{core → _v0/core}/_instances/loaders/_base.py +5 -5
  200. cognite/neat/{core → _v0/core}/_instances/loaders/_rdf2dms.py +17 -17
  201. cognite/neat/{core → _v0/core}/_instances/loaders/_rdf_to_instance_space.py +11 -11
  202. cognite/neat/{core → _v0/core}/_instances/queries/_select.py +29 -3
  203. cognite/neat/{core → _v0/core}/_instances/queries/_update.py +1 -1
  204. cognite/neat/{core → _v0/core}/_instances/transformers/_base.py +4 -4
  205. cognite/neat/{core → _v0/core}/_instances/transformers/_classic_cdf.py +6 -6
  206. cognite/neat/{core → _v0/core}/_instances/transformers/_prune_graph.py +4 -4
  207. cognite/neat/{core → _v0/core}/_instances/transformers/_rdfpath.py +1 -1
  208. cognite/neat/{core → _v0/core}/_instances/transformers/_value_type.py +4 -4
  209. cognite/neat/{core → _v0/core}/_issues/_base.py +5 -5
  210. cognite/neat/{core → _v0/core}/_issues/_contextmanagers.py +1 -1
  211. cognite/neat/{core → _v0/core}/_issues/_factory.py +3 -3
  212. cognite/neat/{core → _v0/core}/_issues/errors/__init__.py +1 -1
  213. cognite/neat/{core → _v0/core}/_issues/errors/_external.py +1 -1
  214. cognite/neat/{core → _v0/core}/_issues/errors/_general.py +1 -1
  215. cognite/neat/{core → _v0/core}/_issues/errors/_properties.py +1 -1
  216. cognite/neat/{core → _v0/core}/_issues/errors/_resources.py +2 -2
  217. cognite/neat/{core → _v0/core}/_issues/errors/_wrapper.py +7 -3
  218. cognite/neat/{core → _v0/core}/_issues/warnings/__init__.py +1 -1
  219. cognite/neat/{core → _v0/core}/_issues/warnings/_external.py +1 -1
  220. cognite/neat/{core → _v0/core}/_issues/warnings/_general.py +1 -1
  221. cognite/neat/{core → _v0/core}/_issues/warnings/_models.py +2 -2
  222. cognite/neat/{core → _v0/core}/_issues/warnings/_properties.py +2 -2
  223. cognite/neat/{core → _v0/core}/_issues/warnings/_resources.py +1 -1
  224. cognite/neat/{core → _v0/core}/_issues/warnings/user_modeling.py +1 -1
  225. cognite/neat/{core → _v0/core}/_store/_data_model.py +12 -12
  226. cognite/neat/{core → _v0/core}/_store/_instance.py +43 -10
  227. cognite/neat/{core → _v0/core}/_store/_provenance.py +3 -3
  228. cognite/neat/{core → _v0/core}/_store/exceptions.py +4 -4
  229. cognite/neat/_v0/core/_utils/__init__.py +0 -0
  230. cognite/neat/{core → _v0/core}/_utils/auth.py +22 -12
  231. cognite/neat/{core → _v0/core}/_utils/auxiliary.py +1 -1
  232. cognite/neat/{core → _v0/core}/_utils/collection_.py +2 -2
  233. cognite/neat/{core → _v0/core}/_utils/graph_transformations_report.py +1 -1
  234. cognite/neat/{core → _v0/core}/_utils/rdf_.py +1 -1
  235. cognite/neat/{core → _v0/core}/_utils/reader/_base.py +1 -1
  236. cognite/neat/{core → _v0/core}/_utils/spreadsheet.py +18 -4
  237. cognite/neat/{core → _v0/core}/_utils/text.py +1 -1
  238. cognite/neat/{core → _v0/core}/_utils/upload.py +3 -3
  239. cognite/neat/{session → _v0}/engine/_load.py +1 -1
  240. cognite/neat/_v0/plugins/__init__.py +4 -0
  241. cognite/neat/_v0/plugins/_base.py +9 -0
  242. cognite/neat/_v0/plugins/_data_model.py +48 -0
  243. cognite/neat/{plugins → _v0/plugins}/_issues.py +1 -1
  244. cognite/neat/{plugins → _v0/plugins}/_manager.py +7 -16
  245. cognite/neat/{session → _v0/session}/_base.py +13 -15
  246. cognite/neat/{session → _v0/session}/_collector.py +1 -1
  247. cognite/neat/_v0/session/_diff.py +51 -0
  248. cognite/neat/{session → _v0/session}/_drop.py +3 -3
  249. cognite/neat/{session → _v0/session}/_explore.py +2 -2
  250. cognite/neat/{session → _v0/session}/_fix.py +2 -2
  251. cognite/neat/{session → _v0/session}/_inspect.py +3 -3
  252. cognite/neat/{session → _v0/session}/_mapping.py +3 -3
  253. cognite/neat/{session → _v0/session}/_plugin.py +4 -5
  254. cognite/neat/{session → _v0/session}/_prepare.py +8 -8
  255. cognite/neat/{session → _v0/session}/_read.py +34 -21
  256. cognite/neat/{session → _v0/session}/_set.py +8 -8
  257. cognite/neat/{session → _v0/session}/_show.py +5 -5
  258. cognite/neat/{session → _v0/session}/_state.py +10 -10
  259. cognite/neat/{session → _v0/session}/_subset.py +4 -4
  260. cognite/neat/{session → _v0/session}/_template.py +11 -11
  261. cognite/neat/{session → _v0/session}/_to.py +12 -12
  262. cognite/neat/{session → _v0/session}/_wizard.py +1 -1
  263. cognite/neat/{session → _v0/session}/exceptions.py +5 -5
  264. cognite/neat/_version.py +1 -1
  265. cognite/neat/legacy.py +6 -0
  266. cognite_neat-1.0.22.dist-info/METADATA +123 -0
  267. cognite_neat-1.0.22.dist-info/RECORD +329 -0
  268. cognite_neat-1.0.22.dist-info/WHEEL +4 -0
  269. cognite/neat/core/_data_model/models/entities/_loaders.py +0 -75
  270. cognite/neat/plugins/__init__.py +0 -3
  271. cognite/neat/plugins/data_model/importers/__init__.py +0 -5
  272. cognite/neat/plugins/data_model/importers/_base.py +0 -28
  273. cognite/neat/session/_session/_data_model/__init__.py +0 -3
  274. cognite/neat/session/_session/_data_model/_read.py +0 -193
  275. cognite/neat/session/_session/_data_model/_routes.py +0 -45
  276. cognite/neat/session/_session/_data_model/_show.py +0 -147
  277. cognite/neat/session/_session/_data_model/_write.py +0 -335
  278. cognite_neat-0.123.26.dist-info/METADATA +0 -144
  279. cognite_neat-0.123.26.dist-info/RECORD +0 -201
  280. cognite_neat-0.123.26.dist-info/WHEEL +0 -4
  281. cognite_neat-0.123.26.dist-info/licenses/LICENSE +0 -201
  282. /cognite/neat/{core → _client/init}/__init__.py +0 -0
  283. /cognite/neat/{core/_client/_api → _data_model}/__init__.py +0 -0
  284. /cognite/neat/{core/_client/data_classes → _data_model/deployer}/__init__.py +0 -0
  285. /cognite/neat/{core/_data_model → _data_model/exporters/_table_exporter}/__init__.py +0 -0
  286. /cognite/neat/{core/_instances → _data_model/importers/_table_importer}/__init__.py +0 -0
  287. /cognite/neat/{core/_instances/extractors/_classic_cdf → _data_model/models}/__init__.py +0 -0
  288. /cognite/neat/{core/_utils → _data_model/models/conceptual}/__init__.py +0 -0
  289. /cognite/neat/{plugins/data_model → _data_model/validation}/__init__.py +0 -0
  290. /cognite/neat/{session/_session → _session/_html}/__init__.py +0 -0
  291. /cognite/neat/{core → _v0/core}/_client/__init__.py +0 -0
  292. /cognite/neat/{core → _v0/core}/_client/data_classes/data_modeling.py +0 -0
  293. /cognite/neat/{core → _v0/core}/_client/data_classes/neat_sequence.py +0 -0
  294. /cognite/neat/{core → _v0/core}/_client/data_classes/statistics.py +0 -0
  295. /cognite/neat/{core → _v0/core}/_config.py +0 -0
  296. /cognite/neat/{core → _v0/core}/_data_model/analysis/__init__.py +0 -0
  297. /cognite/neat/{core → _v0/core}/_data_model/catalog/__init__.py +0 -0
  298. /cognite/neat/{core → _v0/core}/_data_model/catalog/classic_model.xlsx +0 -0
  299. /cognite/neat/{core → _v0/core}/_data_model/catalog/conceptual-imf-data-model.xlsx +0 -0
  300. /cognite/neat/{core → _v0/core}/_data_model/catalog/hello_world_pump.xlsx +0 -0
  301. /cognite/neat/{core → _v0/core}/_data_model/importers/__init__.py +0 -0
  302. /cognite/neat/{core → _v0/core}/_data_model/importers/_rdf/__init__.py +0 -0
  303. /cognite/neat/{core → _v0/core}/_data_model/models/_base_unverified.py +0 -0
  304. /cognite/neat/{core → _v0/core}/_data_model/models/conceptual/__init__.py +0 -0
  305. /cognite/neat/{core → _v0/core}/_data_model/models/entities/_constants.py +0 -0
  306. /cognite/neat/{core → _v0/core}/_data_model/models/entities/_wrapped.py +0 -0
  307. /cognite/neat/{core → _v0/core}/_data_model/models/mapping/__init__.py +0 -0
  308. /cognite/neat/{core → _v0/core}/_data_model/models/mapping/_classic2core.yaml +0 -0
  309. /cognite/neat/{core → _v0/core}/_data_model/transformers/__init__.py +0 -0
  310. /cognite/neat/{core → _v0/core}/_instances/_shared.py +0 -0
  311. /cognite/neat/{core → _v0/core}/_instances/_tracking/__init__.py +0 -0
  312. /cognite/neat/{core → _v0/core}/_instances/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
  313. /cognite/neat/{core → _v0/core}/_instances/examples/Knowledge-Graph-Nordic44.xml +0 -0
  314. /cognite/neat/{core → _v0/core}/_instances/examples/__init__.py +0 -0
  315. /cognite/neat/{core → _v0/core}/_instances/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
  316. /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_assets.py +0 -0
  317. /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_data_sets.py +0 -0
  318. /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_events.py +0 -0
  319. /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_files.py +0 -0
  320. /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_labels.py +0 -0
  321. /cognite/neat/{core → _v0/core}/_instances/extractors/_classic_cdf/_timeseries.py +0 -0
  322. /cognite/neat/{core → _v0/core}/_instances/loaders/__init__.py +0 -0
  323. /cognite/neat/{core → _v0/core}/_instances/queries/__init__.py +0 -0
  324. /cognite/neat/{core → _v0/core}/_instances/queries/_base.py +0 -0
  325. /cognite/neat/{core → _v0/core}/_instances/queries/_queries.py +0 -0
  326. /cognite/neat/{core → _v0/core}/_instances/transformers/__init__.py +0 -0
  327. /cognite/neat/{core → _v0/core}/_issues/__init__.py +0 -0
  328. /cognite/neat/{core → _v0/core}/_issues/formatters.py +0 -0
  329. /cognite/neat/{core → _v0/core}/_shared.py +0 -0
  330. /cognite/neat/{core → _v0/core}/_store/__init__.py +0 -0
  331. /cognite/neat/{core → _v0/core}/_utils/io_.py +0 -0
  332. /cognite/neat/{core → _v0/core}/_utils/reader/__init__.py +0 -0
  333. /cognite/neat/{core → _v0/core}/_utils/tarjan.py +0 -0
  334. /cognite/neat/{core → _v0/core}/_utils/time_.py +0 -0
  335. /cognite/neat/{core → _v0/core}/_utils/xml_.py +0 -0
  336. /cognite/neat/{session → _v0}/engine/__init__.py +0 -0
  337. /cognite/neat/{session → _v0}/engine/_import.py +0 -0
  338. /cognite/neat/{session → _v0}/engine/_interface.py +0 -0
  339. /cognite/neat/{session → _v0/session}/__init__.py +0 -0
  340. /cognite/neat/{session → _v0/session}/_experimental.py +0 -0
  341. /cognite/neat/{session → _v0/session}/_state/README.md +0 -0
@@ -0,0 +1,61 @@
1
+ from pydantic import HttpUrl, RootModel, ValidationError
2
+
3
+ from cognite.neat._utils.auxiliary import local_import
4
+
5
+
6
+ class URI(RootModel[str]):
7
+ def __init__(self, value: str):
8
+ try:
9
+ # Use Pydantic's AnyUrl to validate the URI
10
+ _ = HttpUrl(value)
11
+ except ValidationError as e:
12
+ raise ValueError(f"Invalid URI: {value}") from e
13
+ super().__init__(value)
14
+
15
+ def __str__(self) -> str:
16
+ return self.root
17
+
18
+ def __repr__(self) -> str:
19
+ return f"URI({self.root!r})"
20
+
21
+ def as_rdflib_uriref(self): # type: ignore[no-untyped-def]
22
+ # rdflib is an optional dependency, so import here
23
+ local_import("rdflib", "rdflib")
24
+ from rdflib import URIRef
25
+
26
+ return URIRef(self.root)
27
+
28
+
29
+ class NameSpace(RootModel[str]):
30
+ def __init__(self, value: str):
31
+ try:
32
+ # Use Pydantic's AnyUrl to validate the URI
33
+ _ = HttpUrl(value)
34
+ except ValidationError as e:
35
+ raise ValueError(f"Invalid Namespace: {value}") from e
36
+ super().__init__(value)
37
+
38
+ def __str__(self) -> str:
39
+ return self.root
40
+
41
+ def __repr__(self) -> str:
42
+ return f"NameSpace({self.root!r})"
43
+
44
+ def term(self, name: str) -> URI:
45
+ # need to handle slices explicitly because of __getitem__ override
46
+ return URI(self.root + (name if isinstance(name, str) else ""))
47
+
48
+ def __getitem__(self, key: str) -> URI: # type: ignore[override]
49
+ return self.term(key)
50
+
51
+ def __getattr__(self, name: str) -> URI:
52
+ if name.startswith("__"): # ignore any special Python names!
53
+ raise AttributeError
54
+ return self.term(name)
55
+
56
+ def as_rdflib_namespace(self): # type: ignore[no-untyped-def]
57
+ # rdflib is an optional dependency, so import here
58
+ local_import("rdflib", "rdflib")
59
+ from rdflib import Namespace
60
+
61
+ return Namespace(self.root)
@@ -0,0 +1,41 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any
3
+
4
+ from cognite.neat._data_model.deployer.data_classes import DeploymentResult
5
+ from cognite.neat._issues import IssueList
6
+
7
+
8
+ class OnSuccess(ABC):
9
+ """Abstract base class for post-activity success handlers."""
10
+
11
+ @abstractmethod
12
+ def run(self, data_model: Any) -> None:
13
+ """Execute the success handler on the data model."""
14
+ pass
15
+
16
+
17
+ class OnSuccessIssuesChecker(OnSuccess, ABC):
18
+ """Abstract base class for post-activity success handlers that check for issues of the data model."""
19
+
20
+ def __init__(self) -> None:
21
+ self._issues = IssueList()
22
+ self._has_run = False
23
+
24
+ @property
25
+ def issues(self) -> IssueList:
26
+ if not self._has_run:
27
+ raise RuntimeError(f"{type(self).__name__} has not been run yet.")
28
+ return IssueList(self._issues)
29
+
30
+
31
+ class OnSuccessResultProducer(OnSuccess, ABC):
32
+ """Abstract base class for post-activity success handlers that produce desired outcomes using the data model."""
33
+
34
+ def __init__(self) -> None:
35
+ self._results: DeploymentResult | None = None
36
+
37
+ @property
38
+ def result(self) -> DeploymentResult:
39
+ if self._results is None:
40
+ raise RuntimeError("SchemaDeployer has not been run yet.")
41
+ return self._results
@@ -0,0 +1,134 @@
1
+ import sys
2
+ from datetime import datetime, timezone
3
+ from typing import Any
4
+
5
+ from pydantic import BaseModel, Field, field_serializer
6
+ from pydantic_core.core_schema import FieldSerializationInfo
7
+
8
+ from cognite.neat._client import NeatClient
9
+ from cognite.neat._data_model.models.dms import (
10
+ ContainerReference,
11
+ ContainerRequest,
12
+ DataModelReference,
13
+ DataModelRequest,
14
+ NodeReference,
15
+ RequestSchema,
16
+ SpaceReference,
17
+ SpaceRequest,
18
+ ViewReference,
19
+ ViewRequest,
20
+ )
21
+
22
+ if sys.version_info >= (3, 11):
23
+ from typing import Self
24
+ else:
25
+ from typing_extensions import Self
26
+
27
+
28
+ class SchemaSnapshot(BaseModel, extra="ignore"):
29
+ timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
30
+ data_model: dict[DataModelReference, DataModelRequest] = Field(default_factory=dict)
31
+ views: dict[ViewReference, ViewRequest] = Field(default_factory=dict)
32
+ containers: dict[ContainerReference, ContainerRequest] = Field(default_factory=dict)
33
+ spaces: dict[SpaceReference, SpaceRequest] = Field(default_factory=dict)
34
+ node_types: dict[NodeReference, NodeReference] = Field(default_factory=dict)
35
+
36
+ @field_serializer("data_model", "views", "containers", "spaces", "node_types", mode="plain")
37
+ @classmethod
38
+ def make_hashable_keys(cls, value: dict, info: FieldSerializationInfo) -> dict[str, Any]:
39
+ output: dict[str, Any] = {}
40
+ for key, val in value.items():
41
+ dumped_value = val.model_dump(**vars(info))
42
+ output[str(key)] = dumped_value
43
+ return output
44
+
45
+ def merge(self, cdf: Self) -> Self:
46
+ """Merge another SchemaSnapshot into this one, prioritizing this snapshot's data."""
47
+ merged = self.model_copy(deep=True)
48
+
49
+ for model_ref, local_model in merged.data_model.items():
50
+ if model_ref not in cdf.data_model:
51
+ continue
52
+ cdf_model = cdf.data_model[model_ref]
53
+ if new_views := (set(cdf_model.views or []) - set(local_model.views or [])):
54
+ for view_ref in new_views:
55
+ if cdf_view := cdf.views.get(view_ref):
56
+ merged.views[view_ref] = cdf_view
57
+ # We append the local views at the end of the CDF views.
58
+ local_model.views = list(dict.fromkeys((cdf_model.views or []) + (local_model.views or [])).keys())
59
+
60
+ # Update local views with additional properties and implements from CDF views
61
+ for view_ref, view in merged.views.items():
62
+ if cdf_view := cdf.views.get(view_ref):
63
+ if cdf_only_containers := cdf_view.used_containers - set(view.used_containers):
64
+ for cdf_only_container_ref in cdf_only_containers:
65
+ if (
66
+ cdf_container := cdf.containers.get(cdf_only_container_ref)
67
+ ) and cdf_only_container_ref not in merged.containers:
68
+ merged.containers[cdf_only_container_ref] = cdf_container
69
+
70
+ view.properties = {**cdf_view.properties, **view.properties}
71
+
72
+ # update implements
73
+ if cdf_view.implements:
74
+ view.implements = list(dict.fromkeys(cdf_view.implements + (view.implements or [])).keys())
75
+
76
+ for container_ref, container in merged.containers.items():
77
+ if cdf_container := cdf.containers.get(container_ref):
78
+ container.properties = {**cdf_container.properties, **container.properties}
79
+ container.constraints = {**(cdf_container.constraints or {}), **(container.constraints or {})} or None
80
+
81
+ return merged
82
+
83
+ @classmethod
84
+ def fetch_cdf_data_model(cls, client: NeatClient, data_model: RequestSchema) -> Self:
85
+ """Fetch the latest data model, views, containers, and spaces from CDF based on the provided RequestSchema."""
86
+ now = datetime.now(timezone.utc)
87
+ space_ids = [space.as_reference() for space in data_model.spaces]
88
+ cdf_spaces = client.spaces.retrieve(space_ids)
89
+
90
+ container_refs = [c.as_reference() for c in data_model.containers]
91
+ cdf_containers = client.containers.retrieve(container_refs)
92
+
93
+ view_refs = [v.as_reference() for v in data_model.views]
94
+ cdf_views = client.views.retrieve(view_refs)
95
+
96
+ dm_ref = data_model.data_model.as_reference()
97
+ cdf_data_models = client.data_models.retrieve([dm_ref])
98
+
99
+ nodes = [node_type for view in cdf_views for node_type in view.node_types]
100
+ return cls(
101
+ timestamp=now,
102
+ data_model={dm.as_reference(): dm.as_request() for dm in cdf_data_models},
103
+ views={view.as_reference(): view.as_request() for view in cdf_views},
104
+ containers={container.as_reference(): container.as_request() for container in cdf_containers},
105
+ spaces={space.as_reference(): space.as_request() for space in cdf_spaces},
106
+ node_types={node: node for node in nodes},
107
+ )
108
+
109
+ @classmethod
110
+ def fetch_entire_cdf(cls, client: NeatClient) -> Self:
111
+ """Fetch the entire data model, views, containers, and spaces from CDF."""
112
+ now = datetime.now(timezone.utc)
113
+ all_views = client.views.list(
114
+ all_versions=True, include_global=True, include_inherited_properties=False, limit=None
115
+ )
116
+ nodes = [node_type for view in all_views for node_type in view.node_types]
117
+ return cls(
118
+ # TODO: spaces and data_models should be update after updating list methods for unlimited no
119
+ spaces={
120
+ response.as_reference(): response.as_request()
121
+ for response in client.spaces.list(include_global=True, limit=1000)
122
+ },
123
+ data_model={
124
+ response.as_reference(): response.as_request()
125
+ for response in client.data_models.list(all_versions=True, include_global=True, limit=1000)
126
+ },
127
+ views={response.as_reference(): response.as_request() for response in all_views},
128
+ containers={
129
+ response.as_reference(): response.as_request()
130
+ for response in client.containers.list(include_global=True, limit=None)
131
+ },
132
+ node_types={node_type: node_type for node_type in nodes},
133
+ timestamp=now,
134
+ )
@@ -0,0 +1,140 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Generic
3
+
4
+ from cognite.neat._utils.useful_types import T_Item
5
+
6
+ from .data_classes import (
7
+ AddedField,
8
+ ChangedField,
9
+ FieldChange,
10
+ FieldChanges,
11
+ RemovedField,
12
+ SeverityType,
13
+ )
14
+
15
+
16
+ class Differ(Generic[T_Item], ABC):
17
+ def __init__(self, parent_path: str | None = None) -> None:
18
+ self.parent_path = parent_path
19
+
20
+ def _get_path(self, field: str) -> str:
21
+ if self.parent_path:
22
+ return f"{self.parent_path}.{field}"
23
+ return field
24
+
25
+ def _diff_name_description(self, current: T_Item, new: T_Item, identifier: str | None = None) -> list[FieldChange]:
26
+ changes: list[FieldChange] = []
27
+ if hasattr(current, "name") and hasattr(new, "name"):
28
+ if current.name != new.name:
29
+ field_path = self._get_path(f"{identifier}.name" if identifier else "name")
30
+ changes.append(
31
+ ChangedField(
32
+ item_severity=SeverityType.SAFE,
33
+ field_path=field_path,
34
+ current_value=current.name,
35
+ new_value=new.name,
36
+ )
37
+ )
38
+ if hasattr(current, "description") and hasattr(new, "description"):
39
+ if current.description != new.description:
40
+ field_path = self._get_path(f"{identifier}.description" if identifier else "description")
41
+ changes.append(
42
+ ChangedField(
43
+ item_severity=SeverityType.SAFE,
44
+ field_path=field_path,
45
+ current_value=current.description,
46
+ new_value=new.description,
47
+ )
48
+ )
49
+ return changes
50
+
51
+
52
+ class ItemDiffer(Differ[T_Item], ABC):
53
+ """A generic class for comparing two items of the same type and reporting the differences."""
54
+
55
+ @abstractmethod
56
+ def diff(self, current: T_Item, new: T_Item) -> list[FieldChange]:
57
+ """Compare two items and return a list of changes.
58
+
59
+ Args:
60
+ current: The resource as it is in CDF.
61
+ new: The resource as it is desired to be.
62
+
63
+ Returns:
64
+ A list of changes between the two resources.
65
+ """
66
+ raise NotImplementedError()
67
+
68
+
69
+ class ObjectDiffer(Differ[T_Item], ABC):
70
+ @abstractmethod
71
+ def diff(self, current: T_Item, new: T_Item, identifier: str) -> list[FieldChange]:
72
+ """Compare two dict-like objects and return a list of changes.
73
+
74
+ Args:
75
+ current: The resource as it is in CDF.
76
+ new: The resource as it is desired to be.
77
+ identifier: The field used to identify individual items within the objects.
78
+
79
+ Returns:
80
+ A list of changes between the two resources.
81
+ """
82
+ raise NotImplementedError()
83
+
84
+
85
+ def field_differences(
86
+ parent_path: str,
87
+ current: dict[str, T_Item] | None,
88
+ new: dict[str, T_Item] | None,
89
+ add_severity: SeverityType,
90
+ remove_severity: SeverityType,
91
+ differ: ObjectDiffer[T_Item],
92
+ ) -> list[FieldChange]:
93
+ """Diff two containers of items.
94
+
95
+ A container is for example the properties, constraints, or indexes of a container,
96
+ properties of a space, views of a data model, etc.
97
+
98
+ Args:
99
+ parent_path: The JSON path to the container being compared.
100
+ current: The items as they are in CDF.
101
+ new: The items as they are desired to be.
102
+ add_severity: The severity to assign to added items.
103
+ remove_severity: The severity to assign to removed items.
104
+ differ: The differ to use for comparing individual items.
105
+
106
+ """
107
+ changes: list[FieldChange] = []
108
+ current_map = current or {}
109
+ new_map = new or {}
110
+ current_keys = set(current_map.keys())
111
+ new_keys = set(new_map.keys())
112
+
113
+ for key in sorted(new_keys - current_keys):
114
+ item_path = f"{parent_path}.{key}"
115
+ changes.append(
116
+ AddedField(
117
+ item_severity=add_severity,
118
+ field_path=item_path,
119
+ new_value=new_map[key],
120
+ )
121
+ )
122
+
123
+ for key in sorted(current_keys - new_keys):
124
+ changes.append(
125
+ RemovedField(
126
+ item_severity=remove_severity,
127
+ field_path=f"{parent_path}.{key}",
128
+ current_value=current_map[key],
129
+ )
130
+ )
131
+
132
+ for key in sorted(current_keys & new_keys):
133
+ item_path = f"{parent_path}.{key}"
134
+ cdf_item = current_map[key]
135
+ desired_item = new_map[key]
136
+ diffs = differ.diff(cdf_item, desired_item, identifier=key)
137
+ if diffs:
138
+ changes.append(FieldChanges(field_path=item_path, changes=diffs))
139
+
140
+ return changes