cognite-neat 1.0.20__tar.gz → 1.0.22__tar.gz

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 (331) hide show
  1. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/PKG-INFO +1 -1
  2. cognite_neat-1.0.22/cognite/neat/_client/__init__.py +5 -0
  3. cognite_neat-1.0.22/cognite/neat/_client/init/credentials.py +70 -0
  4. cognite_neat-1.0.22/cognite/neat/_client/init/env_vars.py +131 -0
  5. cognite_neat-1.0.22/cognite/neat/_client/init/main.py +51 -0
  6. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/_analysis.py +47 -14
  7. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/_identifiers.py +1 -1
  8. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/exporters/_table_exporter/writer.py +59 -3
  9. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/importers/_table_importer/data_classes.py +46 -23
  10. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/importers/_table_importer/reader.py +54 -15
  11. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/conceptual/_data_model.py +1 -1
  12. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_space.py +1 -1
  13. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/entities/_identifiers.py +1 -1
  14. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/validation/dms/_views.py +38 -0
  15. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_exceptions.py +12 -0
  16. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_store/_store.py +1 -2
  17. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/auxiliary.py +10 -0
  18. cognite_neat-1.0.22/cognite/neat/_utils/repo.py +19 -0
  19. cognite_neat-1.0.22/cognite/neat/_version.py +2 -0
  20. cognite_neat-1.0.22/cognite/neat/py.typed +0 -0
  21. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/pyproject.toml +4 -2
  22. cognite_neat-1.0.20/cognite/neat/_client/__init__.py +0 -4
  23. cognite_neat-1.0.20/cognite/neat/_version.py +0 -2
  24. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/README.md +0 -0
  25. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/__init__.py +0 -0
  26. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_client/api.py +0 -0
  27. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_client/client.py +0 -0
  28. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_client/config.py +0 -0
  29. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_client/containers_api.py +0 -0
  30. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_client/data_classes.py +0 -0
  31. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_client/data_model_api.py +0 -0
  32. {cognite_neat-1.0.20/cognite/neat/_data_model → cognite_neat-1.0.22/cognite/neat/_client/init}/__init__.py +0 -0
  33. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_client/spaces_api.py +0 -0
  34. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_client/statistics_api.py +0 -0
  35. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_client/views_api.py +0 -0
  36. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_config.py +0 -0
  37. {cognite_neat-1.0.20/cognite/neat/_data_model/deployer → cognite_neat-1.0.22/cognite/neat/_data_model}/__init__.py +0 -0
  38. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/_constants.py +0 -0
  39. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/_shared.py +0 -0
  40. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/_snapshot.py +0 -0
  41. {cognite_neat-1.0.20/cognite/neat/_data_model/exporters/_table_exporter → cognite_neat-1.0.22/cognite/neat/_data_model/deployer}/__init__.py +0 -0
  42. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/deployer/_differ.py +0 -0
  43. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/deployer/_differ_container.py +0 -0
  44. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/deployer/_differ_data_model.py +0 -0
  45. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/deployer/_differ_space.py +0 -0
  46. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/deployer/_differ_view.py +0 -0
  47. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/deployer/data_classes.py +0 -0
  48. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/deployer/deployer.py +0 -0
  49. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/exporters/__init__.py +0 -0
  50. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/exporters/_api_exporter.py +0 -0
  51. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/exporters/_base.py +0 -0
  52. {cognite_neat-1.0.20/cognite/neat/_data_model/importers/_table_importer → cognite_neat-1.0.22/cognite/neat/_data_model/exporters/_table_exporter}/__init__.py +0 -0
  53. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/exporters/_table_exporter/exporter.py +0 -0
  54. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/exporters/_table_exporter/workbook.py +0 -0
  55. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/importers/__init__.py +0 -0
  56. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/importers/_api_importer.py +0 -0
  57. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/importers/_base.py +0 -0
  58. {cognite_neat-1.0.20/cognite/neat/_data_model/models → cognite_neat-1.0.22/cognite/neat/_data_model/importers/_table_importer}/__init__.py +0 -0
  59. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/importers/_table_importer/importer.py +0 -0
  60. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/importers/_table_importer/source.py +0 -0
  61. {cognite_neat-1.0.20/cognite/neat/_data_model/models/conceptual → cognite_neat-1.0.22/cognite/neat/_data_model/models}/__init__.py +0 -0
  62. {cognite_neat-1.0.20/cognite/neat/_data_model/validation → cognite_neat-1.0.22/cognite/neat/_data_model/models/conceptual}/__init__.py +0 -0
  63. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/conceptual/_base.py +0 -0
  64. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/conceptual/_concept.py +0 -0
  65. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/conceptual/_properties.py +0 -0
  66. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/conceptual/_property.py +0 -0
  67. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/__init__.py +0 -0
  68. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_base.py +0 -0
  69. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_constants.py +0 -0
  70. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_constraints.py +0 -0
  71. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_container.py +0 -0
  72. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_data_model.py +0 -0
  73. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_data_types.py +0 -0
  74. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_http.py +0 -0
  75. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_indexes.py +0 -0
  76. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_limits.py +0 -0
  77. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_references.py +0 -0
  78. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_schema.py +0 -0
  79. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_types.py +0 -0
  80. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_view_filter.py +0 -0
  81. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_view_property.py +0 -0
  82. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/dms/_views.py +0 -0
  83. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/entities/__init__.py +0 -0
  84. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/entities/_base.py +0 -0
  85. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/entities/_constants.py +0 -0
  86. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/entities/_data_types.py +0 -0
  87. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/models/entities/_parser.py +0 -0
  88. {cognite_neat-1.0.20/cognite/neat/_session/_html → cognite_neat-1.0.22/cognite/neat/_data_model/validation}/__init__.py +0 -0
  89. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/validation/dms/__init__.py +0 -0
  90. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/validation/dms/_ai_readiness.py +0 -0
  91. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/validation/dms/_base.py +0 -0
  92. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/validation/dms/_connections.py +0 -0
  93. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/validation/dms/_consistency.py +0 -0
  94. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/validation/dms/_containers.py +0 -0
  95. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/validation/dms/_limits.py +0 -0
  96. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_data_model/validation/dms/_orchestrator.py +0 -0
  97. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_issues.py +0 -0
  98. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/__init__.py +0 -0
  99. {cognite_neat-1.0.20/cognite/neat/_session/_result/_deployment → cognite_neat-1.0.22/cognite/neat/_session/_html}/__init__.py +0 -0
  100. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/_render.py +0 -0
  101. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/static/__init__.py +0 -0
  102. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/static/deployment.css +0 -0
  103. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/static/deployment.js +0 -0
  104. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/static/issues.css +0 -0
  105. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/static/issues.js +0 -0
  106. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/static/shared.css +0 -0
  107. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/templates/__init__.py +0 -0
  108. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/templates/deployment.html +0 -0
  109. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_html/templates/issues.html +0 -0
  110. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_issues.py +0 -0
  111. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_physical.py +0 -0
  112. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_result/__init__.py +0 -0
  113. {cognite_neat-1.0.20/cognite/neat/_session/_result/_deployment/_physical → cognite_neat-1.0.22/cognite/neat/_session/_result/_deployment}/__init__.py +0 -0
  114. {cognite_neat-1.0.20/cognite/neat/_session/_usage_analytics → cognite_neat-1.0.22/cognite/neat/_session/_result/_deployment/_physical}/__init__.py +0 -0
  115. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_result/_deployment/_physical/_changes.py +0 -0
  116. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_result/_deployment/_physical/_statistics.py +0 -0
  117. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_result/_deployment/_physical/serializer.py +0 -0
  118. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_result/_result.py +0 -0
  119. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_session.py +0 -0
  120. {cognite_neat-1.0.20/cognite/neat/_utils → cognite_neat-1.0.22/cognite/neat/_session/_usage_analytics}/__init__.py +0 -0
  121. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_usage_analytics/_collector.py +0 -0
  122. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_usage_analytics/_constants.py +0 -0
  123. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_usage_analytics/_storage.py +0 -0
  124. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_session/_wrappers.py +0 -0
  125. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_state_machine/__init__.py +0 -0
  126. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_state_machine/_base.py +0 -0
  127. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_state_machine/_states.py +0 -0
  128. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_store/__init__.py +0 -0
  129. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_store/_provenance.py +0 -0
  130. {cognite_neat-1.0.20/cognite/neat/_v0 → cognite_neat-1.0.22/cognite/neat/_utils}/__init__.py +0 -0
  131. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/_reader.py +0 -0
  132. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/collection.py +0 -0
  133. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/http_client/__init__.py +0 -0
  134. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/http_client/_client.py +0 -0
  135. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/http_client/_config.py +0 -0
  136. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/http_client/_data_classes.py +0 -0
  137. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/http_client/_tracker.py +0 -0
  138. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/text.py +0 -0
  139. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/useful_types.py +0 -0
  140. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_utils/validation.py +0 -0
  141. {cognite_neat-1.0.20/cognite/neat/_v0/core → cognite_neat-1.0.22/cognite/neat/_v0}/__init__.py +0 -0
  142. {cognite_neat-1.0.20/cognite/neat/_v0/core/_client/_api → cognite_neat-1.0.22/cognite/neat/_v0/core}/__init__.py +0 -0
  143. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/__init__.py +0 -0
  144. {cognite_neat-1.0.20/cognite/neat/_v0/core/_client/data_classes → cognite_neat-1.0.22/cognite/neat/_v0/core/_client/_api}/__init__.py +0 -0
  145. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/_api/data_modeling_loaders.py +0 -0
  146. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/_api/neat_instances.py +0 -0
  147. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/_api/schema.py +0 -0
  148. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/_api/statistics.py +0 -0
  149. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/_api_client.py +0 -0
  150. {cognite_neat-1.0.20/cognite/neat/_v0/core/_data_model → cognite_neat-1.0.22/cognite/neat/_v0/core/_client/data_classes}/__init__.py +0 -0
  151. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/data_classes/data_modeling.py +0 -0
  152. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/data_classes/neat_sequence.py +0 -0
  153. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/data_classes/schema.py +0 -0
  154. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/data_classes/statistics.py +0 -0
  155. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_client/testing.py +0 -0
  156. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_config.py +0 -0
  157. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_constants.py +0 -0
  158. {cognite_neat-1.0.20/cognite/neat/_v0/core/_instances → cognite_neat-1.0.22/cognite/neat/_v0/core/_data_model}/__init__.py +0 -0
  159. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/_constants.py +0 -0
  160. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/_shared.py +0 -0
  161. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/analysis/__init__.py +0 -0
  162. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/analysis/_base.py +0 -0
  163. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/catalog/__init__.py +0 -0
  164. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/catalog/classic_model.xlsx +0 -0
  165. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/catalog/conceptual-imf-data-model.xlsx +0 -0
  166. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/catalog/hello_world_pump.xlsx +0 -0
  167. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/exporters/__init__.py +0 -0
  168. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/exporters/_base.py +0 -0
  169. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/exporters/_data_model2dms.py +0 -0
  170. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/exporters/_data_model2excel.py +0 -0
  171. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/exporters/_data_model2instance_template.py +0 -0
  172. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/exporters/_data_model2semantic_model.py +0 -0
  173. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/exporters/_data_model2yaml.py +0 -0
  174. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/__init__.py +0 -0
  175. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_base.py +0 -0
  176. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_base_file_reader.py +0 -0
  177. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_dict2data_model.py +0 -0
  178. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_dms2data_model.py +0 -0
  179. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_graph2data_model.py +0 -0
  180. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_rdf/__init__.py +0 -0
  181. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_rdf/_base.py +0 -0
  182. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_rdf/_inference2rdata_model.py +0 -0
  183. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_rdf/_owl2data_model.py +0 -0
  184. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_rdf/_shared.py +0 -0
  185. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/importers/_spreadsheet2data_model.py +0 -0
  186. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/__init__.py +0 -0
  187. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/_base_unverified.py +0 -0
  188. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/_base_verified.py +0 -0
  189. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/_import_contexts.py +0 -0
  190. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/_types.py +0 -0
  191. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/conceptual/__init__.py +0 -0
  192. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/conceptual/_unverified.py +0 -0
  193. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/conceptual/_validation.py +0 -0
  194. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/conceptual/_verified.py +0 -0
  195. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/data_types.py +0 -0
  196. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/entities/__init__.py +0 -0
  197. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/entities/_constants.py +0 -0
  198. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/entities/_loaders.py +0 -0
  199. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/entities/_multi_value.py +0 -0
  200. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/entities/_restrictions.py +0 -0
  201. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/entities/_single_value.py +0 -0
  202. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/entities/_types.py +0 -0
  203. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/entities/_wrapped.py +0 -0
  204. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/mapping/__init__.py +0 -0
  205. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/mapping/_classic2core.py +0 -0
  206. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/mapping/_classic2core.yaml +0 -0
  207. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/physical/__init__.py +0 -0
  208. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/physical/_exporter.py +0 -0
  209. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/physical/_unverified.py +0 -0
  210. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/physical/_validation.py +0 -0
  211. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/models/physical/_verified.py +0 -0
  212. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/transformers/__init__.py +0 -0
  213. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/transformers/_base.py +0 -0
  214. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/transformers/_converters.py +0 -0
  215. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/transformers/_mapping.py +0 -0
  216. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/transformers/_union_conceptual.py +0 -0
  217. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_data_model/transformers/_verification.py +0 -0
  218. {cognite_neat-1.0.20/cognite/neat/_v0/core/_instances/extractors/_classic_cdf → cognite_neat-1.0.22/cognite/neat/_v0/core/_instances}/__init__.py +0 -0
  219. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/_shared.py +0 -0
  220. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/_tracking/__init__.py +0 -0
  221. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/_tracking/base.py +0 -0
  222. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/_tracking/log.py +0 -0
  223. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
  224. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/examples/Knowledge-Graph-Nordic44.xml +0 -0
  225. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/examples/__init__.py +0 -0
  226. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
  227. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/__init__.py +0 -0
  228. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_base.py +0 -0
  229. {cognite_neat-1.0.20/cognite/neat/_v0/core/_utils → cognite_neat-1.0.22/cognite/neat/_v0/core/_instances/extractors/_classic_cdf}/__init__.py +0 -0
  230. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_assets.py +0 -0
  231. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_base.py +0 -0
  232. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_classic.py +0 -0
  233. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_data_sets.py +0 -0
  234. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_events.py +0 -0
  235. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_files.py +0 -0
  236. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_labels.py +0 -0
  237. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_relationships.py +0 -0
  238. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_sequences.py +0 -0
  239. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_timeseries.py +0 -0
  240. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_dict.py +0 -0
  241. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_dms.py +0 -0
  242. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_dms_graph.py +0 -0
  243. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_mock_graph_generator.py +0 -0
  244. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_raw.py +0 -0
  245. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/extractors/_rdf_file.py +0 -0
  246. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/loaders/__init__.py +0 -0
  247. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/loaders/_base.py +0 -0
  248. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/loaders/_rdf2dms.py +0 -0
  249. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/loaders/_rdf_to_instance_space.py +0 -0
  250. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/queries/__init__.py +0 -0
  251. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/queries/_base.py +0 -0
  252. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/queries/_queries.py +0 -0
  253. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/queries/_select.py +0 -0
  254. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/queries/_update.py +0 -0
  255. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/transformers/__init__.py +0 -0
  256. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/transformers/_base.py +0 -0
  257. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/transformers/_classic_cdf.py +0 -0
  258. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/transformers/_prune_graph.py +0 -0
  259. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/transformers/_rdfpath.py +0 -0
  260. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_instances/transformers/_value_type.py +0 -0
  261. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/__init__.py +0 -0
  262. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/_base.py +0 -0
  263. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/_contextmanagers.py +0 -0
  264. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/_factory.py +0 -0
  265. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/errors/__init__.py +0 -0
  266. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/errors/_external.py +0 -0
  267. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/errors/_general.py +0 -0
  268. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/errors/_properties.py +0 -0
  269. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/errors/_resources.py +0 -0
  270. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/errors/_wrapper.py +0 -0
  271. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/formatters.py +0 -0
  272. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/warnings/__init__.py +0 -0
  273. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/warnings/_external.py +0 -0
  274. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/warnings/_general.py +0 -0
  275. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/warnings/_models.py +0 -0
  276. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/warnings/_properties.py +0 -0
  277. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/warnings/_resources.py +0 -0
  278. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_issues/warnings/user_modeling.py +0 -0
  279. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_shared.py +0 -0
  280. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_store/__init__.py +0 -0
  281. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_store/_data_model.py +0 -0
  282. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_store/_instance.py +0 -0
  283. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_store/_provenance.py +0 -0
  284. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_store/exceptions.py +0 -0
  285. /cognite_neat-1.0.20/cognite/neat/py.typed → /cognite_neat-1.0.22/cognite/neat/_v0/core/_utils/__init__.py +0 -0
  286. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/auth.py +0 -0
  287. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/auxiliary.py +0 -0
  288. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/collection_.py +0 -0
  289. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/graph_transformations_report.py +0 -0
  290. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/io_.py +0 -0
  291. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/rdf_.py +0 -0
  292. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/reader/__init__.py +0 -0
  293. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/reader/_base.py +0 -0
  294. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/spreadsheet.py +0 -0
  295. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/tarjan.py +0 -0
  296. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/text.py +0 -0
  297. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/time_.py +0 -0
  298. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/upload.py +0 -0
  299. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/core/_utils/xml_.py +0 -0
  300. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/engine/__init__.py +0 -0
  301. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/engine/_import.py +0 -0
  302. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/engine/_interface.py +0 -0
  303. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/engine/_load.py +0 -0
  304. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/plugins/__init__.py +0 -0
  305. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/plugins/_base.py +0 -0
  306. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/plugins/_data_model.py +0 -0
  307. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/plugins/_issues.py +0 -0
  308. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/plugins/_manager.py +0 -0
  309. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/__init__.py +0 -0
  310. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_base.py +0 -0
  311. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_collector.py +0 -0
  312. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_diff.py +0 -0
  313. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_drop.py +0 -0
  314. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_experimental.py +0 -0
  315. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_explore.py +0 -0
  316. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_fix.py +0 -0
  317. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_inspect.py +0 -0
  318. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_mapping.py +0 -0
  319. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_plugin.py +0 -0
  320. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_prepare.py +0 -0
  321. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_read.py +0 -0
  322. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_set.py +0 -0
  323. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_show.py +0 -0
  324. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_state/README.md +0 -0
  325. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_state.py +0 -0
  326. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_subset.py +0 -0
  327. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_template.py +0 -0
  328. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_to.py +0 -0
  329. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/_wizard.py +0 -0
  330. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/_v0/session/exceptions.py +0 -0
  331. {cognite_neat-1.0.20 → cognite_neat-1.0.22}/cognite/neat/legacy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cognite-neat
