zenml-nightly 0.58.2.dev20240626__py3-none-any.whl → 0.61.0.dev20240712__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 +30 -9
- RELEASE_NOTES.md +240 -0
- zenml/VERSION +1 -1
- zenml/analytics/enums.py +3 -0
- zenml/cli/__init__.py +28 -0
- zenml/cli/artifact.py +1 -2
- zenml/cli/integration.py +9 -8
- zenml/cli/server.py +6 -0
- zenml/cli/stack.py +946 -39
- zenml/cli/stack_components.py +7 -0
- zenml/cli/text_utils.py +35 -1
- zenml/cli/utils.py +127 -10
- zenml/client.py +23 -14
- zenml/config/docker_settings.py +8 -5
- zenml/constants.py +10 -1
- zenml/container_registries/base_container_registry.py +1 -0
- zenml/enums.py +7 -0
- zenml/event_hub/event_hub.py +5 -8
- zenml/integrations/aws/__init__.py +1 -0
- zenml/integrations/azure/__init__.py +1 -0
- zenml/integrations/deepchecks/__init__.py +1 -0
- zenml/integrations/discord/__init__.py +1 -0
- zenml/integrations/evidently/__init__.py +1 -0
- zenml/integrations/facets/__init__.py +1 -0
- zenml/integrations/feast/__init__.py +1 -0
- zenml/integrations/gcp/__init__.py +3 -1
- zenml/integrations/gcp/google_credentials_mixin.py +1 -1
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +320 -64
- zenml/integrations/huggingface/__init__.py +1 -0
- zenml/integrations/integration.py +24 -0
- zenml/integrations/kubeflow/__init__.py +3 -0
- zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +1 -1
- zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +0 -1
- zenml/integrations/kubernetes/__init__.py +3 -1
- zenml/integrations/kubernetes/orchestrators/kube_utils.py +4 -1
- zenml/integrations/label_studio/annotators/label_studio_annotator.py +1 -0
- zenml/integrations/langchain/__init__.py +1 -0
- zenml/integrations/mlflow/__init__.py +3 -1
- zenml/integrations/neural_prophet/__init__.py +1 -0
- zenml/integrations/polars/__init__.py +1 -0
- zenml/integrations/prodigy/__init__.py +1 -0
- zenml/integrations/pycaret/__init__.py +6 -0
- zenml/integrations/registry.py +37 -0
- zenml/integrations/s3/artifact_stores/s3_artifact_store.py +17 -6
- zenml/integrations/seldon/__init__.py +1 -0
- zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +1 -0
- zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +2 -2
- zenml/integrations/skypilot/orchestrators/skypilot_base_vm_orchestrator.py +1 -1
- zenml/integrations/skypilot/orchestrators/skypilot_orchestrator_entrypoint.py +2 -2
- zenml/integrations/skypilot_aws/__init__.py +2 -1
- zenml/integrations/skypilot_azure/__init__.py +1 -1
- zenml/integrations/skypilot_gcp/__init__.py +1 -1
- zenml/integrations/skypilot_lambda/__init__.py +1 -1
- zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py +1 -1
- zenml/integrations/slack/__init__.py +1 -0
- zenml/integrations/tekton/__init__.py +1 -0
- zenml/integrations/tensorboard/__init__.py +0 -1
- zenml/integrations/tensorflow/__init__.py +18 -6
- zenml/integrations/wandb/__init__.py +1 -0
- zenml/models/__init__.py +11 -0
- zenml/models/v2/core/component.py +18 -0
- zenml/models/v2/core/model.py +1 -2
- zenml/models/v2/core/service_connector.py +17 -0
- zenml/models/v2/core/stack.py +31 -0
- zenml/models/v2/misc/full_stack.py +97 -0
- zenml/models/v2/misc/stack_deployment.py +86 -0
- zenml/new/pipelines/pipeline.py +1 -1
- zenml/orchestrators/input_utils.py +3 -6
- zenml/stack/stack.py +3 -6
- zenml/stack_deployments/__init__.py +14 -0
- zenml/stack_deployments/aws_stack_deployment.py +254 -0
- zenml/stack_deployments/gcp_stack_deployment.py +260 -0
- zenml/stack_deployments/stack_deployment.py +208 -0
- zenml/stack_deployments/utils.py +44 -0
- zenml/utils/function_utils.py +1 -1
- zenml/utils/pagination_utils.py +7 -5
- zenml/utils/pipeline_docker_image_builder.py +97 -68
- zenml/utils/pydantic_utils.py +6 -5
- zenml/zen_server/cloud_utils.py +18 -3
- zenml/zen_server/dashboard/assets/{404-CDPQCl4D.js → 404-DpJaNHKF.js} +1 -1
- zenml/zen_server/dashboard/assets/@radix-CFOkMR_E.js +85 -0
- zenml/zen_server/dashboard/assets/{@react-router-DYovave8.js → @react-router-CO-OsFwI.js} +2 -2
- zenml/zen_server/dashboard/assets/{@reactflow-CHBapDaj.js → @reactflow-DJfzkHO1.js} +2 -2
- zenml/zen_server/dashboard/assets/@tanstack-DYiOyJUL.js +22 -0
- zenml/zen_server/dashboard/assets/AwarenessChannel-BYDLT2xC.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-BidtnWOi.js → CodeSnippet-BkOuRmyq.js} +2 -2
- zenml/zen_server/dashboard/assets/Commands-ZvWR1BRs.js +1 -0
- zenml/zen_server/dashboard/assets/CopyButton-DVwLkafa.js +2 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-BOuez-fG.js → CsvVizualization-C2IiqX4I.js} +7 -7
- zenml/zen_server/dashboard/assets/DisplayDate-DYgIjlDF.js +1 -0
- zenml/zen_server/dashboard/assets/EmptyState-BMLnFVlB.js +1 -0
- zenml/zen_server/dashboard/assets/Error-CqX0VqW_.js +1 -0
- zenml/zen_server/dashboard/assets/ExecutionStatus-BoLUXR9t.js +1 -0
- zenml/zen_server/dashboard/assets/Helpbox-LFydyVwh.js +1 -0
- zenml/zen_server/dashboard/assets/Infobox-DnENC0sh.js +1 -0
- zenml/zen_server/dashboard/assets/InlineAvatar-CbJtYr0t.js +1 -0
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-DsB2QZiK.js → MarkdownVisualization-xp3hhULl.js} +2 -2
- zenml/zen_server/dashboard/assets/Pagination-DEbVUupy.js +1 -0
- zenml/zen_server/dashboard/assets/PasswordChecker-DUveqlva.js +1 -0
- zenml/zen_server/dashboard/assets/SetPassword-BYBdbQDo.js +1 -0
- zenml/zen_server/dashboard/assets/SuccessStep-Nx743hll.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DnM-c11H.js → UpdatePasswordSchemas-DF9gSzE0.js} +1 -1
- zenml/zen_server/dashboard/assets/{aws-t0gKCj_R.js → aws-BgKTfTfx.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-BVvhm5dy.js → check-circle-i56092KI.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-zcvCWmyP.js → chevron-down-D_ZlKMqH.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-CJ50E9Gr.js → chevron-right-double-BiEMg7rd.js} +1 -1
- zenml/zen_server/dashboard/assets/cloud-only-DVbIeckv.js +1 -0
- zenml/zen_server/dashboard/assets/{copy-BRhQz3j-.js → copy-BXNk6BjL.js} +1 -1
- zenml/zen_server/dashboard/assets/{database-CRRnyFWh.js → database-1xWSgZfO.js} +1 -1
- zenml/zen_server/dashboard/assets/{docker-BAonhm6G.js → docker-CQMVm_4d.js} +1 -1
- zenml/zen_server/dashboard/assets/{file-text-CbVERUON.js → file-text-CqD_iu6l.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-B8rqCvqn.js → help-bu_DgLKI.js} +1 -1
- zenml/zen_server/dashboard/assets/index-C_CrU4vI.js +1 -0
- zenml/zen_server/dashboard/assets/index-DK1ynKjA.js +55 -0
- zenml/zen_server/dashboard/assets/index-inApY3KQ.css +1 -0
- zenml/zen_server/dashboard/assets/index-rK_Wuy2W.js +1 -0
- zenml/zen_server/dashboard/assets/index.esm-Corw4lXQ.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-wzzl23C6.js → login-mutation-BUnVASxp.js} +1 -1
- zenml/zen_server/dashboard/assets/not-found-B4VnX8gK.js +1 -0
- zenml/zen_server/dashboard/assets/package-CsUhPmou.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BmkSiYeQ.js → page-3efNCDeb.js} +2 -2
- zenml/zen_server/dashboard/assets/page-7zTHbhhI.js +1 -0
- zenml/zen_server/dashboard/assets/page-BEs6jK71.js +1 -0
- zenml/zen_server/dashboard/assets/page-BpSqIf4B.js +1 -0
- zenml/zen_server/dashboard/assets/{page-AQKopn_4.js → page-Bx6o0ARS.js} +1 -1
- zenml/zen_server/dashboard/assets/page-C43QGHTt.js +9 -0
- zenml/zen_server/dashboard/assets/page-CR0OG7ss.js +1 -0
- zenml/zen_server/dashboard/assets/page-CRTJ0UuR.js +1 -0
- zenml/zen_server/dashboard/assets/page-CUZIGO-3.js +1 -0
- zenml/zen_server/dashboard/assets/page-CaopxiU1.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CuT1SUik.js → page-Cx67M0QT.js} +1 -1
- zenml/zen_server/dashboard/assets/page-D7Z399xy.js +1 -0
- zenml/zen_server/dashboard/assets/page-D93kd7Xj.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BzVZGExK.js → page-DKlIdAe5.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Bi5AI0S7.js → page-DMOYZppS.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DMsSn3dv.js +2 -0
- zenml/zen_server/dashboard/assets/{page-BW6Ket3a.js → page-Dc_7KMQE.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DvCvroOM.js +1 -0
- zenml/zen_server/dashboard/assets/page-Hus2pr9T.js +1 -0
- zenml/zen_server/dashboard/assets/page-JyfeDUfu.js +1 -0
- zenml/zen_server/dashboard/assets/{page-yN4rZ-ZS.js → page-Sxn82W-5.js} +1 -1
- zenml/zen_server/dashboard/assets/page-TKXERe16.js +1 -0
- zenml/zen_server/dashboard/assets/page-Xu8JEjSU.js +1 -0
- zenml/zen_server/dashboard/assets/{play-circle-DK5QMJyp.js → play-circle-CNtZKDnW.js} +1 -1
- zenml/zen_server/dashboard/assets/plus-DOeLmm7C.js +1 -0
- zenml/zen_server/dashboard/assets/{terminal-B2ovgWuz.js → terminal-By9cErXc.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-0Wgz8pUE.js → update-server-settings-mutation-CR8e3Sir.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-6_xv0WJS.js → url-DuQMeqYA.js} +1 -1
- zenml/zen_server/dashboard/assets/{zod-DrZvVLjd.js → zod-BhoGpZ63.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.f4abc5b7cfa7d90c1caf5521918e29a8.js → precache-manifest.c8c57fb0d2132b1d3c2119e776b7dfb3.js} +4 -4
- zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
- zenml/zen_server/dashboard_legacy/static/js/{main.ac2f17d0.chunk.js → main.382439a7.chunk.js} +2 -2
- zenml/zen_server/dashboard_legacy/static/js/{main.ac2f17d0.chunk.js.map → main.382439a7.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/feature_gate/zenml_cloud_feature_gate.py +11 -5
- zenml/zen_server/pipeline_deployment/utils.py +57 -44
- zenml/zen_server/rbac/zenml_cloud_rbac.py +11 -5
- zenml/zen_server/routers/stack_deployment_endpoints.py +158 -0
- zenml/zen_server/routers/workspaces_endpoints.py +64 -0
- zenml/zen_server/zen_server_api.py +2 -0
- zenml/zen_stores/migrations/utils.py +1 -1
- zenml/zen_stores/migrations/versions/0.60.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.61.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0d707865f404_adding_labels_to_stacks.py +30 -0
- zenml/zen_stores/rest_zen_store.py +145 -4
- zenml/zen_stores/schemas/stack_schemas.py +10 -0
- zenml/zen_stores/schemas/step_run_schemas.py +27 -11
- zenml/zen_stores/sql_zen_store.py +300 -6
- zenml/zen_stores/zen_store_interface.py +80 -0
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.61.0.dev20240712.dist-info}/METADATA +32 -10
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.61.0.dev20240712.dist-info}/RECORD +178 -162
- zenml/zen_server/dashboard/assets/@radix-C9DBgJhe.js +0 -77
- zenml/zen_server/dashboard/assets/@tanstack-CEbkxrhX.js +0 -30
- zenml/zen_server/dashboard/assets/AwarenessChannel-nXGpmj_f.js +0 -1
- zenml/zen_server/dashboard/assets/Cards-nwsvQLVS.js +0 -1
- zenml/zen_server/dashboard/assets/Commands-DuIWKg_Q.js +0 -1
- zenml/zen_server/dashboard/assets/CopyButton-B_YSm-Ds.js +0 -2
- zenml/zen_server/dashboard/assets/DisplayDate-BdguISQF.js +0 -1
- zenml/zen_server/dashboard/assets/EmptyState-BkooiGtL.js +0 -1
- zenml/zen_server/dashboard/assets/Error-B6M0dPph.js +0 -1
- zenml/zen_server/dashboard/assets/Helpbox-BQoqCm04.js +0 -1
- zenml/zen_server/dashboard/assets/Infobox-Ce9mefqU.js +0 -1
- zenml/zen_server/dashboard/assets/InlineAvatar-DGf3dVhV.js +0 -1
- zenml/zen_server/dashboard/assets/PageHeader-DGaemzjc.js +0 -1
- zenml/zen_server/dashboard/assets/Pagination-DVYfBCCc.js +0 -1
- zenml/zen_server/dashboard/assets/PasswordChecker-DSLBp7Vl.js +0 -1
- zenml/zen_server/dashboard/assets/SetPassword-B5s7DJug.js +0 -1
- zenml/zen_server/dashboard/assets/SuccessStep-ZzczaM7g.js +0 -1
- zenml/zen_server/dashboard/assets/cloud-only-Ba_ShBR5.js +0 -1
- zenml/zen_server/dashboard/assets/index-CWJ3xbIf.css +0 -1
- zenml/zen_server/dashboard/assets/index-QORVVTMN.js +0 -55
- zenml/zen_server/dashboard/assets/index.esm-F7nqy9zY.js +0 -1
- zenml/zen_server/dashboard/assets/not-found-Dh2la7kh.js +0 -1
- zenml/zen_server/dashboard/assets/page-B-5jAKoO.js +0 -1
- zenml/zen_server/dashboard/assets/page-B-vWk8a6.js +0 -1
- zenml/zen_server/dashboard/assets/page-B0BrqfS8.js +0 -1
- zenml/zen_server/dashboard/assets/page-BQxVFlUl.js +0 -1
- zenml/zen_server/dashboard/assets/page-ByrHy6Ss.js +0 -1
- zenml/zen_server/dashboard/assets/page-CPtY4Kv_.js +0 -1
- zenml/zen_server/dashboard/assets/page-CmmukLsl.js +0 -1
- zenml/zen_server/dashboard/assets/page-D2D-7qyr.js +0 -9
- zenml/zen_server/dashboard/assets/page-DAQQyLxT.js +0 -1
- zenml/zen_server/dashboard/assets/page-DHkUMl_E.js +0 -1
- zenml/zen_server/dashboard/assets/page-DZCbwOEs.js +0 -2
- zenml/zen_server/dashboard/assets/page-DdaIt20-.js +0 -1
- zenml/zen_server/dashboard/assets/page-LqLs24Ot.js +0 -1
- zenml/zen_server/dashboard/assets/page-lebv0c7C.js +0 -1
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.61.0.dev20240712.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.61.0.dev20240712.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.58.2.dev20240626.dist-info → zenml_nightly-0.61.0.dev20240712.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
|
-
|
202
|
-
|
203
|
-
|
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}"
|
@@ -366,7 +372,14 @@ class PipelineDockerImageBuilder:
|
|
366
372
|
Returns:
|
367
373
|
The docker image name.
|
368
374
|
"""
|
369
|
-
|
375
|
+
repository = docker_settings.target_repository
|
376
|
+
if not repository:
|
377
|
+
if container_registry:
|
378
|
+
repository = container_registry.config.default_repository
|
379
|
+
|
380
|
+
repository = repository or DEFAULT_ZENML_DOCKER_REPOSITORY
|
381
|
+
|
382
|
+
target_image_name = f"{repository}:{tag}"
|
370
383
|
if container_registry:
|
371
384
|
target_image_name = (
|
372
385
|
f"{container_registry.config.uri}/{target_image_name}"
|
@@ -460,69 +473,6 @@ class PipelineDockerImageBuilder:
|
|
460
473
|
"- Including python packages from local environment"
|
461
474
|
)
|
462
475
|
|
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
476
|
# Generate requirements files for all ZenML Hub plugins
|
527
477
|
if docker_settings.required_hub_plugins:
|
528
478
|
(
|
@@ -560,6 +510,85 @@ class PipelineDockerImageBuilder:
|
|
560
510
|
", ".join(f"`{r}`" for r in hub_pypi_requirements),
|
561
511
|
)
|
562
512
|
|
513
|
+
if docker_settings.install_stack_requirements:
|
514
|
+
stack_requirements = stack.requirements()
|
515
|
+
if code_repository:
|
516
|
+
stack_requirements.update(code_repository.requirements)
|
517
|
+
|
518
|
+
if stack_requirements:
|
519
|
+
stack_requirements_list = sorted(stack_requirements)
|
520
|
+
stack_requirements_file = "\n".join(stack_requirements_list)
|
521
|
+
requirements_files.append(
|
522
|
+
(
|
523
|
+
".zenml_stack_integration_requirements",
|
524
|
+
stack_requirements_file,
|
525
|
+
[],
|
526
|
+
)
|
527
|
+
)
|
528
|
+
if log:
|
529
|
+
logger.info(
|
530
|
+
"- Including stack requirements: %s",
|
531
|
+
", ".join(f"`{r}`" for r in stack_requirements_list),
|
532
|
+
)
|
533
|
+
|
534
|
+
# Generate requirements file for all required integrations
|
535
|
+
integration_requirements = set(
|
536
|
+
itertools.chain.from_iterable(
|
537
|
+
integration_registry.select_integration_requirements(
|
538
|
+
integration_name=integration,
|
539
|
+
target_os=OperatingSystemType.LINUX,
|
540
|
+
)
|
541
|
+
for integration in docker_settings.required_integrations
|
542
|
+
)
|
543
|
+
)
|
544
|
+
|
545
|
+
if integration_requirements:
|
546
|
+
integration_requirements_list = sorted(integration_requirements)
|
547
|
+
integration_requirements_file = "\n".join(
|
548
|
+
integration_requirements_list
|
549
|
+
)
|
550
|
+
requirements_files.append(
|
551
|
+
(
|
552
|
+
".zenml_integration_requirements",
|
553
|
+
integration_requirements_file,
|
554
|
+
[],
|
555
|
+
)
|
556
|
+
)
|
557
|
+
if log:
|
558
|
+
logger.info(
|
559
|
+
"- Including integration requirements: %s",
|
560
|
+
", ".join(f"`{r}`" for r in integration_requirements_list),
|
561
|
+
)
|
562
|
+
|
563
|
+
# Generate/Read requirements file for user-defined requirements
|
564
|
+
if isinstance(docker_settings.requirements, str):
|
565
|
+
path = os.path.abspath(docker_settings.requirements)
|
566
|
+
try:
|
567
|
+
user_requirements = io_utils.read_file_contents_as_string(path)
|
568
|
+
except FileNotFoundError as e:
|
569
|
+
raise FileNotFoundError(
|
570
|
+
f"Requirements file {path} does not exist."
|
571
|
+
) from e
|
572
|
+
if log:
|
573
|
+
logger.info(
|
574
|
+
"- Including user-defined requirements from file `%s`",
|
575
|
+
path,
|
576
|
+
)
|
577
|
+
elif isinstance(docker_settings.requirements, List):
|
578
|
+
user_requirements = "\n".join(docker_settings.requirements)
|
579
|
+
if log:
|
580
|
+
logger.info(
|
581
|
+
"- Including user-defined requirements: %s",
|
582
|
+
", ".join(f"`{r}`" for r in docker_settings.requirements),
|
583
|
+
)
|
584
|
+
else:
|
585
|
+
user_requirements = None
|
586
|
+
|
587
|
+
if user_requirements:
|
588
|
+
requirements_files.append(
|
589
|
+
(".zenml_user_requirements", user_requirements, [])
|
590
|
+
)
|
591
|
+
|
563
592
|
return requirements_files
|
564
593
|
|
565
594
|
@staticmethod
|
zenml/utils/pydantic_utils.py
CHANGED
@@ -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 =
|
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
|
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(
|
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__(
|
79
|
+
return original.__class__.model_validate(values)
|
79
80
|
|
80
81
|
|
81
82
|
class TemplateGenerator:
|
zenml/zen_server/cloud_utils.py
CHANGED
@@ -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
|
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
|
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
|
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"./@
|
1
|
+
import{j as e}from"./@radix-CFOkMR_E.js";import{h as s,r as t}from"./index-DK1ynKjA.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-DJfzkHO1.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};
|