digitalhub 0.12.0__tar.gz → 0.13.0__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 digitalhub might be problematic. Click here for more details.

Files changed (326) hide show
  1. {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/scripts/cliff.toml +0 -1
  2. {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/workflows/release.yml +1 -1
  3. {digitalhub-0.12.0 → digitalhub-0.13.0}/PKG-INFO +1 -1
  4. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/__init__.py +1 -1
  5. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/context/api.py +5 -5
  6. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/context/builder.py +3 -5
  7. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/context/context.py +9 -1
  8. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/executable/entity.py +105 -57
  9. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/entity.py +11 -18
  10. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/utils.py +1 -1
  11. digitalhub-0.13.0/digitalhub/entities/_commons/metrics.py +202 -0
  12. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_commons/utils.py +36 -9
  13. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_processors/base.py +150 -79
  14. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_processors/context.py +366 -215
  15. digitalhub-0.13.0/digitalhub/entities/_processors/utils.py +206 -0
  16. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/crud.py +4 -0
  17. digitalhub-0.13.0/digitalhub/entities/artifact/utils.py +81 -0
  18. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/crud.py +14 -2
  19. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/entity.py +3 -3
  20. digitalhub-0.13.0/digitalhub/entities/dataitem/utils.py +238 -0
  21. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/crud.py +4 -0
  22. digitalhub-0.13.0/digitalhub/entities/model/utils.py +81 -0
  23. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/entity.py +0 -2
  24. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/entity.py +2 -2
  25. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/models.py +12 -3
  26. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/entity.py +11 -0
  27. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/factory/factory.py +25 -3
  28. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/factory/utils.py +11 -3
  29. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/runtimes/_base.py +1 -1
  30. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/runtimes/builder.py +18 -1
  31. digitalhub-0.13.0/digitalhub/stores/client/__init__.py +15 -0
  32. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/_base/api_builder.py +14 -0
  33. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/_base/client.py +93 -0
  34. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/_base/key_builder.py +28 -0
  35. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/_base/params_builder.py +14 -0
  36. digitalhub-0.13.0/digitalhub/stores/client/api.py +36 -0
  37. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/builder.py +3 -1
  38. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/api_builder.py +17 -0
  39. digitalhub-0.13.0/digitalhub/stores/client/dhcore/client.py +613 -0
  40. digitalhub-0.13.0/digitalhub/stores/client/dhcore/configurator.py +675 -0
  41. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/enums.py +3 -0
  42. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/error_parser.py +35 -1
  43. digitalhub-0.13.0/digitalhub/stores/client/dhcore/params_builder.py +278 -0
  44. digitalhub-0.13.0/digitalhub/stores/client/dhcore/utils.py +94 -0
  45. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/api_builder.py +17 -0
  46. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/client.py +6 -8
  47. digitalhub-0.13.0/digitalhub/stores/credentials/api.py +35 -0
  48. digitalhub-0.13.0/digitalhub/stores/credentials/configurator.py +210 -0
  49. digitalhub-0.13.0/digitalhub/stores/credentials/enums.py +68 -0
  50. digitalhub-0.13.0/digitalhub/stores/credentials/handler.py +176 -0
  51. {digitalhub-0.12.0/digitalhub/stores/configurator → digitalhub-0.13.0/digitalhub/stores/credentials}/ini_module.py +60 -28
  52. digitalhub-0.13.0/digitalhub/stores/credentials/store.py +81 -0
  53. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/_base/store.py +27 -9
  54. digitalhub-0.13.0/digitalhub/stores/data/api.py +73 -0
  55. digitalhub-0.13.0/digitalhub/stores/data/builder.py +146 -0
  56. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/local/store.py +4 -7
  57. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/remote/store.py +4 -7
  58. digitalhub-0.13.0/digitalhub/stores/data/s3/configurator.py +115 -0
  59. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/s3/store.py +69 -81
  60. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/s3/utils.py +10 -10
  61. digitalhub-0.13.0/digitalhub/stores/data/sql/configurator.py +120 -0
  62. digitalhub-0.13.0/digitalhub/stores/data/sql/store.py +527 -0
  63. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/exceptions.py +6 -0
  64. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/file_utils.py +53 -30
  65. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/generic_utils.py +41 -33
  66. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/git_utils.py +24 -14
  67. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/io_utils.py +19 -18
  68. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/uri_utils.py +31 -31
  69. {digitalhub-0.12.0 → digitalhub-0.13.0}/pyproject.toml +2 -2
  70. digitalhub-0.12.0/digitalhub/entities/_commons/metrics.py +0 -168
  71. digitalhub-0.12.0/digitalhub/entities/_commons/types.py +0 -9
  72. digitalhub-0.12.0/digitalhub/entities/_processors/utils.py +0 -162
  73. digitalhub-0.12.0/digitalhub/entities/artifact/utils.py +0 -66
  74. digitalhub-0.12.0/digitalhub/entities/dataitem/utils.py +0 -189
  75. digitalhub-0.12.0/digitalhub/entities/model/utils.py +0 -66
  76. digitalhub-0.12.0/digitalhub/stores/client/api.py +0 -31
  77. digitalhub-0.12.0/digitalhub/stores/client/dhcore/client.py +0 -358
  78. digitalhub-0.12.0/digitalhub/stores/client/dhcore/configurator.py +0 -383
  79. digitalhub-0.12.0/digitalhub/stores/client/dhcore/params_builder.py +0 -182
  80. digitalhub-0.12.0/digitalhub/stores/client/dhcore/utils.py +0 -76
  81. digitalhub-0.12.0/digitalhub/stores/configurator/api.py +0 -35
  82. digitalhub-0.12.0/digitalhub/stores/configurator/configurator.py +0 -202
  83. digitalhub-0.12.0/digitalhub/stores/configurator/credentials_store.py +0 -69
  84. digitalhub-0.12.0/digitalhub/stores/configurator/enums.py +0 -25
  85. digitalhub-0.12.0/digitalhub/stores/data/api.py +0 -33
  86. digitalhub-0.12.0/digitalhub/stores/data/builder.py +0 -97
  87. digitalhub-0.12.0/digitalhub/stores/data/s3/configurator.py +0 -130
  88. digitalhub-0.12.0/digitalhub/stores/data/s3/enums.py +0 -20
  89. digitalhub-0.12.0/digitalhub/stores/data/sql/configurator.py +0 -117
  90. digitalhub-0.12.0/digitalhub/stores/data/sql/enums.py +0 -20
  91. digitalhub-0.12.0/digitalhub/stores/data/sql/store.py +0 -438
  92. digitalhub-0.12.0/digitalhub/stores/data/utils.py +0 -38
  93. digitalhub-0.12.0/digitalhub/utils/__init__.py +0 -3
  94. {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/scripts/bump.sh +0 -0
  95. {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/scripts/changelog.sh +0 -0
  96. {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/workflows/run_local_test.yml +0 -0
  97. {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/workflows/test_release.yml +0 -0
  98. {digitalhub-0.12.0 → digitalhub-0.13.0}/.gitignore +0 -0
  99. {digitalhub-0.12.0 → digitalhub-0.13.0}/AUTHORS +0 -0
  100. {digitalhub-0.12.0 → digitalhub-0.13.0}/CONTRIBUTING +0 -0
  101. {digitalhub-0.12.0 → digitalhub-0.13.0}/COPYRIGHT +0 -0
  102. {digitalhub-0.12.0 → digitalhub-0.13.0}/LICENSE +0 -0
  103. {digitalhub-0.12.0 → digitalhub-0.13.0}/README.md +0 -0
  104. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/__init__.py +0 -0
  105. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/__init__.py +0 -0
  106. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/_base/__init__.py +0 -0
  107. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/_base/entity.py +0 -0
  108. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/context/__init__.py +0 -0
  109. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/context/entity.py +0 -0
  110. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/__init__.py +0 -0
  111. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/__init__.py +0 -0
  112. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/metadata.py +0 -0
  113. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/name.py +0 -0
  114. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/spec.py +0 -0
  115. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/status.py +0 -0
  116. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/uuid.py +0 -0
  117. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/builder.py +0 -0
  118. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/entity.py +0 -0
  119. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/metadata.py +0 -0
  120. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/spec.py +0 -0
  121. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/status.py +0 -0
  122. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/executable/__init__.py +0 -0
  123. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/__init__.py +0 -0
  124. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/spec.py +0 -0
  125. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/status.py +0 -0
  126. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
  127. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/runtime_entity/builder.py +0 -0
  128. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/unversioned/__init__.py +0 -0
  129. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/unversioned/builder.py +0 -0
  130. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/unversioned/entity.py +0 -0
  131. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/versioned/__init__.py +0 -0
  132. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/versioned/builder.py +0 -0
  133. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/versioned/entity.py +0 -0
  134. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_commons/__init__.py +0 -0
  135. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_commons/enums.py +0 -0
  136. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_processors/__init__.py +0 -0
  137. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/__init__.py +0 -0
  138. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/__init__.py +0 -0
  139. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/builder.py +0 -0
  140. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/entity.py +0 -0
  141. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/spec.py +0 -0
  142. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/status.py +0 -0
  143. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/__init__.py +0 -0
  144. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/builder.py +0 -0
  145. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/entity.py +0 -0
  146. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/spec.py +0 -0
  147. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/status.py +0 -0
  148. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/builders.py +0 -0
  149. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/__init__.py +0 -0
  150. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/__init__.py +0 -0
  151. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/builder.py +0 -0
  152. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/entity.py +0 -0
  153. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/spec.py +0 -0
  154. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/status.py +0 -0
  155. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
  156. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/builder.py +0 -0
  157. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/entity.py +0 -0
  158. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/spec.py +0 -0
  159. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/status.py +0 -0
  160. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
  161. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/builder.py +0 -0
  162. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/entity.py +0 -0
  163. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/spec.py +0 -0
  164. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/status.py +0 -0
  165. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/__init__.py +0 -0
  166. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/builder.py +0 -0
  167. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/models.py +0 -0
  168. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/spec.py +0 -0
  169. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/status.py +0 -0
  170. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/utils.py +0 -0
  171. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/__init__.py +0 -0
  172. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/__init__.py +0 -0
  173. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/builder.py +0 -0
  174. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/entity.py +0 -0
  175. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/spec.py +0 -0
  176. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/status.py +0 -0
  177. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/crud.py +0 -0
  178. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/__init__.py +0 -0
  179. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/__init__.py +0 -0
  180. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/builder.py +0 -0
  181. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/entity.py +0 -0
  182. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/spec.py +0 -0
  183. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/status.py +0 -0
  184. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/__init__.py +0 -0
  185. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/builder.py +0 -0
  186. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/entity.py +0 -0
  187. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/spec.py +0 -0
  188. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/status.py +0 -0
  189. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/__init__.py +0 -0
  190. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/builder.py +0 -0
  191. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/entity.py +0 -0
  192. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/models.py +0 -0
  193. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/spec.py +0 -0
  194. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/status.py +0 -0
  195. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/utils.py +0 -0
  196. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/__init__.py +0 -0
  197. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/builder.py +0 -0
  198. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/entity.py +0 -0
  199. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/spec.py +0 -0
  200. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/status.py +0 -0
  201. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/__init__.py +0 -0
  202. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/builder.py +0 -0
  203. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/entity.py +0 -0
  204. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/spec.py +0 -0
  205. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/status.py +0 -0
  206. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/__init__.py +0 -0
  207. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/__init__.py +0 -0
  208. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/builder.py +0 -0
  209. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/models.py +0 -0
  210. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/spec.py +0 -0
  211. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/status.py +0 -0
  212. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/crud.py +0 -0
  213. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/utils.py +0 -0
  214. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/__init__.py +0 -0
  215. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/__init__.py +0 -0
  216. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/builder.py +0 -0
  217. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/spec.py +0 -0
  218. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/status.py +0 -0
  219. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/crud.py +0 -0
  220. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/__init__.py +0 -0
  221. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/__init__.py +0 -0
  222. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/builder.py +0 -0
  223. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/entity.py +0 -0
  224. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/spec.py +0 -0
  225. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/status.py +0 -0
  226. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/crud.py +0 -0
  227. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/__init__.py +0 -0
  228. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/__init__.py +0 -0
  229. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/builder.py +0 -0
  230. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/entity.py +0 -0
  231. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/spec.py +0 -0
  232. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/status.py +0 -0
  233. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/utils.py +0 -0
  234. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/crud.py +0 -0
  235. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/__init__.py +0 -0
  236. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/__init__.py +0 -0
  237. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/builder.py +0 -0
  238. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/spec.py +0 -0
  239. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/status.py +0 -0
  240. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/crud.py +0 -0
  241. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/__init__.py +0 -0
  242. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/builder.py +0 -0
  243. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/entity.py +0 -0
  244. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/spec.py +0 -0
  245. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/status.py +0 -0
  246. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/__init__.py +0 -0
  247. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/builder.py +0 -0
  248. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/entity.py +0 -0
  249. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/spec.py +0 -0
  250. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/status.py +0 -0
  251. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/__init__.py +0 -0
  252. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/__init__.py +0 -0
  253. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/builder.py +0 -0
  254. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/entity.py +0 -0
  255. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/spec.py +0 -0
  256. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/status.py +0 -0
  257. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/crud.py +0 -0
  258. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/factory/__init__.py +0 -0
  259. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/runtimes/__init__.py +0 -0
  260. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/runtimes/enums.py +0 -0
  261. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/__init__.py +0 -0
  262. {digitalhub-0.12.0/digitalhub/stores/client → digitalhub-0.13.0/digitalhub/stores/client/_base}/__init__.py +0 -0
  263. {digitalhub-0.12.0/digitalhub/stores/client/_base → digitalhub-0.13.0/digitalhub/stores/client/dhcore}/__init__.py +0 -0
  264. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/key_builder.py +0 -0
  265. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/models.py +0 -0
  266. {digitalhub-0.12.0/digitalhub/stores/client/dhcore → digitalhub-0.13.0/digitalhub/stores/client/local}/__init__.py +0 -0
  267. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/enums.py +0 -0
  268. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/key_builder.py +0 -0
  269. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/params_builder.py +0 -0
  270. {digitalhub-0.12.0/digitalhub/stores/client/local → digitalhub-0.13.0/digitalhub/stores/credentials}/__init__.py +0 -0
  271. {digitalhub-0.12.0/digitalhub/stores/configurator → digitalhub-0.13.0/digitalhub/stores/data}/__init__.py +0 -0
  272. {digitalhub-0.12.0/digitalhub/stores/data → digitalhub-0.13.0/digitalhub/stores/data/_base}/__init__.py +0 -0
  273. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/enums.py +0 -0
  274. {digitalhub-0.12.0/digitalhub/stores/data/_base → digitalhub-0.13.0/digitalhub/stores/data/local}/__init__.py +0 -0
  275. {digitalhub-0.12.0/digitalhub/stores/data/local → digitalhub-0.13.0/digitalhub/stores/data/remote}/__init__.py +0 -0
  276. {digitalhub-0.12.0/digitalhub/stores/data/remote → digitalhub-0.13.0/digitalhub/stores/data/s3}/__init__.py +0 -0
  277. {digitalhub-0.12.0/digitalhub/stores/data/s3 → digitalhub-0.13.0/digitalhub/stores/data/sql}/__init__.py +0 -0
  278. {digitalhub-0.12.0/digitalhub/stores/data/sql → digitalhub-0.13.0/digitalhub/stores/readers}/__init__.py +0 -0
  279. {digitalhub-0.12.0/digitalhub/stores/readers → digitalhub-0.13.0/digitalhub/stores/readers/data}/__init__.py +0 -0
  280. {digitalhub-0.12.0/digitalhub/stores/readers/data → digitalhub-0.13.0/digitalhub/stores/readers/data/_base}/__init__.py +0 -0
  281. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/_base/builder.py +0 -0
  282. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/_base/reader.py +0 -0
  283. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/api.py +0 -0
  284. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/factory.py +0 -0
  285. {digitalhub-0.12.0/digitalhub/stores/readers/data/_base → digitalhub-0.13.0/digitalhub/stores/readers/data/pandas}/__init__.py +0 -0
  286. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/pandas/builder.py +0 -0
  287. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/pandas/reader.py +0 -0
  288. {digitalhub-0.12.0/digitalhub/stores/readers/data/pandas → digitalhub-0.13.0/digitalhub/stores/readers/query}/__init__.py +0 -0
  289. {digitalhub-0.12.0/digitalhub/stores/readers/query → digitalhub-0.13.0/digitalhub/utils}/__init__.py +0 -0
  290. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/enums.py +0 -0
  291. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/logger.py +0 -0
  292. {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/types.py +0 -0
  293. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/README.md +0 -0
  294. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/local-copy/README.md +0 -0
  295. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/local-copy/local_copy.sh +0 -0
  296. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/DBT.dockerfile +0 -0
  297. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/KFP.dockerfile +0 -0
  298. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/PY10.dockerfile +0 -0
  299. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/PY11.dockerfile +0 -0
  300. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/PY9.dockerfile +0 -0
  301. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/README.md +0 -0
  302. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/build_containers.sh +0 -0
  303. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/spec_exporter/README.md +0 -0
  304. {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/spec_exporter/exporter.sh +0 -0
  305. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/CRUD/test_artifacts.py +0 -0
  306. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/CRUD/test_dataitems.py +0 -0
  307. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/CRUD/test_models.py +0 -0
  308. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/imports/test_imports.py +0 -0
  309. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/artifact/artifact-http.json +0 -0
  310. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/artifact/artifact-local.json +0 -0
  311. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/artifact/artifact-s3.json +0 -0
  312. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/artifact/artifact-sql.json +0 -0
  313. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/dataitem/dataitem-table.json +0 -0
  314. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/dataitem/dataitem.json +0 -0
  315. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/model/model-huggingface.json +0 -0
  316. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/model/model-mlflow.json +0 -0
  317. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/model/model-sklearn.json +0 -0
  318. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/model/model.json +0 -0
  319. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/project.json +0 -0
  320. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/secret.json +0 -0
  321. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/test_validate.py +0 -0
  322. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/test_crud_functions.py +0 -0
  323. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/test_crud_runs.py +0 -0
  324. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/test_crud_tasks.py +0 -0
  325. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/testkfp.py +0 -0
  326. {digitalhub-0.12.0 → digitalhub-0.13.0}/test/testkfp_pipeline.py +0 -0
@@ -62,7 +62,6 @@ commit_preprocessors = [
62
62
  commit_parsers = [
63
63
  { message = "^feat", group = "<!-- 0 --> Features" },
64
64
  { message = "^fix", group = "<!-- 1 --> Bug Fixes" },
65
- { message = "^refactor", group = "<!-- 2 --> Refactor" },
66
65
  { message = "^perf", group = "<!-- 3 --> Performance" },
67
66
  { message = "^build", group = "<!-- 4 --> Build" },
68
67
  { message = "^doc", group = "<!-- 5 --> Documentation" },
@@ -132,7 +132,7 @@ jobs:
132
132
  branch=${{ github.ref }}
133
133
 
134
134
  # Define the repositories to trigger
135
- repos=("digitalhub-sdk-wrapper-kfp" "jupyter-notebook-custom-image" "digitalhub-sdk-wrapper-dbt" )
135
+ repos=("digitalhub-sdk-wrapper-kfp" "jupyter-notebook-custom-image" "digitalhub-sdk-wrapper-hera" "digitalhub-sdk-wrapper-dbt" )
136
136
 
137
137
  # Loop over the repositories and trigger the workflow
138
138
  for repo in "${repos[@]}"; do
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalhub
3
- Version: 0.12.0
3
+ Version: 0.13.0
4
4
  Summary: Python SDK for Digitalhub
5
5
  Project-URL: Homepage, https://github.com/scc-digitalhub/digitalhub-sdk
6
6
  Author-email: Fondazione Bruno Kessler <digitalhub@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
@@ -104,7 +104,7 @@ except ImportError:
104
104
  # Register entities into registry
105
105
  from digitalhub.factory.utils import register_entities, register_runtimes_entities
106
106
  from digitalhub.stores.client.dhcore.utils import refresh_token, set_dhcore_env
107
- from digitalhub.stores.configurator.api import get_current_env, set_current_env
107
+ from digitalhub.stores.credentials.api import get_current_profile, set_current_profile
108
108
 
109
109
  register_entities()
110
110
  register_runtimes_entities()
@@ -17,15 +17,15 @@ def build_context(project: Project, overwrite: bool = False) -> Context:
17
17
  """
18
18
  Build a new context for a project.
19
19
 
20
- Creates or updates a context instance for the given project in the global
21
- context registry.
20
+ Creates or updates a context instance for the given project
21
+ in the global context registry.
22
22
 
23
23
  Parameters
24
24
  ----------
25
25
  project : Project
26
26
  The project object used to build the context.
27
27
  overwrite : bool, optional
28
- If True, overwrites existing context if it exists, by default False.
28
+ If True, overwrites existing context if it exists. Default is False.
29
29
 
30
30
  Returns
31
31
  -------
@@ -37,7 +37,7 @@ def build_context(project: Project, overwrite: bool = False) -> Context:
37
37
 
38
38
  def get_context(project: str) -> Context:
39
39
  """
40
- Wrapper for ContextBuilder.get().
40
+ Get the context for a given project name.
41
41
 
42
42
  Parameters
43
43
  ----------
@@ -54,7 +54,7 @@ def get_context(project: str) -> Context:
54
54
 
55
55
  def delete_context(project: str) -> None:
56
56
  """
57
- Wrapper for ContextBuilder.remove().
57
+ Delete the context for a given project name.
58
58
 
59
59
  Parameters
60
60
  ----------
@@ -39,8 +39,7 @@ class ContextBuilder:
39
39
  project : Project
40
40
  The project instance to create a context for.
41
41
  overwrite : bool, optional
42
- If True, overwrites existing context if project name already exists,
43
- by default False.
42
+ If True, overwrites existing context if project name already exists. Default is False.
44
43
 
45
44
  Returns
46
45
  -------
@@ -87,12 +86,11 @@ class ContextBuilder:
87
86
  Returns
88
87
  -------
89
88
  None
90
- This method doesn't return anything.
89
+ This method does not return anything.
91
90
 
92
91
  Notes
93
92
  -----
94
- If the project doesn't exist in the registry, this method
95
- silently does nothing.
93
+ If the project does not exist in the registry, this method silently does nothing.
96
94
  """
97
95
  self._instances.pop(project, None)
98
96
 
@@ -56,6 +56,10 @@ class Context:
56
56
  ----------
57
57
  run_ctx : str
58
58
  The run key to set.
59
+
60
+ Returns
61
+ -------
62
+ None
59
63
  """
60
64
  self.is_running = True
61
65
  self._run_ctx = run_ctx
@@ -63,6 +67,10 @@ class Context:
63
67
  def unset_run(self) -> None:
64
68
  """
65
69
  Clear the current run key and reset running state.
70
+
71
+ Returns
72
+ -------
73
+ None
66
74
  """
67
75
  self.is_running = False
68
76
  self._run_ctx = None
@@ -73,7 +81,7 @@ class Context:
73
81
 
74
82
  Returns
75
83
  -------
76
- str | None
84
+ str or None
77
85
  The current run key if set, None otherwise.
78
86
  """
79
87
  return self._run_ctx
@@ -5,12 +5,14 @@
5
5
  from __future__ import annotations
6
6
 
7
7
  import typing
8
+ from abc import abstractmethod
8
9
 
9
10
  from digitalhub.entities._base.versioned.entity import VersionedEntity
10
11
  from digitalhub.entities._commons.enums import EntityTypes
11
12
  from digitalhub.entities._processors.context import context_processor
12
- from digitalhub.entities.run.crud import delete_run, get_run, list_runs
13
- from digitalhub.entities.task.crud import delete_task
13
+ from digitalhub.entities.run.crud import list_runs
14
+ from digitalhub.entities.task.crud import delete_task, list_tasks
15
+ from digitalhub.entities.trigger.crud import list_triggers
14
16
  from digitalhub.factory.factory import factory
15
17
  from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError
16
18
 
@@ -123,13 +125,13 @@ class ExecutableEntity(VersionedEntity):
123
125
  if task_obj.spec.function == self._get_executable_string():
124
126
  self._tasks[task_obj.kind] = task_obj
125
127
 
126
- def new_task(self, task_kind: str, **kwargs) -> Task:
128
+ def new_task(self, kind: str, **kwargs) -> Task:
127
129
  """
128
130
  Create new task. If the task already exists, update it.
129
131
 
130
132
  Parameters
131
133
  ----------
132
- task_kind : str
134
+ kind : str
133
135
  Kind the object.
134
136
  **kwargs : dict
135
137
  Keyword arguments.
@@ -139,21 +141,18 @@ class ExecutableEntity(VersionedEntity):
139
141
  Task
140
142
  New task.
141
143
  """
142
- self._raise_if_exists(task_kind)
143
-
144
- if kwargs is None:
145
- kwargs = {}
144
+ self._raise_if_exists(kind)
146
145
 
147
146
  # Override kwargs
148
147
  kwargs["project"] = self.project
149
148
  kwargs[self.ENTITY_TYPE] = self._get_executable_string()
150
- kwargs["kind"] = task_kind
149
+ kwargs["kind"] = kind
151
150
 
152
151
  # Create object instance
153
152
  task: Task = factory.build_entity_from_params(**kwargs)
154
153
  task.save()
155
154
 
156
- self._tasks[task_kind] = task
155
+ self._tasks[kind] = task
157
156
  return task
158
157
 
159
158
  def get_task(self, kind: str) -> Task:
@@ -184,6 +183,23 @@ class ExecutableEntity(VersionedEntity):
184
183
  self._tasks[kind] = resp[0]
185
184
  return self._tasks[kind]
186
185
 
186
+ def list_task(self, **kwargs) -> list[Task]:
187
+ """
188
+ List tasks.
189
+
190
+ Parameters
191
+ ----------
192
+ **kwargs : dict
193
+ Keyword arguments.
194
+
195
+ Returns
196
+ -------
197
+ list
198
+ List of tasks.
199
+ """
200
+ kwargs["params"] = {self.ENTITY_TYPE: self._get_executable_string()}
201
+ return list_tasks(self.project, **kwargs)
202
+
187
203
  def update_task(self, kind: str, **kwargs) -> Task:
188
204
  """
189
205
  Update task.
@@ -202,9 +218,6 @@ class ExecutableEntity(VersionedEntity):
202
218
  """
203
219
  self._raise_if_not_exists(kind)
204
220
 
205
- if kwargs is None:
206
- kwargs = {}
207
-
208
221
  # Update kwargs
209
222
  kwargs["project"] = self.project
210
223
  kwargs["kind"] = kind
@@ -319,6 +332,12 @@ class ExecutableEntity(VersionedEntity):
319
332
  # Runs
320
333
  ##############################
321
334
 
335
+ @abstractmethod
336
+ def run(self, *args, **kwargs) -> Run:
337
+ """
338
+ Create and execute a new run.
339
+ """
340
+
322
341
  def get_run(
323
342
  self,
324
343
  identifier: str,
@@ -347,13 +366,14 @@ class ExecutableEntity(VersionedEntity):
347
366
  Using entity ID:
348
367
  >>> obj = executable.get_run("123")
349
368
  """
350
- obj = get_run(
351
- identifier=identifier,
352
- project=self.project,
353
- **kwargs,
354
- )
355
- self.refresh()
356
- return obj
369
+ entities = self.list_runs(**kwargs)
370
+ for entity in entities:
371
+ if getattr(entity.spec, self.ENTITY_TYPE) == self._get_executable_string():
372
+ if entity.id == identifier:
373
+ return entity
374
+ if entity.key == identifier:
375
+ return entity
376
+ raise EntityError(f"Run '{identifier}' does not exist or does not belong to this executable.")
357
377
 
358
378
  def list_runs(self, **kwargs) -> list[Run]:
359
379
  """
@@ -373,47 +393,20 @@ class ExecutableEntity(VersionedEntity):
373
393
  --------
374
394
  >>> objs = executable.list_runs()
375
395
  """
376
- if kwargs is None:
377
- kwargs = {}
378
396
  kwargs["params"] = {self.ENTITY_TYPE: self._get_executable_string()}
379
397
  return list_runs(self.project, **kwargs)
380
398
 
381
- def delete_run(
382
- self,
383
- identifier: str,
384
- **kwargs,
385
- ) -> None:
386
- """
387
- Delete run from backend.
388
-
389
- Parameters
390
- ----------
391
- identifier : str
392
- Entity key (store://...) or entity ID.
393
- **kwargs : dict
394
- Parameters to pass to the API call.
395
-
396
- Returns
397
- -------
398
- dict
399
- Response from backend.
400
-
401
- Examples
402
- --------
403
- >>> executable.delete_run("store://my-run-key")
404
-
405
- """
406
- delete_run(
407
- identifier=identifier,
408
- project=self.project,
409
- **kwargs,
410
- )
411
-
412
399
  ##############################
413
400
  # Trigger
414
401
  ##############################
415
402
 
416
- def trigger(self, action: str, trigger_kind: str, trigger_name: str, **kwargs) -> Trigger:
403
+ def trigger(
404
+ self,
405
+ action: str,
406
+ trigger_kind: str,
407
+ trigger_name: str,
408
+ **kwargs,
409
+ ) -> Trigger:
417
410
  """
418
411
  Trigger function.
419
412
 
@@ -439,9 +432,6 @@ class ExecutableEntity(VersionedEntity):
439
432
  # Get run validator for building trigger template
440
433
  run_kind = factory.get_run_kind(self.kind)
441
434
  run_validator: SpecValidator = factory.get_spec_validator(run_kind)
442
- if kwargs is None:
443
- kwargs = {}
444
-
445
435
  # Override kwargs
446
436
  kwargs["project"] = self.project
447
437
  kwargs["kind"] = trigger_kind
@@ -454,3 +444,61 @@ class ExecutableEntity(VersionedEntity):
454
444
  trigger: Trigger = factory.build_entity_from_params(**kwargs)
455
445
  trigger.save()
456
446
  return trigger
447
+
448
+ def get_trigger(
449
+ self,
450
+ identifier: str,
451
+ **kwargs,
452
+ ) -> Trigger:
453
+ """
454
+ Get object from backend.
455
+
456
+ Parameters
457
+ ----------
458
+ identifier : str
459
+ Entity key (store://...) or entity ID.
460
+ **kwargs : dict
461
+ Parameters to pass to the API call.
462
+
463
+ Returns
464
+ -------
465
+ Trigger
466
+ Object instance.
467
+
468
+ Examples
469
+ --------
470
+ Using entity key:
471
+ >>> obj = executable.get_trigger("store://my-trigger-key")
472
+
473
+ Using entity ID:
474
+ >>> obj = executable.get_trigger("123")
475
+ """
476
+ entities = self.list_triggers(**kwargs)
477
+ for entity in entities:
478
+ if getattr(entity.spec, self.ENTITY_TYPE) == self._get_executable_string():
479
+ if entity.id == identifier:
480
+ return entity
481
+ if entity.key == identifier:
482
+ return entity
483
+ raise EntityError(f"Trigger '{identifier}' does not exist or does not belong to this executable.")
484
+
485
+ def list_triggers(self, **kwargs) -> list[Trigger]:
486
+ """
487
+ List all triggers from backend.
488
+
489
+ Parameters
490
+ ----------
491
+ **kwargs : dict
492
+ Parameters to pass to the API call.
493
+
494
+ Returns
495
+ -------
496
+ list[Trigger]
497
+ List of object instances.
498
+
499
+ Examples
500
+ --------
501
+ >>> objs = executable.list_triggers()
502
+ """
503
+ kwargs["params"] = {self.ENTITY_TYPE: self._get_executable_string()}
504
+ return list_triggers(self.project, **kwargs)
@@ -82,10 +82,9 @@ class MaterialEntity(VersionedEntity):
82
82
  list[str]
83
83
  List of file paths.
84
84
  """
85
- store = get_store(self.project, self.spec.path)
86
- paths = self.get_file_paths()
85
+ store = get_store(self.spec.path)
87
86
  dst = store._build_temp()
88
- return store.download(self.spec.path, dst=dst, src=paths)
87
+ return store.download(self.spec.path, dst=dst)
89
88
 
90
89
  def download(
91
90
  self,
@@ -94,10 +93,7 @@ class MaterialEntity(VersionedEntity):
94
93
  ) -> str:
95
94
  """
96
95
  This function downloads one or more file from storage on local
97
- machine.
98
- It looks inside the object's status for the file(s) path under
99
- files attribute. If it does not find it, it will try to download
100
- what it can from spec.path.
96
+ machine from spec.path.
101
97
  The files are downloaded into a destination folder. If the destination
102
98
  is not specified, it will set by default under the context path
103
99
  as '<ctx-root>/<entity_type>', e.g. './dataitem'.
@@ -115,31 +111,24 @@ class MaterialEntity(VersionedEntity):
115
111
  Returns
116
112
  -------
117
113
  str
118
- Downloaded path.
114
+ Download path.
119
115
 
120
116
  Examples
121
117
  --------
122
118
  Download a single file:
123
119
 
124
- >>> entity.status.files[0]
125
- {
126
- "path ": "data.csv",
127
- "name ": "data.csv",
128
- "content_type ": "text/csv;charset=utf-8 "
129
- }
130
120
  >>> path = entity.download()
131
121
  >>> print(path)
132
122
  dataitem/data.csv
133
123
  """
134
- store = get_store(self.project, self.spec.path)
135
- paths = self.get_file_paths()
124
+ store = get_store(self.spec.path)
136
125
 
137
126
  if destination is None:
138
127
  dst = self._context().root / self.ENTITY_TYPE
139
128
  else:
140
129
  dst = Path(destination)
141
130
 
142
- return store.download(self.spec.path, dst=dst, src=paths, overwrite=overwrite)
131
+ return store.download(self.spec.path, dst, overwrite=overwrite)
143
132
 
144
133
  def upload(self, source: SourcesOrListOfSources) -> None:
145
134
  """
@@ -169,7 +158,7 @@ class MaterialEntity(VersionedEntity):
169
158
  >>> entity.upload('./data')
170
159
  """
171
160
  # Get store and upload object
172
- store = get_store(self.project, self.spec.path)
161
+ store = get_store(self.spec.path)
173
162
  paths = store.upload(source, self.spec.path)
174
163
 
175
164
  # Update files info
@@ -193,6 +182,10 @@ class MaterialEntity(VersionedEntity):
193
182
  -------
194
183
  None
195
184
  """
185
+ available = 100 - len(self.status.files)
186
+ if len(files) > available:
187
+ files = files[:available]
188
+
196
189
  path_list = self.get_file_paths()
197
190
  for f in files:
198
191
  if f.get("path") not in path_list:
@@ -6,7 +6,7 @@ from __future__ import annotations
6
6
 
7
7
  from pathlib import Path
8
8
 
9
- from digitalhub.stores.data.utils import get_default_store
9
+ from digitalhub.stores.data.api import get_default_store
10
10
  from digitalhub.utils.file_utils import eval_zip_type
11
11
  from digitalhub.utils.uri_utils import has_local_scheme
12
12
 
@@ -0,0 +1,202 @@
1
+ # SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Any, Union
8
+
9
+ from pydantic import BaseModel, ValidationError
10
+
11
+ MetricType = Union[float, int, list[Union[float, int]]]
12
+
13
+
14
+ class Metric(BaseModel):
15
+ """
16
+ Pydantic model for validating metric values.
17
+
18
+ This model ensures that metric values are of the correct type,
19
+ accepting single numeric values or lists of numeric values.
20
+
21
+ Attributes
22
+ ----------
23
+ value : MetricType
24
+ The metric value, which can be a float, int, or list of floats/ints.
25
+ """
26
+
27
+ value: MetricType
28
+
29
+
30
+ def validate_metric_value(value: Any) -> MetricType:
31
+ """
32
+ Validate and convert a value to a proper metric type.
33
+
34
+ Uses Pydantic validation to ensure the input value conforms to
35
+ the MetricType specification (float, int, or list of floats/ints).
36
+
37
+ Parameters
38
+ ----------
39
+ value : Any
40
+ The value to validate and convert.
41
+
42
+ Returns
43
+ -------
44
+ MetricType
45
+ The validated metric value.
46
+
47
+ Raises
48
+ ------
49
+ ValueError
50
+ If the value cannot be converted to a valid metric type.
51
+ """
52
+ try:
53
+ return Metric(value=value).value
54
+ except ValidationError as e:
55
+ raise ValueError("Invalid metric value. Must be a list of floats or ints or a float or an int.") from e
56
+
57
+
58
+ def set_metrics(
59
+ metrics: dict[str, MetricType],
60
+ key: str,
61
+ value: Any,
62
+ overwrite: bool,
63
+ single_value: bool,
64
+ ) -> dict[str, MetricType]:
65
+ """
66
+ Set or update a metric value in the metrics dictionary.
67
+
68
+ This function routes to appropriate handling based on the value type
69
+ and the single_value flag. It can handle single values, lists, and
70
+ appending to existing metrics.
71
+
72
+ Parameters
73
+ ----------
74
+ metrics : dict[str, MetricType]
75
+ The metrics dictionary to update.
76
+ key : str
77
+ The metric key to set or update.
78
+ value : Any
79
+ The value to set for the metric.
80
+ overwrite : bool
81
+ Whether to overwrite existing metrics.
82
+ single_value : bool
83
+ Whether to treat the value as a single metric rather than
84
+ appending to a list.
85
+
86
+ Returns
87
+ -------
88
+ dict[str, MetricType]
89
+ The updated metrics dictionary.
90
+ """
91
+ if isinstance(value, list):
92
+ return handle_metric_list(metrics, key, value, overwrite)
93
+ elif single_value:
94
+ return handle_metric_single(metrics, key, value, overwrite)
95
+ return handle_metric_list_append(metrics, key, value, overwrite)
96
+
97
+
98
+ def handle_metric_single(
99
+ metrics: dict[str, MetricType],
100
+ key: str,
101
+ value: float | int,
102
+ overwrite: bool,
103
+ ) -> dict:
104
+ """
105
+ Handle setting a single metric value.
106
+
107
+ Sets or overwrites a metric with a single numeric value. If the key
108
+ already exists and overwrite is False, the existing value is preserved.
109
+
110
+ Parameters
111
+ ----------
112
+ metrics : dict[str, MetricType]
113
+ The metrics dictionary to update.
114
+ key : str
115
+ The metric key to set.
116
+ value : float | int
117
+ The single numeric value to set.
118
+ overwrite : bool
119
+ Whether to overwrite an existing metric with the same key.
120
+
121
+ Returns
122
+ -------
123
+ dict
124
+ The updated metrics dictionary.
125
+ """
126
+ if key not in metrics or overwrite:
127
+ metrics[key] = value
128
+ return metrics
129
+
130
+
131
+ def handle_metric_list_append(
132
+ metrics: dict[str, MetricType],
133
+ key: str,
134
+ value: float | int,
135
+ overwrite: bool,
136
+ ) -> dict:
137
+ """
138
+ Handle appending a single value to a metric list.
139
+
140
+ If the metric doesn't exist or overwrite is True, creates a new list
141
+ with the single value. If the metric exists as a list, appends to it.
142
+ If the metric exists as a single value, converts it to a list and appends.
143
+
144
+ Parameters
145
+ ----------
146
+ metrics : dict[str, MetricType]
147
+ The metrics dictionary to update.
148
+ key : str
149
+ The metric key to append to.
150
+ value : float | int
151
+ The numeric value to append.
152
+ overwrite : bool
153
+ Whether to overwrite an existing metric instead of appending.
154
+
155
+ Returns
156
+ -------
157
+ dict
158
+ The updated metrics dictionary.
159
+ """
160
+ if key not in metrics or overwrite:
161
+ metrics[key] = [value]
162
+ elif isinstance(metrics[key], list):
163
+ metrics[key].append(value)
164
+ else:
165
+ metrics[key] = [metrics[key], value]
166
+ return metrics
167
+
168
+
169
+ def handle_metric_list(
170
+ metrics: dict[str, MetricType],
171
+ key: str,
172
+ value: list[int | float],
173
+ overwrite: bool,
174
+ ) -> dict:
175
+ """
176
+ Handle setting or extending a metric with a list of values.
177
+
178
+ If the metric doesn't exist or overwrite is True, sets the metric to
179
+ the provided list. If the metric exists and overwrite is False, extends
180
+ the existing list with the new values.
181
+
182
+ Parameters
183
+ ----------
184
+ metrics : dict[str, MetricType]
185
+ The metrics dictionary to update.
186
+ key : str
187
+ The metric key to set or extend.
188
+ value : list[int | float]
189
+ The list of numeric values to set or extend with.
190
+ overwrite : bool
191
+ Whether to overwrite an existing metric instead of extending it.
192
+
193
+ Returns
194
+ -------
195
+ dict
196
+ The updated metrics dictionary.
197
+ """
198
+ if key not in metrics or overwrite:
199
+ metrics[key] = value
200
+ else:
201
+ metrics[key].extend(value)
202
+ return metrics