zenml-nightly 0.63.0.dev20240801__py3-none-any.whl → 0.64.0.dev20240811__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.
- README.md +2 -2
- RELEASE_NOTES.md +79 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +0 -4
- zenml/analytics/enums.py +0 -6
- zenml/cli/__init__.py +0 -61
- zenml/cli/base.py +1 -1
- zenml/cli/web_login.py +8 -0
- zenml/client.py +0 -4
- zenml/config/build_configuration.py +43 -17
- zenml/config/docker_settings.py +80 -57
- zenml/config/source.py +58 -0
- zenml/constants.py +9 -2
- zenml/entrypoints/base_entrypoint_configuration.py +53 -8
- zenml/enums.py +1 -1
- zenml/environment.py +25 -9
- zenml/image_builders/base_image_builder.py +1 -1
- zenml/image_builders/build_context.py +25 -72
- zenml/integrations/azure/__init__.py +4 -0
- zenml/integrations/azure/flavors/__init__.py +11 -0
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +263 -0
- zenml/{_hub → integrations/azure/orchestrators}/__init__.py +7 -2
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +544 -0
- zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +86 -0
- zenml/integrations/azure/step_operators/azureml_step_operator.py +3 -0
- zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +9 -0
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +7 -2
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +123 -6
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +1 -1
- zenml/integrations/mlflow/__init__.py +1 -1
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +3 -1
- zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +3 -0
- zenml/logger.py +13 -0
- zenml/models/__init__.py +0 -12
- zenml/models/v2/core/pipeline_deployment.py +21 -29
- zenml/models/v2/core/pipeline_run.py +13 -0
- zenml/models/v2/core/server_settings.py +12 -0
- zenml/models/v2/core/user.py +0 -21
- zenml/models/v2/misc/server_models.py +7 -1
- zenml/models/v2/misc/user_auth.py +0 -7
- zenml/new/pipelines/build_utils.py +193 -38
- zenml/new/pipelines/code_archive.py +157 -0
- zenml/new/pipelines/pipeline.py +29 -2
- zenml/new/pipelines/run_utils.py +67 -1
- zenml/service_connectors/service_connector_utils.py +14 -0
- zenml/stack_deployments/aws_stack_deployment.py +26 -3
- zenml/stack_deployments/azure_stack_deployment.py +11 -6
- zenml/stack_deployments/gcp_stack_deployment.py +24 -2
- zenml/stack_deployments/stack_deployment.py +17 -2
- zenml/steps/base_step.py +3 -0
- zenml/utils/archivable.py +149 -0
- zenml/utils/code_utils.py +244 -0
- zenml/utils/notebook_utils.py +122 -0
- zenml/utils/pipeline_docker_image_builder.py +3 -96
- zenml/utils/source_utils.py +109 -1
- zenml/zen_server/dashboard/assets/{404-CI13wQp4.js → 404-CRAA_Lew.js} +1 -1
- zenml/zen_server/dashboard/assets/@radix-BXWm7HOa.js +85 -0
- zenml/zen_server/dashboard/assets/{@react-router-CO-OsFwI.js → @react-router-l3lMcXA2.js} +1 -1
- zenml/zen_server/dashboard/assets/{@reactflow-DIYUhKYX.js → @reactflow-CeVxyqYT.js} +2 -2
- zenml/zen_server/dashboard/assets/{@tanstack-k96lU_C-.js → @tanstack-FmcYZMuX.js} +4 -4
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-ErO9aOgK.js +1 -0
- zenml/zen_server/dashboard/assets/{AwarenessChannel-BNg5uWgI.js → AwarenessChannel-CLXo5rKM.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-Cyp7f4dM.js → CodeSnippet-D0VLxT2A.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-Cu_A9W57.js → CollapsibleCard-BaUPiVg0.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-DmQwTXjj.js → Commands-JrcZK-3j.js} +1 -1
- zenml/zen_server/dashboard/assets/CopyButton-Dbo52T1K.js +2 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-BvqItd-O.js → CsvVizualization-D3kAypDj.js} +3 -3
- zenml/zen_server/dashboard/assets/DisplayDate-DizbSeT-.js +1 -0
- zenml/zen_server/dashboard/assets/EditSecretDialog-Bd7mFLS4.js +1 -0
- zenml/zen_server/dashboard/assets/{EmptyState-BMLnFVlB.js → EmptyState-BHblM39I.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-DbXCTGua.js → Error-C6LeJSER.js} +1 -1
- zenml/zen_server/dashboard/assets/{ExecutionStatus-9zM7eaLh.js → ExecutionStatus-jH4OrWBq.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-BIiNc-uH.js → Helpbox-aAB2XP-z.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-iv1Nu1A0.js → Infobox-BQ0aty32.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-BvBtO2Dp.js → InlineAvatar-DpTLgM3Q.js} +1 -1
- zenml/zen_server/dashboard/assets/Lock-CNyJvf2r.js +1 -0
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-xp3hhULl.js → MarkdownVisualization-Bajxn0HY.js} +1 -1
- zenml/zen_server/dashboard/assets/NumberBox-BmKE0qnO.js +1 -0
- zenml/zen_server/dashboard/assets/{PasswordChecker-DUveqlva.js → PasswordChecker-yGGoJSB-.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-pSAvrGRS.js → ProviderRadio-BBqkIuTd.js} +1 -1
- zenml/zen_server/dashboard/assets/RadioItem-xLhXoiFV.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-C9R0mdaX.js +1 -0
- zenml/zen_server/dashboard/assets/{SetPassword-BOxpgh6N.js → SetPassword-52sNxNiO.js} +1 -1
- zenml/zen_server/dashboard/assets/{SuccessStep-CTSKN2lp.js → SuccessStep-DlkItqYG.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tick-Bnr2TpW6.js → Tick-uxv80Q6a.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-BeCeaRW5.js → UpdatePasswordSchemas-oN4G3sKz.js} +1 -1
- zenml/zen_server/dashboard/assets/{aws-BgKTfTfx.js → aws-0_3UsPif.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-i56092KI.js → check-circle-1_I207rW.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-D_ZlKMqH.js → chevron-down-BpaF8JqM.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-CZBOf6JM.js → chevron-right-double-Dk8e2L99.js} +1 -1
- zenml/zen_server/dashboard/assets/{cloud-only-qelmY92E.js → cloud-only-BkUuI0lZ.js} +1 -1
- zenml/zen_server/dashboard/assets/components-Br2ezRib.js +1 -0
- zenml/zen_server/dashboard/assets/{copy-BXNk6BjL.js → copy-f3XGPPxt.js} +1 -1
- zenml/zen_server/dashboard/assets/{database-1xWSgZfO.js → database-cXYNX9tt.js} +1 -1
- zenml/zen_server/dashboard/assets/{docker-CQMVm_4d.js → docker-8uj__HHK.js} +1 -1
- zenml/zen_server/dashboard/assets/{dots-horizontal-BObFzD5l.js → dots-horizontal-sKQlWEni.js} +1 -1
- zenml/zen_server/dashboard/assets/edit-C0MVvPD2.js +1 -0
- zenml/zen_server/dashboard/assets/{file-text-CqD_iu6l.js → file-text-B9JibxTs.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-bu_DgLKI.js → help-FuHlZwn0.js} +1 -1
- zenml/zen_server/dashboard/assets/index-Bd1xgUQG.js +1 -0
- zenml/zen_server/dashboard/assets/index-DaGknux4.css +1 -0
- zenml/zen_server/dashboard/assets/{index-KsTz2dHG.js → index-DhIZtpxB.js} +5 -5
- zenml/zen_server/dashboard/assets/{index.esm-CbHNSeVw.js → index.esm-DT4uyn2i.js} +1 -1
- zenml/zen_server/dashboard/assets/layout-D6oiSbfd.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-DRpbESS7.js → login-mutation-13A_JSVA.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-D8k8BVFf.js → logs-CgeE2vZP.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-Dfx9hfkf.js → not-found-B0Mmb90p.js} +1 -1
- zenml/zen_server/dashboard/assets/{package-ClbU3KUi.js → package-DdkziX79.js} +1 -1
- zenml/zen_server/dashboard/assets/page-7-v2OBm-.js +1 -0
- zenml/zen_server/dashboard/assets/{page-f3jBVI5Z.js → page-B3ozwdD1.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DYBNGxJt.js → page-BGwA9B1M.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-C176KxyB.js → page-BkjAUyTA.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BnacgBiy.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CzucfYPo.js → page-BxF_KMQ3.js} +2 -2
- zenml/zen_server/dashboard/assets/page-C4POHC0K.js +1 -0
- zenml/zen_server/dashboard/assets/page-C9kudd44.js +9 -0
- zenml/zen_server/dashboard/assets/page-CA1j3GpJ.js +1 -0
- zenml/zen_server/dashboard/assets/page-CCY6yfmu.js +1 -0
- zenml/zen_server/dashboard/assets/page-CgTe7Bme.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DtpwnNXq.js → page-Cgn-6v2Y.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CxQmQqDw.js +1 -0
- zenml/zen_server/dashboard/assets/page-D2Goey3H.js +1 -0
- zenml/zen_server/dashboard/assets/page-DLpOnf7u.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DVPxY5fT.js → page-DSTQnBk-.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BoFtUD9H.js → page-DTysUGOy.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-p2hLJdS2.js → page-D_EXUFJb.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Db15QzsM.js +1 -0
- zenml/zen_server/dashboard/assets/{page-Btu39x7k.js → page-DugsjcQ_.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CZe9GEBF.js → page-OFKSPyN7.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CDgZmwxP.js → page-RnG-qhv9.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Cjn97HMv.js → page-T2BtjwPl.js} +1 -1
- zenml/zen_server/dashboard/assets/page-TXe1Eo3Z.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BxiWdeyg.js → page-YiF_fNbe.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-399pVZHU.js → page-hQaiQXfg.js} +1 -1
- zenml/zen_server/dashboard/assets/persist-3-5nOJ6m.js +1 -0
- zenml/zen_server/dashboard/assets/{play-circle-CNtZKDnW.js → play-circle-XSkLR12B.js} +1 -1
- zenml/zen_server/dashboard/assets/{plus-DOeLmm7C.js → plus-FB9-lEq_.js} +1 -1
- zenml/zen_server/dashboard/assets/refresh-COb6KYDi.js +1 -0
- zenml/zen_server/dashboard/assets/sharedSchema-BoYx_B_L.js +14 -0
- zenml/zen_server/dashboard/assets/{stack-detail-query-Ck7j7BP_.js → stack-detail-query-B-US_-wa.js} +1 -1
- zenml/zen_server/dashboard/assets/{terminal-By9cErXc.js → terminal-grtjrIEJ.js} +1 -1
- zenml/zen_server/dashboard/assets/trash-Cd5CSFqA.js +1 -0
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-f3ZT7psb.js → update-server-settings-mutation-B8GB_ubU.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-rGEp5Umh.js → url-hcMJkz8p.js} +1 -1
- zenml/zen_server/dashboard/assets/{zod-BtSyGx4C.js → zod-CnykDKJj.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
- zenml/zen_server/dashboard_legacy/index.html +1 -1
- zenml/zen_server/dashboard_legacy/{precache-manifest.2fa6e528a6e7447caaf35dadfe7514bb.js → precache-manifest.9c473c96a43298343a7ce1256183123b.js} +4 -4
- zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
- zenml/zen_server/dashboard_legacy/static/js/{main.4aab7e98.chunk.js → main.463c90b9.chunk.js} +2 -2
- zenml/zen_server/dashboard_legacy/static/js/{main.4aab7e98.chunk.js.map → main.463c90b9.chunk.js.map} +1 -1
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/routers/stack_deployment_endpoints.py +6 -0
- zenml/zen_server/routers/users_endpoints.py +0 -7
- zenml/zen_server/utils.py +75 -0
- zenml/zen_server/zen_server_api.py +52 -1
- zenml/zen_stores/base_zen_store.py +7 -1
- zenml/zen_stores/migrations/versions/0.64.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/026d4577b6a0_add_code_path.py +39 -0
- zenml/zen_stores/migrations/versions/3dcc5d20e82f_add_last_user_activity.py +51 -0
- zenml/zen_stores/migrations/versions/909550c7c4da_remove_user_hub_token.py +36 -0
- zenml/zen_stores/rest_zen_store.py +5 -3
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +3 -0
- zenml/zen_stores/schemas/pipeline_run_schemas.py +3 -0
- zenml/zen_stores/schemas/server_settings_schemas.py +2 -0
- zenml/zen_stores/schemas/user_schemas.py +0 -2
- zenml/zen_stores/sql_zen_store.py +25 -1
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240811.dist-info}/METADATA +3 -3
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240811.dist-info}/RECORD +174 -157
- zenml/_hub/client.py +0 -289
- zenml/_hub/constants.py +0 -21
- zenml/_hub/utils.py +0 -79
- zenml/cli/hub.py +0 -1116
- zenml/models/v2/misc/hub_plugin_models.py +0 -79
- zenml/zen_server/dashboard/assets/@radix-CFOkMR_E.js +0 -85
- zenml/zen_server/dashboard/assets/CopyButton-B3sWVJ4Z.js +0 -2
- zenml/zen_server/dashboard/assets/DisplayDate-DYgIjlDF.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-CXoBknpt.js +0 -1
- zenml/zen_server/dashboard/assets/components-DWe4cTjS.js +0 -1
- zenml/zen_server/dashboard/assets/index-vfjX_fJV.css +0 -1
- zenml/zen_server/dashboard/assets/page-C6tXXjnK.js +0 -1
- zenml/zen_server/dashboard/assets/page-CP9obrnG.js +0 -1
- zenml/zen_server/dashboard/assets/page-CaTOsNNw.js +0 -1
- zenml/zen_server/dashboard/assets/page-CmXmB_5i.js +0 -1
- zenml/zen_server/dashboard/assets/page-CvGAOfad.js +0 -1
- zenml/zen_server/dashboard/assets/page-D0bbc-qr.js +0 -5
- zenml/zen_server/dashboard/assets/page-DLEtD2ex.js +0 -1
- zenml/zen_server/dashboard/assets/page-DupV0aBd.js +0 -1
- zenml/zen_server/dashboard/assets/page-EweAR81y.js +0 -1
- zenml/zen_server/dashboard/assets/page-w-YaL77M.js +0 -9
- zenml/zen_server/dashboard/assets/persist-BReKApOc.js +0 -14
- zenml/zen_server/dashboard/assets/secrets-video-OBJ6irhH.svg +0 -21
- zenml/zen_server/dashboard/assets/stacks-video-7gfxpAq4.svg +0 -21
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240811.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240811.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.63.0.dev20240801.dist-info → zenml_nightly-0.64.0.dev20240811.dist-info}/entry_points.txt +0 -0
README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
<div align="center">
|
2
2
|
<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=0fcbab94-8fbe-4a38-93e8-c2348450a42e" />
|
3
|
-
<h1 align="center">
|
3
|
+
<h1 align="center">Connecting data science teams seamlessly to cloud infrastructure.
|
4
4
|
</h1>
|
5
5
|
</div>
|
6
6
|
|
@@ -327,7 +327,7 @@ the Apache License Version 2.0.
|
|
327
327
|
<a href="https://github.com/zenml-io/zenml-projects">Projects Showcase</a>
|
328
328
|
<br />
|
329
329
|
<br />
|
330
|
-
🎉 Version 0.
|
330
|
+
🎉 Version 0.64.0 is out. Check out the release notes
|
331
331
|
<a href="https://github.com/zenml-io/zenml/releases">here</a>.
|
332
332
|
<br />
|
333
333
|
🖥️ Download our VS Code Extension <a href="https://marketplace.visualstudio.com/items?itemName=ZenML.zenml-vscode">here</a>.
|
RELEASE_NOTES.md
CHANGED
@@ -1,5 +1,84 @@
|
|
1
1
|
<!-- markdown-link-check-disable -->
|
2
2
|
|
3
|
+
# 0.64.0
|
4
|
+
|
5
|
+
## New Features and Improvements
|
6
|
+
|
7
|
+
### Notebook Integration
|
8
|
+
|
9
|
+
ZenML now supports running steps defined in notebook cells with remote
|
10
|
+
orchestrators and step operators. This feature enhances the development
|
11
|
+
workflow by allowing seamless transition from experimentation to production.
|
12
|
+
|
13
|
+
- **Details**: [Running remote pipelines from notebooks](https://docs.zenml.io/v/docs/how-to/run-remote-pipelines-from-notebooks)
|
14
|
+
|
15
|
+
### Reduced Docker Builds with Code Uploads
|
16
|
+
|
17
|
+
We've introduced an option to upload code to the artifact store, enabling
|
18
|
+
Docker build reuse. This feature can significantly speed up iteration,
|
19
|
+
especially when working with remote stacks.
|
20
|
+
|
21
|
+
- **Default**: Enabled
|
22
|
+
- **Configuration**: To disable, set `DockerSettings.allow_download_from_artifact_store=False`
|
23
|
+
for steps or pipelines
|
24
|
+
- **Benefits**:
|
25
|
+
- Faster development cycles
|
26
|
+
- No need to register a code repository to reuse builds
|
27
|
+
- Builds only occur when requirements or DockerSettings change
|
28
|
+
- **Documentation**: [Which files are built into the image](https://docs.zenml.io/how-to/customize-docker-builds/which-files-are-built-into-the-image)
|
29
|
+
|
30
|
+
### AzureML Orchestrator Support
|
31
|
+
|
32
|
+
ZenML now supports [AzureML](https://azure.microsoft.com/en-gb/free/machine-learning)
|
33
|
+
as an orchestrator, expanding our list of supported cloud platforms.
|
34
|
+
|
35
|
+
- **Full Azure Guide**: [Setting up an Azure stack](https://docs.zenml.io/how-to/popular-integrations/azure-guide)
|
36
|
+
- **Documentation**: [AzureML orchestrator](https://docs.zenml.io/stack-components/orchestrators/azureml)
|
37
|
+
|
38
|
+
### Terraform Modules
|
39
|
+
|
40
|
+
We've released new Terraform modules on the Hashicorp registry for
|
41
|
+
provisioning complete MLOps stacks across major cloud providers.
|
42
|
+
|
43
|
+
- **Features**:
|
44
|
+
- Automate infrastructure setup for ZenML stack deployment
|
45
|
+
- Handle registration of configurations to ZenML server
|
46
|
+
- **More Information**: [MLOps Terraform ZenML blog post](https://www.zenml.io/blog/mlops-terraform-zenml)
|
47
|
+
|
48
|
+
These updates aim to streamline the MLOps workflow, making it easier to
|
49
|
+
develop, deploy, and manage machine learning pipelines with ZenML.
|
50
|
+
|
51
|
+
## What's Changed
|
52
|
+
|
53
|
+
* Add 0.63.0 to migration testing by @bcdurak in https://github.com/zenml-io/zenml/pull/2893
|
54
|
+
* Document terraform stack deployment modules by @stefannica in https://github.com/zenml-io/zenml/pull/2898
|
55
|
+
* README update by @htahir1 in https://github.com/zenml-io/zenml/pull/2901
|
56
|
+
* Enable `Databricks` Unity Catalog for MLflow by @safoinme in https://github.com/zenml-io/zenml/pull/2900
|
57
|
+
* Make urls pop out from the sea of purple/cyan in the logs by @AlexejPenner in https://github.com/zenml-io/zenml/pull/2894
|
58
|
+
* Add terraform as a supported stack deployment provider by @stefannica in https://github.com/zenml-io/zenml/pull/2902
|
59
|
+
* Fix `Model` imports in docs by @strickvl in https://github.com/zenml-io/zenml/pull/2907
|
60
|
+
* Remove hub references by @schustmi in https://github.com/zenml-io/zenml/pull/2905
|
61
|
+
* Bump NLP template by @avishniakov in https://github.com/zenml-io/zenml/pull/2912
|
62
|
+
* Updated step operator docs by @htahir1 in https://github.com/zenml-io/zenml/pull/2908
|
63
|
+
* Added lightning studio check by @htahir1 in https://github.com/zenml-io/zenml/pull/2910
|
64
|
+
* Upload code to artifact store by @schustmi in https://github.com/zenml-io/zenml/pull/2895
|
65
|
+
* AzureML orchestrator by @bcdurak in https://github.com/zenml-io/zenml/pull/2873
|
66
|
+
* Run steps defined in notebooks with remote orchestrators by @schustmi in https://github.com/zenml-io/zenml/pull/2899
|
67
|
+
* Fix broken / unparsable md docs file by @strickvl in https://github.com/zenml-io/zenml/pull/2916
|
68
|
+
* Bump mlflow to 2.15.0 by @christianversloot in https://github.com/zenml-io/zenml/pull/2896
|
69
|
+
* Remove extra button by @schustmi in https://github.com/zenml-io/zenml/pull/2918
|
70
|
+
* Added last timestamp to zenserver by @htahir1 in https://github.com/zenml-io/zenml/pull/2913
|
71
|
+
* A pipeline can't finish successfully in this case by @AlexejPenner in https://github.com/zenml-io/zenml/pull/2903
|
72
|
+
* Fix the GCP Workload Identity Federation support in the GCP Service Connector by @stefannica in https://github.com/zenml-io/zenml/pull/2914
|
73
|
+
* Embeddings finetuning guide for LLMOps guide by @strickvl in https://github.com/zenml-io/zenml/pull/2917
|
74
|
+
|
75
|
+
## 🥳 Community Contributions 🥳
|
76
|
+
|
77
|
+
We'd like to give a special thanks to @christianversloot who contributed to
|
78
|
+
this release by bumping the `mlflow` version to 2.15.0
|
79
|
+
|
80
|
+
**Full Changelog**: https://github.com/zenml-io/zenml/compare/0.63.0...0.64.0
|
81
|
+
|
3
82
|
# 0.63.0
|
4
83
|
|
5
84
|
Moving forward from the last two releases, we have further improved the
|
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.64.0.dev20240811
|
zenml/__init__.py
CHANGED
@@ -27,10 +27,6 @@ from zenml.logger import init_logging # noqa
|
|
27
27
|
|
28
28
|
init_logging()
|
29
29
|
|
30
|
-
# The following code is needed for `zenml.hub` subpackages to be found
|
31
|
-
from pkgutil import extend_path
|
32
|
-
|
33
|
-
__path__ = extend_path(__path__, __name__)
|
34
30
|
|
35
31
|
# Need to import zenml.models before zenml.config to avoid circular imports
|
36
32
|
from zenml.models import * # noqa: F401
|
zenml/analytics/enums.py
CHANGED
@@ -99,11 +99,5 @@ class AnalyticsEvent(str, Enum):
|
|
99
99
|
ZENML_SERVER_DEPLOYED = "ZenML server deployed"
|
100
100
|
ZENML_SERVER_DESTROYED = "ZenML server destroyed"
|
101
101
|
|
102
|
-
# ZenML Hub events
|
103
|
-
ZENML_HUB_PLUGIN_INSTALL = "ZenML Hub plugin installed"
|
104
|
-
ZENML_HUB_PLUGIN_UNINSTALL = "ZenML Hub plugin uninstalled"
|
105
|
-
ZENML_HUB_PLUGIN_CLONE = "ZenML Hub plugin pulled"
|
106
|
-
ZENML_HUB_PLUGIN_SUBMIT = "ZenML Hub plugin pushed"
|
107
|
-
|
108
102
|
# Server Settings
|
109
103
|
SERVER_SETTINGS_UPDATED = "Server Settings Updated"
|
zenml/cli/__init__.py
CHANGED
@@ -2541,66 +2541,6 @@ zenml artifact-store deploy -f gcp -p gcp -r us-east1 -x project_id=zenml-core b
|
|
2541
2541
|
|
2542
2542
|
For full documentation on this functionality, please refer to [the dedicated
|
2543
2543
|
documentation on stack component deploy](https://docs.zenml.io/how-to/stack-deployment/deploy-a-stack-component).
|
2544
|
-
|
2545
|
-
Interacting with the ZenML Hub
|
2546
|
-
------------------------------
|
2547
|
-
|
2548
|
-
The ZenML Hub is a central location for discovering and sharing third-party
|
2549
|
-
ZenML code, such as custom integrations, components, steps, pipelines,
|
2550
|
-
materializers, and more.
|
2551
|
-
You can browse the ZenML Hub at [https://hub.zenml.io](https://hub.zenml.io).
|
2552
|
-
|
2553
|
-
The ZenML CLI provides various commands to interact with the ZenML Hub:
|
2554
|
-
|
2555
|
-
- Listing all plugins available on the Hub:
|
2556
|
-
```bash
|
2557
|
-
zenml hub list
|
2558
|
-
```
|
2559
|
-
|
2560
|
-
- Installing a Hub plugin:
|
2561
|
-
```bash
|
2562
|
-
zenml hub install
|
2563
|
-
```
|
2564
|
-
Installed plugins can be imported via `from zenml.hub.<plugin_name> import ...`.
|
2565
|
-
|
2566
|
-
|
2567
|
-
- Uninstalling a Hub plugin:
|
2568
|
-
```bash
|
2569
|
-
zenml hub uninstall
|
2570
|
-
```
|
2571
|
-
|
2572
|
-
- Cloning the source code of a Hub plugin (without installing it):
|
2573
|
-
```bash
|
2574
|
-
zenml hub clone
|
2575
|
-
```
|
2576
|
-
This is useful, e.g., for extending an existing plugin or for getting the
|
2577
|
-
examples of a plugin.
|
2578
|
-
|
2579
|
-
- Submitting/contributing a plugin to the Hub (requires login, see below):
|
2580
|
-
```bash
|
2581
|
-
zenml hub submit
|
2582
|
-
```
|
2583
|
-
If you are unsure about which arguments you need to set, you can run the
|
2584
|
-
command in interactive mode:
|
2585
|
-
```bash
|
2586
|
-
zenml hub submit --interactive
|
2587
|
-
```
|
2588
|
-
This will ask for and validate inputs one at a time.
|
2589
|
-
|
2590
|
-
- Logging in to the Hub:
|
2591
|
-
```bash
|
2592
|
-
zenml hub login
|
2593
|
-
```
|
2594
|
-
|
2595
|
-
- Logging out of the Hub:
|
2596
|
-
```bash
|
2597
|
-
zenml hub logout
|
2598
|
-
```
|
2599
|
-
|
2600
|
-
- Viewing the build logs of a plugin you submitted to the Hub:
|
2601
|
-
```bash
|
2602
|
-
zenml hub logs
|
2603
|
-
```
|
2604
2544
|
"""
|
2605
2545
|
|
2606
2546
|
from zenml.cli.version import * # noqa
|
@@ -2612,7 +2552,6 @@ from zenml.cli.code_repository import * # noqa
|
|
2612
2552
|
from zenml.cli.config import * # noqa
|
2613
2553
|
from zenml.cli.downgrade import * # noqa
|
2614
2554
|
from zenml.cli.feature import * # noqa
|
2615
|
-
from zenml.cli.hub import * # noqa
|
2616
2555
|
from zenml.cli.integration import * # noqa
|
2617
2556
|
from zenml.cli.model import * # noqa
|
2618
2557
|
from zenml.cli.model_registry import * # noqa
|
zenml/cli/base.py
CHANGED
@@ -87,7 +87,7 @@ ZENML_PROJECT_TEMPLATES = dict(
|
|
87
87
|
),
|
88
88
|
nlp=ZenMLProjectTemplateLocation(
|
89
89
|
github_url="zenml-io/template-nlp",
|
90
|
-
github_tag="2024.
|
90
|
+
github_tag="2024.08.07", # Make sure it is aligned with .github/workflows/update-templates-to-examples.yml
|
91
91
|
),
|
92
92
|
llm_finetuning=ZenMLProjectTemplateLocation(
|
93
93
|
github_url="zenml-io/template-llm-finetuning",
|
zenml/cli/web_login.py
CHANGED
@@ -28,6 +28,7 @@ from zenml.constants import (
|
|
28
28
|
DEVICE_AUTHORIZATION,
|
29
29
|
LOGIN,
|
30
30
|
VERSION_1,
|
31
|
+
ZENML_PRO_CONNECTION_ISSUES_SUSPENDED_PAUSED_TENANT_HINT,
|
31
32
|
)
|
32
33
|
from zenml.exceptions import AuthorizationException, OAuthError
|
33
34
|
from zenml.logger import get_logger
|
@@ -93,6 +94,11 @@ def web_login(url: str, verify_ssl: Union[str, bool]) -> str:
|
|
93
94
|
# Get rid of any trailing slashes to prevent issues when having double
|
94
95
|
# slashes in the URL
|
95
96
|
url = url.rstrip("/")
|
97
|
+
zenml_pro_extra = ""
|
98
|
+
if ".zenml.io" in url:
|
99
|
+
zenml_pro_extra = (
|
100
|
+
ZENML_PRO_CONNECTION_ISSUES_SUSPENDED_PAUSED_TENANT_HINT
|
101
|
+
)
|
96
102
|
try:
|
97
103
|
auth_url = url + API + VERSION_1 + DEVICE_AUTHORIZATION
|
98
104
|
response = requests.post(
|
@@ -111,6 +117,7 @@ def web_login(url: str, verify_ssl: Union[str, bool]) -> str:
|
|
111
117
|
logger.info(f"Error: {response.status_code} {response.text}")
|
112
118
|
raise AuthorizationException(
|
113
119
|
"Could not connect to API server. Please check the URL."
|
120
|
+
+ zenml_pro_extra
|
114
121
|
)
|
115
122
|
except (requests.exceptions.JSONDecodeError, ValueError, TypeError):
|
116
123
|
logger.exception("Bad response received from API server.")
|
@@ -121,6 +128,7 @@ def web_login(url: str, verify_ssl: Union[str, bool]) -> str:
|
|
121
128
|
logger.exception("Could not connect to API server.")
|
122
129
|
raise AuthorizationException(
|
123
130
|
"Could not connect to API server. Please check the URL."
|
131
|
+
+ zenml_pro_extra
|
124
132
|
)
|
125
133
|
|
126
134
|
# Open the verification URL in the user's browser
|
zenml/client.py
CHANGED
@@ -868,7 +868,6 @@ class Client(metaclass=ClientMetaClass):
|
|
868
868
|
updated_full_name: Optional[str] = None,
|
869
869
|
updated_email: Optional[str] = None,
|
870
870
|
updated_email_opt_in: Optional[bool] = None,
|
871
|
-
updated_hub_token: Optional[str] = None,
|
872
871
|
updated_password: Optional[str] = None,
|
873
872
|
old_password: Optional[str] = None,
|
874
873
|
updated_is_admin: Optional[bool] = None,
|
@@ -883,7 +882,6 @@ class Client(metaclass=ClientMetaClass):
|
|
883
882
|
updated_full_name: The new full name of the user.
|
884
883
|
updated_email: The new email of the user.
|
885
884
|
updated_email_opt_in: The new email opt-in status of the user.
|
886
|
-
updated_hub_token: Update the hub token
|
887
885
|
updated_password: The new password of the user.
|
888
886
|
old_password: The old password of the user. Required for password
|
889
887
|
update.
|
@@ -911,8 +909,6 @@ class Client(metaclass=ClientMetaClass):
|
|
911
909
|
)
|
912
910
|
if updated_email_opt_in is not None:
|
913
911
|
user_update.email_opted_in = updated_email_opt_in
|
914
|
-
if updated_hub_token is not None:
|
915
|
-
user_update.hub_token = updated_hub_token
|
916
912
|
if updated_password is not None:
|
917
913
|
user_update.password = updated_password
|
918
914
|
if old_password is None:
|
@@ -14,11 +14,13 @@
|
|
14
14
|
"""Build configuration class."""
|
15
15
|
|
16
16
|
import hashlib
|
17
|
+
import json
|
17
18
|
from typing import TYPE_CHECKING, Dict, Optional
|
18
19
|
|
19
20
|
from pydantic import BaseModel
|
20
21
|
|
21
|
-
from zenml.config.docker_settings import DockerSettings
|
22
|
+
from zenml.config.docker_settings import DockerSettings
|
23
|
+
from zenml.utils import json_utils
|
22
24
|
|
23
25
|
if TYPE_CHECKING:
|
24
26
|
from zenml.code_repositories import BaseCodeRepository
|
@@ -60,7 +62,14 @@ class BuildConfiguration(BaseModel):
|
|
60
62
|
The checksum.
|
61
63
|
"""
|
62
64
|
hash_ = hashlib.md5() # nosec
|
63
|
-
|
65
|
+
settings_json = json.dumps(
|
66
|
+
self.settings.model_dump(
|
67
|
+
mode="json", exclude={"prevent_build_reuse"}
|
68
|
+
),
|
69
|
+
sort_keys=True,
|
70
|
+
default=json_utils.pydantic_encoder,
|
71
|
+
)
|
72
|
+
hash_.update(settings_json.encode())
|
64
73
|
if self.entrypoint:
|
65
74
|
hash_.update(self.entrypoint.encode())
|
66
75
|
|
@@ -72,7 +81,7 @@ class BuildConfiguration(BaseModel):
|
|
72
81
|
PipelineDockerImageBuilder,
|
73
82
|
)
|
74
83
|
|
75
|
-
pass_code_repo = self.
|
84
|
+
pass_code_repo = self.should_download_files_from_code_repository(
|
76
85
|
code_repository=code_repository
|
77
86
|
)
|
78
87
|
requirements_files = (
|
@@ -101,34 +110,51 @@ class BuildConfiguration(BaseModel):
|
|
101
110
|
Returns:
|
102
111
|
Whether files should be included in the image.
|
103
112
|
"""
|
104
|
-
if self.
|
105
|
-
return
|
113
|
+
if self.should_download_files(code_repository=code_repository):
|
114
|
+
return False
|
106
115
|
|
107
|
-
|
108
|
-
|
109
|
-
|
116
|
+
return self.settings.allow_including_files_in_images
|
117
|
+
|
118
|
+
def should_download_files(
|
119
|
+
self,
|
120
|
+
code_repository: Optional["BaseCodeRepository"],
|
121
|
+
) -> bool:
|
122
|
+
"""Whether files should be downloaded in the image.
|
123
|
+
|
124
|
+
Args:
|
125
|
+
code_repository: Code repository that can be used to download files
|
126
|
+
inside the image.
|
127
|
+
|
128
|
+
Returns:
|
129
|
+
Whether files should be downloaded in the image.
|
130
|
+
"""
|
131
|
+
if self.should_download_files_from_code_repository(
|
132
|
+
code_repository=code_repository
|
110
133
|
):
|
111
134
|
return True
|
112
135
|
|
136
|
+
if self.settings.allow_download_from_artifact_store:
|
137
|
+
return True
|
138
|
+
|
113
139
|
return False
|
114
140
|
|
115
|
-
def
|
141
|
+
def should_download_files_from_code_repository(
|
116
142
|
self,
|
117
143
|
code_repository: Optional["BaseCodeRepository"],
|
118
144
|
) -> bool:
|
119
|
-
"""Whether files should be downloaded
|
145
|
+
"""Whether files should be downloaded from the code repository.
|
120
146
|
|
121
147
|
Args:
|
122
148
|
code_repository: Code repository that can be used to download files
|
123
149
|
inside the image.
|
124
150
|
|
125
151
|
Returns:
|
126
|
-
Whether files should be downloaded
|
152
|
+
Whether files should be downloaded from the code repository.
|
127
153
|
"""
|
128
|
-
if
|
129
|
-
|
154
|
+
if (
|
155
|
+
code_repository
|
156
|
+
and self.settings.allow_download_from_code_repository
|
157
|
+
):
|
158
|
+
return True
|
130
159
|
|
131
|
-
return
|
132
|
-
SourceFileMode.DOWNLOAD,
|
133
|
-
SourceFileMode.DOWNLOAD_OR_INCLUDE,
|
134
|
-
}
|
160
|
+
return False
|
zenml/config/docker_settings.py
CHANGED
@@ -16,8 +16,7 @@
|
|
16
16
|
from enum import Enum
|
17
17
|
from typing import Any, Dict, List, Optional, Union
|
18
18
|
|
19
|
-
from pydantic import BaseModel, Field, model_validator
|
20
|
-
from pydantic_settings import SettingsConfigDict
|
19
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
21
20
|
|
22
21
|
from zenml.config.base_settings import BaseSettings
|
23
22
|
from zenml.logger import get_logger
|
@@ -49,15 +48,6 @@ class PythonEnvironmentExportMethod(Enum):
|
|
49
48
|
}[self]
|
50
49
|
|
51
50
|
|
52
|
-
class SourceFileMode(Enum):
|
53
|
-
"""Different methods to handle source files in Docker images."""
|
54
|
-
|
55
|
-
INCLUDE = "include"
|
56
|
-
DOWNLOAD_OR_INCLUDE = "download_or_include"
|
57
|
-
DOWNLOAD = "download"
|
58
|
-
IGNORE = "ignore"
|
59
|
-
|
60
|
-
|
61
51
|
class PythonPackageInstaller(Enum):
|
62
52
|
"""Different installers for python packages."""
|
63
53
|
|
@@ -102,7 +92,6 @@ class DockerSettings(BaseSettings):
|
|
102
92
|
Depending on the configuration of this object, requirements will be
|
103
93
|
installed in the following order (each step optional):
|
104
94
|
- The packages installed in your local python environment
|
105
|
-
- The packages specified via the `required_hub_plugins` attribute
|
106
95
|
- The packages required by the stack unless this is disabled by setting
|
107
96
|
`install_stack_requirements=False`.
|
108
97
|
- The packages specified via the `required_integrations`
|
@@ -135,10 +124,9 @@ class DockerSettings(BaseSettings):
|
|
135
124
|
when the `dockerfile` attribute is set. If this is left empty, the
|
136
125
|
build context will only contain the Dockerfile.
|
137
126
|
parent_image_build_config: Configuration for the parent image build.
|
138
|
-
build_options: DEPRECATED, use parent_image_build_config.build_options
|
139
|
-
instead.
|
140
127
|
skip_build: If set to `True`, the parent image will be used directly to
|
141
128
|
run the steps of your pipeline.
|
129
|
+
prevent_build_reuse: Prevent the reuse of an existing build.
|
142
130
|
target_repository: Name of the Docker repository to which the
|
143
131
|
image should be pushed. This repository will be appended to the
|
144
132
|
registry URI of the container registry of your stack and should
|
@@ -161,11 +149,7 @@ class DockerSettings(BaseSettings):
|
|
161
149
|
required_integrations: List of ZenML integrations that should be
|
162
150
|
installed. All requirements for the specified integrations will
|
163
151
|
be installed inside the Docker image.
|
164
|
-
required_hub_plugins:
|
165
|
-
Expected format: '(<author_username>/)<plugin_name>==<version>'.
|
166
|
-
If no version is specified, the latest version is taken. The
|
167
|
-
packages of required plugins and all their dependencies will be
|
168
|
-
installed inside the Docker image.
|
152
|
+
required_hub_plugins: DEPRECATED/UNUSED.
|
169
153
|
install_stack_requirements: If `True`, ZenML will automatically detect
|
170
154
|
if components of your active stack are part of a ZenML integration
|
171
155
|
and install the corresponding requirements and apt packages.
|
@@ -176,33 +160,32 @@ class DockerSettings(BaseSettings):
|
|
176
160
|
environment: Dictionary of environment variables to set inside the
|
177
161
|
Docker image.
|
178
162
|
build_config: Configuration for the main image build.
|
179
|
-
dockerignore: DEPRECATED, use build_config.dockerignore instead.
|
180
|
-
copy_files: DEPRECATED, use the `source_files` attribute instead.
|
181
|
-
copy_global_config: DEPRECATED/UNUSED.
|
182
163
|
user: If not `None`, will set the user, make it owner of the `/app`
|
183
164
|
directory which contains all the user code and run the container
|
184
165
|
entrypoint as this user.
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
166
|
+
allow_including_files_in_images: If `True`, code can be included in the
|
167
|
+
Docker images if code download from a code repository or artifact
|
168
|
+
store is disabled or not possible.
|
169
|
+
allow_download_from_code_repository: If `True`, code can be downloaded
|
170
|
+
from a code repository if possible.
|
171
|
+
allow_download_from_artifact_store: If `True`, code can be downloaded
|
172
|
+
from the artifact store.
|
173
|
+
build_options: DEPRECATED, use parent_image_build_config.build_options
|
174
|
+
instead.
|
175
|
+
dockerignore: DEPRECATED, use build_config.dockerignore instead.
|
176
|
+
copy_files: DEPRECATED/UNUSED.
|
177
|
+
copy_global_config: DEPRECATED/UNUSED.
|
178
|
+
source_files: DEPRECATED. Use allow_including_files_in_images,
|
179
|
+
allow_download_from_code_repository and
|
180
|
+
allow_download_from_artifact_store instead.
|
198
181
|
"""
|
199
182
|
|
200
183
|
parent_image: Optional[str] = None
|
201
184
|
dockerfile: Optional[str] = None
|
202
185
|
build_context_root: Optional[str] = None
|
203
|
-
build_options: Dict[str, Any] = {}
|
204
186
|
parent_image_build_config: Optional[DockerBuildConfig] = None
|
205
187
|
skip_build: bool = False
|
188
|
+
prevent_build_reuse: bool = False
|
206
189
|
target_repository: Optional[str] = None
|
207
190
|
python_package_installer: PythonPackageInstaller = (
|
208
191
|
PythonPackageInstaller.PIP
|
@@ -215,49 +198,89 @@ class DockerSettings(BaseSettings):
|
|
215
198
|
default=None, union_mode="left_to_right"
|
216
199
|
)
|
217
200
|
required_integrations: List[str] = []
|
218
|
-
required_hub_plugins: List[str] = []
|
219
201
|
install_stack_requirements: bool = True
|
220
202
|
apt_packages: List[str] = []
|
221
203
|
environment: Dict[str, Any] = {}
|
222
|
-
dockerignore: Optional[str] = None
|
223
|
-
copy_files: bool = True
|
224
|
-
copy_global_config: bool = True
|
225
204
|
user: Optional[str] = None
|
226
205
|
build_config: Optional[DockerBuildConfig] = None
|
227
206
|
|
228
|
-
|
207
|
+
allow_including_files_in_images: bool = True
|
208
|
+
allow_download_from_code_repository: bool = True
|
209
|
+
allow_download_from_artifact_store: bool = True
|
210
|
+
|
211
|
+
# Deprecated attributes
|
212
|
+
build_options: Dict[str, Any] = {}
|
213
|
+
dockerignore: Optional[str] = None
|
214
|
+
copy_files: bool = True
|
215
|
+
copy_global_config: bool = True
|
216
|
+
source_files: Optional[str] = None
|
217
|
+
required_hub_plugins: List[str] = []
|
229
218
|
|
230
219
|
_deprecation_validator = deprecation_utils.deprecate_pydantic_attributes(
|
231
|
-
"copy_files",
|
220
|
+
"copy_files",
|
221
|
+
"copy_global_config",
|
222
|
+
"source_files",
|
223
|
+
"required_hub_plugins",
|
232
224
|
)
|
233
225
|
|
234
226
|
@model_validator(mode="before")
|
235
227
|
@classmethod
|
236
228
|
@before_validator_handler
|
237
|
-
def
|
238
|
-
"""
|
229
|
+
def _migrate_source_files(cls, data: Dict[str, Any]) -> Dict[str, Any]:
|
230
|
+
"""Migrate old source_files values.
|
239
231
|
|
240
232
|
Args:
|
241
|
-
data: The
|
233
|
+
data: The model data.
|
234
|
+
|
235
|
+
Raises:
|
236
|
+
ValueError: If an invalid source file mode is specified.
|
242
237
|
|
243
238
|
Returns:
|
244
|
-
The migrated
|
239
|
+
The migrated data.
|
245
240
|
"""
|
246
|
-
|
241
|
+
source_files = data.get("source_files", None)
|
247
242
|
|
248
|
-
if
|
243
|
+
if source_files is None:
|
249
244
|
return data
|
250
245
|
|
251
|
-
|
252
|
-
|
246
|
+
replacement_attributes = [
|
247
|
+
"allow_including_files_in_images",
|
248
|
+
"allow_download_from_code_repository",
|
249
|
+
"allow_download_from_artifact_store",
|
250
|
+
]
|
251
|
+
if any(v in data for v in replacement_attributes):
|
253
252
|
logger.warning(
|
254
|
-
"Both `
|
255
|
-
"DockerSettings, ignoring the `
|
253
|
+
"Both `source_files` and one of %s specified for the "
|
254
|
+
"DockerSettings, ignoring the `source_files` value.",
|
255
|
+
replacement_attributes,
|
256
256
|
)
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
257
|
+
return data
|
258
|
+
|
259
|
+
allow_including_files_in_images = False
|
260
|
+
allow_download_from_code_repository = False
|
261
|
+
allow_download_from_artifact_store = False
|
262
|
+
|
263
|
+
if source_files == "download":
|
264
|
+
allow_download_from_code_repository = True
|
265
|
+
elif source_files == "include":
|
266
|
+
allow_including_files_in_images = True
|
267
|
+
elif source_files == "download_or_include":
|
268
|
+
allow_including_files_in_images = True
|
269
|
+
allow_download_from_code_repository = True
|
270
|
+
elif source_files == "ignore":
|
271
|
+
pass
|
272
|
+
else:
|
273
|
+
raise ValueError(f"Invalid source file mode `{source_files}`.")
|
274
|
+
|
275
|
+
data["allow_including_files_in_images"] = (
|
276
|
+
allow_including_files_in_images
|
277
|
+
)
|
278
|
+
data["allow_download_from_code_repository"] = (
|
279
|
+
allow_download_from_code_repository
|
280
|
+
)
|
281
|
+
data["allow_download_from_artifact_store"] = (
|
282
|
+
allow_download_from_artifact_store
|
283
|
+
)
|
261
284
|
|
262
285
|
return data
|
263
286
|
|
@@ -282,7 +305,7 @@ class DockerSettings(BaseSettings):
|
|
282
305
|
|
283
306
|
return self
|
284
307
|
|
285
|
-
model_config =
|
308
|
+
model_config = ConfigDict(
|
286
309
|
# public attributes are immutable
|
287
310
|
frozen=True,
|
288
311
|
# prevent extra attributes during model initialization
|