cognite-neat 0.96.4__tar.gz → 0.96.6__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.

Potentially problematic release.


This version of cognite-neat might be problematic. Click here for more details.

Files changed (278) hide show
  1. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/PKG-INFO +1 -1
  2. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_constants.py +1 -0
  3. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/_base.py +5 -1
  4. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/exporters/_base.py +5 -3
  5. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/exporters/_rules2dms.py +61 -9
  6. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_spreadsheet2rules.py +5 -1
  7. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/dms/_exporter.py +16 -3
  8. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/dms/_rules.py +30 -12
  9. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/_to.py +10 -2
  10. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/cdf/loaders/_base.py +1 -1
  11. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/cdf/loaders/_data_modeling.py +24 -8
  12. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/cdf/loaders/_ingestion.py +26 -10
  13. cognite_neat-0.96.6/cognite/neat/_version.py +1 -0
  14. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/pyproject.toml +1 -1
  15. cognite_neat-0.96.4/cognite/neat/_version.py +0 -1
  16. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/LICENSE +0 -0
  17. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/README.md +0 -0
  18. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/__init__.py +0 -0
  19. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/__init__.py +0 -0
  20. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/asgi/metrics.py +0 -0
  21. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/configuration.py +0 -0
  22. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/context_manager/__init__.py +0 -0
  23. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/context_manager/manager.py +0 -0
  24. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/data_classes/__init__.py +0 -0
  25. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/data_classes/rest.py +0 -0
  26. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/explorer.py +0 -0
  27. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/routers/configuration.py +0 -0
  28. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/routers/crud.py +0 -0
  29. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/routers/metrics.py +0 -0
  30. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/routers/workflows.py +0 -0
  31. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/utils/__init__.py +0 -0
  32. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/utils/data_mapping.py +0 -0
  33. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/utils/logging.py +0 -0
  34. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/api/utils/query_templates.py +0 -0
  35. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/main.py +0 -0
  36. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/monitoring/__init__.py +0 -0
  37. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/monitoring/metrics.py +0 -0
  38. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/index.html +0 -0
  39. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/.gitignore +0 -0
  40. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/README.md +0 -0
  41. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/asset-manifest.json +0 -0
  42. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/favicon.ico +0 -0
  43. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/img/architect-icon.svg +0 -0
  44. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/img/developer-icon.svg +0 -0
  45. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/img/sme-icon.svg +0 -0
  46. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/index.html +0 -0
  47. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/logo192.png +0 -0
  48. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/manifest.json +0 -0
  49. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/robots.txt +0 -0
  50. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/static/css/main.72e3d92e.css +0 -0
  51. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/static/css/main.72e3d92e.css.map +0 -0
  52. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/static/js/main.5a52cf09.js +0 -0
  53. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/static/js/main.5a52cf09.js.LICENSE.txt +0 -0
  54. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/static/js/main.5a52cf09.js.map +0 -0
  55. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/build/static/media/logo.8093b84df9ed36a174c629d6fe0b730d.svg +0 -0
  56. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/package-lock.json +0 -0
  57. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/package.json +0 -0
  58. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/public/favicon.ico +0 -0
  59. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/public/img/architect-icon.svg +0 -0
  60. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/public/img/developer-icon.svg +0 -0
  61. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/public/img/sme-icon.svg +0 -0
  62. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/public/index.html +0 -0
  63. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/public/logo192.png +0 -0
  64. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/public/manifest.json +0 -0
  65. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/public/robots.txt +0 -0
  66. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/App.css +0 -0
  67. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/App.js +0 -0
  68. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/App.test.js +0 -0
  69. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/MainContainer.tsx +0 -0
  70. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/JsonViewer.tsx +0 -0
  71. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/LocalUploader.tsx +0 -0
  72. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/OverviewComponentEditorDialog.tsx +0 -0
  73. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/StepEditorDialog.tsx +0 -0
  74. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/TabPanel.tsx +0 -0
  75. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/Utils.tsx +0 -0
  76. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/WorkflowDeleteDialog.tsx +0 -0
  77. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/WorkflowExecutionReport.tsx +0 -0
  78. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/WorkflowImportExportDialog.tsx +0 -0
  79. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/components/WorkflowMetadataDialog.tsx +0 -0
  80. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/index.css +0 -0
  81. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/index.js +0 -0
  82. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/logo.svg +0 -0
  83. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/reportWebVitals.js +0 -0
  84. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/setupTests.js +0 -0
  85. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/types/WorkflowTypes.ts +0 -0
  86. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/views/AboutView.tsx +0 -0
  87. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/views/ConfigView.tsx +0 -0
  88. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/views/GlobalConfigView.tsx +0 -0
  89. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/src/views/WorkflowView.tsx +0 -0
  90. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_app/ui/neat-app/tsconfig.json +0 -0
  91. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_config.py +0 -0
  92. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/__init__.py +0 -0
  93. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/_shared.py +0 -0
  94. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/_tracking/__init__.py +0 -0
  95. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/_tracking/base.py +0 -0
  96. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/_tracking/log.py +0 -0
  97. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/examples/Knowledge-Graph-Nordic44-dirty.xml +0 -0
  98. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/examples/Knowledge-Graph-Nordic44.xml +0 -0
  99. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/examples/__init__.py +0 -0
  100. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/examples/skos-capturing-sheet-wind-topics.xlsx +0 -0
  101. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/__init__.py +0 -0
  102. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_base.py +0 -0
  103. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/__init__.py +0 -0
  104. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_assets.py +0 -0
  105. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_base.py +0 -0
  106. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_classic.py +0 -0
  107. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_data_sets.py +0 -0
  108. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_events.py +0 -0
  109. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_files.py +0 -0
  110. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_labels.py +0 -0
  111. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_relationships.py +0 -0
  112. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_sequences.py +0 -0
  113. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_classic_cdf/_timeseries.py +0 -0
  114. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_dexpi.py +0 -0
  115. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_dms.py +0 -0
  116. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_iodd.py +0 -0
  117. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_mock_graph_generator.py +0 -0
  118. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/extractors/_rdf_file.py +0 -0
  119. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/loaders/__init__.py +0 -0
  120. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/loaders/_base.py +0 -0
  121. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/loaders/_rdf2asset.py +0 -0
  122. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/loaders/_rdf2dms.py +0 -0
  123. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/models.py +0 -0
  124. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/queries/__init__.py +0 -0
  125. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/queries/_base.py +0 -0
  126. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/queries/_construct.py +0 -0
  127. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/queries/_shared.py +0 -0
  128. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/transformers/__init__.py +0 -0
  129. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/transformers/_base.py +0 -0
  130. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/transformers/_classic_cdf.py +0 -0
  131. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/transformers/_iodd.py +0 -0
  132. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/transformers/_prune_graph.py +0 -0
  133. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/transformers/_rdfpath.py +0 -0
  134. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_graph/transformers/_value_type.py +0 -0
  135. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/__init__.py +0 -0
  136. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/errors/__init__.py +0 -0
  137. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/errors/_external.py +0 -0
  138. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/errors/_general.py +0 -0
  139. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/errors/_properties.py +0 -0
  140. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/errors/_resources.py +0 -0
  141. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/errors/_workflow.py +0 -0
  142. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/formatters.py +0 -0
  143. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/warnings/__init__.py +0 -0
  144. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/warnings/_external.py +0 -0
  145. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/warnings/_general.py +0 -0
  146. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/warnings/_models.py +0 -0
  147. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/warnings/_properties.py +0 -0
  148. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/warnings/_resources.py +0 -0
  149. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_issues/warnings/user_modeling.py +0 -0
  150. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/__init__.py +0 -0
  151. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/_constants.py +0 -0
  152. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/_shared.py +0 -0
  153. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/analysis/__init__.py +0 -0
  154. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/analysis/_asset.py +0 -0
  155. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/analysis/_base.py +0 -0
  156. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/analysis/_dms.py +0 -0
  157. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/analysis/_information.py +0 -0
  158. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/catalog/__init__.py +0 -0
  159. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/catalog/info-rules-imf.xlsx +0 -0
  160. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/exporters/__init__.py +0 -0
  161. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/exporters/_rules2excel.py +0 -0
  162. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/exporters/_rules2instance_template.py +0 -0
  163. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/exporters/_rules2ontology.py +0 -0
  164. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/exporters/_rules2yaml.py +0 -0
  165. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/exporters/_validation.py +0 -0
  166. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/__init__.py +0 -0
  167. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_base.py +0 -0
  168. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_dms2rules.py +0 -0
  169. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_dtdl2rules/__init__.py +0 -0
  170. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_dtdl2rules/_unit_lookup.py +0 -0
  171. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_dtdl2rules/dtdl_converter.py +0 -0
  172. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_dtdl2rules/dtdl_importer.py +0 -0
  173. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_dtdl2rules/spec.py +0 -0
  174. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/__init__.py +0 -0
  175. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_base.py +0 -0
  176. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_imf2rules/__init__.py +0 -0
  177. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_imf2rules/_imf2classes.py +0 -0
  178. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_imf2rules/_imf2metadata.py +0 -0
  179. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_imf2rules/_imf2properties.py +0 -0
  180. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_imf2rules/_imf2rules.py +0 -0
  181. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_inference2rules.py +0 -0
  182. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_owl2rules/__init__.py +0 -0
  183. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_owl2rules/_owl2classes.py +0 -0
  184. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_owl2rules/_owl2metadata.py +0 -0
  185. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_owl2rules/_owl2properties.py +0 -0
  186. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_owl2rules/_owl2rules.py +0 -0
  187. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_rdf/_shared.py +0 -0
  188. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/importers/_yaml2rules.py +0 -0
  189. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/__init__.py +0 -0
  190. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/_base_input.py +0 -0
  191. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/_base_rules.py +0 -0
  192. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/_rdfpath.py +0 -0
  193. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/_types.py +0 -0
  194. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/asset/__init__.py +0 -0
  195. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/asset/_rules.py +0 -0
  196. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/asset/_rules_input.py +0 -0
  197. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/asset/_validation.py +0 -0
  198. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/data_types.py +0 -0
  199. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/dms/__init__.py +0 -0
  200. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/dms/_rules_input.py +0 -0
  201. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/dms/_schema.py +0 -0
  202. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/dms/_validation.py +0 -0
  203. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/domain.py +0 -0
  204. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/entities/__init__.py +0 -0
  205. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/entities/_constants.py +0 -0
  206. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/entities/_loaders.py +0 -0
  207. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/entities/_multi_value.py +0 -0
  208. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/entities/_single_value.py +0 -0
  209. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/entities/_types.py +0 -0
  210. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/entities/_wrapped.py +0 -0
  211. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/information/__init__.py +0 -0
  212. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/information/_rules.py +0 -0
  213. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/information/_rules_input.py +0 -0
  214. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/information/_validation.py +0 -0
  215. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/mapping/__init__.py +0 -0
  216. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/mapping/_base.py +0 -0
  217. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/models/mapping/_classic2core.py +0 -0
  218. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/transformers/__init__.py +0 -0
  219. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/transformers/_base.py +0 -0
  220. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/transformers/_converters.py +0 -0
  221. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/transformers/_mapping.py +0 -0
  222. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/transformers/_pipelines.py +0 -0
  223. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_rules/transformers/_verification.py +0 -0
  224. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/__init__.py +0 -0
  225. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/_base.py +0 -0
  226. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/_inspect.py +0 -0
  227. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/_prepare.py +0 -0
  228. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/_read.py +0 -0
  229. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/_set.py +0 -0
  230. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/_show.py +0 -0
  231. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/_state.py +0 -0
  232. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/_wizard.py +0 -0
  233. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_session/exceptions.py +0 -0
  234. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_shared.py +0 -0
  235. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_store/__init__.py +0 -0
  236. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_store/_base.py +0 -0
  237. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_store/_provenance.py +0 -0
  238. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/__init__.py +0 -0
  239. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/auth.py +0 -0
  240. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/auxiliary.py +0 -0
  241. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/cdf/__init__.py +0 -0
  242. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/cdf/data_classes.py +0 -0
  243. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/cdf/loaders/__init__.py +0 -0
  244. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/collection_.py +0 -0
  245. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/rdf_.py +0 -0
  246. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/spreadsheet.py +0 -0
  247. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/text.py +0 -0
  248. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/time_.py +0 -0
  249. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/upload.py +0 -0
  250. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_utils/xml_.py +0 -0
  251. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/__init__.py +0 -0
  252. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/base.py +0 -0
  253. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/cdf_store.py +0 -0
  254. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/examples/Export_DMS/workflow.yaml +0 -0
  255. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/examples/Export_Semantic_Data_Model/workflow.yaml +0 -0
  256. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/examples/Import_DMS/workflow.yaml +0 -0
  257. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/examples/Validate_Rules/workflow.yaml +0 -0
  258. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/examples/Validate_Solution_Model/workflow.yaml +0 -0
  259. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/manager.py +0 -0
  260. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/model.py +0 -0
  261. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/__init__.py +0 -0
  262. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/data_contracts.py +0 -0
  263. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/__init__.py +0 -0
  264. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/current/__init__.py +0 -0
  265. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/current/graph_extractor.py +0 -0
  266. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/current/graph_loader.py +0 -0
  267. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/current/graph_store.py +0 -0
  268. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/current/rules_exporter.py +0 -0
  269. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/current/rules_importer.py +0 -0
  270. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/current/rules_validator.py +0 -0
  271. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/io/__init__.py +0 -0
  272. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/lib/io/io_steps.py +0 -0
  273. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps/step_model.py +0 -0
  274. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/steps_registry.py +0 -0
  275. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/tasks.py +0 -0
  276. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/triggers.py +0 -0
  277. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/_workflows/utils.py +0 -0
  278. {cognite_neat-0.96.4 → cognite_neat-0.96.6}/cognite/neat/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cognite-neat