3
- Version: 1.0.20
3
+ Version: 1.0.22
4
4
  Summary: Knowledge graph transformation
5
5
  Author: Nikola Vasiljevic, Anders Albert
6
6
  Author-email: Nikola Vasiljevic <nikola.vasiljevic@cognite.com>, Anders Albert <anders.albert@cognite.com>
@@ -0,0 +1,5 @@
1
+ from .client import NeatClient
2
+ from .config import NeatClientConfig
3
+ from .init.main import get_cognite_client
4
+
5
+ __all__ = ["NeatClient", "NeatClientConfig", "get_cognite_client"]
@@ -0,0 +1,70 @@
1
+ from collections.abc import Callable
2
+
3
+ from cognite.client.credentials import CredentialProvider, OAuthClientCredentials, OAuthInteractive, Token
4
+
5
+ from cognite.neat._utils.text import humanize_collection
6
+
7
+ from .env_vars import ClientEnvironmentVariables, LoginFlow
8
+
9
+
10
+ def get_credentials(env_vars: ClientEnvironmentVariables) -> CredentialProvider:
11
+ options: dict[LoginFlow, Callable[[ClientEnvironmentVariables], CredentialProvider]] = {
12
+ "client_credentials": create_client_credentials,
13
+ "interactive": create_interactive_credentials,
14
+ "token": create_token_credentials,
15
+ "infer": create_infer_credentials,
16
+ }
17
+ return options[env_vars.LOGIN_FLOW](env_vars)
18
+
19
+
20
+ def create_client_credentials(env_vars: ClientEnvironmentVariables) -> CredentialProvider:
21
+ missing: list[str] = []
22
+ if not env_vars.IDP_CLIENT_ID:
23
+ missing.append("IDP_CLIENT_ID")
24
+ if not env_vars.IDP_CLIENT_SECRET:
25
+ missing.append("IDP_CLIENT_SECRET")
26
+ if env_vars.IDP_CLIENT_ID is None or env_vars.IDP_CLIENT_SECRET is None:
27
+ raise ValueError(
28
+ f"The following environment variables must be set for "
29
+ f"client credentials authentication: {humanize_collection(missing)}"
30
+ )
31
+
32
+ if env_vars.PROVIDER == "cdf":
33
+ return OAuthClientCredentials(
34
+ client_id=env_vars.IDP_CLIENT_ID,
35
+ client_secret=env_vars.IDP_CLIENT_SECRET,
36
+ token_url=env_vars.idp_token_url,
37
+ scopes=None, # type: ignore[arg-type]
38
+ )
39
+ return OAuthClientCredentials(
40
+ client_id=env_vars.IDP_CLIENT_ID,
41
+ client_secret=env_vars.IDP_CLIENT_SECRET,
42
+ token_url=env_vars.idp_token_url,
43
+ audience=env_vars.idp_audience,
44
+ scopes=env_vars.idp_scopes,
45
+ )
46
+
47
+
48
+ def create_interactive_credentials(env_vars: ClientEnvironmentVariables) -> CredentialProvider:
49
+ if not env_vars.IDP_CLIENT_ID:
50
+ raise ValueError("IDP_CLIENT_ID environment variable must be set for interactive authentication.")
51
+ return OAuthInteractive(
52
+ client_id=env_vars.IDP_CLIENT_ID,
53
+ authority_url=env_vars.idp_authority_url,
54
+ scopes=env_vars.idp_scopes,
55
+ )
56
+
57
+
58
+ def create_token_credentials(env_vars: ClientEnvironmentVariables) -> CredentialProvider:
59
+ if not env_vars.CDF_TOKEN:
60
+ raise ValueError("CDF_TOKEN environment variable must be set for token authentication.")
61
+ return Token(env_vars.CDF_TOKEN)
62
+
63
+
64
+ def create_infer_credentials(env_vars: ClientEnvironmentVariables) -> CredentialProvider:
65
+ if env_vars.IDP_CLIENT_SECRET:
66
+ return create_client_credentials(env_vars)
67
+ elif env_vars.CDF_TOKEN:
68
+ return create_token_credentials(env_vars)
69
+ else:
70
+ return create_interactive_credentials(env_vars)
@@ -0,0 +1,131 @@
1
+ import sys
2
+ from pathlib import Path
3
+ from typing import Any, Literal, TypeAlias, get_args
4
+
5
+ from pydantic import BaseModel, ConfigDict, ValidationError
6
+
7
+ from cognite.neat._utils.repo import get_repo_root
8
+ from cognite.neat._utils.validation import humanize_validation_error
9
+
10
+ if sys.version_info >= (3, 11):
11
+ from typing import Self
12
+ else:
13
+ from typing_extensions import Self
14
+
15
+ LoginFlow: TypeAlias = Literal["infer", "client_credentials", "interactive", "token"]
16
+ VALID_LOGIN_FLOWS = get_args(LoginFlow)
17
+ Provider: TypeAlias = Literal["entra_id", "auth0", "cdf", "other"]
18
+
19
+
20
+ class ClientEnvironmentVariables(BaseModel):
21
+ """Configuration for environment variables used by the NEAT client."""
22
+
23
+ model_config = ConfigDict(extra="forbid", frozen=True)
24
+ CDF_CLUSTER: str
25
+ CDF_PROJECT: str
26
+ PROVIDER: Provider = "entra_id"
27
+ LOGIN_FLOW: LoginFlow = "infer"
28
+
29
+ IDP_CLIENT_ID: str | None = None
30
+ IDP_CLIENT_SECRET: str | None = None
31
+ CDF_TOKEN: str | None = None
32
+
33
+ IDP_TENANT_ID: str | None = None
34
+ IDP_TOKEN_URL: str | None = None
35
+
36
+ CDF_URL: str | None = None
37
+ IDP_AUDIENCE: str | None = None
38
+ IDP_SCOPES: str | None = None
39
+ IDP_AUTHORITY_URL: str | None = None
40
+ IDP_DISCOVERY_URL: str | None = None
41
+ CDF_MAX_WORKERS: int | None = None
42
+ CDF_CLIENT_TIMEOUT: int | None = None
43
+ CDF_REDIRECT_PORT: int = 53_000
44
+
45
+ @classmethod
46
+ def create_humanize(cls, values: dict[str, Any]) -> Self:
47
+ try:
48
+ return cls.model_validate(values)
49
+ except ValidationError as e:
50
+ errors = [humanize_validation_error(error) for error in e.errors()]
51
+ raise ValueError("Invalid environment variable configuration:\n" + "\n - ".join(errors)) from e
52
+
53
+ @property
54
+ def idp_tenant_id(self) -> str:
55
+ if self.IDP_TENANT_ID:
56
+ return self.IDP_TENANT_ID
57
+ # This line is technically unreachable due to the checks in idp_token_url and idp_authority_url
58
+ raise RuntimeError("IDP_TENANT_ID is missing")
59
+
60
+ @property
61
+ def idp_token_url(self) -> str:
62
+ if self.PROVIDER == "cdf":
63
+ return "https://auth.cognite.com/oauth2/token"
64
+ if self.IDP_TOKEN_URL:
65
+ return self.IDP_TOKEN_URL
66
+ if self.PROVIDER == "entra_id" and self.IDP_TENANT_ID:
67
+ return f"https://login.microsoftonline.com/{self.IDP_TENANT_ID}/oauth2/v2.0/token"
68
+ alternative = " or provide IDP_TENANT_ID" if self.PROVIDER == "entra_id" else ""
69
+ raise ValueError(
70
+ f"IDP_TOKEN_URL is missing. Please provide it{alternative} in the environment variables.",
71
+ )
72
+
73
+ @property
74
+ def cdf_url(self) -> str:
75
+ return self.CDF_URL or f"https://{self.CDF_CLUSTER}.cognitedata.com"
76
+
77
+ @property
78
+ def idp_audience(self) -> str:
79
+ if self.IDP_AUDIENCE:
80
+ return self.IDP_AUDIENCE
81
+ if self.PROVIDER == "auth0":
82
+ return f"https://{self.CDF_PROJECT}.fusion.cognite.com/{self.CDF_PROJECT}"
83
+ else:
84
+ return f"https://{self.CDF_CLUSTER}.cognitedata.com"
85
+
86
+ @property
87
+ def idp_scopes(self) -> list[str]:
88
+ if self.IDP_SCOPES:
89
+ return self.IDP_SCOPES.split(",")
90
+ if self.PROVIDER == "auth0":
91
+ return ["IDENTITY", "user_impersonation"]
92
+ return [f"https://{self.CDF_CLUSTER}.cognitedata.com/.default"]
93
+
94
+ @property
95
+ def idp_authority_url(self) -> str:
96
+ if self.IDP_AUTHORITY_URL:
97
+ return self.IDP_AUTHORITY_URL
98
+ if self.PROVIDER == "entra_id" and self.IDP_TENANT_ID:
99
+ return f"https://login.microsoftonline.com/{self.IDP_TENANT_ID}"
100
+ alternative = " or provide IDP_TENANT_ID" if self.PROVIDER == "entra_id" else ""
101
+ raise ValueError(
102
+ f"IDP_AUTHORITY_URL is missing. Please provide it{alternative} in the environment variables.",
103
+ )
104
+
105
+
106
+ def get_environment_variables(env_file_name: str) -> ClientEnvironmentVariables:
107
+ to_search: list[tuple[str, Path]] = []
108
+ try:
109
+ repo_root = get_repo_root()
110
+ except RuntimeError:
111
+ ...
112
+ else:
113
+ to_search.append(("repository root", repo_root))
114
+ to_search.append(("current working directory", Path.cwd()))
115
+ for location_desc, path in to_search:
116
+ env_path = path / env_file_name
117
+ if env_path.is_file():
118
+ print(f"Found {env_file_name} in {location_desc}.")
119
+ return _parse_env_file(env_path)
120
+ raise FileNotFoundError(f"Could not find {env_file_name} in the repository root or current working directory.")
121
+
122
+
123
+ def _parse_env_file(env_file_path: Path) -> ClientEnvironmentVariables:
124
+ content = env_file_path.read_text()
125
+ variables: dict[str, Any] = {}
126
+ for line in content.splitlines():
127
+ if line.startswith("#") or "=" not in line:
128
+ continue
129
+ key, value = line.strip().split("=", 1)
130
+ variables[key] = value
131
+ return ClientEnvironmentVariables.create_humanize(variables)
@@ -0,0 +1,51 @@
1
+ from cognite.client import CogniteClient
2
+ from cognite.client.config import ClientConfig, global_config
3
+
4
+ from cognite.neat import _version
5
+
6
+ from .credentials import get_credentials
7
+ from .env_vars import ClientEnvironmentVariables, get_environment_variables
8
+
9
+ CLIENT_NAME = f"CogniteNeat:{_version.__version__}"
10
+
11
+
12
+ def get_cognite_client(env_file_name: str) -> CogniteClient:
13
+ """Get a CogniteClient using environment variables from a .env file."
14
+
15
+ Args:
16
+ env_file_name: The name of the .env file to look for in the repository root / current working directory. If
17
+ the file is found, the variables will be loaded from the file. If the file is not found, the user will
18
+ be prompted to enter the variables and the file will be created.
19
+
20
+ Returns:
21
+ CogniteClient: An instance of CogniteClient configured with the loaded environment variables.
22
+ """
23
+ try:
24
+ return get_cognite_client_internal(env_file_name)
25
+ except Exception as e:
26
+ raise RuntimeError(f"Failed to create client ❌: {e!s}") from None
27
+
28
+
29
+ def get_cognite_client_internal(env_file_name: str) -> CogniteClient:
30
+ # This function raises exceptions on failure
31
+ if not env_file_name.endswith(".env"):
32
+ raise ValueError(f"env_file_name must end with '.env'. Got: {env_file_name!r}")
33
+ global_config.disable_pypi_version_check = True
34
+ global_config.silence_feature_preview_warnings = True
35
+ env_vars = get_environment_variables(env_file_name)
36
+ client_config = create_client_config_from_env_vars(env_vars)
37
+ # Todo validate credentials by making a simple call to CDF
38
+ # Offer to store credentials securely if valid
39
+ #
40
+ return CogniteClient(client_config)
41
+
42
+
43
+ def create_client_config_from_env_vars(env_vars: ClientEnvironmentVariables) -> ClientConfig:
44
+ return ClientConfig(
45
+ client_name=CLIENT_NAME,
46
+ project=env_vars.CDF_PROJECT,
47
+ credentials=get_credentials(env_vars),
48
+ max_workers=env_vars.CDF_MAX_WORKERS,
49
+ timeout=env_vars.CDF_CLIENT_TIMEOUT,
50
+ base_url=env_vars.cdf_url,
51
+ )
@@ -23,7 +23,7 @@ from cognite.neat._data_model.models.dms._view_property import (
23
23
  ViewRequestProperty,
24
24
  )
