cognite-neat 1.0.19__tar.gz → 1.0.21__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.19 → cognite_neat-1.0.21}/PKG-INFO +1 -1
  2. cognite_neat-1.0.21/cognite/neat/_client/__init__.py +5 -0
  3. cognite_neat-1.0.21/cognite/neat/_client/init/credentials.py +70 -0
  4. cognite_neat-1.0.21/cognite/neat/_client/init/env_vars.py +131 -0
  5. cognite_neat-1.0.21/cognite/neat/_client/init/main.py +51 -0
  6. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/_identifiers.py +1 -1
  7. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/exporters/_table_exporter/writer.py +59 -3
  8. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/importers/_table_importer/data_classes.py +72 -23
  9. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/importers/_table_importer/reader.py +54 -15
  10. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/conceptual/_data_model.py +1 -1
  11. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_space.py +1 -1
  12. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/entities/_identifiers.py +1 -1
  13. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_exceptions.py +12 -0
  14. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_store/_store.py +1 -2
  15. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/auxiliary.py +10 -0
  16. cognite_neat-1.0.21/cognite/neat/_utils/repo.py +19 -0
  17. cognite_neat-1.0.21/cognite/neat/_version.py +2 -0
  18. cognite_neat-1.0.21/cognite/neat/py.typed +0 -0
  19. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/pyproject.toml +1 -1
  20. cognite_neat-1.0.19/cognite/neat/_client/__init__.py +0 -4
  21. cognite_neat-1.0.19/cognite/neat/_version.py +0 -2
  22. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/README.md +0 -0
  23. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/__init__.py +0 -0
  24. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_client/api.py +0 -0
  25. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_client/client.py +0 -0
  26. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_client/config.py +0 -0
  27. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_client/containers_api.py +0 -0
  28. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_client/data_classes.py +0 -0
  29. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_client/data_model_api.py +0 -0
  30. {cognite_neat-1.0.19/cognite/neat/_data_model → cognite_neat-1.0.21/cognite/neat/_client/init}/__init__.py +0 -0
  31. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_client/spaces_api.py +0 -0
  32. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_client/statistics_api.py +0 -0
  33. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_client/views_api.py +0 -0
  34. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_config.py +0 -0
  35. {cognite_neat-1.0.19/cognite/neat/_data_model/deployer → cognite_neat-1.0.21/cognite/neat/_data_model}/__init__.py +0 -0
  36. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/_analysis.py +0 -0
  37. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/_constants.py +0 -0
  38. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/_shared.py +0 -0
  39. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/_snapshot.py +0 -0
  40. {cognite_neat-1.0.19/cognite/neat/_data_model/exporters/_table_exporter → cognite_neat-1.0.21/cognite/neat/_data_model/deployer}/__init__.py +0 -0
  41. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/deployer/_differ.py +0 -0
  42. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/deployer/_differ_container.py +0 -0
  43. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/deployer/_differ_data_model.py +0 -0
  44. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/deployer/_differ_space.py +0 -0
  45. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/deployer/_differ_view.py +0 -0
  46. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/deployer/data_classes.py +0 -0
  47. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/deployer/deployer.py +0 -0
  48. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/exporters/__init__.py +0 -0
  49. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/exporters/_api_exporter.py +0 -0
  50. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/exporters/_base.py +0 -0
  51. {cognite_neat-1.0.19/cognite/neat/_data_model/importers/_table_importer → cognite_neat-1.0.21/cognite/neat/_data_model/exporters/_table_exporter}/__init__.py +0 -0
  52. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/exporters/_table_exporter/exporter.py +0 -0
  53. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/exporters/_table_exporter/workbook.py +0 -0
  54. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/importers/__init__.py +0 -0
  55. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/importers/_api_importer.py +0 -0
  56. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/importers/_base.py +0 -0
  57. {cognite_neat-1.0.19/cognite/neat/_data_model/models → cognite_neat-1.0.21/cognite/neat/_data_model/importers/_table_importer}/__init__.py +0 -0
  58. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/importers/_table_importer/importer.py +0 -0
  59. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/importers/_table_importer/source.py +0 -0
  60. {cognite_neat-1.0.19/cognite/neat/_data_model/models/conceptual → cognite_neat-1.0.21/cognite/neat/_data_model/models}/__init__.py +0 -0
  61. {cognite_neat-1.0.19/cognite/neat/_data_model/validation → cognite_neat-1.0.21/cognite/neat/_data_model/models/conceptual}/__init__.py +0 -0
  62. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/conceptual/_base.py +0 -0
  63. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/conceptual/_concept.py +0 -0
  64. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/conceptual/_properties.py +0 -0
  65. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/conceptual/_property.py +0 -0
  66. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/__init__.py +0 -0
  67. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_base.py +0 -0
  68. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_constants.py +0 -0
  69. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_constraints.py +0 -0
  70. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_container.py +0 -0
  71. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_data_model.py +0 -0
  72. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_data_types.py +0 -0
  73. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_http.py +0 -0
  74. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_indexes.py +0 -0
  75. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_limits.py +0 -0
  76. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_references.py +0 -0
  77. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_schema.py +0 -0
  78. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_types.py +0 -0
  79. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_view_filter.py +0 -0
  80. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_view_property.py +0 -0
  81. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/dms/_views.py +0 -0
  82. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/entities/__init__.py +0 -0
  83. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/entities/_base.py +0 -0
  84. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/entities/_constants.py +0 -0
  85. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/entities/_data_types.py +0 -0
  86. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/models/entities/_parser.py +0 -0
  87. {cognite_neat-1.0.19/cognite/neat/_session/_html → cognite_neat-1.0.21/cognite/neat/_data_model/validation}/__init__.py +0 -0
  88. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/validation/dms/__init__.py +0 -0
  89. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/validation/dms/_ai_readiness.py +0 -0
  90. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/validation/dms/_base.py +0 -0
  91. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/validation/dms/_connections.py +0 -0
  92. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/validation/dms/_consistency.py +0 -0
  93. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/validation/dms/_containers.py +0 -0
  94. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/validation/dms/_limits.py +0 -0
  95. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/validation/dms/_orchestrator.py +0 -0
  96. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_data_model/validation/dms/_views.py +0 -0
  97. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_issues.py +0 -0
  98. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/__init__.py +0 -0
  99. {cognite_neat-1.0.19/cognite/neat/_session/_result/_deployment → cognite_neat-1.0.21/cognite/neat/_session/_html}/__init__.py +0 -0
  100. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/_render.py +0 -0
  101. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/static/__init__.py +0 -0
  102. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/static/deployment.css +0 -0
  103. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/static/deployment.js +0 -0
  104. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/static/issues.css +0 -0
  105. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/static/issues.js +0 -0
  106. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/static/shared.css +0 -0
  107. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/templates/__init__.py +0 -0
  108. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/templates/deployment.html +0 -0
  109. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_html/templates/issues.html +0 -0
  110. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_issues.py +0 -0
  111. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_physical.py +0 -0
  112. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_result/__init__.py +0 -0
  113. {cognite_neat-1.0.19/cognite/neat/_session/_result/_deployment/_physical → cognite_neat-1.0.21/cognite/neat/_session/_result/_deployment}/__init__.py +0 -0
  114. {cognite_neat-1.0.19/cognite/neat/_session/_usage_analytics → cognite_neat-1.0.21/cognite/neat/_session/_result/_deployment/_physical}/__init__.py +0 -0
  115. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_result/_deployment/_physical/_changes.py +0 -0
  116. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_result/_deployment/_physical/_statistics.py +0 -0
  117. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_result/_deployment/_physical/serializer.py +0 -0
  118. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_result/_result.py +0 -0
  119. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_session.py +0 -0
  120. {cognite_neat-1.0.19/cognite/neat/_utils → cognite_neat-1.0.21/cognite/neat/_session/_usage_analytics}/__init__.py +0 -0
  121. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_usage_analytics/_collector.py +0 -0
  122. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_usage_analytics/_constants.py +0 -0
  123. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_usage_analytics/_storage.py +0 -0
  124. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_session/_wrappers.py +0 -0
  125. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_state_machine/__init__.py +0 -0
  126. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_state_machine/_base.py +0 -0
  127. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_state_machine/_states.py +0 -0
  128. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_store/__init__.py +0 -0
  129. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_store/_provenance.py +0 -0
  130. {cognite_neat-1.0.19/cognite/neat/_v0 → cognite_neat-1.0.21/cognite/neat/_utils}/__init__.py +0 -0
  131. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/_reader.py +0 -0
  132. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/collection.py +0 -0
  133. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/http_client/__init__.py +0 -0
  134. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/http_client/_client.py +0 -0
  135. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/http_client/_config.py +0 -0
  136. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/http_client/_data_classes.py +0 -0
  137. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/http_client/_tracker.py +0 -0
  138. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/text.py +0 -0
  139. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/useful_types.py +0 -0
  140. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_utils/validation.py +0 -0
  141. {cognite_neat-1.0.19/cognite/neat/_v0/core → cognite_neat-1.0.21/cognite/neat/_v0}/__init__.py +0 -0
  142. {cognite_neat-1.0.19/cognite/neat/_v0/core/_client/_api → cognite_neat-1.0.21/cognite/neat/_v0/core}/__init__.py +0 -0
  143. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/__init__.py +0 -0
  144. {cognite_neat-1.0.19/cognite/neat/_v0/core/_client/data_classes → cognite_neat-1.0.21/cognite/neat/_v0/core/_client/_api}/__init__.py +0 -0
  145. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/_api/data_modeling_loaders.py +0 -0
  146. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/_api/neat_instances.py +0 -0
  147. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/_api/schema.py +0 -0
  148. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/_api/statistics.py +0 -0
  149. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/_api_client.py +0 -0
  150. {cognite_neat-1.0.19/cognite/neat/_v0/core/_data_model → cognite_neat-1.0.21/cognite/neat/_v0/core/_client/data_classes}/__init__.py +0 -0
  151. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/data_classes/data_modeling.py +0 -0
  152. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/data_classes/neat_sequence.py +0 -0
  153. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/data_classes/schema.py +0 -0
  154. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/data_classes/statistics.py +0 -0
  155. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_client/testing.py +0 -0
  156. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_config.py +0 -0
  157. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_constants.py +0 -0
  158. {cognite_neat-1.0.19/cognite/neat/_v0/core/_instances → cognite_neat-1.0.21/cognite/neat/_v0/core/_data_model}/__init__.py +0 -0
  159. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/_constants.py +0 -0
  160. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/_shared.py +0 -0
  161. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/analysis/__init__.py +0 -0
  162. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/analysis/_base.py +0 -0
  163. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/catalog/__init__.py +0 -0
  164. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/catalog/classic_model.xlsx +0 -0
  165. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/catalog/conceptual-imf-data-model.xlsx +0 -0
  166. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/catalog/hello_world_pump.xlsx +0 -0
  167. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/exporters/__init__.py +0 -0
  168. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/exporters/_base.py +0 -0
  169. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/exporters/_data_model2dms.py +0 -0
  170. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/exporters/_data_model2excel.py +0 -0
  171. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/exporters/_data_model2instance_template.py +0 -0
  172. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/exporters/_data_model2semantic_model.py +0 -0
  173. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/exporters/_data_model2yaml.py +0 -0
  174. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/__init__.py +0 -0
  175. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_base.py +0 -0
  176. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_base_file_reader.py +0 -0
  177. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_dict2data_model.py +0 -0
  178. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_dms2data_model.py +0 -0
  179. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_graph2data_model.py +0 -0
  180. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_rdf/__init__.py +0 -0
  181. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_rdf/_base.py +0 -0
  182. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_rdf/_inference2rdata_model.py +0 -0
  183. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_rdf/_owl2data_model.py +0 -0
  184. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_rdf/_shared.py +0 -0
  185. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/importers/_spreadsheet2data_model.py +0 -0
  186. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/__init__.py +0 -0
  187. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/_base_unverified.py +0 -0
  188. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/_base_verified.py +0 -0
  189. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/_import_contexts.py +0 -0
  190. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/_types.py +0 -0
  191. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/conceptual/__init__.py +0 -0
  192. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/conceptual/_unverified.py +0 -0
  193. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/conceptual/_validation.py +0 -0
  194. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/conceptual/_verified.py +0 -0
  195. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/data_types.py +0 -0
  196. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/entities/__init__.py +0 -0
  197. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/entities/_constants.py +0 -0
  198. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/entities/_loaders.py +0 -0
  199. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/entities/_multi_value.py +0 -0
  200. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/entities/_restrictions.py +0 -0
  201. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/entities/_single_value.py +0 -0
  202. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/entities/_types.py +0 -0
  203. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/entities/_wrapped.py +0 -0
  204. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/mapping/__init__.py +0 -0
  205. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/mapping/_classic2core.py +0 -0
  206. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/mapping/_classic2core.yaml +0 -0
  207. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/physical/__init__.py +0 -0
  208. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/physical/_exporter.py +0 -0
  209. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/physical/_unverified.py +0 -0
  210. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/physical/_validation.py +0 -0
  211. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/models/physical/_verified.py +0 -0
  212. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/transformers/__init__.py +0 -0
  213. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/transformers/_base.py +0 -0
  214. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/transformers/_converters.py +0 -0
  215. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/transformers/_mapping.py +0 -0
  216. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/transformers/_union_conceptual.py +0 -0
  217. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_data_model/transformers/_verification.py +0 -0
  218. {cognite_neat-1.0.19/cognite/neat/_v0/core/_instances/extractors/_classic_cdf → cognite_neat-1.0.21/cognite/neat/_v0/core/_instances}/__init__.py +0 -0
  219. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/_shared.py +0 -0
  220. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/_tracking/__init__.py +0 -0
  221. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/_tracking/base.py +0 -0
  222. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/_tracking/log.py +0 -0
  223. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
  224. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/examples/Knowledge-Graph-Nordic44.xml +0 -0
  225. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/examples/__init__.py +0 -0
  226. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
  227. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/__init__.py +0 -0
  228. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_base.py +0 -0
  229. {cognite_neat-1.0.19/cognite/neat/_v0/core/_utils → cognite_neat-1.0.21/cognite/neat/_v0/core/_instances/extractors/_classic_cdf}/__init__.py +0 -0
  230. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_assets.py +0 -0
  231. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_base.py +0 -0
  232. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_classic.py +0 -0
  233. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_data_sets.py +0 -0
  234. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_events.py +0 -0
  235. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_files.py +0 -0
  236. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_labels.py +0 -0
  237. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_relationships.py +0 -0
  238. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_sequences.py +0 -0
  239. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_classic_cdf/_timeseries.py +0 -0
  240. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_dict.py +0 -0
  241. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_dms.py +0 -0
  242. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_dms_graph.py +0 -0
  243. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_mock_graph_generator.py +0 -0
  244. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_raw.py +0 -0
  245. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/extractors/_rdf_file.py +0 -0
  246. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/loaders/__init__.py +0 -0
  247. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/loaders/_base.py +0 -0
  248. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/loaders/_rdf2dms.py +0 -0
  249. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/loaders/_rdf_to_instance_space.py +0 -0
  250. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/queries/__init__.py +0 -0
  251. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/queries/_base.py +0 -0
  252. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/queries/_queries.py +0 -0
  253. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/queries/_select.py +0 -0
  254. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/queries/_update.py +0 -0
  255. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/transformers/__init__.py +0 -0
  256. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/transformers/_base.py +0 -0
  257. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/transformers/_classic_cdf.py +0 -0
  258. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/transformers/_prune_graph.py +0 -0
  259. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/transformers/_rdfpath.py +0 -0
  260. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_instances/transformers/_value_type.py +0 -0
  261. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/__init__.py +0 -0
  262. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/_base.py +0 -0
  263. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/_contextmanagers.py +0 -0
  264. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/_factory.py +0 -0
  265. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/errors/__init__.py +0 -0
  266. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/errors/_external.py +0 -0
  267. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/errors/_general.py +0 -0
  268. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/errors/_properties.py +0 -0
  269. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/errors/_resources.py +0 -0
  270. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/errors/_wrapper.py +0 -0
  271. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/formatters.py +0 -0
  272. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/warnings/__init__.py +0 -0
  273. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/warnings/_external.py +0 -0
  274. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/warnings/_general.py +0 -0
  275. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/warnings/_models.py +0 -0
  276. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/warnings/_properties.py +0 -0
  277. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/warnings/_resources.py +0 -0
  278. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_issues/warnings/user_modeling.py +0 -0
  279. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_shared.py +0 -0
  280. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_store/__init__.py +0 -0
  281. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_store/_data_model.py +0 -0
  282. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_store/_instance.py +0 -0
  283. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_store/_provenance.py +0 -0
  284. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_store/exceptions.py +0 -0
  285. /cognite_neat-1.0.19/cognite/neat/py.typed → /cognite_neat-1.0.21/cognite/neat/_v0/core/_utils/__init__.py +0 -0
  286. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/auth.py +0 -0
  287. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/auxiliary.py +0 -0
  288. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/collection_.py +0 -0
  289. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/graph_transformations_report.py +0 -0
  290. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/io_.py +0 -0
  291. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/rdf_.py +0 -0
  292. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/reader/__init__.py +0 -0
  293. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/reader/_base.py +0 -0
  294. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/spreadsheet.py +0 -0
  295. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/tarjan.py +0 -0
  296. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/text.py +0 -0
  297. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/time_.py +0 -0
  298. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/upload.py +0 -0
  299. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/core/_utils/xml_.py +0 -0
  300. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/engine/__init__.py +0 -0
  301. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/engine/_import.py +0 -0
  302. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/engine/_interface.py +0 -0
  303. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/engine/_load.py +0 -0
  304. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/plugins/__init__.py +0 -0
  305. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/plugins/_base.py +0 -0
  306. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/plugins/_data_model.py +0 -0
  307. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/plugins/_issues.py +0 -0
  308. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/plugins/_manager.py +0 -0
  309. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/__init__.py +0 -0
  310. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_base.py +0 -0
  311. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_collector.py +0 -0
  312. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_diff.py +0 -0
  313. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_drop.py +0 -0
  314. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_experimental.py +0 -0
  315. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_explore.py +0 -0
  316. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_fix.py +0 -0
  317. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_inspect.py +0 -0
  318. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_mapping.py +0 -0
  319. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_plugin.py +0 -0
  320. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_prepare.py +0 -0
  321. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_read.py +0 -0
  322. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_set.py +0 -0
  323. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_show.py +0 -0
  324. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_state/README.md +0 -0
  325. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_state.py +0 -0
  326. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_subset.py +0 -0
  327. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_template.py +0 -0
  328. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_to.py +0 -0
  329. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/_wizard.py +0 -0
  330. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/cognite/neat/_v0/session/exceptions.py +0 -0
  331. {cognite_neat-1.0.19 → cognite_neat-1.0.21}/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.19