3
- Version: 0.96.4
3
+ Version: 0.96.6
4
4
  Summary: Knowledge graph transformation
5
5
  Home-page: https://cognite-neat.readthedocs-hosted.com/
6
6
  License: Apache-2.0
@@ -36,6 +36,7 @@ COGNITE_MODELS = (
36
36
  DataModelId("cdf_cdm", "CogniteCore", "v1"),
37
37
  DataModelId("cdf_idm", "CogniteProcessIndustries", "v1"),
38
38
  )
39
+ COGNITE_SPACES = frozenset(model.space for model in COGNITE_MODELS)
39
40
  DMS_LISTABLE_PROPERTY_LIMIT = 1000
40
41
 
41
42
  EXAMPLE_RULES = PACKAGE_DIRECTORY / "_rules" / "examples"
@@ -109,7 +109,11 @@ class NeatIssue:
109
109
  def dump(self) -> dict[str, Any]:
110
110
  """Return a dictionary representation of the issue."""
111
111
  variables = vars(self)
112
- output = {to_camel(key): self._dump_value(value) for key, value in variables.items() if value is not None}
112
+ output = {
113
+ to_camel(key): self._dump_value(value)
114
+ for key, value in variables.items()
115
+ if not (value is None or key.startswith("_"))
116
+ }
113
117
  output["NeatIssue"] = type(self).__name__