25
25
  from cognite.neat._data_model.models.dms._views import ViewRequest
26
- from cognite.neat._utils.useful_types import ModusOperandi
26
+ from cognite.neat._utils.useful_types import ModusOperandi, T_Reference
27
27
 
28
28
  # Type aliases for better readability
29
29
  ViewsByReference: TypeAlias = dict[ViewReference, ViewRequest]
@@ -458,9 +458,42 @@ class ValidationResources:
458
458
  view_sets = [self.views_by_container.get(c, set()) for c in containers]
459
459
  return set.intersection(*view_sets)
460
460
 
461
- # =========================================================================
462
- # Methods used for requires constraint validation
463
- # =========================================================================
461
+ @cached_property
462
+ def implements_graph(self) -> nx.DiGraph:
463
+ """Build a weighted directed graph of view implements.
464
+
465
+ Nodes are ViewReferences, edges represent implements.
466
+ An edge A → B means view A implements view B. Order of views in implements is used to set weight of an edge.
467
+
468
+ Includes views from both merged schema and CDF
469
+ """
470
+ graph: nx.DiGraph = nx.DiGraph()
471
+
472
+ for view_ref in self.cdf.views:
473
+ graph.add_node(view_ref)
474
+ for view_ref in self.merged.views:
475
+ graph.add_node(view_ref)
476
+
477
+ # Add edges for implements
478
+ for view_ref in graph.nodes():
479
+ view = self.select_view(view_ref)
480
+ if not view or not view.implements:
481
+ continue
482
+
483
+ # Adding weight to preserve order of implements
484
+ for i, implement in enumerate(view.implements):
485
+ graph.add_edge(view_ref, implement, weight=i + 1)
486
+
487
+ return graph
488
+
489
+ @cached_property
490
+ def implements_cycles(self) -> list[list[ViewReference]]:
491
+ """Find all cycles in the implements graph.
492
+ Returns:
493
+ List of lists, where each list contains the ordered Views involved in forming the implements cycle.
494
+ """
495
+
496
+ return self.graph_cycles(self.implements_graph)
464
497
 