3
+ Version: 1.0.21
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
+ )
@@ -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,28 +140,58 @@ 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
155
-
156
- @field_validator("filter", mode="after")
157
- def _legacy_filter(cls, value: str | None) -> str | None:
158
- if value is None:
159
- return value
160
-
161
- value_lower = value.lower()
162
-
163
- if value_lower.startswith("hasdata("):
164
- return json.dumps(HasDataFilter.load(value).as_dms_filter().dump())
165
- elif value_lower.startswith("nodetype("):
166
- return json.dumps(NodeTypeFilter.load(value).as_dms_filter().dump())
167
- elif value_lower.startswith("rawfilter("):
168
- return json.dumps(RawFilter.load(value).as_dms_filter().dump())
169
-
170
- return value
193
+ filter: TableViewFilter | None = None
194
+ in_model: bool | None = Field(None, exclude=True, description="Legacy column")
171
195
 
172
196
 
173
197
  class DMSContainer(TableObj):
@@ -231,6 +255,31 @@ class TableDMS(TableObj):
231
255
  return {title_case(k): v for k, v in data.items()}
232
256
  return data
233
257
 
258
+ @model_validator(mode="after")
259
+ def _drop_in_model_false_views_definitions(self) -> "TableDMS":
260
+ """These method is used to drop definition of legacy views which have In Model column set to False
261
+ We need to drop these views from Views sheet and also drop their properties from Properties sheet.
262
+ """
263
+
264
+ views_to_drop: set[Entity] = set()
265
+ for view in self.views:
266
+ if isinstance(view.in_model, bool) and not view.in_model:
267
+ views_to_drop.add(view.view)
268
+
269
+ if not views_to_drop:
270
+ return self
271
+
272
+ print(
273
+ "You are using legacy `In Model` column which is no longer in use!"
274
+ f"\nTotal of {len(views_to_drop)} views has `In Model` set to False."
275
+ f"\nThese views and their property definitions will be dropped from the session!"
276
+ )
277
+
278
+ self.views = [view for view in self.views if view.view not in views_to_drop]
279
+ self.properties = [prop for prop in self.properties if prop.view not in views_to_drop]
280
+
281
+ return self
282
+
234
283
  @classmethod