114
118
  return output
115
119
 
@@ -32,9 +32,11 @@ class BaseExporter(ABC, Generic[T_VerifiedRules, T_Export]):
32
32
  class CDFExporter(BaseExporter[T_VerifiedRules, T_Export]):
33
33
  @abstractmethod
34
34
  def export_to_cdf_iterable(
35
- self, rules: T_VerifiedRules, client: CogniteClient, dry_run: bool = False
35
+ self, rules: T_VerifiedRules, client: CogniteClient, dry_run: bool = False, fallback_one_by_one: bool = False
36
36
  ) -> Iterable[UploadResult]:
37
37
  raise NotImplementedError
38
38
 
39
- def export_to_cdf(self, rules: T_VerifiedRules, client: CogniteClient, dry_run: bool = False) -> UploadResultList:
40
- return UploadResultList(self.export_to_cdf_iterable(rules, client, dry_run))
39
+ def export_to_cdf(
40
+ self, rules: T_VerifiedRules, client: CogniteClient, dry_run: bool = False, fallback_one_by_one: bool = False
41
+ ) -> UploadResultList:
42
+ return UploadResultList(self.export_to_cdf_iterable(rules, client, dry_run, fallback_one_by_one))
@@ -118,12 +118,16 @@ class DMSExporter(CDFExporter[DMSRules, DMSSchema]):
118
118
  def export(self, rules: DMSRules) -> DMSSchema:
119
119
  return rules.as_schema(include_pipeline=self.export_pipeline, instance_space=self.instance_space)
120
120
 
121
- def delete_from_cdf(self, rules: DMSRules, client: CogniteClient, dry_run: bool = False) -> Iterable[UploadResult]:
121
+ def delete_from_cdf(
122
+ self, rules: DMSRules, client: CogniteClient, dry_run: bool = False, skip_space: bool = False
123
+ ) -> Iterable[UploadResult]:
122
124
  to_export = self._prepare_exporters(rules, client)
123
125
 
124
126
  # we need to reverse order in which we are picking up the items to delete
125
127
  # as they are sorted in the order of creation and we need to delete them in reverse order
126
128
  for items, loader in reversed(to_export):
129
+ if skip_space and isinstance(loader, SpaceLoader):
130
+ continue
127
131
  item_ids = loader.get_ids(items)
128
132
  existing_items = loader.retrieve(item_ids)
129
133
  existing_ids = loader.get_ids(existing_items)
@@ -162,10 +166,15 @@ class DMSExporter(CDFExporter[DMSRules, DMSSchema]):
162
166
  )
163
167
 
164
168
  def export_to_cdf_iterable(
165
- self, rules: DMSRules, client: CogniteClient, dry_run: bool = False
169
+ self, rules: DMSRules, client: CogniteClient, dry_run: bool = False, fallback_one_by_one: bool = False
166
170
  ) -> Iterable[UploadResult]:
167
171
  to_export = self._prepare_exporters(rules, client)
168
172
 
173
+ result_by_name = {}
174
+ if self.existing_handling == "force":
175
+ for delete_result in self.delete_from_cdf(rules, client, dry_run, skip_space=True):
176
+ result_by_name[delete_result.name] = delete_result
177
+
169
178
  redeploy_data_model = False
170
179
  for items, loader in to_export:
171
180
  # The conversion from DMS to GraphQL does not seem to be triggered even if the views
@@ -183,8 +192,10 @@ class DMSExporter(CDFExporter[DMSRules, DMSSchema]):
183
192
  created: set[Hashable] = set()
184
193
  skipped: set[Hashable] = set()
185
194
  changed: set[Hashable] = set()
195
+ deleted: set[Hashable] = set()
186
196
  failed_created: set[Hashable] = set()
187
197
  failed_changed: set[Hashable] = set()
198
+ failed_deleted: set[Hashable] = set()
188
199
  error_messages: list[str] = []
189
200
  if dry_run:
190
201
  if self.existing_handling in ["update", "force"]:
@@ -200,7 +211,20 @@ class DMSExporter(CDFExporter[DMSRules, DMSSchema]):
200
211
  try:
201
212
  loader.delete(to_delete)
202
213
  except CogniteAPIError as e:
203
- error_messages.append(f"Failed delete: {e.message}")
214
+ if fallback_one_by_one:
215
+ for item in to_delete:
216
+ try:
217
+ loader.delete([item])
218
+ except CogniteAPIError as item_e:
219
+ failed_deleted.add(loader.get_id(item))
220
+ error_messages.append(f"Failed delete: {item_e!s}")
221
+ else:
222
+ deleted.add(loader.get_id(item))
223
+ else:
224
+ error_messages.append(f"Failed delete: {e!s}")
225
+ failed_deleted.update(loader.get_id(item) for item in e.failed + e.unknown)
226
+ else:
227
+ deleted.update(loader.get_id(item) for item in to_delete)
204
228
 
205
229
  if isinstance(loader, DataModelingLoader):
206
230
  to_create = loader.sort_by_dependencies(to_create)
@@ -208,9 +232,19 @@ class DMSExporter(CDFExporter[DMSRules, DMSSchema]):
208
232
  try:
209
233
  loader.create(to_create)
210
234
  except CogniteAPIError as e:
211
- failed_created.update(loader.get_id(item) for item in e.failed + e.unknown)
212
- created.update(loader.get_id(item) for item in e.successful)
213
- error_messages.append(e.message)
235
+ if fallback_one_by_one:
236
+ for item in to_create:
237
+ try:
238
+ loader.create([item])
239
+ except CogniteAPIError as item_e:
240
+ failed_created.add(loader.get_id(item))
241
+ error_messages.append(f"Failed create: {item_e!s}")
242
+ else:
243
+ created.add(loader.get_id(item))
244
+ else:
245
+ failed_created.update(loader.get_id(item) for item in e.failed + e.unknown)
246
+ created.update(loader.get_id(item) for item in e.successful)
247
+ error_messages.append(f"Failed create: {e!s}")
214
248
  else:
215
249
  created.update(loader.get_id(item) for item in to_create)
216
250
 
@@ -218,9 +252,19 @@ class DMSExporter(CDFExporter[DMSRules, DMSSchema]):
218
252
  try:
219
253
  loader.update(to_update)
220
254
  except CogniteAPIError as e:
221
- failed_changed.update(loader.get_id(item) for item in e.failed + e.unknown)
222
- changed.update(loader.get_id(item) for item in e.successful)
223
- error_messages.append(e.message)
255
+ if fallback_one_by_one:
256
+ for item in to_update:
257
+ try:
258
+ loader.update([item])
259
+ except CogniteAPIError as e_item:
260
+ failed_changed.add(loader.get_id(item))
261
+ error_messages.append(f"Failed update: {e_item!s}")
262
+ else:
263
+ changed.add(loader.get_id(item))
264
+ else:
265
+ failed_changed.update(loader.get_id(item) for item in e.failed + e.unknown)
266
+ changed.update(loader.get_id(item) for item in e.successful)
267
+ error_messages.append(f"Failed update: {e!s}")
224
268
  else:
225
269
  changed.update(loader.get_id(item) for item in to_update)
226
270
  elif self.existing_handling == "skip":
@@ -228,14 +272,22 @@ class DMSExporter(CDFExporter[DMSRules, DMSSchema]):
228
272
  elif self.existing_handling == "fail":
229
273
  failed_changed.update(loader.get_id(item) for item in to_update)
230
274
 
275
+ if loader.resource_name in result_by_name:
276
+ delete_result = result_by_name[loader.resource_name]
277
+ deleted.update(delete_result.deleted)
278
+ failed_deleted.update(delete_result.failed_deleted)
279
+ error_messages.extend(delete_result.error_messages)
280
+
231
281
  yield UploadResult(
232
282
  name=loader.resource_name,
233
283
  created=created,
234
284
  changed=changed,
285
+ deleted=deleted,
235
286
  unchanged={loader.get_id(item) for item in unchanged},
236
287
  skipped=skipped,
237
288
  failed_created=failed_created,
238
289
  failed_changed=failed_changed,
290
+ failed_deleted=failed_deleted,
239
291
  error_messages=error_messages,
240
292
  issues=issue_list,
241
293
  )
@@ -47,6 +47,8 @@ SOURCE_SHEET__TARGET_FIELD__HEADERS = [
47
47
  ("Classes", "Classes", "Class"),
48
48
  ("Containers", "Containers", "Container"),
49
49
  ("Views", "Views", "View"),
50
+ ("Enum", "Enum", "Collection"),
51
+ ("Nodes", "Nodes", "Node"),
50
52
  ]
51
53
 
52
54
  MANDATORY_SHEETS_BY_ROLE: dict[RoleTypes, set[str]] = {
@@ -112,7 +114,7 @@ class SpreadsheetReader:
112
114
  issue_list: IssueList,
113
115
  required: bool = True,
114
116
  metadata: MetadataRaw | None = None,
115
- sheet_prefix: Literal["", "Last", "Ref"] = "",
117
+ sheet_prefix: Literal["", "Last", "Ref", "CDMRef"] = "",
116
118
  ):
117
119
  self.issue_list = issue_list
118
120
  self.required = required
@@ -267,6 +269,8 @@ class ExcelImporter(BaseImporter[T_InputRules]):
267
269
  reference_read: ReadResult | None = None
