zenml-nightly 0.62.0.dev20240729__py3-none-any.whl → 0.64.0.dev20240809__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. README.md +2 -2
  2. RELEASE_NOTES.md +120 -0
  3. zenml/VERSION +1 -1
  4. zenml/__init__.py +0 -4
  5. zenml/actions/pipeline_run/pipeline_run_action.py +19 -17
  6. zenml/analytics/enums.py +4 -6
  7. zenml/cli/__init__.py +28 -76
  8. zenml/cli/base.py +2 -2
  9. zenml/cli/pipeline.py +54 -61
  10. zenml/cli/stack.py +6 -8
  11. zenml/cli/web_login.py +8 -0
  12. zenml/client.py +232 -103
  13. zenml/config/build_configuration.py +43 -17
  14. zenml/config/compiler.py +14 -22
  15. zenml/config/docker_settings.py +80 -57
  16. zenml/config/pipeline_run_configuration.py +3 -0
  17. zenml/config/server_config.py +3 -0
  18. zenml/config/source.py +60 -1
  19. zenml/constants.py +11 -2
  20. zenml/entrypoints/base_entrypoint_configuration.py +53 -8
  21. zenml/enums.py +4 -1
  22. zenml/environment.py +25 -9
  23. zenml/image_builders/base_image_builder.py +1 -1
  24. zenml/image_builders/build_context.py +25 -72
  25. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +13 -4
  26. zenml/integrations/azure/__init__.py +4 -0
  27. zenml/integrations/azure/flavors/__init__.py +11 -0
  28. zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +263 -0
  29. zenml/{_hub → integrations/azure/orchestrators}/__init__.py +7 -2
  30. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +544 -0
  31. zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +86 -0
  32. zenml/integrations/azure/step_operators/azureml_step_operator.py +3 -0
  33. zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +20 -2
  34. zenml/integrations/databricks/orchestrators/databricks_orchestrator.py +19 -13
  35. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +7 -2
  36. zenml/integrations/gcp/service_connectors/gcp_service_connector.py +123 -6
  37. zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +1 -1
  38. zenml/integrations/mlflow/__init__.py +1 -1
  39. zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +3 -1
  40. zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +3 -0
  41. zenml/logger.py +13 -0
  42. zenml/models/__init__.py +26 -22
  43. zenml/models/v2/base/filter.py +32 -0
  44. zenml/models/v2/core/pipeline.py +73 -89
  45. zenml/models/v2/core/pipeline_build.py +15 -11
  46. zenml/models/v2/core/pipeline_deployment.py +72 -24
  47. zenml/models/v2/core/pipeline_run.py +65 -1
  48. zenml/models/v2/core/run_template.py +393 -0
  49. zenml/models/v2/core/server_settings.py +12 -0
  50. zenml/models/v2/core/user.py +0 -21
  51. zenml/models/v2/misc/server_models.py +7 -1
  52. zenml/models/v2/misc/stack_deployment.py +5 -0
  53. zenml/models/v2/misc/user_auth.py +0 -7
  54. zenml/new/pipelines/build_utils.py +220 -89
  55. zenml/new/pipelines/code_archive.py +157 -0
  56. zenml/new/pipelines/pipeline.py +46 -78
  57. zenml/new/pipelines/run_utils.py +79 -1
  58. zenml/post_execution/pipeline.py +1 -4
  59. zenml/service_connectors/service_connector_utils.py +18 -2
  60. zenml/stack_deployments/aws_stack_deployment.py +32 -8
  61. zenml/stack_deployments/azure_stack_deployment.py +122 -10
  62. zenml/stack_deployments/gcp_stack_deployment.py +36 -7
  63. zenml/stack_deployments/stack_deployment.py +23 -7
  64. zenml/steps/base_step.py +3 -0
  65. zenml/steps/utils.py +0 -4
  66. zenml/utils/archivable.py +149 -0
  67. zenml/utils/code_utils.py +244 -0
  68. zenml/utils/notebook_utils.py +122 -0
  69. zenml/utils/package_utils.py +39 -0
  70. zenml/utils/pipeline_docker_image_builder.py +3 -96
  71. zenml/utils/source_utils.py +109 -1
  72. zenml/zen_server/dashboard/assets/{404-B_YdvmwS.js → 404-CRAA_Lew.js} +1 -1
  73. zenml/zen_server/dashboard/assets/@radix-BXWm7HOa.js +85 -0
  74. zenml/zen_server/dashboard/assets/{@react-router-CO-OsFwI.js → @react-router-l3lMcXA2.js} +1 -1
  75. zenml/zen_server/dashboard/assets/{@reactflow-l_1hUr1S.js → @reactflow-CeVxyqYT.js} +2 -2
  76. zenml/zen_server/dashboard/assets/{@tanstack-DYiOyJUL.js → @tanstack-FmcYZMuX.js} +4 -4
  77. zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-ErO9aOgK.js +1 -0
  78. zenml/zen_server/dashboard/assets/{AwarenessChannel-CFg5iX4Z.js → AwarenessChannel-CLXo5rKM.js} +1 -1
  79. zenml/zen_server/dashboard/assets/{CodeSnippet-Dvkx_82E.js → CodeSnippet-D0VLxT2A.js} +2 -2
  80. zenml/zen_server/dashboard/assets/CollapsibleCard-BaUPiVg0.js +1 -0
  81. zenml/zen_server/dashboard/assets/{Commands-DoN1xrEq.js → Commands-JrcZK-3j.js} +1 -1
  82. zenml/zen_server/dashboard/assets/CopyButton-Dbo52T1K.js +2 -0
  83. zenml/zen_server/dashboard/assets/{CsvVizualization-Ck-nZ43m.js → CsvVizualization-D3kAypDj.js} +3 -3
  84. zenml/zen_server/dashboard/assets/DisplayDate-DizbSeT-.js +1 -0
  85. zenml/zen_server/dashboard/assets/EditSecretDialog-Bd7mFLS4.js +1 -0
  86. zenml/zen_server/dashboard/assets/{EmptyState-BMLnFVlB.js → EmptyState-BHblM39I.js} +1 -1
  87. zenml/zen_server/dashboard/assets/{Error-kLtljEOM.js → Error-C6LeJSER.js} +1 -1
  88. zenml/zen_server/dashboard/assets/{ExecutionStatus-DguLLgTK.js → ExecutionStatus-jH4OrWBq.js} +1 -1
  89. zenml/zen_server/dashboard/assets/{Helpbox-BXUMP21n.js → Helpbox-aAB2XP-z.js} +1 -1
  90. zenml/zen_server/dashboard/assets/{Infobox-DSt0O-dm.js → Infobox-BQ0aty32.js} +1 -1
  91. zenml/zen_server/dashboard/assets/{InlineAvatar-xsrsIGE-.js → InlineAvatar-DpTLgM3Q.js} +1 -1
  92. zenml/zen_server/dashboard/assets/Lock-CNyJvf2r.js +1 -0
  93. zenml/zen_server/dashboard/assets/{MarkdownVisualization-xp3hhULl.js → MarkdownVisualization-Bajxn0HY.js} +1 -1
  94. zenml/zen_server/dashboard/assets/NumberBox-BmKE0qnO.js +1 -0
  95. zenml/zen_server/dashboard/assets/{PasswordChecker-DUveqlva.js → PasswordChecker-yGGoJSB-.js} +1 -1
  96. zenml/zen_server/dashboard/assets/ProviderRadio-BBqkIuTd.js +1 -0
  97. zenml/zen_server/dashboard/assets/RadioItem-xLhXoiFV.js +1 -0
  98. zenml/zen_server/dashboard/assets/SearchField-C9R0mdaX.js +1 -0
  99. zenml/zen_server/dashboard/assets/{SetPassword-BXGTWiwj.js → SetPassword-52sNxNiO.js} +1 -1
  100. zenml/zen_server/dashboard/assets/{SuccessStep-DZC60t0x.js → SuccessStep-DlkItqYG.js} +1 -1
  101. zenml/zen_server/dashboard/assets/Tick-uxv80Q6a.js +1 -0
  102. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DGvwFWO1.js → UpdatePasswordSchemas-oN4G3sKz.js} +1 -1
  103. zenml/zen_server/dashboard/assets/{aws-BgKTfTfx.js → aws-0_3UsPif.js} +1 -1
  104. zenml/zen_server/dashboard/assets/{check-circle-i56092KI.js → check-circle-1_I207rW.js} +1 -1
  105. zenml/zen_server/dashboard/assets/chevron-down-BpaF8JqM.js +1 -0
  106. zenml/zen_server/dashboard/assets/{chevron-right-double-CZBOf6JM.js → chevron-right-double-Dk8e2L99.js} +1 -1
  107. zenml/zen_server/dashboard/assets/{cloud-only-C_yFCAkP.js → cloud-only-BkUuI0lZ.js} +1 -1
  108. zenml/zen_server/dashboard/assets/components-Br2ezRib.js +1 -0
  109. zenml/zen_server/dashboard/assets/{copy-BXNk6BjL.js → copy-f3XGPPxt.js} +1 -1
  110. zenml/zen_server/dashboard/assets/{database-1xWSgZfO.js → database-cXYNX9tt.js} +1 -1
  111. zenml/zen_server/dashboard/assets/{docker-CQMVm_4d.js → docker-8uj__HHK.js} +1 -1
  112. zenml/zen_server/dashboard/assets/dots-horizontal-sKQlWEni.js +1 -0
  113. zenml/zen_server/dashboard/assets/edit-C0MVvPD2.js +1 -0
  114. zenml/zen_server/dashboard/assets/{file-text-CqD_iu6l.js → file-text-B9JibxTs.js} +1 -1
  115. zenml/zen_server/dashboard/assets/{help-bu_DgLKI.js → help-FuHlZwn0.js} +1 -1
  116. zenml/zen_server/dashboard/assets/{index-rK_Wuy2W.js → index-Bd1xgUQG.js} +1 -1
  117. zenml/zen_server/dashboard/assets/index-DaGknux4.css +1 -0
  118. zenml/zen_server/dashboard/assets/{index-BczVOqUf.js → index-DhIZtpxB.js} +5 -5
  119. zenml/zen_server/dashboard/assets/index.esm-DT4uyn2i.js +1 -0
  120. zenml/zen_server/dashboard/assets/layout-D6oiSbfd.js +1 -0
  121. zenml/zen_server/dashboard/assets/{login-mutation-CrHrndTI.js → login-mutation-13A_JSVA.js} +1 -1
  122. zenml/zen_server/dashboard/assets/{logs-D8k8BVFf.js → logs-CgeE2vZP.js} +1 -1
  123. zenml/zen_server/dashboard/assets/{not-found-DYa4pC-C.js → not-found-B0Mmb90p.js} +1 -1
  124. zenml/zen_server/dashboard/assets/package-DdkziX79.js +1 -0
  125. zenml/zen_server/dashboard/assets/page-7-v2OBm-.js +1 -0
  126. zenml/zen_server/dashboard/assets/{page-MFQyIJd3.js → page-B3ozwdD1.js} +1 -1
  127. zenml/zen_server/dashboard/assets/{page-BkuQDIf-.js → page-BGwA9B1M.js} +1 -1
  128. zenml/zen_server/dashboard/assets/{page-1iL8aMqs.js → page-BkjAUyTA.js} +1 -1
  129. zenml/zen_server/dashboard/assets/page-BnacgBiy.js +1 -0
  130. zenml/zen_server/dashboard/assets/page-BxF_KMQ3.js +2 -0
  131. zenml/zen_server/dashboard/assets/page-C4POHC0K.js +1 -0
  132. zenml/zen_server/dashboard/assets/page-C9kudd44.js +9 -0
  133. zenml/zen_server/dashboard/assets/page-CA1j3GpJ.js +1 -0
  134. zenml/zen_server/dashboard/assets/page-CCY6yfmu.js +1 -0
  135. zenml/zen_server/dashboard/assets/page-CgTe7Bme.js +1 -0
  136. zenml/zen_server/dashboard/assets/{page-8a4UMKXZ.js → page-Cgn-6v2Y.js} +1 -1
  137. zenml/zen_server/dashboard/assets/page-CxQmQqDw.js +1 -0
  138. zenml/zen_server/dashboard/assets/page-D2Goey3H.js +1 -0
  139. zenml/zen_server/dashboard/assets/page-DLpOnf7u.js +1 -0
  140. zenml/zen_server/dashboard/assets/{page-BhgCDInH.js → page-DSTQnBk-.js} +1 -1
  141. zenml/zen_server/dashboard/assets/{page-1h_sD1jz.js → page-DTysUGOy.js} +1 -1
  142. zenml/zen_server/dashboard/assets/{page-2grKx_MY.js → page-D_EXUFJb.js} +1 -1
  143. zenml/zen_server/dashboard/assets/page-Db15QzsM.js +1 -0
  144. zenml/zen_server/dashboard/assets/{page-BDns21Iz.js → page-DugsjcQ_.js} +1 -1
  145. zenml/zen_server/dashboard/assets/{page-C6-UGEbH.js → page-OFKSPyN7.js} +1 -1
  146. zenml/zen_server/dashboard/assets/{page-BkeAAYwp.js → page-RnG-qhv9.js} +1 -1
  147. zenml/zen_server/dashboard/assets/{page-CCNRIt_f.js → page-T2BtjwPl.js} +1 -1
  148. zenml/zen_server/dashboard/assets/page-TXe1Eo3Z.js +1 -0
  149. zenml/zen_server/dashboard/assets/{page-BnaevhnB.js → page-YiF_fNbe.js} +1 -1
  150. zenml/zen_server/dashboard/assets/{page-uA5prJGY.js → page-hQaiQXfg.js} +1 -1
  151. zenml/zen_server/dashboard/assets/persist-3-5nOJ6m.js +1 -0
  152. zenml/zen_server/dashboard/assets/{play-circle-CNtZKDnW.js → play-circle-XSkLR12B.js} +1 -1
  153. zenml/zen_server/dashboard/assets/plus-FB9-lEq_.js +1 -0
  154. zenml/zen_server/dashboard/assets/refresh-COb6KYDi.js +1 -0
  155. zenml/zen_server/dashboard/assets/sharedSchema-BoYx_B_L.js +14 -0
  156. zenml/zen_server/dashboard/assets/{stack-detail-query-Cficsl6d.js → stack-detail-query-B-US_-wa.js} +1 -1
  157. zenml/zen_server/dashboard/assets/{terminal-By9cErXc.js → terminal-grtjrIEJ.js} +1 -1
  158. zenml/zen_server/dashboard/assets/trash-Cd5CSFqA.js +1 -0
  159. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-7d8xi1tS.js → update-server-settings-mutation-B8GB_ubU.js} +1 -1
  160. zenml/zen_server/dashboard/assets/{url-D7mAQGUM.js → url-hcMJkz8p.js} +1 -1
  161. zenml/zen_server/dashboard/assets/{zod-BhoGpZ63.js → zod-CnykDKJj.js} +1 -1
  162. zenml/zen_server/dashboard/index.html +7 -7
  163. zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
  164. zenml/zen_server/dashboard_legacy/index.html +1 -1
  165. zenml/zen_server/dashboard_legacy/{precache-manifest.12246c7548e71e2c4438e496360de80c.js → precache-manifest.9c473c96a43298343a7ce1256183123b.js} +4 -4
  166. zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
  167. zenml/zen_server/dashboard_legacy/static/js/{main.3b27024b.chunk.js → main.463c90b9.chunk.js} +2 -2
  168. zenml/zen_server/dashboard_legacy/static/js/{main.3b27024b.chunk.js.map → main.463c90b9.chunk.js.map} +1 -1
  169. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  170. zenml/zen_server/deploy/helm/README.md +2 -2
  171. zenml/zen_server/rbac/models.py +1 -0
  172. zenml/zen_server/rbac/utils.py +4 -0
  173. zenml/zen_server/routers/pipeline_builds_endpoints.py +2 -66
  174. zenml/zen_server/routers/pipeline_deployments_endpoints.py +2 -53
  175. zenml/zen_server/routers/pipelines_endpoints.py +1 -74
  176. zenml/zen_server/routers/run_templates_endpoints.py +212 -0
  177. zenml/zen_server/routers/stack_deployment_endpoints.py +6 -0
  178. zenml/zen_server/routers/users_endpoints.py +0 -7
  179. zenml/zen_server/routers/workspaces_endpoints.py +79 -0
  180. zenml/zen_server/{pipeline_deployment → template_execution}/runner_entrypoint_configuration.py +1 -8
  181. zenml/zen_server/{pipeline_deployment → template_execution}/utils.py +214 -92
  182. zenml/zen_server/utils.py +77 -2
  183. zenml/zen_server/zen_server_api.py +54 -2
  184. zenml/zen_stores/base_zen_store.py +7 -1
  185. zenml/zen_stores/migrations/versions/0.63.0_release.py +23 -0
  186. zenml/zen_stores/migrations/versions/0.64.0_release.py +23 -0
  187. zenml/zen_stores/migrations/versions/026d4577b6a0_add_code_path.py +39 -0
  188. zenml/zen_stores/migrations/versions/3dcc5d20e82f_add_last_user_activity.py +51 -0
  189. zenml/zen_stores/migrations/versions/7d1919bb1ef0_add_run_templates.py +100 -0
  190. zenml/zen_stores/migrations/versions/909550c7c4da_remove_user_hub_token.py +36 -0
  191. zenml/zen_stores/migrations/versions/b59aa68fdb1f_simplify_pipelines.py +139 -0
  192. zenml/zen_stores/rest_zen_store.py +112 -39
  193. zenml/zen_stores/schemas/__init__.py +2 -0
  194. zenml/zen_stores/schemas/pipeline_build_schemas.py +3 -3
  195. zenml/zen_stores/schemas/pipeline_deployment_schemas.py +32 -2
  196. zenml/zen_stores/schemas/pipeline_run_schemas.py +29 -3
  197. zenml/zen_stores/schemas/pipeline_schemas.py +29 -30
  198. zenml/zen_stores/schemas/run_template_schemas.py +264 -0
  199. zenml/zen_stores/schemas/server_settings_schemas.py +2 -0
  200. zenml/zen_stores/schemas/step_run_schemas.py +11 -4
  201. zenml/zen_stores/schemas/user_schemas.py +0 -2
  202. zenml/zen_stores/sql_zen_store.py +389 -151
  203. zenml/zen_stores/template_utils.py +261 -0
  204. zenml/zen_stores/zen_store_interface.py +93 -20
  205. {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/METADATA +3 -3
  206. {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/RECORD +211 -184
  207. zenml/_hub/client.py +0 -289
  208. zenml/_hub/constants.py +0 -21
  209. zenml/_hub/utils.py +0 -79
  210. zenml/cli/hub.py +0 -1116
  211. zenml/models/v2/core/pipeline_namespace.py +0 -113
  212. zenml/models/v2/misc/hub_plugin_models.py +0 -79
  213. zenml/new/pipelines/deserialization_utils.py +0 -292
  214. zenml/zen_server/dashboard/assets/@radix-CFOkMR_E.js +0 -85
  215. zenml/zen_server/dashboard/assets/CollapsibleCard-opiuBHHc.js +0 -1
  216. zenml/zen_server/dashboard/assets/CopyButton-Cr7xYEPb.js +0 -2
  217. zenml/zen_server/dashboard/assets/DisplayDate-DYgIjlDF.js +0 -1
  218. zenml/zen_server/dashboard/assets/Pagination-C6X-mifw.js +0 -1
  219. zenml/zen_server/dashboard/assets/index-EpMIKgrI.css +0 -1
  220. zenml/zen_server/dashboard/assets/index.esm-Corw4lXQ.js +0 -1
  221. zenml/zen_server/dashboard/assets/package-B3fWP-Dh.js +0 -1
  222. zenml/zen_server/dashboard/assets/page-5NCOHOsy.js +0 -1
  223. zenml/zen_server/dashboard/assets/page-B6h3iaHJ.js +0 -1
  224. zenml/zen_server/dashboard/assets/page-Bi-wtWiO.js +0 -5
  225. zenml/zen_server/dashboard/assets/page-Bq0YxkLV.js +0 -1
  226. zenml/zen_server/dashboard/assets/page-Bs2F4eoD.js +0 -2
  227. zenml/zen_server/dashboard/assets/page-CHNxpz3n.js +0 -1
  228. zenml/zen_server/dashboard/assets/page-DgorQFqi.js +0 -1
  229. zenml/zen_server/dashboard/assets/page-K8ebxVIs.js +0 -1
  230. zenml/zen_server/dashboard/assets/page-TgCF0P_U.js +0 -1
  231. zenml/zen_server/dashboard/assets/page-ZnCEe-eK.js +0 -9
  232. zenml/zen_server/dashboard/assets/persist-D7HJNBWx.js +0 -1
  233. zenml/zen_server/dashboard/assets/plus-C8WOyCzt.js +0 -1
  234. zenml/zen_server/dashboard/assets/secrets-video-OBJ6irhH.svg +0 -21
  235. zenml/zen_server/dashboard/assets/stacks-video-7gfxpAq4.svg +0 -21
  236. /zenml/zen_server/{pipeline_deployment → template_execution}/__init__.py +0 -0
  237. /zenml/zen_server/{pipeline_deployment → template_execution}/workload_manager_interface.py +0 -0
  238. {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/LICENSE +0 -0
  239. {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/WHEEL +0 -0
  240. {zenml_nightly-0.62.0.dev20240729.dist-info → zenml_nightly-0.64.0.dev20240809.dist-info}/entry_points.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  apiVersion: v2
2
2
  name: zenml
3
- version: "0.62.0"
3
+ version: "0.64.0"
4
4
  description: Open source MLOps framework for portable production ready ML pipelines
5
5
  keywords:
6
6
  - mlops
@@ -20,8 +20,8 @@ ZenML is an open-source MLOps framework designed to help you create robust, main
20
20
  To install the ZenML chart directly from Amazon ECR, use the following command:
21
21
 
22
22
  ```bash
23
- # example command for version 0.62.0
24
- helm install my-zenml oci://public.ecr.aws/zenml/zenml --version 0.62.0
23
+ # example command for version 0.64.0
24
+ helm install my-zenml oci://public.ecr.aws/zenml/zenml --version 0.64.0
25
25
  ```
26
26
 
27
27
  Note: Ensure you have OCI support enabled in your Helm client and that you are authenticated with Amazon ECR.
@@ -58,6 +58,7 @@ class ResourceType(StrEnum):
58
58
  PIPELINE_RUN = "pipeline_run"
59
59
  PIPELINE_DEPLOYMENT = "pipeline_deployment"
60
60
  PIPELINE_BUILD = "pipeline_build"
61
+ RUN_TEMPLATE = "run_template"
61
62
  USER = "user"
62
63
  SERVICE = "service"
63
64
  RUN_METADATA = "run_metadata"
@@ -405,6 +405,7 @@ def get_resource_type_for_model(
405
405
  PipelineResponse,
406
406
  PipelineRunResponse,
407
407
  RunMetadataResponse,
408
+ RunTemplateResponse,
408
409
  SecretResponse,
409
410
  ServiceAccountResponse,
410
411
  ServiceConnectorResponse,
@@ -440,6 +441,7 @@ def get_resource_type_for_model(
440
441
  PipelineDeploymentResponse: ResourceType.PIPELINE_DEPLOYMENT,
441
442
  PipelineBuildResponse: ResourceType.PIPELINE_BUILD,
442
443
  PipelineRunResponse: ResourceType.PIPELINE_RUN,
444
+ RunTemplateResponse: ResourceType.RUN_TEMPLATE,
443
445
  TagResponse: ResourceType.TAG,
444
446
  TriggerResponse: ResourceType.TRIGGER,
445
447
  TriggerExecutionResponse: ResourceType.TRIGGER_EXECUTION,
@@ -556,6 +558,7 @@ def get_schema_for_resource_type(
556
558
  PipelineRunSchema,
557
559
  PipelineSchema,
558
560
  RunMetadataSchema,
561
+ RunTemplateSchema,
559
562
  SecretSchema,
560
563
  ServiceConnectorSchema,
561
564
  ServiceSchema,
@@ -587,6 +590,7 @@ def get_schema_for_resource_type(
587
590
  ResourceType.PIPELINE_RUN: PipelineRunSchema,
588
591
  ResourceType.PIPELINE_DEPLOYMENT: PipelineDeploymentSchema,
589
592
  ResourceType.PIPELINE_BUILD: PipelineBuildSchema,
593
+ ResourceType.RUN_TEMPLATE: RunTemplateSchema,
590
594
  ResourceType.RUN_METADATA: RunMetadataSchema,
591
595
  ResourceType.USER: UserSchema,
592
596
  ResourceType.ACTION: ActionSchema,
@@ -13,18 +13,15 @@
13
13
  # permissions and limitations under the License.
14
14
  """Endpoint definitions for builds."""
15
15
 
16
- from typing import Optional
17
16
  from uuid import UUID
18
17
 
19
- from fastapi import APIRouter, BackgroundTasks, Depends, Security
18
+ from fastapi import APIRouter, Depends, Security
20
19
 
21
- from zenml.config.pipeline_run_configuration import PipelineRunConfiguration
22
20
  from zenml.constants import API, PIPELINE_BUILDS, VERSION_1
23
21
  from zenml.models import (
24
22
  Page,
25
23
  PipelineBuildFilter,
26
24
  PipelineBuildResponse,
27
- PipelineRunResponse,
28
25
  )
29
26
  from zenml.zen_server.auth import AuthContext, authorize
30
27
  from zenml.zen_server.exceptions import error_response
@@ -33,12 +30,10 @@ from zenml.zen_server.rbac.endpoint_utils import (
33
30
  verify_permissions_and_get_entity,
34
31
  verify_permissions_and_list_entities,
35
32
  )
36
- from zenml.zen_server.rbac.models import Action, ResourceType
37
- from zenml.zen_server.rbac.utils import verify_permission
33
+ from zenml.zen_server.rbac.models import ResourceType
38
34
  from zenml.zen_server.utils import (
39
35
  handle_exceptions,
40
36
  make_dependable,
41
- server_config,
42
37
  zen_store,
43
38
  )
44
39
 
@@ -126,62 +121,3 @@ def delete_build(
126
121
  get_method=zen_store().get_build,
127
122
  delete_method=zen_store().delete_build,
128
123
  )
129
-
130
-
131
- if server_config().workload_manager_enabled:
132
-
133
- @router.post(
134
- "/{build_id}/runs",
135
- responses={
136
- 401: error_response,
137
- 404: error_response,
138
- 422: error_response,
139
- },
140
- )
141
- @handle_exceptions
142
- def run_build(
143
- build_id: UUID,
144
- background_tasks: BackgroundTasks,
145
- config: Optional[PipelineRunConfiguration] = None,
146
- auth_context: AuthContext = Security(authorize),
147
- ) -> PipelineRunResponse:
148
- """Run a pipeline from a pipeline build.
149
-
150
- Args:
151
- build_id: The ID of the build.
152
- background_tasks: Background tasks.
153
- config: Configuration for the pipeline run.
154
- auth_context: Authentication context.
155
-
156
- Raises:
157
- ValueError: If the build does not have an associated deployment.
158
-
159
- Returns:
160
- The created run.
161
- """
162
- from zenml.zen_server.pipeline_deployment.utils import (
163
- run_pipeline,
164
- )
165
-
166
- build = verify_permissions_and_get_entity(
167
- id=build_id, get_method=zen_store().get_build, hydrate=True
168
- )
169
-
170
- verify_permission(
171
- resource_type=ResourceType.PIPELINE_RUN, action=Action.CREATE
172
- )
173
-
174
- if not build.template_deployment_id:
175
- raise ValueError("Build does not have template deployment.")
176
-
177
- deployment = zen_store().get_deployment(
178
- deployment_id=build.template_deployment_id, hydrate=True
179
- )
180
- deployment.get_metadata().build = build
181
-
182
- return run_pipeline(
183
- deployment=deployment,
184
- run_config=config,
185
- background_tasks=background_tasks,
186
- auth_context=auth_context,
187
- )
@@ -13,18 +13,15 @@
13
13
  # permissions and limitations under the License.
14
14
  """Endpoint definitions for deployments."""
15
15
 
16
- from typing import Optional
17
16
  from uuid import UUID
18
17
 
19
- from fastapi import APIRouter, BackgroundTasks, Depends, Security
18
+ from fastapi import APIRouter, Depends, Security
20
19
 
21
- from zenml.config.pipeline_run_configuration import PipelineRunConfiguration
22
20
  from zenml.constants import API, PIPELINE_DEPLOYMENTS, VERSION_1
23
21
  from zenml.models import (
24
22
  Page,
25
23
  PipelineDeploymentFilter,
26
24
  PipelineDeploymentResponse,
27
- PipelineRunResponse,
28
25
  )
29
26
  from zenml.zen_server.auth import AuthContext, authorize
30
27
  from zenml.zen_server.exceptions import error_response
@@ -33,8 +30,7 @@ from zenml.zen_server.rbac.endpoint_utils import (
33
30
  verify_permissions_and_get_entity,
34
31
  verify_permissions_and_list_entities,
35
32
  )
36
- from zenml.zen_server.rbac.models import Action, ResourceType
37
- from zenml.zen_server.rbac.utils import verify_permission
33
+ from zenml.zen_server.rbac.models import ResourceType
38
34
  from zenml.zen_server.utils import (
39
35
  handle_exceptions,
40
36
  make_dependable,
@@ -133,53 +129,6 @@ def delete_deployment(
133
129
 
134
130
  if server_config().workload_manager_enabled:
135
131
 
136
- @router.post(
137
- "/{deployment_id}/runs",
138
- responses={
139
- 401: error_response,
140
- 404: error_response,
141
- 422: error_response,
142
- },
143
- )
144
- @handle_exceptions
145
- def create_deployment_run(
146
- deployment_id: UUID,
147
- background_tasks: BackgroundTasks,
148
- config: Optional[PipelineRunConfiguration] = None,
149
- auth_context: AuthContext = Security(authorize),
150
- ) -> PipelineRunResponse:
151
- """Run a pipeline from a pipeline deployment.
152
-
153
- Args:
154
- deployment_id: The ID of the deployment.
155
- background_tasks: Background tasks.
156
- config: Configuration for the pipeline run.
157
- auth_context: Authentication context.
158
-
159
- Returns:
160
- The created run.
161
- """
162
- from zenml.zen_server.pipeline_deployment.utils import (
163
- run_pipeline,
164
- )
165
-
166
- deployment = verify_permissions_and_get_entity(
167
- id=deployment_id,
168
- get_method=zen_store().get_deployment,
169
- hydrate=True,
170
- )
171
-
172
- verify_permission(
173
- resource_type=ResourceType.PIPELINE_RUN, action=Action.CREATE
174
- )
175
-
176
- return run_pipeline(
177
- deployment=deployment,
178
- run_config=config,
179
- background_tasks=background_tasks,
180
- auth_context=auth_context,
181
- )
182
-
183
132
  @router.get(
184
133
  "/{deployment_id}/logs",
185
134
  responses={
@@ -17,10 +17,8 @@ from uuid import UUID
17
17
 
18
18
  from fastapi import APIRouter, Depends, Security
19
19
 
20
- from zenml.config.pipeline_spec import PipelineSpec
21
20
  from zenml.constants import (
22
21
  API,
23
- PIPELINE_SPEC,
24
22
  PIPELINES,
25
23
  REPORTABLE_RESOURCES,
26
24
  RUNS,
@@ -29,8 +27,6 @@ from zenml.constants import (
29
27
  from zenml.models import (
30
28
  Page,
31
29
  PipelineFilter,
32
- PipelineNamespaceFilter,
33
- PipelineNamespaceResponse,
34
30
  PipelineResponse,
35
31
  PipelineRunFilter,
36
32
  PipelineRunResponse,
@@ -46,9 +42,6 @@ from zenml.zen_server.rbac.endpoint_utils import (
46
42
  verify_permissions_and_update_entity,
47
43
  )
48
44
  from zenml.zen_server.rbac.models import ResourceType
49
- from zenml.zen_server.rbac.utils import (
50
- get_allowed_resource_ids,
51
- )
52
45
  from zenml.zen_server.utils import (
53
46
  handle_exceptions,
54
47
  make_dependable,
@@ -64,7 +57,6 @@ router = APIRouter(
64
57
 
65
58
  @router.get(
66
59
  "",
67
- response_model=Page[PipelineResponse],
68
60
  responses={401: error_response, 404: error_response, 422: error_response},
69
61
  )
70
62
  @handle_exceptions
@@ -96,7 +88,6 @@ def list_pipelines(
96
88
 
97
89
  @router.get(
98
90
  "/{pipeline_id}",
99
- response_model=PipelineResponse,
100
91
  responses={401: error_response, 404: error_response, 422: error_response},
101
92
  )
102
93
  @handle_exceptions
@@ -122,7 +113,6 @@ def get_pipeline(
122
113
 
123
114
  @router.put(
124
115
  "/{pipeline_id}",
125
- response_model=PipelineResponse,
126
116
  responses={401: error_response, 404: error_response, 422: error_response},
127
117
  )
128
118
  @handle_exceptions
@@ -179,7 +169,6 @@ def delete_pipeline(
179
169
 
180
170
  @router.get(
181
171
  "/{pipeline_id}" + RUNS,
182
- response_model=Page[PipelineRunResponse],
183
172
  responses={401: error_response, 404: error_response, 422: error_response},
184
173
  )
185
174
  @handle_exceptions
@@ -201,66 +190,4 @@ def list_pipeline_runs(
201
190
  Returns:
202
191
  The pipeline runs according to query filters.
203
192
  """
204
- return zen_store().list_runs(pipeline_run_filter_model)
205
-
206
-
207
- @router.get(
208
- "/{pipeline_id}" + PIPELINE_SPEC,
209
- response_model=PipelineSpec,
210
- responses={401: error_response, 404: error_response, 422: error_response},
211
- )
212
- @handle_exceptions
213
- def get_pipeline_spec(
214
- pipeline_id: UUID,
215
- _: AuthContext = Security(authorize),
216
- ) -> PipelineSpec:
217
- """Gets the spec of a specific pipeline using its unique id.
218
-
219
- Args:
220
- pipeline_id: ID of the pipeline to get.
221
-
222
- Returns:
223
- The spec of the pipeline.
224
- """
225
- pipeline = verify_permissions_and_get_entity(
226
- id=pipeline_id, get_method=zen_store().get_pipeline
227
- )
228
- return pipeline.spec
229
-
230
-
231
- namespace_router = APIRouter(
232
- prefix=API + VERSION_1 + "/pipeline_namespaces",
233
- tags=["pipeline_namespaces"],
234
- responses={401: error_response, 403: error_response},
235
- )
236
-
237
-
238
- @namespace_router.get(
239
- "",
240
- responses={401: error_response, 404: error_response, 422: error_response},
241
- )
242
- @handle_exceptions
243
- def list_pipeline_namespaces(
244
- filter_model: PipelineNamespaceFilter = Depends(
245
- make_dependable(PipelineNamespaceFilter)
246
- ),
247
- hydrate: bool = False,
248
- auth_context: AuthContext = Security(authorize),
249
- ) -> Page[PipelineNamespaceResponse]:
250
- """Gets a list of pipeline namespaces.
251
-
252
- Args:
253
- filter_model: Filter model used for pagination, sorting,
254
- filtering.
255
- hydrate: Flag deciding whether to hydrate the output model(s)
256
- by including metadata fields in the response.
257
- auth_context: Authentication context.
258
-
259
- Returns:
260
- List of pipeline namespace objects.
261
- """
262
- allowed_ids = get_allowed_resource_ids(resource_type=ResourceType.PIPELINE)
263
- filter_model.configure_rbac(
264
- authenticated_user_id=auth_context.user.id, id=allowed_ids
265
- )
266
- return zen_store().list_pipeline_namespaces(filter_model, hydrate=hydrate)
193
+ return zen_store().list_runs(pipeline_run_filter_model, hydrate=hydrate)
@@ -0,0 +1,212 @@
1
+ # Copyright (c) ZenML GmbH 2024. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at:
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12
+ # or implied. See the License for the specific language governing
13
+ # permissions and limitations under the License.
14
+ """Endpoint definitions for run templates."""
15
+
16
+ from typing import Optional
17
+ from uuid import UUID
18
+
19
+ from fastapi import APIRouter, BackgroundTasks, Depends, Security
20
+
21
+ from zenml.analytics.enums import AnalyticsEvent
22
+ from zenml.analytics.utils import track_handler
23
+ from zenml.config.pipeline_run_configuration import PipelineRunConfiguration
24
+ from zenml.constants import API, RUN_TEMPLATES, VERSION_1
25
+ from zenml.models import (
26
+ Page,
27
+ PipelineRunResponse,
28
+ RunTemplateFilter,
29
+ RunTemplateResponse,
30
+ RunTemplateUpdate,
31
+ )
32
+ from zenml.zen_server.auth import AuthContext, authorize
33
+ from zenml.zen_server.exceptions import error_response
34
+ from zenml.zen_server.rbac.endpoint_utils import (
35
+ verify_permissions_and_delete_entity,
36
+ verify_permissions_and_get_entity,
37
+ verify_permissions_and_list_entities,
38
+ verify_permissions_and_update_entity,
39
+ )
40
+ from zenml.zen_server.rbac.models import Action, ResourceType
41
+ from zenml.zen_server.rbac.utils import verify_permission
42
+ from zenml.zen_server.utils import (
43
+ handle_exceptions,
44
+ make_dependable,
45
+ server_config,
46
+ zen_store,
47
+ )
48
+
49
+ router = APIRouter(
50
+ prefix=API + VERSION_1 + RUN_TEMPLATES,
51
+ tags=["run_templates"],
52
+ responses={401: error_response, 403: error_response},
53
+ )
54
+
55
+
56
+ @router.get(
57
+ "",
58
+ responses={401: error_response, 404: error_response, 422: error_response},
59
+ )
60
+ @handle_exceptions
61
+ def list_run_templates(
62
+ filter_model: RunTemplateFilter = Depends(
63
+ make_dependable(RunTemplateFilter)
64
+ ),
65
+ hydrate: bool = False,
66
+ _: AuthContext = Security(authorize),
67
+ ) -> Page[RunTemplateResponse]:
68
+ """Get a page of run templates.
69
+
70
+ Args:
71
+ filter_model: Filter model used for pagination, sorting,
72
+ filtering.
73
+ hydrate: Flag deciding whether to hydrate the output model(s)
74
+ by including metadata fields in the response.
75
+
76
+ Returns:
77
+ Page of run templates.
78
+ """
79
+ return verify_permissions_and_list_entities(
80
+ filter_model=filter_model,
81
+ resource_type=ResourceType.RUN_TEMPLATE,
82
+ list_method=zen_store().list_run_templates,
83
+ hydrate=hydrate,
84
+ )
85
+
86
+
87
+ @router.get(
88
+ "/{template_id}",
89
+ responses={401: error_response, 404: error_response, 422: error_response},
90
+ )
91
+ @handle_exceptions
92
+ def get_run_template(
93
+ template_id: UUID,
94
+ hydrate: bool = True,
95
+ _: AuthContext = Security(authorize),
96
+ ) -> RunTemplateResponse:
97
+ """Get a run template.
98
+
99
+ Args:
100
+ template_id: ID of the run template to get.
101
+ hydrate: Flag deciding whether to hydrate the output model(s)
102
+ by including metadata fields in the response.
103
+
104
+ Returns:
105
+ The run template.
106
+ """
107
+ return verify_permissions_and_get_entity(
108
+ id=template_id,
109
+ get_method=zen_store().get_run_template,
110
+ hydrate=hydrate,
111
+ )
112
+
113
+
114
+ @router.put(
115
+ "/{template_id}",
116
+ responses={401: error_response, 404: error_response, 422: error_response},
117
+ )
118
+ @handle_exceptions
119
+ def update_run_template(
120
+ template_id: UUID,
121
+ update: RunTemplateUpdate,
122
+ _: AuthContext = Security(authorize),
123
+ ) -> RunTemplateResponse:
124
+ """Update a run template.
125
+
126
+ Args:
127
+ template_id: ID of the run template to get.
128
+ update: The updates to apply.
129
+
130
+ Returns:
131
+ The updated run template.
132
+ """
133
+ return verify_permissions_and_update_entity(
134
+ id=template_id,
135
+ update_model=update,
136
+ get_method=zen_store().get_run_template,
137
+ update_method=zen_store().update_run_template,
138
+ )
139
+
140
+
141
+ @router.delete(
142
+ "/{template_id}",
143
+ responses={401: error_response, 404: error_response, 422: error_response},
144
+ )
145
+ @handle_exceptions
146
+ def delete_run_template(
147
+ template_id: UUID,
148
+ _: AuthContext = Security(authorize),
149
+ ) -> None:
150
+ """Delete a run template.
151
+
152
+ Args:
153
+ template_id: ID of the run template to delete.
154
+ """
155
+ verify_permissions_and_delete_entity(
156
+ id=template_id,
157
+ get_method=zen_store().get_run_template,
158
+ delete_method=zen_store().delete_run_template,
159
+ )
160
+
161
+
162
+ if server_config().workload_manager_enabled:
163
+
164
+ @router.post(
165
+ "/{template_id}/runs",
166
+ responses={
167
+ 401: error_response,
168
+ 404: error_response,
169
+ 422: error_response,
170
+ },
171
+ )
172
+ @handle_exceptions
173
+ def create_template_run(
174
+ template_id: UUID,
175
+ background_tasks: BackgroundTasks,
176
+ config: Optional[PipelineRunConfiguration] = None,
177
+ auth_context: AuthContext = Security(authorize),
178
+ ) -> PipelineRunResponse:
179
+ """Run a pipeline from a template.
180
+
181
+ Args:
182
+ template_id: The ID of the template.
183
+ background_tasks: Background tasks.
184
+ config: Configuration for the pipeline run.
185
+ auth_context: Authentication context.
186
+
187
+ Returns:
188
+ The created pipeline run.
189
+ """
190
+ from zenml.zen_server.template_execution.utils import run_template
191
+
192
+ with track_handler(event=AnalyticsEvent.EXECUTED_RUN_TEMPLATE):
193
+ template = verify_permissions_and_get_entity(
194
+ id=template_id,
195
+ get_method=zen_store().get_run_template,
196
+ hydrate=True,
197
+ )
198
+
199
+ verify_permission(
200
+ resource_type=ResourceType.PIPELINE_DEPLOYMENT,
201
+ action=Action.CREATE,
202
+ )
203
+ verify_permission(
204
+ resource_type=ResourceType.PIPELINE_RUN, action=Action.CREATE
205
+ )
206
+
207
+ return run_template(
208
+ template=template,
209
+ auth_context=auth_context,
210
+ background_tasks=background_tasks,
211
+ run_config=config,
212
+ )
@@ -78,6 +78,7 @@ def get_stack_deployment_config(
78
78
  provider: StackDeploymentProvider,
79
79
  stack_name: str,
80
80
  location: Optional[str] = None,
81
+ terraform: bool = False,
81
82
  auth_context: AuthContext = Security(authorize),
82
83
  ) -> StackDeploymentConfig:
83
84
  """Return the URL to deploy the ZenML stack to the specified cloud provider.
@@ -87,6 +88,7 @@ def get_stack_deployment_config(
87
88
  provider: The stack deployment provider.
88
89
  stack_name: The name of the stack.
89
90
  location: The location where the stack should be deployed.
91
+ terraform: Whether the stack should be deployed using Terraform.
90
92
  auth_context: The authentication context.
91
93
 
92
94
  Returns:
@@ -118,6 +120,7 @@ def get_stack_deployment_config(
118
120
  api_token = token.encode(expires=expires)
119
121
 
120
122
  return stack_deployment_class(
123
+ terraform=terraform,
121
124
  stack_name=stack_name,
122
125
  location=location,
123
126
  zenml_server_url=str(url),
@@ -134,6 +137,7 @@ def get_deployed_stack(
134
137
  stack_name: str,
135
138
  location: Optional[str] = None,
136
139
  date_start: Optional[datetime.datetime] = None,
140
+ terraform: bool = False,
137
141
  _: AuthContext = Security(authorize),
138
142
  ) -> Optional[DeployedStack]:
139
143
  """Return a matching ZenML stack that was deployed and registered.
@@ -143,6 +147,7 @@ def get_deployed_stack(
143
147
  stack_name: The name of the stack.
144
148
  location: The location where the stack should be deployed.
145
149
  date_start: The date when the deployment started.
150
+ terraform: Whether the stack was deployed using Terraform.
146
151
 
147
152
  Returns:
148
153
  The ZenML stack that was deployed and registered or None if the stack
@@ -150,6 +155,7 @@ def get_deployed_stack(
150
155
  """
151
156
  stack_deployment_class = get_stack_deployment_class(provider)
152
157
  return stack_deployment_class(
158
+ terraform=terraform,
153
159
  stack_name=stack_name,
154
160
  location=location,
155
161
  # These fields are not needed for this operation
@@ -286,7 +286,6 @@ if server_config().auth_scheme != AuthScheme.EXTERNAL:
286
286
  # - active
287
287
  # - password
288
288
  # - email_opted_in + email
289
- # - hub_token
290
289
  #
291
290
  safe_user_update = user_update.create_copy(
292
291
  exclude={
@@ -298,7 +297,6 @@ if server_config().auth_scheme != AuthScheme.EXTERNAL:
298
297
  "old_password",
299
298
  "email_opted_in",
300
299
  "email",
301
- "hub_token",
302
300
  },
303
301
  )
304
302
 
@@ -387,7 +385,6 @@ if server_config().auth_scheme != AuthScheme.EXTERNAL:
387
385
  if (
388
386
  user_update.email_opted_in is not None
389
387
  or user_update.email is not None
390
- or user_update.hub_token is not None
391
388
  ):
392
389
  if user.id != auth_context.user.id:
393
390
  raise IllegalOperationError(
@@ -399,8 +396,6 @@ if server_config().auth_scheme != AuthScheme.EXTERNAL:
399
396
  if safe_user_update.email_opted_in is not None:
400
397
  safe_user_update.email_opted_in = user_update.email_opted_in
401
398
  safe_user_update.email = user_update.email
402
- if safe_user_update.hub_token is not None:
403
- safe_user_update.hub_token = user_update.hub_token
404
399
 
405
400
  updated_user = zen_store().update_user(
406
401
  user_id=user.id,
@@ -444,7 +439,6 @@ if server_config().auth_scheme != AuthScheme.EXTERNAL:
444
439
  # - is_admin
445
440
  # - active
446
441
  # - old_password
447
- # - hub_token
448
442
  #
449
443
  safe_user_update = user_update.create_copy(
450
444
  exclude={
@@ -453,7 +447,6 @@ if server_config().auth_scheme != AuthScheme.EXTERNAL:
453
447
  "is_admin",
454
448
  "active",
455
449
  "old_password",
456
- "hub_token",
457
450
  },
458
451
  )
459
452