235
284
  def get_sheet_columns(
236
285
  cls, sheet_id: str, sheet: FieldInfo | None = None, *, column_type: Literal["all", "required"] = "required"
@@ -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]):
@@ -54,3 +54,15 @@ class UserInputError(NeatException):
54
54
 
55
55
  def __str__(self) -> str:
56
56
  return f"User input error: {self.message}"
57
+
58
+
59
+ class NeatImportError(NeatException, ImportError):
60
+ def __init__(self, module: str, neat_extra: str, functionality: str = "functionality") -> None:
61
+ message = (
62
+ f"The {functionality} requires {module}. You can include it in your neat "
63
+ f'installation with `pip install "cognite-neat[{neat_extra}]"`.'
64
+ )
65
+ super().__init__(message)
66
+
67
+ def __str__(self) -> str:
68
+ return self.args[0]
@@ -13,7 +13,6 @@ from cognite.neat._data_model.exporters import DMSExporter, DMSFileExporter
13
13
  from cognite.neat._data_model.exporters._api_exporter import DMSAPIExporter
14
14
  from cognite.neat._data_model.exporters._table_exporter.exporter import DMSTableExporter
15
15
  from cognite.neat._data_model.importers import DMSImporter, DMSTableImporter
16
- from cognite.neat._data_model.importers._api_importer import DMSAPIImporter
17
16
  from cognite.neat._data_model.models.dms import RequestSchema as PhysicalDataModel
18
17
  from cognite.neat._data_model.models.dms._limits import SchemaLimits
19
18
  from cognite.neat._exceptions import DataModelImportException
@@ -108,7 +107,7 @@ class NeatStore:
108
107
  raise RuntimeError("No successful physical data model read found in provenance.")
109
108
 
110
109
  # We do not want to modify the data model for API representations
111
- if not (change.agent == DMSAPIImporter.__name__ and isinstance(writer, DMSTableExporter)):
110
+ if not isinstance(writer, DMSTableExporter):
112
111
  return self.physical_data_model[-1]
113
112
 
114
113
  # This will handle data model that are partially and require to be converted to