268
270
  if any(sheet_name.startswith("Ref") for sheet_name in user_reader.seen_sheets):
269
271
  reference_read = SpreadsheetReader(issue_list, sheet_prefix="Ref").read(excel_file, self.filepath)
272
+ elif any(sheet_name.startswith("CDMRef") for sheet_name in user_reader.seen_sheets):
273
+ reference_read = SpreadsheetReader(issue_list, sheet_prefix="CDMRef").read(excel_file, self.filepath)
270
274
 
271
275
  if issue_list.has_errors:
272
276
  return ReadRules(None, issue_list, {})
@@ -402,17 +402,30 @@ class _DMSExporter:
402
402
 
403
403
  return container_properties_by_id, view_properties_by_id
404
404
 
405
- @staticmethod
406
405
  def _gather_properties_with_ancestors(
406
+ self,
407
407
  view_properties_by_id: dict[dm.ViewId, list[DMSProperty]],
408
408
  views: Sequence[DMSView],
409
409
  ) -> dict[dm.ViewId, list[DMSProperty]]:
410
+ all_view_properties_by_id = view_properties_by_id.copy()
411
+ if self.rules.reference:
412
+ # We need to include t
413
+ ref_view_properties_by_id = self._gather_properties(self.rules.reference.properties)[1]
414
+ for view_id, properties in ref_view_properties_by_id.items():
415
+ if view_id not in all_view_properties_by_id:
416
+ all_view_properties_by_id[view_id] = properties
417
+ else:
418
+ existing_properties = {prop._identifier() for prop in all_view_properties_by_id[view_id]}
419
+ for prop in properties:
420
+ if prop._identifier() not in existing_properties:
421
+ all_view_properties_by_id[view_id].append(prop)
422
+
410
423
  view_properties_with_parents_by_id: dict[dm.ViewId, list[DMSProperty]] = defaultdict(list)
411
424
  view_by_view_id = {view.view.as_id(): view for view in views}
412
425
  for view in views:
413
426
  view_id = view.view.as_id()
414
427
  seen: set[Hashable] = set()
415
- if view_properties := view_properties_by_id.get(view_id):
428
+ if view_properties := all_view_properties_by_id.get(view_id):
416
429
  view_properties_with_parents_by_id[view_id].extend(view_properties)
417
430
  seen.update(prop._identifier() for prop in view_properties)
418
431
  if not view.implements:
@@ -428,7 +441,7 @@ class _DMSExporter:
428
441
  parents.append(grandparent)
429
442
  seen_parents.add(grandparent)
430
443
 
431
- if not (parent_view_properties := view_properties_by_id.get(parent_view_id)):
444
+ if not (parent_view_properties := all_view_properties_by_id.get(parent_view_id)):
432
445
  continue
433
446
  for prop in parent_view_properties:
434
447
  new_prop = prop.model_copy(update={"view": view.view})
@@ -1,15 +1,15 @@
1
1
  import math
2
- import sys
3
2
  import warnings
4
3
  from collections.abc import Hashable
5
4
  from datetime import datetime
6
- from typing import TYPE_CHECKING, Any, ClassVar, Literal
5
+ from typing import Any, ClassVar, Literal
7
6
 
8
7
  import pandas as pd
9
8
  from cognite.client import data_modeling as dm
10
9
  from pydantic import Field, field_serializer, field_validator, model_validator
11
10
  from pydantic_core.core_schema import SerializationInfo, ValidationInfo
12
11
 
12
+ from cognite.neat._constants import COGNITE_SPACES
13
13
  from cognite.neat._issues import MultiValueError