465
498
  @cached_property
466
499
  def requires_constraint_graph(self) -> nx.DiGraph:
@@ -524,15 +557,15 @@ class ValidationResources:
524
557
  return False
525
558
 
526
559
  @cached_property
527
- def requires_constraint_cycles(self) -> list[set[ContainerReference]]:
528
- """Find all cycles in the requires constraint graph using Tarjan's algorithm.
529
-
530
- Uses strongly connected components (SCC) to identify cycles efficiently.
531
- An SCC with more than one node indicates a cycle.
532
-
560
+ def requires_constraint_cycles(self) -> list[list[ContainerReference]]:
561
+ """Find all cycles in the requires constraint graph.
533
562
  Returns:
534
- List of sets, where each set contains the containers involved in a cycle.
563
+ List of lists, where each list contains the ordered containers involved in forming the requires cycle.
535
564
  """
536
- sccs = nx.strongly_connected_components(self.requires_constraint_graph)
537
- # Only SCCs with more than one node represent cycles
538
- return [scc for scc in sccs if len(scc) > 1]
565
+
566
+ return self.graph_cycles(self.requires_constraint_graph)
567
+
568
+ @staticmethod
569
+ def graph_cycles(graph: nx.DiGraph) -> list[list[T_Reference]]:
570
+ """Returns cycles in the graph otherwise empty list"""
571
+ return [candidate for candidate in nx.simple_cycles(graph) if len(candidate) > 1]
@@ -1,6 +1,6 @@
1
1
  from pydantic import HttpUrl, RootModel, ValidationError
2
2
 
3
- from cognite.neat._v0.core._utils.auxiliary import local_import
3
+ from cognite.neat._utils.auxiliary import local_import
4
4
 
5
5
 
6
6
  class URI(RootModel[str]):
@@ -3,6 +3,8 @@ from collections import defaultdict
3
3
  from dataclasses import dataclass, field
4
4
  from typing import Any, Literal
5
5
 
6
+ from pydantic import ValidationError
7
+
6
8
  from cognite.neat._data_model._constants import DEFAULT_MAX_LIST_SIZE, DEFAULT_MAX_LIST_SIZE_DIRECT_RELATIONS
7
9
  from cognite.neat._data_model.importers._table_importer.data_classes import (
8
10
  CREATOR_KEY,
@@ -12,8 +14,11 @@ from cognite.neat._data_model.importers._table_importer.data_classes import (
12
14
  DMSNode,
13
15
  DMSProperty,
14
16
  DMSView,
17
+ EntityTableFilter,
15
18
  MetadataValue,
19
+ RAWFilterTableFilter,
16
20
  TableDMS,
21
+ TableViewFilter,
17
22
  )
18
23
  from cognite.neat._data_model.models.dms import (
19
24
  ContainerPropertyDefinition,
@@ -23,7 +28,11 @@ from cognite.neat._data_model.models.dms import (
23
28
  DataType,
24
29
  DirectNodeRelation,
25
30
  EnumProperty,
31
+ EqualsFilterData,
32
+ Filter,
26
33
  FilterAdapter,
34
+ HasDataFilter,
35
+ InFilterData,
27
36
  ListablePropertyTypeDefinition,
28
37
  NodeReference,
29
38
  RequestSchema,
@@ -299,13 +308,60 @@ class DMSTableWriter:
299
308
  implements=[self._create_view_entity(parent) for parent in view.implements]
300
309
  if view.implements
301
310
  else None,
302
- filter=FilterAdapter.dump_json(view.filter, by_alias=True).decode(encoding="utf-8")
303
- if view.filter
304
- else None,
311
+ filter=self.write_view_filter(view.filter),
305
312
  )
306
313
  for view in views
307
314
  ]
308
315
 
316
+ def write_view_filter(self, filter: Filter | None) -> TableViewFilter | None:
317
+ if filter is None:
318
+ return None
319
+ filter_type, entities = self._get_entity_filter(filter)
320
+ if filter_type is not None and entities:
321
+ return EntityTableFilter(type=filter_type, entities=entities)
322
+ else:
323
+ return RAWFilterTableFilter(filter=FilterAdapter.dump_json(filter, by_alias=True).decode(encoding="utf-8"))
324
+
325
+ def _get_entity_filter(self, filter: Filter) -> tuple[Literal["nodeType", "hasData"] | None, list[ParsedEntity]]:
326
+ """If the filter is an entity-based filter (Equals or In on nodes), return the type and entities.
327
+ Otherwise, return (None, [])."""
328
+ if filter is None or len(filter) != 1:
329
+ return None, []
330
+ filter_name, body = next(iter(filter.items()))
331
+ if (
332
+ isinstance(body, EqualsFilterData)
333
+ and body.property == ["node", "type"]
334
+ and isinstance(body.value, dict)
335
+ and (node_reference := self._try_get_node_reference(body.value))
336
+ ):
337
+ return "nodeType", [self._create_node_entity(node_reference)]
338
+ elif (
339
+ isinstance(body, InFilterData)
340
+ and body.property == ["node", "type"]
341
+ and isinstance(body.values, list)
342
+ # All values must be node references
343
+ and len(node_references := [ref for value in body.values if (ref := self._try_get_node_reference(value))])
344
+ == len(body.values)
345
+ ):
346
+ return "nodeType", [self._create_node_entity(node) for node in node_references]
347
+ elif (
348
+ isinstance(body, HasDataFilter)
349
+ and
350
+ # All data must be container references, a single view reference makes it a raw filter
351
+ len(container_refs := [item for item in body.data if isinstance(item, ContainerReference)])
352
+ == len(body.data)
353
+ ):
354
+ return "hasData", [self._create_container_entity(item) for item in container_refs]
355
+ else:
356
+ return None, []
357
+
358
+ @staticmethod
359
+ def _try_get_node_reference(value: Any) -> NodeReference | None:
360
+ try:
361
+ return NodeReference.model_validate(value)
362
+ except ValidationError:
363
+ return None
364
+
309
365
  def write_view_properties(self, views: list[ViewRequest], container: ContainerProperties) -> ViewProperties:
310
366
  output = ViewProperties()
311
367
  for view in views:
@@ -1,4 +1,3 @@
1
- import json
2
1
  from collections.abc import Mapping
3
2
  from typing import Annotated, Literal, cast, get_args
4
3
 
@@ -18,11 +17,6 @@ from traitlets import Any
18
17
  from cognite.neat._data_model.models.entities import ParsedEntity, parse_entities, parse_entity
19
18
  from cognite.neat._utils.text import title_case
20
19
  from cognite.neat._utils.useful_types import CellValueType
21
- from cognite.neat._v0.core._data_model.models.entities import (
22
- HasDataFilter,
23
- NodeTypeFilter,
24
- RawFilter,
25
- )
26
20
 
27
21
  # This marker is used to identify creator in the description field.
28
22
  CREATOR_MARKER = "Creator: "
@@ -146,30 +140,59 @@ class DMSProperty(TableObj):
146
140
  return self
147
141
 
148
142
 
143
+ class EntityTableFilter(BaseModel):
144
+ """These are special formats that Neat Table format supports for filters."""
145
+
146
+ type: Literal["hasData", "nodeType"]
147
+ entities: EntityList
148
+
149
+ def __str__(self) -> str:
150
+ entities_str = ",".join(str(entity) for entity in self.entities)
151
+ return f"{self.type}({entities_str})"
152
+
153
+
154
+ class RAWFilterTableFilter(BaseModel):
155
+ """This is a generic filter that holds raw JSON filter."""
156
+
157
+ type: Literal["rawFilter"] = "rawFilter"
158
+ filter: str
159
+
160
+ def __str__(self) -> str:
161
+ return f"rawFilter({self.filter})"
162
+
163
+
164
+ def _parse_table_filter(v: str) -> dict[str, str] | EntityTableFilter | RAWFilterTableFilter:
165
+ if isinstance(v, EntityTableFilter | RAWFilterTableFilter):
166
+ return v
167
+ filter_configs = {
168
+ "hasdata(": ("hasData", "entities"),
169
+ "nodetype(": ("nodeType", "entities"),
170
+ "rawfilter(": ("rawFilter", "filter"),
171
+ }
172
+ v_lowered = v.casefold()
173
+ for prefix, (filter_type, field_name) in filter_configs.items():
174
+ if v_lowered.startswith(prefix) and v_lowered.endswith(")"):
175
+ return {"type": filter_type, field_name: v[len(prefix) : -1]}
176
+ # Fallback to raw filter with the whole string
177
+ return {"type": "rawFilter", "filter": v}
178
+
179
+
180
+ TableViewFilter = Annotated[
181
+ EntityTableFilter | RAWFilterTableFilter,
182
+ Field(discriminator="type"),
183
+ BeforeValidator(_parse_table_filter, str),
184
+ PlainSerializer(func=str),
185
+ ]
186
+
187
+
149
188
  class DMSView(TableObj):
150
189
  view: Entity
151
190
  name: str | None = None
152
191
  description: str | None = None
153
192
  implements: EntityList | None = None
154
- filter: str | None = None
193
+ filter: TableViewFilter | None = None
155
194
  in_model: bool | None = Field(None, exclude=True, description="Legacy column")
156
195
 
157
- @field_validator("filter", mode="after")
158
- def _legacy_filter(cls, value: str | None) -> str | None:
159
- if value is None:
160
- return value
161
-
162
- value_lower = value.lower()
163
-
164
- if value_lower.startswith("hasdata("):
165
- return json.dumps(HasDataFilter.load(value).as_dms_filter().dump())
166
- elif value_lower.startswith("nodetype("):
167
- return json.dumps(NodeTypeFilter.load(value).as_dms_filter().dump())
168
- elif value_lower.startswith("rawfilter("):
169
- return json.dumps(RawFilter.load(value).as_dms_filter().dump())
170
-
171
- return value
172
-
173
196
 
174
197
  class DMSContainer(TableObj):
175
198
  container: Entity
@@ -30,7 +30,19 @@ from cognite.neat._issues import ModelSyntaxError
30
30
  from cognite.neat._utils.text import humanize_collection
31
31
  from cognite.neat._utils.validation import ValidationContext, humanize_validation_error
32
32
 
33
- from .data_classes import CREATOR_KEY, CREATOR_MARKER, DMSContainer, DMSEnum, DMSNode, DMSProperty, DMSView, TableDMS
33
+ from .data_classes import (
34
+ CREATOR_KEY,
35
+ CREATOR_MARKER,
36
+ DMSContainer,
37
+ DMSEnum,
38
+ DMSNode,
39
+ DMSProperty,
40
+ DMSView,
41
+ EntityTableFilter,
42
+ RAWFilterTableFilter,
43
+ TableDMS,
44
+ TableViewFilter,
45
+ )
34
46
  from .source import TableSource
35
47
 
36
48
  T_BaseModel = TypeVar("T_BaseModel", bound=BaseModel)
@@ -845,19 +857,6 @@ class DMSTableReader:
845
857
  views_requests: list[ViewRequest] = []
846
858
  rows_by_seen: dict[ParsedEntity, list[int]] = defaultdict(list)
847
859
  for row_no, view in enumerate(views):
848
- filter_dict: dict[str, Any] | None = None
849
- if view.filter is not None:
850
- try:
851
- filter_dict = json.loads(view.filter)
852
- except ValueError as e:
853
- self.errors.append(
854
- ModelSyntaxError(
855
- message=(
856
- f"In {self.source.location((self.Sheets.views, row_no, self.ViewColumns.filter))} "
857
- f"must be valid json. Got error {e!s}"
858
- )
859
- )
860
- )
861
860
  view_request = self._validate_obj(
862
861
  ViewRequest,
863
862
  dict(
@@ -865,7 +864,7 @@ class DMSTableReader:
865
864
  name=view.name,
866
865
  description=view.description,
867
866
  implements=[self._create_view_ref(impl) for impl in view.implements] if view.implements else None,
868
- filter=filter_dict,
867
+ filter=self._create_filter_dict(view.filter, row_no) if view.filter else None,
869
868
  properties=properties.get(view.view, {}),
870
869
  ),
871
870
  (self.Sheets.views, row_no),
@@ -891,6 +890,46 @@ class DMSTableReader:
891
890
  )
892
891
  return views_requests, set(rows_by_seen.keys())
893
892
 
893
+ def _create_filter_dict(self, filter: TableViewFilter, row_no: int) -> dict[str, Any] | None:
894
+ if isinstance(filter, RAWFilterTableFilter):
895
+ try:
896
+ return json.loads(filter.filter)
897
+ except ValueError as e:
898
+ self.errors.append(
899
+ ModelSyntaxError(
900
+ message=(
901
+ f"In {self.source.location((self.Sheets.views, row_no, self.ViewColumns.filter))} "
902
+ f"must be valid json. Got error {e!s}"
903
+ )
904
+ )
905
+ )
906
+ return None
907
+ elif isinstance(filter, EntityTableFilter):
908
+ return self._create_entity_filter_dict(filter)
909
+ else:
910
+ # This is unreachable due to validation of the TableViewFilter model.
911
+ raise RuntimeError(f"Unknown filter type {filter.__class__.__name__}")
912
+
913
+ def _create_entity_filter_dict(self, filter: EntityTableFilter) -> dict[str, Any]:
914
+ """Creates the filter dictionary from an EntityTableFilter."""
915
+ if filter.type == "hasData":
916
+ return {
917
+ "hasData": [{**self._create_container_ref(entity), "type": "container"} for entity in filter.entities]
918
+ }
919
+ elif filter.type == "nodeType":
920
+ if len(filter.entities) == 1:
921
+ return {"equals": {"property": ["node", "type"], "value": self._create_node_ref(filter.entities[0])}}
922
+ else:
923
+ return {
924
+ "in": {
925
+ "property": ["node", "type"],
926
+ "values": [self._create_node_ref(entity) for entity in filter.entities],
927
+ }
928
+ }
929
+ else:
930
+ # This is unreachable due to validation of the EntityTableFilter model.
931
+ raise RuntimeError(f"Unknown filter type {filter.__class__.__name__}")
932
+
894
933
  def read_data_model(self, tables: TableDMS, valid_view_entities: set[ParsedEntity]) -> DataModelRequest:
895
934
  data: dict[str, Any] = {
896
935
  **{meta.key: meta.value for meta in tables.metadata},
@@ -2,9 +2,9 @@ from collections import Counter
2
2
 
3
3
  from pydantic import Field, ValidationInfo, field_validator
4
4
 
5
+ from cognite.neat._data_model.models.entities import ConceptEntity
5
6
  from cognite.neat._data_model.models.entities._constants import PREFIX_PATTERN, SUFFIX_PATTERN, VERSION_PATTERN
6
7
  from cognite.neat._utils.text import humanize_collection
7
- from cognite.neat._v0.core._data_model.models.entities._single_value import ConceptEntity
8
8
 
9
9
  from ._base import ResourceMetadata
10
10
  from ._concept import Concept
@@ -3,7 +3,7 @@ from abc import ABC
3
3
  from pydantic import Field, field_validator
4
4
 
5
5
  from cognite.neat._data_model.models.dms._references import SpaceReference
6
- from cognite.neat._v0.core._utils.text import humanize_collection
6
+ from cognite.neat._utils.text import humanize_collection
7
7
 
8
8
  from ._base import APIResource, Resource, WriteableResource
9
9
  from ._constants import FORBIDDEN_SPACES, SPACE_FORMAT_PATTERN
@@ -1,6 +1,6 @@
1
1
  from pydantic import HttpUrl, RootModel, ValidationError
2
2
 
3
- from cognite.neat._v0.core._utils.auxiliary import local_import
3
+ from cognite.neat._utils.auxiliary import local_import
4
4
 
5
5
 
6
6
  class URI(RootModel[str]):