zenml-nightly 0.58.2.dev20240626__py3-none-any.whl → 0.62.0.dev20240726__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 (266) hide show
  1. README.md +31 -10
  2. RELEASE_NOTES.md +280 -0
  3. zenml/VERSION +1 -1
  4. zenml/__init__.py +2 -0
  5. zenml/analytics/enums.py +3 -0
  6. zenml/cli/__init__.py +28 -0
  7. zenml/cli/artifact.py +1 -2
  8. zenml/cli/integration.py +9 -8
  9. zenml/cli/server.py +6 -0
  10. zenml/cli/stack.py +812 -39
  11. zenml/cli/stack_components.py +9 -0
  12. zenml/cli/text_utils.py +35 -1
  13. zenml/cli/utils.py +127 -10
  14. zenml/client.py +23 -14
  15. zenml/config/docker_settings.py +8 -5
  16. zenml/constants.py +13 -1
  17. zenml/container_registries/base_container_registry.py +1 -0
  18. zenml/enums.py +23 -0
  19. zenml/event_hub/event_hub.py +5 -8
  20. zenml/integrations/__init__.py +1 -0
  21. zenml/integrations/aws/__init__.py +1 -0
  22. zenml/integrations/azure/__init__.py +3 -2
  23. zenml/integrations/constants.py +1 -0
  24. zenml/integrations/databricks/__init__.py +52 -0
  25. zenml/integrations/databricks/flavors/__init__.py +30 -0
  26. zenml/integrations/databricks/flavors/databricks_model_deployer_flavor.py +118 -0
  27. zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +147 -0
  28. zenml/integrations/databricks/model_deployers/__init__.py +20 -0
  29. zenml/integrations/databricks/model_deployers/databricks_model_deployer.py +249 -0
  30. zenml/integrations/databricks/orchestrators/__init__.py +20 -0
  31. zenml/integrations/databricks/orchestrators/databricks_orchestrator.py +497 -0
  32. zenml/integrations/databricks/orchestrators/databricks_orchestrator_entrypoint_config.py +97 -0
  33. zenml/integrations/databricks/services/__init__.py +19 -0
  34. zenml/integrations/databricks/services/databricks_deployment.py +407 -0
  35. zenml/integrations/databricks/utils/__init__.py +14 -0
  36. zenml/integrations/databricks/utils/databricks_utils.py +87 -0
  37. zenml/integrations/deepchecks/__init__.py +1 -0
  38. zenml/integrations/discord/__init__.py +1 -0
  39. zenml/integrations/evidently/__init__.py +1 -0
  40. zenml/integrations/facets/__init__.py +1 -0
  41. zenml/integrations/feast/__init__.py +1 -0
  42. zenml/integrations/gcp/__init__.py +3 -1
  43. zenml/integrations/gcp/google_credentials_mixin.py +1 -1
  44. zenml/integrations/gcp/service_connectors/gcp_service_connector.py +320 -64
  45. zenml/integrations/great_expectations/data_validators/ge_data_validator.py +12 -8
  46. zenml/integrations/huggingface/__init__.py +1 -0
  47. zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +88 -3
  48. zenml/integrations/huggingface/steps/accelerate_runner.py +1 -7
  49. zenml/integrations/integration.py +24 -0
  50. zenml/integrations/kubeflow/__init__.py +3 -0
  51. zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +1 -1
  52. zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +0 -1
  53. zenml/integrations/kubernetes/__init__.py +3 -1
  54. zenml/integrations/kubernetes/orchestrators/kube_utils.py +4 -1
  55. zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +1 -13
  56. zenml/integrations/kubernetes/orchestrators/manifest_utils.py +22 -4
  57. zenml/integrations/kubernetes/pod_settings.py +4 -0
  58. zenml/integrations/label_studio/annotators/label_studio_annotator.py +1 -0
  59. zenml/integrations/langchain/__init__.py +1 -0
  60. zenml/integrations/lightgbm/__init__.py +1 -0
  61. zenml/integrations/mlflow/__init__.py +4 -2
  62. zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -2
  63. zenml/integrations/mlflow/services/mlflow_deployment.py +1 -1
  64. zenml/integrations/neural_prophet/__init__.py +1 -0
  65. zenml/integrations/polars/__init__.py +1 -0
  66. zenml/integrations/prodigy/__init__.py +1 -0
  67. zenml/integrations/pycaret/__init__.py +6 -0
  68. zenml/integrations/registry.py +37 -0
  69. zenml/integrations/s3/artifact_stores/s3_artifact_store.py +17 -6
  70. zenml/integrations/seldon/__init__.py +1 -0
  71. zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +1 -0
  72. zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +2 -2
  73. zenml/integrations/skypilot/orchestrators/skypilot_base_vm_orchestrator.py +1 -1
  74. zenml/integrations/skypilot/orchestrators/skypilot_orchestrator_entrypoint.py +2 -2
  75. zenml/integrations/skypilot_aws/__init__.py +2 -1
  76. zenml/integrations/skypilot_azure/__init__.py +1 -3
  77. zenml/integrations/skypilot_gcp/__init__.py +1 -1
  78. zenml/integrations/skypilot_lambda/__init__.py +1 -1
  79. zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py +1 -1
  80. zenml/integrations/slack/__init__.py +1 -0
  81. zenml/integrations/tekton/__init__.py +1 -0
  82. zenml/integrations/tensorboard/__init__.py +0 -1
  83. zenml/integrations/tensorflow/__init__.py +18 -6
  84. zenml/integrations/wandb/__init__.py +1 -0
  85. zenml/logging/step_logging.py +34 -35
  86. zenml/materializers/built_in_materializer.py +1 -1
  87. zenml/materializers/cloudpickle_materializer.py +1 -1
  88. zenml/model/model.py +1 -1
  89. zenml/models/__init__.py +11 -0
  90. zenml/models/v2/core/component.py +47 -0
  91. zenml/models/v2/core/model.py +1 -2
  92. zenml/models/v2/core/server_settings.py +0 -20
  93. zenml/models/v2/core/service_connector.py +17 -0
  94. zenml/models/v2/core/stack.py +31 -0
  95. zenml/models/v2/misc/full_stack.py +129 -0
  96. zenml/models/v2/misc/stack_deployment.py +91 -0
  97. zenml/new/pipelines/pipeline.py +1 -1
  98. zenml/new/pipelines/run_utils.py +1 -1
  99. zenml/orchestrators/__init__.py +4 -0
  100. zenml/orchestrators/input_utils.py +3 -6
  101. zenml/orchestrators/step_launcher.py +1 -0
  102. zenml/orchestrators/wheeled_orchestrator.py +147 -0
  103. zenml/service_connectors/service_connector_utils.py +408 -0
  104. zenml/stack/stack.py +3 -6
  105. zenml/stack_deployments/__init__.py +14 -0
  106. zenml/stack_deployments/aws_stack_deployment.py +254 -0
  107. zenml/stack_deployments/azure_stack_deployment.py +179 -0
  108. zenml/stack_deployments/gcp_stack_deployment.py +269 -0
  109. zenml/stack_deployments/stack_deployment.py +218 -0
  110. zenml/stack_deployments/utils.py +48 -0
  111. zenml/steps/base_step.py +7 -5
  112. zenml/utils/function_utils.py +2 -2
  113. zenml/utils/pagination_utils.py +7 -5
  114. zenml/utils/pipeline_docker_image_builder.py +105 -68
  115. zenml/utils/pydantic_utils.py +6 -5
  116. zenml/utils/source_utils.py +4 -1
  117. zenml/zen_server/cloud_utils.py +18 -3
  118. zenml/zen_server/dashboard/assets/{404-CDPQCl4D.js → 404-B_YdvmwS.js} +1 -1
  119. zenml/zen_server/dashboard/assets/@radix-CFOkMR_E.js +85 -0
  120. zenml/zen_server/dashboard/assets/{@react-router-DYovave8.js → @react-router-CO-OsFwI.js} +2 -2
  121. zenml/zen_server/dashboard/assets/{@reactflow-CHBapDaj.js → @reactflow-l_1hUr1S.js} +2 -2
  122. zenml/zen_server/dashboard/assets/@tanstack-DYiOyJUL.js +22 -0
  123. zenml/zen_server/dashboard/assets/AwarenessChannel-CFg5iX4Z.js +1 -0
  124. zenml/zen_server/dashboard/assets/{CodeSnippet-BidtnWOi.js → CodeSnippet-Dvkx_82E.js} +2 -2
  125. zenml/zen_server/dashboard/assets/CollapsibleCard-opiuBHHc.js +1 -0
  126. zenml/zen_server/dashboard/assets/Commands-DoN1xrEq.js +1 -0
  127. zenml/zen_server/dashboard/assets/CopyButton-Cr7xYEPb.js +2 -0
  128. zenml/zen_server/dashboard/assets/{CsvVizualization-BOuez-fG.js → CsvVizualization-Ck-nZ43m.js} +7 -7
  129. zenml/zen_server/dashboard/assets/DisplayDate-DYgIjlDF.js +1 -0
  130. zenml/zen_server/dashboard/assets/EmptyState-BMLnFVlB.js +1 -0
  131. zenml/zen_server/dashboard/assets/Error-kLtljEOM.js +1 -0
  132. zenml/zen_server/dashboard/assets/ExecutionStatus-DguLLgTK.js +1 -0
  133. zenml/zen_server/dashboard/assets/Helpbox-BXUMP21n.js +1 -0
  134. zenml/zen_server/dashboard/assets/Infobox-DSt0O-dm.js +1 -0
  135. zenml/zen_server/dashboard/assets/InlineAvatar-xsrsIGE-.js +1 -0
  136. zenml/zen_server/dashboard/assets/{MarkdownVisualization-DsB2QZiK.js → MarkdownVisualization-xp3hhULl.js} +2 -2
  137. zenml/zen_server/dashboard/assets/Pagination-C6X-mifw.js +1 -0
  138. zenml/zen_server/dashboard/assets/PasswordChecker-DUveqlva.js +1 -0
  139. zenml/zen_server/dashboard/assets/SetPassword-BXGTWiwj.js +1 -0
  140. zenml/zen_server/dashboard/assets/SuccessStep-DZC60t0x.js +1 -0
  141. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DnM-c11H.js → UpdatePasswordSchemas-DGvwFWO1.js} +1 -1
  142. zenml/zen_server/dashboard/assets/{aws-t0gKCj_R.js → aws-BgKTfTfx.js} +1 -1
  143. zenml/zen_server/dashboard/assets/{check-circle-BVvhm5dy.js → check-circle-i56092KI.js} +1 -1
  144. zenml/zen_server/dashboard/assets/{chevron-right-double-CJ50E9Gr.js → chevron-right-double-CZBOf6JM.js} +1 -1
  145. zenml/zen_server/dashboard/assets/cloud-only-C_yFCAkP.js +1 -0
  146. zenml/zen_server/dashboard/assets/{copy-BRhQz3j-.js → copy-BXNk6BjL.js} +1 -1
  147. zenml/zen_server/dashboard/assets/{database-CRRnyFWh.js → database-1xWSgZfO.js} +1 -1
  148. zenml/zen_server/dashboard/assets/{docker-BAonhm6G.js → docker-CQMVm_4d.js} +1 -1
  149. zenml/zen_server/dashboard/assets/{file-text-CbVERUON.js → file-text-CqD_iu6l.js} +1 -1
  150. zenml/zen_server/dashboard/assets/{help-B8rqCvqn.js → help-bu_DgLKI.js} +1 -1
  151. zenml/zen_server/dashboard/assets/index-BczVOqUf.js +55 -0
  152. zenml/zen_server/dashboard/assets/index-EpMIKgrI.css +1 -0
  153. zenml/zen_server/dashboard/assets/index-rK_Wuy2W.js +1 -0
  154. zenml/zen_server/dashboard/assets/index.esm-Corw4lXQ.js +1 -0
  155. zenml/zen_server/dashboard/assets/{login-mutation-wzzl23C6.js → login-mutation-CrHrndTI.js} +1 -1
  156. zenml/zen_server/dashboard/assets/logs-D8k8BVFf.js +1 -0
  157. zenml/zen_server/dashboard/assets/not-found-DYa4pC-C.js +1 -0
  158. zenml/zen_server/dashboard/assets/package-B3fWP-Dh.js +1 -0
  159. zenml/zen_server/dashboard/assets/page-1h_sD1jz.js +1 -0
  160. zenml/zen_server/dashboard/assets/{page-yN4rZ-ZS.js → page-1iL8aMqs.js} +1 -1
  161. zenml/zen_server/dashboard/assets/{page-Bi5AI0S7.js → page-2grKx_MY.js} +1 -1
  162. zenml/zen_server/dashboard/assets/page-5NCOHOsy.js +1 -0
  163. zenml/zen_server/dashboard/assets/page-8a4UMKXZ.js +1 -0
  164. zenml/zen_server/dashboard/assets/{page-AQKopn_4.js → page-B6h3iaHJ.js} +1 -1
  165. zenml/zen_server/dashboard/assets/page-BDns21Iz.js +1 -0
  166. zenml/zen_server/dashboard/assets/{page-BmkSiYeQ.js → page-BhgCDInH.js} +2 -2
  167. zenml/zen_server/dashboard/assets/{page-BzVZGExK.js → page-Bi-wtWiO.js} +2 -2
  168. zenml/zen_server/dashboard/assets/page-BkeAAYwp.js +1 -0
  169. zenml/zen_server/dashboard/assets/page-BkuQDIf-.js +1 -0
  170. zenml/zen_server/dashboard/assets/page-BnaevhnB.js +1 -0
  171. zenml/zen_server/dashboard/assets/page-Bq0YxkLV.js +1 -0
  172. zenml/zen_server/dashboard/assets/page-Bs2F4eoD.js +2 -0
  173. zenml/zen_server/dashboard/assets/page-C6-UGEbH.js +1 -0
  174. zenml/zen_server/dashboard/assets/page-CCNRIt_f.js +1 -0
  175. zenml/zen_server/dashboard/assets/page-CHNxpz3n.js +1 -0
  176. zenml/zen_server/dashboard/assets/page-DgorQFqi.js +1 -0
  177. zenml/zen_server/dashboard/assets/page-K8ebxVIs.js +1 -0
  178. zenml/zen_server/dashboard/assets/{page-CuT1SUik.js → page-MFQyIJd3.js} +1 -1
  179. zenml/zen_server/dashboard/assets/page-TgCF0P_U.js +1 -0
  180. zenml/zen_server/dashboard/assets/page-ZnCEe-eK.js +9 -0
  181. zenml/zen_server/dashboard/assets/{page-BW6Ket3a.js → page-uA5prJGY.js} +1 -1
  182. zenml/zen_server/dashboard/assets/persist-D7HJNBWx.js +1 -0
  183. zenml/zen_server/dashboard/assets/{play-circle-DK5QMJyp.js → play-circle-CNtZKDnW.js} +1 -1
  184. zenml/zen_server/dashboard/assets/plus-C8WOyCzt.js +1 -0
  185. zenml/zen_server/dashboard/assets/stack-detail-query-Cficsl6d.js +1 -0
  186. zenml/zen_server/dashboard/assets/{terminal-B2ovgWuz.js → terminal-By9cErXc.js} +1 -1
  187. zenml/zen_server/dashboard/assets/update-server-settings-mutation-7d8xi1tS.js +1 -0
  188. zenml/zen_server/dashboard/assets/{url-6_xv0WJS.js → url-D7mAQGUM.js} +1 -1
  189. zenml/zen_server/dashboard/assets/{zod-DrZvVLjd.js → zod-BhoGpZ63.js} +1 -1
  190. zenml/zen_server/dashboard/index.html +7 -7
  191. zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
  192. zenml/zen_server/dashboard_legacy/index.html +1 -1
  193. zenml/zen_server/dashboard_legacy/{precache-manifest.f4abc5b7cfa7d90c1caf5521918e29a8.js → precache-manifest.12246c7548e71e2c4438e496360de80c.js} +4 -4
  194. zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
  195. zenml/zen_server/dashboard_legacy/static/js/main.3b27024b.chunk.js +2 -0
  196. zenml/zen_server/dashboard_legacy/static/js/{main.ac2f17d0.chunk.js.map → main.3b27024b.chunk.js.map} +1 -1
  197. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  198. zenml/zen_server/deploy/helm/README.md +2 -2
  199. zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +11 -5
  200. zenml/zen_server/pipeline_deployment/utils.py +57 -44
  201. zenml/zen_server/rbac/utils.py +10 -2
  202. zenml/zen_server/rbac/zenml_cloud_rbac.py +11 -5
  203. zenml/zen_server/routers/devices_endpoints.py +4 -1
  204. zenml/zen_server/routers/server_endpoints.py +29 -2
  205. zenml/zen_server/routers/service_connectors_endpoints.py +57 -0
  206. zenml/zen_server/routers/stack_deployment_endpoints.py +158 -0
  207. zenml/zen_server/routers/steps_endpoints.py +2 -1
  208. zenml/zen_server/routers/workspaces_endpoints.py +64 -0
  209. zenml/zen_server/zen_server_api.py +2 -0
  210. zenml/zen_stores/migrations/utils.py +1 -1
  211. zenml/zen_stores/migrations/versions/0.60.0_release.py +23 -0
  212. zenml/zen_stores/migrations/versions/0.61.0_release.py +23 -0
  213. zenml/zen_stores/migrations/versions/0.62.0_release.py +23 -0
  214. zenml/zen_stores/migrations/versions/0d707865f404_adding_labels_to_stacks.py +30 -0
  215. zenml/zen_stores/migrations/versions/b4fca5241eea_migrate_onboarding_state.py +167 -0
  216. zenml/zen_stores/rest_zen_store.py +149 -4
  217. zenml/zen_stores/schemas/component_schemas.py +14 -0
  218. zenml/zen_stores/schemas/server_settings_schemas.py +23 -11
  219. zenml/zen_stores/schemas/stack_schemas.py +10 -0
  220. zenml/zen_stores/schemas/step_run_schemas.py +27 -11
  221. zenml/zen_stores/sql_zen_store.py +450 -6
  222. zenml/zen_stores/zen_store_interface.py +80 -0
  223. {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/METADATA +35 -13
  224. {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/RECORD +227 -191
  225. zenml/zen_server/dashboard/assets/@radix-C9DBgJhe.js +0 -77
  226. zenml/zen_server/dashboard/assets/@tanstack-CEbkxrhX.js +0 -30
  227. zenml/zen_server/dashboard/assets/AwarenessChannel-nXGpmj_f.js +0 -1
  228. zenml/zen_server/dashboard/assets/Cards-nwsvQLVS.js +0 -1
  229. zenml/zen_server/dashboard/assets/Commands-DuIWKg_Q.js +0 -1
  230. zenml/zen_server/dashboard/assets/CopyButton-B_YSm-Ds.js +0 -2
  231. zenml/zen_server/dashboard/assets/DisplayDate-BdguISQF.js +0 -1
  232. zenml/zen_server/dashboard/assets/EmptyState-BkooiGtL.js +0 -1
  233. zenml/zen_server/dashboard/assets/Error-B6M0dPph.js +0 -1
  234. zenml/zen_server/dashboard/assets/Helpbox-BQoqCm04.js +0 -1
  235. zenml/zen_server/dashboard/assets/Infobox-Ce9mefqU.js +0 -1
  236. zenml/zen_server/dashboard/assets/InlineAvatar-DGf3dVhV.js +0 -1
  237. zenml/zen_server/dashboard/assets/PageHeader-DGaemzjc.js +0 -1
  238. zenml/zen_server/dashboard/assets/Pagination-DVYfBCCc.js +0 -1
  239. zenml/zen_server/dashboard/assets/PasswordChecker-DSLBp7Vl.js +0 -1
  240. zenml/zen_server/dashboard/assets/SetPassword-B5s7DJug.js +0 -1
  241. zenml/zen_server/dashboard/assets/SuccessStep-ZzczaM7g.js +0 -1
  242. zenml/zen_server/dashboard/assets/chevron-down-zcvCWmyP.js +0 -1
  243. zenml/zen_server/dashboard/assets/cloud-only-Ba_ShBR5.js +0 -1
  244. zenml/zen_server/dashboard/assets/index-CWJ3xbIf.css +0 -1
  245. zenml/zen_server/dashboard/assets/index-QORVVTMN.js +0 -55
  246. zenml/zen_server/dashboard/assets/index.esm-F7nqy9zY.js +0 -1
  247. zenml/zen_server/dashboard/assets/not-found-Dh2la7kh.js +0 -1
  248. zenml/zen_server/dashboard/assets/page-B-5jAKoO.js +0 -1
  249. zenml/zen_server/dashboard/assets/page-B-vWk8a6.js +0 -1
  250. zenml/zen_server/dashboard/assets/page-B0BrqfS8.js +0 -1
  251. zenml/zen_server/dashboard/assets/page-BQxVFlUl.js +0 -1
  252. zenml/zen_server/dashboard/assets/page-ByrHy6Ss.js +0 -1
  253. zenml/zen_server/dashboard/assets/page-CPtY4Kv_.js +0 -1
  254. zenml/zen_server/dashboard/assets/page-CmmukLsl.js +0 -1
  255. zenml/zen_server/dashboard/assets/page-D2D-7qyr.js +0 -9
  256. zenml/zen_server/dashboard/assets/page-DAQQyLxT.js +0 -1
  257. zenml/zen_server/dashboard/assets/page-DHkUMl_E.js +0 -1
  258. zenml/zen_server/dashboard/assets/page-DZCbwOEs.js +0 -2
  259. zenml/zen_server/dashboard/assets/page-DdaIt20-.js +0 -1
  260. zenml/zen_server/dashboard/assets/page-LqLs24Ot.js +0 -1
  261. zenml/zen_server/dashboard/assets/page-lebv0c7C.js +0 -1
  262. zenml/zen_server/dashboard/assets/update-server-settings-mutation-0Wgz8pUE.js +0 -1
  263. zenml/zen_server/dashboard_legacy/static/js/main.ac2f17d0.chunk.js +0 -2
  264. {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/LICENSE +0 -0
  265. {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/WHEEL +0 -0
  266. {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.62.0.dev20240726.dist-info}/entry_points.txt +0 -0
@@ -66,6 +66,7 @@ DEFAULT_DOCKER_PARENT_IMAGE = (
66
66
  f"zenmldocker/zenml:{zenml.__version__}-"
67
67
  f"py{sys.version_info.major}.{sys.version_info.minor}"
68
68
  )
69
+ DEFAULT_ZENML_DOCKER_REPOSITORY = "zenml"
69
70
 
70
71
  PIP_DEFAULT_ARGS = {
71
72
  "no-cache-dir": None,
@@ -198,10 +199,15 @@ class PipelineDockerImageBuilder:
198
199
  # We will build an additional image on top of this one later
199
200
  # to include user files and/or install requirements. The image
200
201
  # we build now will be used as the parent for the next build.
201
- user_image_name = (
202
- f"{docker_settings.target_repository}:"
203
- f"{tag}-intermediate-build"
204
- )
202
+ repository = docker_settings.target_repository
203
+ if not repository:
204
+ if container_registry:
205
+ repository = (
206
+ container_registry.config.default_repository
207
+ )
208
+
209
+ repository = repository or DEFAULT_ZENML_DOCKER_REPOSITORY
210
+ user_image_name = f"{repository}:" f"{tag}-intermediate-build"
205
211
  if push and container_registry:
206
212
  user_image_name = (
207
213
  f"{container_registry.config.uri}/{user_image_name}"
@@ -291,6 +297,14 @@ class PipelineDockerImageBuilder:
291
297
  if docker_settings.install_stack_requirements:
292
298
  apt_packages += stack.apt_packages
293
299
 
300
+ # include apt packages from all required integrations
301
+ for integration in docker_settings.required_integrations:
302
+ # get the integration
303
+ integration_cls = integration_registry.integrations[
304
+ integration
305
+ ]
306
+ apt_packages += integration_cls.APT_PACKAGES
307
+
294
308
  if apt_packages:
295
309
  logger.info(
296
310
  "Including apt packages: %s",
@@ -366,7 +380,14 @@ class PipelineDockerImageBuilder:
366
380
  Returns:
367
381
  The docker image name.
368
382
  """
369
- target_image_name = f"{docker_settings.target_repository}:{tag}"
383
+ repository = docker_settings.target_repository
384
+ if not repository:
385
+ if container_registry:
386
+ repository = container_registry.config.default_repository
387
+
388
+ repository = repository or DEFAULT_ZENML_DOCKER_REPOSITORY
389
+
390
+ target_image_name = f"{repository}:{tag}"
370
391
  if container_registry:
371
392
  target_image_name = (
372
393
  f"{container_registry.config.uri}/{target_image_name}"
@@ -460,69 +481,6 @@ class PipelineDockerImageBuilder:
460
481
  "- Including python packages from local environment"
461
482
  )
462
483
 
463
- # Generate/Read requirements file for user-defined requirements
464
- if isinstance(docker_settings.requirements, str):
465
- path = os.path.abspath(docker_settings.requirements)
466
- try:
467
- user_requirements = io_utils.read_file_contents_as_string(path)
468
- except FileNotFoundError as e:
469
- raise FileNotFoundError(
470
- f"Requirements file {path} does not exist."
471
- ) from e
472
- if log:
473
- logger.info(
474
- "- Including user-defined requirements from file `%s`",
475
- path,
476
- )
477
- elif isinstance(docker_settings.requirements, List):
478
- user_requirements = "\n".join(docker_settings.requirements)
479
- if log:
480
- logger.info(
481
- "- Including user-defined requirements: %s",
482
- ", ".join(f"`{r}`" for r in docker_settings.requirements),
483
- )
484
- else:
485
- user_requirements = None
486
-
487
- if user_requirements:
488
- requirements_files.append(
489
- (".zenml_user_requirements", user_requirements, [])
490
- )
491
-
492
- # Generate requirements file for all required integrations
493
- integration_requirements = set(
494
- itertools.chain.from_iterable(
495
- integration_registry.select_integration_requirements(
496
- integration_name=integration,
497
- target_os=OperatingSystemType.LINUX,
498
- )
499
- for integration in docker_settings.required_integrations
500
- )
501
- )
502
-
503
- if docker_settings.install_stack_requirements:
504
- integration_requirements.update(stack.requirements())
505
- if code_repository:
506
- integration_requirements.update(code_repository.requirements)
507
-
508
- if integration_requirements:
509
- integration_requirements_list = sorted(integration_requirements)
510
- integration_requirements_file = "\n".join(
511
- integration_requirements_list
512
- )
513
- requirements_files.append(
514
- (
515
- ".zenml_integration_requirements",
516
- integration_requirements_file,
517
- [],
518
- )
519
- )
520
- if log:
521
- logger.info(
522
- "- Including integration requirements: %s",
523
- ", ".join(f"`{r}`" for r in integration_requirements_list),
524
- )
525
-
526
484
  # Generate requirements files for all ZenML Hub plugins
527
485
  if docker_settings.required_hub_plugins:
528
486
  (
@@ -560,6 +518,85 @@ class PipelineDockerImageBuilder:
560
518
  ", ".join(f"`{r}`" for r in hub_pypi_requirements),
561
519
  )
562
520
 
521
+ if docker_settings.install_stack_requirements:
522
+ stack_requirements = stack.requirements()
523
+ if code_repository:
524
+ stack_requirements.update(code_repository.requirements)
525
+
526
+ if stack_requirements:
527
+ stack_requirements_list = sorted(stack_requirements)
528
+ stack_requirements_file = "\n".join(stack_requirements_list)
529
+ requirements_files.append(
530
+ (
531
+ ".zenml_stack_integration_requirements",
532
+ stack_requirements_file,
533
+ [],
534
+ )
535
+ )
536
+ if log:
537
+ logger.info(
538
+ "- Including stack requirements: %s",
539
+ ", ".join(f"`{r}`" for r in stack_requirements_list),
540
+ )
541
+
542
+ # Generate requirements file for all required integrations
543
+ integration_requirements = set(
544
+ itertools.chain.from_iterable(
545
+ integration_registry.select_integration_requirements(
546
+ integration_name=integration,
547
+ target_os=OperatingSystemType.LINUX,
548
+ )
549
+ for integration in docker_settings.required_integrations
550
+ )
551
+ )
552
+
553
+ if integration_requirements:
554
+ integration_requirements_list = sorted(integration_requirements)
555
+ integration_requirements_file = "\n".join(
556
+ integration_requirements_list
557
+ )
558
+ requirements_files.append(
559
+ (
560
+ ".zenml_integration_requirements",
561
+ integration_requirements_file,
562
+ [],
563
+ )
564
+ )
565
+ if log:
566
+ logger.info(
567
+ "- Including integration requirements: %s",
568
+ ", ".join(f"`{r}`" for r in integration_requirements_list),
569
+ )
570
+
571
+ # Generate/Read requirements file for user-defined requirements
572
+ if isinstance(docker_settings.requirements, str):
573
+ path = os.path.abspath(docker_settings.requirements)
574
+ try:
575
+ user_requirements = io_utils.read_file_contents_as_string(path)
576
+ except FileNotFoundError as e:
577
+ raise FileNotFoundError(
578
+ f"Requirements file {path} does not exist."
579
+ ) from e
580
+ if log:
581
+ logger.info(
582
+ "- Including user-defined requirements from file `%s`",
583
+ path,
584
+ )
585
+ elif isinstance(docker_settings.requirements, List):
586
+ user_requirements = "\n".join(docker_settings.requirements)
587
+ if log:
588
+ logger.info(
589
+ "- Including user-defined requirements: %s",
590
+ ", ".join(f"`{r}`" for r in docker_settings.requirements),
591
+ )
592
+ else:
593
+ user_requirements = None
594
+
595
+ if user_requirements:
596
+ requirements_files.append(
597
+ (".zenml_user_requirements", user_requirements, [])
598
+ )
599
+
563
600
  return requirements_files
564
601
 
565
602
  @staticmethod
@@ -45,7 +45,7 @@ def update_model(
45
45
  original: M,
46
46
  update: Union["BaseModel", Dict[str, Any]],
47
47
  recursive: bool = True,
48
- exclude_none: bool = True,
48
+ exclude_none: bool = False,
49
49
  ) -> M:
50
50
  """Updates a pydantic model.
51
51
 
@@ -53,8 +53,7 @@ def update_model(
53
53
  original: The model to update.
54
54
  update: The update values.
55
55
  recursive: If `True`, dictionary values will be updated recursively.
56
- exclude_none: If `True`, `None` values in the update dictionary
57
- will be removed.
56
+ exclude_none: If `True`, `None` values in the update will be removed.
58
57
 
59
58
  Returns:
60
59
  The updated model.
@@ -67,7 +66,9 @@ def update_model(
67
66
  else:
68
67
  update_dict = update
69
68
  else:
70
- update_dict = update.model_dump(exclude_unset=True)
69
+ update_dict = update.model_dump(
70
+ exclude_unset=True, exclude_none=exclude_none
71
+ )
71
72
 
72
73
  original_dict = original.model_dump(exclude_unset=True)
73
74
  if recursive:
@@ -75,7 +76,7 @@ def update_model(
75
76
  else:
76
77
  values = {**original_dict, **update_dict}
77
78
 
78
- return original.__class__(**values)
79
+ return original.__class__.model_validate(values)
79
80
 
80
81
 
81
82
  class TemplateGenerator:
@@ -38,6 +38,7 @@ from zenml.config.source import (
38
38
  Source,
39
39
  SourceType,
40
40
  )
41
+ from zenml.constants import ENV_ZENML_CUSTOM_SOURCE_ROOT
41
42
  from zenml.environment import Environment
42
43
  from zenml.logger import get_logger
43
44
 
@@ -57,7 +58,9 @@ BuiltinFunctionTypeSource = Source(
57
58
  type=SourceType.BUILTIN,
58
59
  )
59
60
 
60
- _CUSTOM_SOURCE_ROOT: Optional[str] = None
61
+ _CUSTOM_SOURCE_ROOT: Optional[str] = os.getenv(
62
+ ENV_ZENML_CUSTOM_SOURCE_ROOT, None
63
+ )
61
64
 
62
65
 
63
66
  def load(source: Union[Source, str]) -> Any:
@@ -12,6 +12,8 @@ from zenml.zen_server.utils import server_config
12
12
 
13
13
  ZENML_CLOUD_RBAC_ENV_PREFIX = "ZENML_CLOUD_"
14
14
 
15
+ _cloud_connection: Optional["ZenMLCloudConnection"] = None
16
+
15
17
 
16
18
  class ZenMLCloudConfiguration(BaseModel):
17
19
  """ZenML Pro RBAC configuration."""
@@ -59,7 +61,7 @@ class ZenMLCloudConfiguration(BaseModel):
59
61
  )
60
62
 
61
63
 
62
- class ZenMLCloudSession:
64
+ class ZenMLCloudConnection:
63
65
  """Class to use for communication between server and control plane."""
64
66
 
65
67
  def __init__(self) -> None:
@@ -67,7 +69,7 @@ class ZenMLCloudSession:
67
69
  self._config = ZenMLCloudConfiguration.from_environment()
68
70
  self._session: Optional[requests.Session] = None
69
71
 
70
- def _get(
72
+ def get(
71
73
  self, endpoint: str, params: Optional[Dict[str, Any]]
72
74
  ) -> requests.Response:
73
75
  """Send a GET request using the active session.
@@ -105,7 +107,7 @@ class ZenMLCloudSession:
105
107
 
106
108
  return response
107
109
 
108
- def _post(
110
+ def post(
109
111
  self,
110
112
  endpoint: str,
111
113
  params: Optional[Dict[str, Any]] = None,
@@ -217,3 +219,16 @@ class ZenMLCloudSession:
217
219
  raise RuntimeError("Could not fetch auth token from auth0.")
218
220
 
219
221
  return str(access_token)
222
+
223
+
224
+ def cloud_connection() -> ZenMLCloudConnection:
225
+ """Return the initialized cloud connection.
226
+
227
+ Returns:
228
+ The cloud connection.
229
+ """
230
+ global _cloud_connection
231
+ if _cloud_connection is None:
232
+ _cloud_connection = ZenMLCloudConnection()
233
+
234
+ return _cloud_connection
@@ -1 +1 @@
1
- import{j as e}from"./@tanstack-CEbkxrhX.js";import{h as s,r as t}from"./index-QORVVTMN.js";import{E as r}from"./EmptyState-BkooiGtL.js";import{H as a}from"./help-B8rqCvqn.js";import{L as o}from"./@react-router-DYovave8.js";import"./@radix-C9DBgJhe.js";import"./@reactflow-CHBapDaj.js";function d(){return e.jsx("div",{className:"flex min-h-screen w-full flex-col",children:e.jsx(r,{icon:e.jsx(a,{className:"h-[120px] w-[120px] fill-neutral-300"}),children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"mb-2 text-display-xs font-semibold",children:"We can't find the page you are looking for"}),e.jsx("p",{className:"text-lg text-theme-text-secondary",children:"You can try typing a different URL or we can bring you back to your Homepage."}),e.jsx("div",{className:"mt-5 flex justify-center",children:e.jsx(s,{size:"md",asChild:!0,children:e.jsx(o,{className:"w-min self-center whitespace-nowrap",to:t.home,children:e.jsx("span",{className:"px-0.5",children:"Go to Home"})})})})]})})})}export{d as default};
1
+ import{j as e}from"./@radix-CFOkMR_E.js";import{h as s,r as t}from"./index-BczVOqUf.js";import{E as r}from"./EmptyState-BMLnFVlB.js";import{H as a}from"./help-bu_DgLKI.js";import{L as o}from"./@react-router-CO-OsFwI.js";import"./@tanstack-DYiOyJUL.js";import"./@reactflow-l_1hUr1S.js";function d(){return e.jsx("div",{className:"flex min-h-screen w-full flex-col",children:e.jsx(r,{icon:e.jsx(a,{className:"h-[120px] w-[120px] fill-neutral-300"}),children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"mb-2 text-display-xs font-semibold",children:"We can't find the page you are looking for"}),e.jsx("p",{className:"text-lg text-theme-text-secondary",children:"You can try typing a different URL or we can bring you back to your Homepage."}),e.jsx("div",{className:"mt-5 flex justify-center",children:e.jsx(s,{size:"md",asChild:!0,children:e.jsx(o,{className:"w-min self-center whitespace-nowrap",to:t.home,children:e.jsx("span",{className:"px-0.5",children:"Go to Home"})})})})]})})})}export{d as default};