14
14
  from cognite.neat._issues.warnings import (
15
15
  PrincipleMatchingSpaceAndVersionWarning,
@@ -56,14 +56,6 @@ from cognite.neat._rules.models.entities import (
56
56
 
57
57
  from ._schema import DMSSchema
58
58
 
59
- if TYPE_CHECKING:
60
- pass
61
-
62
- if sys.version_info >= (3, 11):
63
- pass
64
- else:
65
- pass
66
-
67
59
  _DEFAULT_VERSION = "1"
68
60
 
69
61
 
@@ -197,6 +189,24 @@ class DMSProperty(SheetRow):
197
189
  raise ValueError(f"Reverse connection must have a value type that points to a view, got {value}")
198
190
  return value
199
191
 
192
+ @field_validator("container", "container_property", mode="after")
193
+ def container_set_correctly(cls, value: Any, info: ValidationInfo) -> Any:
194
+ if (connection := info.data.get("connection")) is None:
195
+ return value
196
+ if connection == "direct" and value is None:
197
+ raise ValueError(
198
+ "You must provide a container and container property for where to store direct connections"
199
+ )
200
+ elif isinstance(connection, EdgeEntity) and value is not None:
201
+ raise ValueError(
202
+ "Edge connections are not stored in a container, please remove the container and container property"
203
+ )
204
+ elif isinstance(connection, ReverseConnectionEntity) and value is not None:
205
+ raise ValueError(
206
+ "Reverse connection are not stored in a container, please remove the container and container property"
207
+ )
208
+ return value
209
+
200
210
  @field_serializer("reference", when_used="always")
201
211
  def set_reference(self, value: Any, info: SerializationInfo) -> str | None:
202
212
  if isinstance(info.context, dict) and info.context.get("as_reference") is True:
@@ -421,7 +431,11 @@ class DMSRules(BaseRules):
421
431
  if not (metadata := info.data.get("metadata")):
422
432
  return value
423
433
  model_version = metadata.version
424
- if different_version := [view.view.as_id() for view in value if view.view.version != model_version]:
434
+ if different_version := [
435
+ view.view.as_id()
436
+ for view in value
437
+ if view.view.version != model_version and view.view.space not in COGNITE_SPACES
438
+ ]:
425
439
  for view_id in different_version:
426
440
  warnings.warn(
427
441
  PrincipleMatchingSpaceAndVersionWarning(
@@ -429,7 +443,11 @@ class DMSRules(BaseRules):
429
443
  ),
430
444
  stacklevel=2,
431
445
  )
432
- if different_space := [view.view.as_id() for view in value if view.view.space != metadata.space]:
446
+ if different_space := [
447
+ view.view.as_id()
448
+ for view in value
449
+ if view.view.space != metadata.space and view.view.space not in COGNITE_SPACES
450
+ ]:
433
451
  for view_id in different_space:
434
452
  warnings.warn(
435
453
  PrincipleMatchingSpaceAndVersionWarning(
@@ -63,12 +63,18 @@ class CDFToAPI:
63
63
 
64
64
  return loader.load_into_cdf(self._client)
65
65
 
66
- def data_model(self, existing_handling: Literal["fail", "skip", "update", "force"] = "skip", dry_run: bool = False):
66
+ def data_model(
67
+ self,
68
+ existing_handling: Literal["fail", "skip", "update", "force"] = "skip",
69
+ dry_run: bool = False,
70
+ fallback_one_by_one: bool = False,
71
+ ):
67
72
  """Export the verified DMS data model to CDF.
68
73
 
69
74
  Args:
70
75
  existing_handling: How to handle if component of data model exists. Defaults to "skip".
71
76
  dry_run: If True, no changes will be made to CDF. Defaults to False.
77
+ fallback_one_by_one: If True, will fall back to one-by-one upload if batch upload fails. Defaults to False.
72
78
 
73
79
  ... note::
74
80
 
@@ -88,7 +94,9 @@ class CDFToAPI:
88
94
 
89
95
  conversion_issues = IssueList(action="to.cdf.data_model")
90
96
  with catch_warnings(conversion_issues):
91
- result = exporter.export_to_cdf(self._state.last_verified_dms_rules, self._client, dry_run)
97
+ result = exporter.export_to_cdf(
98
+ self._state.last_verified_dms_rules, self._client, dry_run, fallback_one_by_one
99
+ )
92
100
  result.insert(0, UploadResultCore(name="schema", issues=conversion_issues))
93
101
  self._state.outcome.append(result)
94
102
  print("You can inspect the details with the .inspect.outcome(...) method.")
@@ -27,7 +27,7 @@ class ResourceLoader(
27
27
 
28
28
  @classmethod
29
29
  @abstractmethod
30
- def get_id(cls, item: T_WriteClass | T_WritableCogniteResource) -> T_ID:
30
+ def get_id(cls, item: T_WriteClass | T_WritableCogniteResource | dict | T_ID) -> T_ID:
31
31
  raise NotImplementedError
32
32
 
33
33
  @classmethod
@@ -80,8 +80,12 @@ class SpaceLoader(DataModelingLoader[str, SpaceApply, Space, SpaceApplyList, Spa
80
80
  resource_name = "spaces"
81
81
 
82
82
  @classmethod
83
- def get_id(cls, item: Space | SpaceApply) -> str:
84
- return item.space
83
+ def get_id(cls, item: Space | SpaceApply | str | dict) -> str:
84
+ if isinstance(item, Space | SpaceApply):
85
+ return item.space
86
+ if isinstance(item, dict):
87
+ return item["space"]
88
+ return item
85
89
 
86
90
  def create(self, items: Sequence[SpaceApply]) -> SpaceList:
87
91
  return self.client.data_modeling.spaces.apply(items)
@@ -149,8 +153,12 @@ class ViewLoader(DataModelingLoader[ViewId, ViewApply, View, ViewApplyList, View
149
153
  self._tried_force_deploy: set[ViewId] = set()
150
154
 
151
155
  @classmethod
152
- def get_id(cls, item: View | ViewApply) -> ViewId:
153
- return item.as_id()
156
+ def get_id(cls, item: View | ViewApply | ViewId | dict) -> ViewId:
157
+ if isinstance(item, View | ViewApply):
158
+ return item.as_id()
159
+ if isinstance(item, dict):
160
+ return ViewId.load(item)
161
+ return item
154
162
 
155
163
  def create(self, items: Sequence[ViewApply]) -> ViewList:
156
164
  if self.existing_handling == "force":
@@ -247,8 +255,12 @@ class ContainerLoader(DataModelingLoader[ContainerId, ContainerApply, Container,
247
255
  self._tried_force_deploy: set[ContainerId] = set()
248
256
 
249
257
  @classmethod
250
- def get_id(cls, item: Container | ContainerApply) -> ContainerId:
251
- return item.as_id()
258
+ def get_id(cls, item: Container | ContainerApply | ContainerId | dict) -> ContainerId:
259
+ if isinstance(item, Container | ContainerApply):
260
+ return item.as_id()
261
+ if isinstance(item, dict):
262
+ return ContainerId.load(item)
263
+ return item
252
264
 
253
265
  def sort_by_dependencies(self, items: Sequence[ContainerApply]) -> list[ContainerApply]:
254
266
  container_by_id = {container.as_id(): container for container in items}
@@ -292,8 +304,12 @@ class DataModelLoader(DataModelingLoader[DataModelId, DataModelApply, DataModel,
292
304
  resource_name = "data_models"
293
305
 
294
306
  @classmethod
295
- def get_id(cls, item: DataModel | DataModelApply) -> DataModelId:
296
- return item.as_id()
307
+ def get_id(cls, item: DataModel | DataModelApply | DataModelId | dict) -> DataModelId:
308
+ if isinstance(item, DataModel | DataModelApply):
309
+ return item.as_id()
310
+ if isinstance(item, dict):
311
+ return DataModelId.load(item)
312
+ return item
297
313
 
298
314
  def create(self, items: Sequence[DataModelApply]) -> DataModelList:
299
315
  return self.client.data_modeling.data_models.apply(items)
@@ -26,10 +26,16 @@ class TransformationLoader(
26
26
  resource_name = "transformations"
27
27
 
28
28
  @classmethod
29
- def get_id(cls, item: Transformation | TransformationWrite) -> str:
30
- if item.external_id is None:
31
- raise ValueError(f"Transformation {item} does not have an external_id")
32
- return item.external_id
29
+ def get_id(cls, item: Transformation | TransformationWrite | str | dict) -> str:
30
+ if isinstance(item, Transformation | TransformationWrite):
31
+ if item.external_id is None:
32
+ raise ValueError(f"Transformation {item} does not have an external_id")
33
+ return item.external_id
34
+ if isinstance(item, dict):
35
+ if item.get("externalId") is None:
36
+ raise ValueError(f"Transformation {item} does not have an external_id")
37
+ return item["externalId"]
38
+ return item
33
39
 
34
40
  def create(self, items: Sequence[TransformationWrite]) -> TransformationList:
35
41
  return self.client.transformations.create(items)
@@ -50,10 +56,16 @@ class RawDatabaseLoader(ResourceLoader[str, DatabaseWrite, Database, DatabaseWri
50
56
  resource_name = "databases"
51
57
 
52
58
  @classmethod
53
- def get_id(cls, item: Database | DatabaseWrite) -> str:
54
- if item.name is None:
55
- raise ValueError(f"Database {item} does not have a name")
56
- return item.name
59
+ def get_id(cls, item: Database | DatabaseWrite | str | dict) -> str:
60
+ if isinstance(item, Database | DatabaseWrite):
61
+ if item.name is None:
62
+ raise ValueError(f"Database {item} does not have a name")
63
+ return item.name
64
+ if isinstance(item, dict):
65
+ if item.get("name") is None:
66
+ raise ValueError(f"Database {item} does not have a name")
67
+ return item["name"]
68
+ return item
57
69
 
58
70
  def create(self, items: Sequence[DatabaseWrite]) -> DatabaseList:
59
71
  return self.client.raw.databases.create([item.name for item in items if item.name is not None])
@@ -78,8 +90,12 @@ class RawTableLoader(ResourceLoader[RawTableID, RawTableWrite, RawTable, RawTabl
78
90
  resource_name = "tables"
79
91
 
80
92
  @classmethod
81
- def get_id(cls, item: RawTable | RawTableWrite) -> RawTableID:
82
- return item.as_id()
93
+ def get_id(cls, item: RawTable | RawTableWrite | RawTableID | dict) -> RawTableID:
94
+ if isinstance(item, RawTable | RawTableWrite):
95
+ return item.as_id()
96
+ if isinstance(item, dict):
97
+ return RawTableID(database=item["database"], table=item["name"])
98
+ return item
83
99
 
84
100
  @overload
85
101
  def _groupby_database(self, items: Sequence[RawTableWrite]) -> Iterable[tuple[str, Iterable[RawTableWrite]]]: ...
@@ -0,0 +1 @@
1
+ __version__ = "0.96.6"
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "cognite-neat"
3
- version = "0.96.4"
3
+ version = "0.96.6"
4
4
  readme = "README.md"
5
5
  description = "Knowledge graph transformation"
6
6
  authors = [
@@ -1 +0,0 @@
1
- __version__ = "0.96.4"
File without changes
File without changes