zenml-nightly 0.55.0.dev20240124__py3-none-any.whl → 0.72.0.dev20250116__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.
- zenml/VERSION +1 -1
- zenml/__init__.py +9 -12
- zenml/actions/__init__.py +14 -0
- zenml/actions/base_action.py +682 -0
- zenml/actions/pipeline_run/__init__.py +0 -0
- zenml/actions/pipeline_run/pipeline_run_action.py +223 -0
- zenml/analytics/context.py +70 -15
- zenml/analytics/enums.py +21 -17
- zenml/analytics/models.py +1 -0
- zenml/analytics/utils.py +19 -7
- zenml/annotators/base_annotator.py +4 -3
- zenml/artifact_stores/base_artifact_store.py +155 -72
- zenml/artifact_stores/local_artifact_store.py +3 -2
- zenml/artifacts/artifact_config.py +67 -58
- zenml/artifacts/external_artifact.py +24 -39
- zenml/artifacts/external_artifact_config.py +27 -37
- zenml/artifacts/preexisting_data_materializer.py +90 -0
- zenml/artifacts/unmaterialized_artifact.py +2 -12
- zenml/artifacts/utils.py +521 -220
- zenml/cli/__init__.py +1511 -456
- zenml/cli/annotator.py +48 -14
- zenml/cli/artifact.py +22 -4
- zenml/cli/authorized_device.py +1 -0
- zenml/cli/base.py +185 -22
- zenml/cli/code_repository.py +1 -0
- zenml/cli/formatter.py +1 -1
- zenml/cli/integration.py +119 -24
- zenml/cli/login.py +1053 -0
- zenml/cli/model.py +42 -15
- zenml/cli/model_registry.py +1 -2
- zenml/cli/pipeline.py +168 -82
- zenml/cli/secret.py +1 -2
- zenml/cli/served_model.py +56 -26
- zenml/cli/server.py +486 -619
- zenml/cli/service_accounts.py +55 -14
- zenml/cli/service_connectors.py +97 -6
- zenml/cli/stack.py +821 -531
- zenml/cli/stack_components.py +15 -598
- zenml/cli/tag.py +1 -0
- zenml/cli/text_utils.py +36 -2
- zenml/cli/user_management.py +204 -6
- zenml/cli/utils.py +411 -290
- zenml/client.py +1742 -298
- zenml/client_lazy_loader.py +224 -0
- zenml/code_repositories/base_code_repository.py +5 -4
- zenml/code_repositories/git/local_git_repository_context.py +1 -0
- zenml/code_repositories/local_repository_context.py +1 -0
- zenml/config/__init__.py +2 -0
- zenml/config/base_settings.py +6 -6
- zenml/config/build_configuration.py +43 -17
- zenml/config/compiler.py +82 -49
- zenml/config/docker_settings.py +139 -83
- zenml/config/global_config.py +260 -234
- zenml/config/pipeline_configurations.py +32 -11
- zenml/config/pipeline_run_configuration.py +15 -3
- zenml/config/pipeline_spec.py +6 -6
- zenml/config/resource_settings.py +8 -9
- zenml/config/retry_config.py +27 -0
- zenml/config/schedule.py +27 -18
- zenml/config/secret_reference_mixin.py +8 -4
- zenml/config/secrets_store_config.py +16 -24
- zenml/config/server_config.py +434 -51
- zenml/config/settings_resolver.py +2 -1
- zenml/config/source.py +97 -31
- zenml/config/step_configurations.py +83 -39
- zenml/config/step_run_info.py +3 -0
- zenml/config/store_config.py +20 -54
- zenml/config/strict_base_model.py +2 -6
- zenml/console.py +0 -1
- zenml/constants.py +232 -74
- zenml/container_registries/azure_container_registry.py +1 -0
- zenml/container_registries/base_container_registry.py +7 -3
- zenml/container_registries/default_container_registry.py +4 -3
- zenml/container_registries/dockerhub_container_registry.py +1 -0
- zenml/container_registries/gcp_container_registry.py +1 -0
- zenml/container_registries/github_container_registry.py +2 -10
- zenml/data_validators/base_data_validator.py +2 -2
- zenml/entrypoints/base_entrypoint_configuration.py +76 -17
- zenml/entrypoints/pipeline_entrypoint_configuration.py +1 -0
- zenml/entrypoints/step_entrypoint_configuration.py +21 -2
- zenml/enums.py +91 -9
- zenml/environment.py +52 -319
- zenml/{steps/base_parameters.py → event_hub/__init__.py} +5 -7
- zenml/event_hub/base_event_hub.py +196 -0
- zenml/event_hub/event_hub.py +181 -0
- zenml/event_sources/__init__.py +14 -0
- zenml/{lineage_graph/edge.py → event_sources/base_event.py} +5 -7
- zenml/event_sources/base_event_source.py +695 -0
- zenml/event_sources/webhooks/__init__.py +14 -0
- zenml/event_sources/webhooks/base_webhook_event_source.py +231 -0
- zenml/exceptions.py +40 -41
- zenml/feature_stores/base_feature_store.py +4 -6
- zenml/hooks/hook_validators.py +3 -11
- zenml/image_builders/base_image_builder.py +5 -2
- zenml/image_builders/build_context.py +24 -80
- zenml/image_builders/local_image_builder.py +14 -6
- zenml/integrations/__init__.py +16 -4
- zenml/integrations/airflow/__init__.py +3 -5
- zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py +15 -7
- zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +15 -252
- zenml/integrations/airflow/orchestrators/dag_generator.py +5 -3
- zenml/integrations/argilla/__init__.py +46 -0
- zenml/integrations/argilla/annotators/__init__.py +20 -0
- zenml/integrations/argilla/annotators/argilla_annotator.py +443 -0
- zenml/{post_execution → integrations/argilla/flavors}/__init__.py +9 -13
- zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +150 -0
- zenml/integrations/aws/__init__.py +7 -3
- zenml/integrations/aws/container_registries/aws_container_registry.py +44 -8
- zenml/integrations/aws/flavors/__init__.py +6 -0
- zenml/integrations/aws/flavors/aws_container_registry_flavor.py +3 -2
- zenml/integrations/aws/flavors/aws_image_builder_flavor.py +146 -0
- zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +104 -16
- zenml/integrations/aws/flavors/sagemaker_step_operator_flavor.py +6 -2
- zenml/integrations/aws/image_builders/__init__.py +20 -0
- zenml/integrations/aws/image_builders/aws_image_builder.py +307 -0
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +421 -133
- zenml/integrations/aws/service_connectors/aws_service_connector.py +175 -48
- zenml/integrations/aws/step_operators/sagemaker_step_operator.py +1 -1
- zenml/integrations/azure/__init__.py +14 -5
- zenml/integrations/azure/azureml_utils.py +201 -0
- zenml/integrations/azure/flavors/__init__.py +11 -0
- zenml/integrations/azure/flavors/azureml.py +139 -0
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +166 -0
- zenml/integrations/azure/flavors/azureml_step_operator_flavor.py +71 -18
- zenml/integrations/azure/orchestrators/__init__.py +19 -0
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +583 -0
- zenml/integrations/azure/orchestrators/azureml_orchestrator_entrypoint_config.py +82 -0
- zenml/integrations/azure/service_connectors/azure_service_connector.py +15 -6
- zenml/integrations/azure/step_operators/azureml_step_operator.py +78 -173
- zenml/integrations/bentoml/__init__.py +1 -1
- zenml/integrations/bentoml/constants.py +1 -1
- zenml/integrations/bentoml/materializers/bentoml_bento_materializer.py +19 -31
- zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +128 -239
- zenml/integrations/bentoml/services/__init__.py +15 -4
- zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
- zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +85 -43
- zenml/integrations/bentoml/services/deployment_type.py +23 -0
- zenml/integrations/bentoml/steps/bento_builder.py +2 -0
- zenml/integrations/bentoml/steps/bentoml_deployer.py +97 -47
- zenml/integrations/bitbucket/__init__.py +42 -0
- zenml/integrations/bitbucket/plugins/__init__.py +20 -0
- zenml/integrations/bitbucket/plugins/bitbucket_webhook_event_source_flavor.py +43 -0
- zenml/integrations/bitbucket/plugins/event_sources/__init__.py +0 -0
- zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +486 -0
- zenml/integrations/comet/__init__.py +49 -0
- zenml/integrations/{kserve/services → comet/experiment_trackers}/__init__.py +5 -6
- zenml/integrations/comet/experiment_trackers/comet_experiment_tracker.py +175 -0
- zenml/integrations/comet/flavors/__init__.py +24 -0
- zenml/integrations/comet/flavors/comet_experiment_tracker_flavor.py +129 -0
- zenml/integrations/constants.py +14 -2
- zenml/integrations/databricks/__init__.py +70 -0
- zenml/{lineage_graph → integrations/databricks/flavors}/__init__.py +14 -18
- zenml/integrations/databricks/flavors/databricks_model_deployer_flavor.py +118 -0
- zenml/integrations/databricks/flavors/databricks_orchestrator_flavor.py +174 -0
- zenml/integrations/{kserve → databricks}/model_deployers/__init__.py +5 -5
- zenml/integrations/databricks/model_deployers/databricks_model_deployer.py +249 -0
- zenml/integrations/databricks/orchestrators/__init__.py +20 -0
- zenml/integrations/databricks/orchestrators/databricks_orchestrator.py +501 -0
- zenml/integrations/databricks/orchestrators/databricks_orchestrator_entrypoint_config.py +97 -0
- zenml/integrations/databricks/services/__init__.py +19 -0
- zenml/integrations/databricks/services/databricks_deployment.py +407 -0
- zenml/integrations/{gcp/orchestrators/vertex_scheduler → databricks/utils}/__init__.py +2 -2
- zenml/integrations/databricks/utils/databricks_utils.py +87 -0
- zenml/integrations/deepchecks/__init__.py +30 -10
- zenml/integrations/deepchecks/data_validators/deepchecks_data_validator.py +59 -18
- zenml/integrations/deepchecks/materializers/deepchecks_dataset_materializer.py +3 -1
- zenml/integrations/deepchecks/materializers/deepchecks_results_materializer.py +3 -3
- zenml/integrations/deepchecks/validation_checks.py +62 -35
- zenml/integrations/discord/__init__.py +1 -0
- zenml/integrations/discord/steps/discord_alerter_ask_step.py +1 -0
- zenml/integrations/discord/steps/discord_alerter_post_step.py +1 -0
- zenml/integrations/evidently/__init__.py +22 -4
- zenml/integrations/evidently/column_mapping.py +11 -3
- zenml/integrations/evidently/data_validators/evidently_data_validator.py +24 -6
- zenml/integrations/evidently/metrics.py +7 -8
- zenml/integrations/evidently/tests.py +7 -8
- zenml/integrations/facets/__init__.py +22 -5
- zenml/integrations/facets/models.py +2 -7
- zenml/integrations/feast/__init__.py +19 -3
- zenml/integrations/feast/feature_stores/feast_feature_store.py +13 -32
- zenml/integrations/gcp/__init__.py +6 -6
- zenml/integrations/gcp/artifact_stores/gcp_artifact_store.py +6 -0
- zenml/integrations/gcp/flavors/gcp_artifact_store_flavor.py +1 -0
- zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +24 -2
- zenml/integrations/gcp/flavors/vertex_step_operator_flavor.py +14 -1
- zenml/integrations/gcp/google_credentials_mixin.py +1 -1
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +519 -296
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +788 -113
- zenml/integrations/gcp/step_operators/vertex_step_operator.py +9 -1
- zenml/integrations/github/__init__.py +15 -0
- zenml/integrations/github/code_repositories/github_code_repository.py +3 -2
- zenml/integrations/github/plugins/__init__.py +19 -0
- zenml/integrations/github/plugins/event_sources/__init__.py +0 -0
- zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +510 -0
- zenml/integrations/github/plugins/github_webhook_event_source_flavor.py +43 -0
- zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +7 -1
- zenml/integrations/great_expectations/__init__.py +22 -10
- zenml/integrations/great_expectations/data_validators/ge_data_validator.py +61 -57
- zenml/integrations/great_expectations/flavors/great_expectations_data_validator_flavor.py +35 -2
- zenml/integrations/great_expectations/ge_store_backend.py +24 -11
- zenml/integrations/great_expectations/materializers/ge_materializer.py +9 -9
- zenml/integrations/great_expectations/utils.py +5 -5
- zenml/integrations/huggingface/__init__.py +52 -1
- zenml/integrations/huggingface/flavors/__init__.py +26 -0
- zenml/integrations/huggingface/flavors/huggingface_model_deployer_flavor.py +130 -0
- zenml/integrations/huggingface/materializers/__init__.py +3 -0
- zenml/integrations/huggingface/materializers/huggingface_datasets_materializer.py +102 -19
- zenml/integrations/huggingface/materializers/huggingface_pt_model_materializer.py +18 -19
- zenml/integrations/huggingface/materializers/huggingface_t5_materializer.py +104 -0
- zenml/integrations/huggingface/materializers/huggingface_tf_model_materializer.py +18 -19
- zenml/integrations/huggingface/materializers/huggingface_tokenizer_materializer.py +13 -15
- zenml/integrations/huggingface/model_deployers/__init__.py +20 -0
- zenml/integrations/huggingface/model_deployers/huggingface_model_deployer.py +247 -0
- zenml/integrations/huggingface/services/__init__.py +19 -0
- zenml/integrations/huggingface/services/huggingface_deployment.py +292 -0
- zenml/integrations/huggingface/steps/__init__.py +21 -0
- zenml/integrations/huggingface/steps/accelerate_runner.py +166 -0
- zenml/integrations/huggingface/steps/huggingface_deployer.py +110 -0
- zenml/integrations/hyperai/__init__.py +53 -0
- zenml/integrations/hyperai/flavors/__init__.py +20 -0
- zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +170 -0
- zenml/integrations/hyperai/orchestrators/__init__.py +21 -0
- zenml/integrations/hyperai/orchestrators/hyperai_orchestrator.py +510 -0
- zenml/integrations/hyperai/service_connectors/__init__.py +20 -0
- zenml/integrations/hyperai/service_connectors/hyperai_service_connector.py +375 -0
- zenml/integrations/integration.py +101 -47
- zenml/integrations/kaniko/flavors/kaniko_image_builder_flavor.py +6 -44
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +9 -6
- zenml/integrations/kubeflow/__init__.py +4 -1
- zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +67 -82
- zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +306 -248
- zenml/integrations/kubernetes/__init__.py +6 -3
- zenml/integrations/kubernetes/flavors/__init__.py +8 -0
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +43 -2
- zenml/integrations/kubernetes/flavors/kubernetes_step_operator_flavor.py +166 -0
- zenml/integrations/kubernetes/orchestrators/kube_utils.py +67 -12
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +89 -21
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +39 -7
- zenml/integrations/kubernetes/orchestrators/manifest_utils.py +42 -19
- zenml/integrations/kubernetes/pod_settings.py +21 -31
- zenml/integrations/kubernetes/serialization_utils.py +3 -3
- zenml/integrations/kubernetes/service_connectors/kubernetes_service_connector.py +14 -11
- zenml/integrations/kubernetes/step_operators/__init__.py +22 -0
- zenml/integrations/kubernetes/step_operators/kubernetes_step_operator.py +236 -0
- zenml/integrations/label_studio/__init__.py +1 -3
- zenml/integrations/label_studio/annotators/label_studio_annotator.py +46 -14
- zenml/integrations/label_studio/flavors/__init__.py +2 -0
- zenml/integrations/label_studio/flavors/label_studio_annotator_flavor.py +20 -5
- zenml/integrations/langchain/__init__.py +7 -1
- zenml/integrations/langchain/materializers/document_materializer.py +44 -8
- zenml/integrations/langchain/materializers/openai_embedding_materializer.py +28 -2
- zenml/integrations/lightgbm/__init__.py +1 -0
- zenml/integrations/lightgbm/materializers/lightgbm_booster_materializer.py +8 -15
- zenml/integrations/lightgbm/materializers/lightgbm_dataset_materializer.py +11 -16
- zenml/integrations/lightning/__init__.py +48 -0
- zenml/integrations/lightning/flavors/__init__.py +23 -0
- zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py +168 -0
- zenml/integrations/lightning/orchestrators/__init__.py +23 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +617 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +303 -0
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint_configuration.py +77 -0
- zenml/integrations/lightning/orchestrators/utils.py +67 -0
- zenml/integrations/mlflow/__init__.py +55 -8
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +31 -13
- zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +32 -37
- zenml/integrations/mlflow/model_deployers/mlflow_model_deployer.py +42 -233
- zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +42 -49
- zenml/integrations/mlflow/services/mlflow_deployment.py +30 -5
- zenml/integrations/mlflow/steps/mlflow_deployer.py +25 -27
- zenml/integrations/mlflow/steps/mlflow_registry.py +3 -1
- zenml/integrations/modal/__init__.py +46 -0
- zenml/integrations/modal/flavors/__init__.py +26 -0
- zenml/integrations/modal/flavors/modal_step_operator_flavor.py +125 -0
- zenml/integrations/modal/step_operators/__init__.py +22 -0
- zenml/integrations/modal/step_operators/modal_step_operator.py +242 -0
- zenml/integrations/neptune/experiment_trackers/neptune_experiment_tracker.py +7 -5
- zenml/integrations/neptune/experiment_trackers/run_state.py +71 -55
- zenml/integrations/neptune/flavors/neptune_experiment_tracker_flavor.py +1 -1
- zenml/integrations/neural_prophet/__init__.py +6 -1
- zenml/integrations/numpy/__init__.py +32 -0
- zenml/integrations/{kserve/constants.py → numpy/materializers/__init__.py} +5 -4
- zenml/integrations/numpy/materializers/numpy_materializer.py +246 -0
- zenml/integrations/openai/__init__.py +1 -1
- zenml/integrations/openai/hooks/open_ai_failure_hook.py +39 -14
- zenml/{steps/external_artifact.py → integrations/pandas/__init__.py} +17 -11
- zenml/integrations/{kserve/custom_deployer → pandas/materializers}/__init__.py +5 -5
- zenml/integrations/pandas/materializers/pandas_materializer.py +192 -0
- zenml/integrations/pigeon/__init__.py +44 -0
- zenml/integrations/pigeon/annotators/__init__.py +20 -0
- zenml/integrations/pigeon/annotators/pigeon_annotator.py +330 -0
- zenml/integrations/{kserve → pigeon}/flavors/__init__.py +7 -7
- zenml/integrations/pigeon/flavors/pigeon_annotator_flavor.py +104 -0
- zenml/integrations/pillow/materializers/pillow_image_materializer.py +17 -20
- zenml/integrations/polars/__init__.py +1 -0
- zenml/integrations/polars/materializers/dataframe_materializer.py +26 -39
- zenml/integrations/prodigy/__init__.py +48 -0
- zenml/integrations/prodigy/annotators/__init__.py +20 -0
- zenml/integrations/prodigy/annotators/prodigy_annotator.py +275 -0
- zenml/integrations/prodigy/flavors/__init__.py +24 -0
- zenml/integrations/prodigy/flavors/prodigy_annotator_flavor.py +101 -0
- zenml/integrations/pycaret/__init__.py +6 -0
- zenml/integrations/pycaret/materializers/model_materializer.py +7 -22
- zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
- zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
- zenml/integrations/registry.py +38 -1
- zenml/integrations/s3/__init__.py +2 -3
- zenml/integrations/s3/artifact_stores/s3_artifact_store.py +191 -9
- zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +22 -45
- zenml/integrations/s3/utils.py +39 -0
- zenml/integrations/seldon/__init__.py +18 -2
- zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +19 -141
- zenml/integrations/seldon/secret_schemas/secret_schemas.py +2 -2
- zenml/integrations/seldon/seldon_client.py +55 -70
- zenml/integrations/seldon/services/seldon_deployment.py +4 -5
- zenml/integrations/seldon/steps/seldon_deployer.py +21 -20
- zenml/integrations/sklearn/__init__.py +1 -1
- zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +29 -7
- zenml/integrations/skypilot/orchestrators/skypilot_base_vm_orchestrator.py +47 -28
- zenml/integrations/skypilot/orchestrators/skypilot_orchestrator_entrypoint.py +2 -2
- zenml/integrations/skypilot_aws/__init__.py +3 -2
- zenml/integrations/skypilot_aws/flavors/skypilot_orchestrator_aws_vm_flavor.py +1 -1
- zenml/integrations/skypilot_azure/__init__.py +2 -4
- zenml/integrations/skypilot_azure/flavors/skypilot_orchestrator_azure_vm_flavor.py +1 -1
- zenml/integrations/skypilot_gcp/__init__.py +3 -2
- zenml/integrations/skypilot_gcp/flavors/skypilot_orchestrator_gcp_vm_flavor.py +1 -1
- zenml/integrations/skypilot_kubernetes/__init__.py +52 -0
- zenml/integrations/skypilot_kubernetes/flavors/__init__.py +26 -0
- zenml/integrations/skypilot_kubernetes/flavors/skypilot_orchestrator_kubernetes_vm_flavor.py +125 -0
- zenml/integrations/skypilot_kubernetes/orchestrators/__init__.py +25 -0
- zenml/integrations/skypilot_kubernetes/orchestrators/skypilot_kubernetes_vm_orchestrator.py +74 -0
- zenml/integrations/skypilot_lambda/__init__.py +50 -0
- zenml/integrations/{kserve/secret_schemas → skypilot_lambda/flavors}/__init__.py +9 -12
- zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py +130 -0
- zenml/{lineage_graph/node → integrations/skypilot_lambda/orchestrators}/__init__.py +8 -15
- zenml/integrations/skypilot_lambda/orchestrators/skypilot_lambda_vm_orchestrator.py +92 -0
- zenml/integrations/slack/__init__.py +1 -0
- zenml/integrations/slack/alerters/slack_alerter.py +22 -2
- zenml/integrations/slack/flavors/__init__.py +2 -0
- zenml/integrations/slack/flavors/slack_alerter_flavor.py +13 -4
- zenml/integrations/slack/steps/slack_alerter_ask_step.py +1 -0
- zenml/integrations/slack/steps/slack_alerter_post_step.py +1 -0
- zenml/integrations/spark/flavors/spark_step_operator_flavor.py +2 -39
- zenml/integrations/spark/step_operators/kubernetes_step_operator.py +1 -0
- zenml/integrations/spark/step_operators/spark_entrypoint_configuration.py +1 -0
- zenml/integrations/spark/step_operators/spark_step_operator.py +2 -0
- zenml/integrations/tekton/__init__.py +2 -1
- zenml/integrations/tekton/flavors/tekton_orchestrator_flavor.py +66 -23
- zenml/integrations/tekton/orchestrators/tekton_orchestrator.py +549 -235
- zenml/integrations/tensorboard/__init__.py +1 -13
- zenml/integrations/tensorboard/services/tensorboard_service.py +3 -4
- zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +66 -59
- zenml/integrations/tensorflow/__init__.py +10 -15
- zenml/integrations/tensorflow/materializers/keras_materializer.py +24 -27
- zenml/integrations/tensorflow/materializers/tf_dataset_materializer.py +9 -16
- zenml/integrations/vllm/__init__.py +50 -0
- zenml/integrations/vllm/flavors/__init__.py +21 -0
- zenml/integrations/vllm/flavors/vllm_model_deployer_flavor.py +91 -0
- zenml/integrations/vllm/model_deployers/__init__.py +19 -0
- zenml/integrations/vllm/model_deployers/vllm_model_deployer.py +263 -0
- zenml/integrations/vllm/services/__init__.py +19 -0
- zenml/integrations/vllm/services/vllm_deployment.py +206 -0
- zenml/integrations/wandb/__init__.py +1 -0
- zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +21 -18
- zenml/integrations/whylogs/__init__.py +18 -2
- zenml/integrations/whylogs/data_validators/whylogs_data_validator.py +3 -3
- zenml/integrations/whylogs/flavors/whylogs_data_validator_flavor.py +1 -1
- zenml/integrations/whylogs/materializers/whylogs_materializer.py +14 -21
- zenml/integrations/xgboost/materializers/xgboost_booster_materializer.py +11 -22
- zenml/integrations/xgboost/materializers/xgboost_dmatrix_materializer.py +10 -19
- zenml/io/fileio.py +1 -0
- zenml/io/filesystem.py +2 -2
- zenml/io/local_filesystem.py +3 -3
- zenml/logger.py +41 -17
- zenml/logging/__init__.py +5 -0
- zenml/logging/step_logging.py +280 -32
- zenml/{new/steps → login}/__init__.py +4 -1
- zenml/login/credentials.py +370 -0
- zenml/login/credentials_store.py +638 -0
- zenml/{new/pipelines → login/pro}/__init__.py +4 -1
- zenml/login/pro/client.py +492 -0
- zenml/login/pro/constants.py +28 -0
- zenml/{zen_stores/schemas/identity_schemas.py → login/pro/models.py} +9 -11
- zenml/login/pro/organization/__init__.py +14 -0
- zenml/login/pro/organization/client.py +79 -0
- zenml/{lineage_graph/node/base_node.py → login/pro/organization/models.py} +13 -12
- zenml/{_hub → login/pro/tenant}/__init__.py +2 -2
- zenml/login/pro/tenant/client.py +92 -0
- zenml/login/pro/tenant/models.py +176 -0
- zenml/login/pro/utils.py +107 -0
- zenml/login/server_info.py +52 -0
- zenml/{cli → login}/web_login.py +71 -21
- zenml/materializers/__init__.py +2 -4
- zenml/materializers/base_materializer.py +180 -51
- zenml/materializers/built_in_materializer.py +50 -23
- zenml/materializers/cloudpickle_materializer.py +4 -5
- zenml/materializers/numpy_materializer.py +23 -233
- zenml/materializers/pandas_materializer.py +22 -174
- zenml/materializers/pydantic_materializer.py +2 -2
- zenml/materializers/service_materializer.py +12 -10
- zenml/materializers/structured_string_materializer.py +12 -6
- zenml/materializers/uuid_materializer.py +79 -0
- zenml/metadata/lazy_load.py +33 -17
- zenml/metadata/metadata_types.py +112 -3
- zenml/model/lazy_load.py +85 -4
- zenml/model/model.py +236 -226
- zenml/model/utils.py +99 -141
- zenml/model_deployers/base_model_deployer.py +319 -47
- zenml/model_registries/base_model_registry.py +17 -15
- zenml/models/__init__.py +254 -175
- zenml/models/v2/base/base.py +254 -112
- zenml/models/v2/base/base_plugin_flavor.py +76 -0
- zenml/models/v2/base/filter.py +530 -199
- zenml/models/v2/base/page.py +2 -12
- zenml/models/v2/base/scoped.py +292 -22
- zenml/models/v2/core/action.py +276 -0
- zenml/models/v2/core/action_flavor.py +57 -0
- zenml/models/v2/core/api_key.py +35 -12
- zenml/models/v2/core/artifact.py +126 -6
- zenml/models/v2/core/artifact_version.py +289 -65
- zenml/models/v2/core/artifact_visualization.py +10 -4
- zenml/models/v2/core/code_reference.py +13 -4
- zenml/models/v2/core/code_repository.py +39 -16
- zenml/models/v2/core/component.py +113 -61
- zenml/models/v2/core/device.py +25 -5
- zenml/models/v2/core/event_source.py +244 -0
- zenml/models/v2/core/event_source_flavor.py +67 -0
- zenml/models/v2/core/flavor.py +90 -27
- zenml/models/v2/core/logs.py +81 -12
- zenml/models/v2/core/model.py +91 -42
- zenml/models/v2/core/model_version.py +100 -55
- zenml/models/v2/core/model_version_artifact.py +96 -89
- zenml/models/v2/core/model_version_pipeline_run.py +86 -53
- zenml/models/v2/core/pipeline.py +205 -80
- zenml/models/v2/core/pipeline_build.py +110 -21
- zenml/models/v2/core/pipeline_deployment.py +101 -36
- zenml/models/v2/core/pipeline_run.py +545 -33
- zenml/models/v2/core/run_metadata.py +23 -181
- zenml/models/v2/core/run_template.py +439 -0
- zenml/models/v2/core/schedule.py +66 -29
- zenml/models/v2/core/secret.py +33 -21
- zenml/models/v2/core/server_settings.py +224 -0
- zenml/models/v2/core/service.py +500 -0
- zenml/models/v2/core/service_account.py +40 -15
- zenml/models/v2/core/service_connector.py +247 -49
- zenml/models/v2/core/stack.py +163 -70
- zenml/models/v2/core/step_run.py +210 -48
- zenml/models/v2/core/tag.py +21 -8
- zenml/models/v2/core/tag_resource.py +13 -4
- zenml/models/v2/core/trigger.py +422 -0
- zenml/models/v2/core/trigger_execution.py +119 -0
- zenml/models/v2/core/user.py +136 -69
- zenml/models/v2/core/workspace.py +26 -7
- zenml/models/v2/misc/auth_models.py +11 -2
- zenml/models/v2/misc/build_item.py +3 -3
- zenml/models/v2/misc/external_user.py +3 -6
- zenml/models/v2/misc/info_models.py +78 -0
- zenml/models/v2/misc/loaded_visualization.py +2 -2
- zenml/models/v2/misc/run_metadata.py +38 -0
- zenml/models/v2/misc/server_models.py +100 -0
- zenml/models/v2/misc/service_connector_type.py +9 -17
- zenml/models/v2/misc/stack_deployment.py +96 -0
- zenml/models/v2/misc/user_auth.py +7 -9
- zenml/orchestrators/__init__.py +4 -0
- zenml/orchestrators/base_orchestrator.py +136 -25
- zenml/orchestrators/containerized_orchestrator.py +1 -0
- zenml/orchestrators/dag_runner.py +18 -3
- zenml/orchestrators/input_utils.py +109 -48
- zenml/orchestrators/local/local_orchestrator.py +10 -0
- zenml/orchestrators/local_docker/local_docker_orchestrator.py +14 -42
- zenml/orchestrators/output_utils.py +16 -6
- zenml/orchestrators/publish_utils.py +12 -5
- zenml/orchestrators/step_launcher.py +142 -194
- zenml/orchestrators/step_run_utils.py +386 -0
- zenml/orchestrators/step_runner.py +181 -270
- zenml/orchestrators/utils.py +219 -84
- zenml/orchestrators/wheeled_orchestrator.py +147 -0
- zenml/pipelines/__init__.py +3 -16
- zenml/{new/pipelines → pipelines}/build_utils.py +287 -47
- zenml/{new/pipelines → pipelines}/pipeline_context.py +6 -2
- zenml/pipelines/pipeline_decorator.py +40 -64
- zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +376 -440
- zenml/pipelines/run_utils.py +358 -0
- zenml/plugins/__init__.py +0 -0
- zenml/plugins/base_plugin_flavor.py +88 -0
- zenml/plugins/plugin_flavor_registry.py +342 -0
- zenml/secret/base_secret.py +7 -8
- zenml/secret/schemas/basic_auth_secret_schema.py +0 -1
- zenml/service_connectors/docker_service_connector.py +19 -4
- zenml/service_connectors/service_connector.py +12 -14
- zenml/service_connectors/service_connector_registry.py +71 -55
- zenml/service_connectors/service_connector_utils.py +418 -0
- zenml/services/__init__.py +0 -2
- zenml/services/container/container_service.py +9 -6
- zenml/services/container/container_service_endpoint.py +1 -1
- zenml/services/container/entrypoint.py +3 -2
- zenml/services/local/local_daemon_entrypoint.py +9 -6
- zenml/services/local/local_service.py +1 -1
- zenml/services/local/local_service_endpoint.py +1 -1
- zenml/services/service.py +222 -130
- zenml/services/service_status.py +2 -1
- zenml/services/service_type.py +6 -5
- zenml/stack/flavor.py +25 -18
- zenml/stack/flavor_registry.py +4 -4
- zenml/stack/stack.py +20 -131
- zenml/stack/stack_component.py +136 -110
- zenml/stack/utils.py +36 -15
- zenml/stack_deployments/__init__.py +14 -0
- zenml/stack_deployments/aws_stack_deployment.py +320 -0
- zenml/stack_deployments/azure_stack_deployment.py +315 -0
- zenml/stack_deployments/gcp_stack_deployment.py +315 -0
- zenml/stack_deployments/stack_deployment.py +232 -0
- zenml/stack_deployments/utils.py +48 -0
- zenml/step_operators/step_operator_entrypoint_configuration.py +2 -1
- zenml/steps/__init__.py +3 -9
- zenml/steps/base_step.py +172 -315
- zenml/{new/steps → steps}/decorated_step.py +1 -0
- zenml/steps/entrypoint_function_utils.py +33 -93
- zenml/{new/steps → steps}/step_context.py +70 -50
- zenml/steps/step_decorator.py +47 -93
- zenml/steps/step_invocation.py +22 -60
- zenml/steps/utils.py +161 -48
- zenml/types.py +14 -1
- zenml/utils/archivable.py +178 -0
- zenml/utils/callback_registry.py +71 -0
- zenml/utils/code_repository_utils.py +1 -0
- zenml/utils/code_utils.py +346 -0
- zenml/utils/cuda_utils.py +50 -0
- zenml/utils/dashboard_utils.py +67 -21
- zenml/utils/deprecation_utils.py +22 -24
- zenml/utils/dict_utils.py +22 -0
- zenml/utils/docker_utils.py +34 -5
- zenml/utils/downloaded_repository_context.py +1 -0
- zenml/utils/env_utils.py +55 -1
- zenml/utils/filesync_model.py +65 -28
- zenml/utils/function_utils.py +260 -0
- zenml/utils/integration_utils.py +1 -0
- zenml/utils/json_utils.py +131 -0
- zenml/utils/materializer_utils.py +1 -1
- zenml/utils/metadata_utils.py +368 -0
- zenml/utils/notebook_utils.py +136 -0
- zenml/utils/package_utils.py +89 -0
- zenml/utils/pagination_utils.py +9 -7
- zenml/utils/pipeline_docker_image_builder.py +152 -149
- zenml/utils/pydantic_utils.py +276 -66
- zenml/utils/requirements_utils.py +71 -0
- zenml/utils/secret_utils.py +66 -12
- zenml/utils/settings_utils.py +2 -1
- zenml/utils/singleton.py +15 -3
- zenml/utils/source_code_utils.py +1 -0
- zenml/utils/source_utils.py +236 -14
- zenml/utils/string_utils.py +140 -0
- zenml/utils/typed_model.py +5 -3
- zenml/utils/typing_utils.py +223 -0
- zenml/utils/visualization_utils.py +5 -3
- zenml/utils/yaml_utils.py +1 -1
- zenml/zen_server/auth.py +387 -55
- zenml/zen_server/cache.py +208 -0
- zenml/zen_server/cloud_utils.py +253 -0
- zenml/zen_server/csrf.py +91 -0
- zenml/zen_server/dashboard/assets/404-Dfq64Boz.js +1 -0
- zenml/zen_server/dashboard/assets/@radix-DeK6qiuw.js +85 -0
- zenml/zen_server/dashboard/assets/@react-router-B3Z5rLr2.js +29 -0
- zenml/zen_server/dashboard/assets/@reactflow-BUNIMFeC.js +17 -0
- zenml/zen_server/dashboard/assets/@reactflow-C26Olbza.css +1 -0
- zenml/zen_server/dashboard/assets/@tanstack-DT5WLu9C.js +22 -0
- zenml/zen_server/dashboard/assets/AlertDialogDropdownItem-B73Vs10T.js +1 -0
- zenml/zen_server/dashboard/assets/CodeSnippet-Bbx6fIb6.css +1 -0
- zenml/zen_server/dashboard/assets/CodeSnippet-DIJRT2NT.js +9 -0
- zenml/zen_server/dashboard/assets/CollapsibleCard-BzUHGZOU.js +1 -0
- zenml/zen_server/dashboard/assets/Commands-BEGyld4c.js +1 -0
- zenml/zen_server/dashboard/assets/ComponentBadge-xyKiek1s.js +1 -0
- zenml/zen_server/dashboard/assets/CopyButton-DhW-mapu.js +2 -0
- zenml/zen_server/dashboard/assets/CsvVizualization-D8oazBiE.js +15 -0
- zenml/zen_server/dashboard/assets/DeleteAlertDialog-WkSIIgfy.js +1 -0
- zenml/zen_server/dashboard/assets/DialogItem-Bgroeg29.js +1 -0
- zenml/zen_server/dashboard/assets/DisplayDate-CDMUcQHS.js +1 -0
- zenml/zen_server/dashboard/assets/EmptyState-BzdlCwp3.js +1 -0
- zenml/zen_server/dashboard/assets/Error-CY5tlu17.js +1 -0
- zenml/zen_server/dashboard/assets/ExecutionStatus-G8mjIaeA.js +1 -0
- zenml/zen_server/dashboard/assets/Helpbox-Bb1ed--O.js +1 -0
- zenml/zen_server/dashboard/assets/Infobox-Da6-76M2.js +1 -0
- zenml/zen_server/dashboard/assets/InlineAvatar-DqnZaBNq.js +1 -0
- zenml/zen_server/dashboard/assets/Lock-CYYy18Mm.js +1 -0
- zenml/zen_server/dashboard/assets/MarkdownVisualization-ylXaAxev.js +14 -0
- zenml/zen_server/dashboard/assets/NestedCollapsible-aK5ojKoF.js +1 -0
- zenml/zen_server/dashboard/assets/NumberBox-Dtp3J6g5.js +1 -0
- zenml/zen_server/dashboard/assets/Partials-CqZp5NMX.js +1 -0
- zenml/zen_server/dashboard/assets/PasswordChecker-B0nadgh6.js +1 -0
- zenml/zen_server/dashboard/assets/ProBadge-B4tRUYve.js +1 -0
- zenml/zen_server/dashboard/assets/ProCta-CZuP29Qz.js +1 -0
- zenml/zen_server/dashboard/assets/ProviderIcon-Bd7GUQ1_.js +1 -0
- zenml/zen_server/dashboard/assets/ProviderRadio-mstdqzsS.js +1 -0
- zenml/zen_server/dashboard/assets/RunSelector-CsruSB4i.js +1 -0
- zenml/zen_server/dashboard/assets/RunsBody-DxxtWVYz.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-D6tPxyqw.js +1 -0
- zenml/zen_server/dashboard/assets/SecretTooltip-CLzJIYW_.js +1 -0
- zenml/zen_server/dashboard/assets/SetPassword-Yn50ooBC.js +1 -0
- zenml/zen_server/dashboard/assets/StackList-U537qoYd.js +1 -0
- zenml/zen_server/dashboard/assets/Tabs-CNv-eTYM.js +1 -0
- zenml/zen_server/dashboard/assets/Tick-jEIevzVf.js +1 -0
- zenml/zen_server/dashboard/assets/UpdatePasswordSchemas-C16GW-kX.js +1 -0
- zenml/zen_server/dashboard/assets/UsageReason-Bf2tzhv1.js +1 -0
- zenml/zen_server/dashboard/assets/WizardFooter-D6i-AP1K.js +1 -0
- zenml/zen_server/dashboard/assets/acp-DOsXjFc7.webp +0 -0
- zenml/zen_server/dashboard/assets/adam-e-y0WnB_.webp +0 -0
- zenml/zen_server/dashboard/assets/alex-DcCuDHPg.webp +0 -0
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-DUti43aF.js +1 -0
- zenml/zen_server/dashboard/assets/baris-C0ZrZ10g.webp +0 -0
- zenml/zen_server/dashboard/assets/check-DloQpStc.js +1 -0
- zenml/zen_server/dashboard/assets/check-circle-jNbX5-sR.js +1 -0
- zenml/zen_server/dashboard/assets/chevron-down-6JyMkfjR.js +1 -0
- zenml/zen_server/dashboard/assets/chevron-right-double-D7ojK9Co.js +1 -0
- zenml/zen_server/dashboard/assets/cloud-squares-DeRLMopf.svg +43 -0
- zenml/zen_server/dashboard/assets/code-browser-CUFUIHfp.js +1 -0
- zenml/zen_server/dashboard/assets/code-snippets-CqONne41.js +13 -0
- zenml/zen_server/dashboard/assets/components-Br2ezRib.js +1 -0
- zenml/zen_server/dashboard/assets/connectors-video-C9qY4syJ.svg +21 -0
- zenml/zen_server/dashboard/assets/copy-C8XQA2Ug.js +1 -0
- zenml/zen_server/dashboard/assets/create-stack-Ch2WPs9U.js +1 -0
- zenml/zen_server/dashboard/assets/dates-3pMLCNrD.js +1 -0
- zenml/zen_server/dashboard/assets/delete-run-Byf9hTjA.js +1 -0
- zenml/zen_server/dashboard/assets/docker-BdA9vrnW.js +1 -0
- zenml/zen_server/dashboard/assets/dots-horizontal-otGBOSDJ.js +1 -0
- zenml/zen_server/dashboard/assets/flyte-Cj-xy_8I.svg +10 -0
- zenml/zen_server/dashboard/assets/form-schemas-BZqKBPBF.js +1 -0
- zenml/zen_server/dashboard/assets/gcp-CFtm4BA7.js +1 -0
- zenml/zen_server/dashboard/assets/hamza-NKKOZz1I.webp +0 -0
- zenml/zen_server/dashboard/assets/help-Cc9bBIJH.js +1 -0
- zenml/zen_server/dashboard/assets/index-CE0aQlv8.js +55 -0
- zenml/zen_server/dashboard/assets/index-CtdYkjUi.js +1 -0
- zenml/zen_server/dashboard/assets/index-CyBKZcpO.js +1 -0
- zenml/zen_server/dashboard/assets/index-DXvT1_Um.css +1 -0
- zenml/zen_server/dashboard/assets/index-Uu49AX48.js +1 -0
- zenml/zen_server/dashboard/assets/index-v6gQjDEo.js +1 -0
- zenml/zen_server/dashboard/assets/index.esm-Dy6Z9Ung.js +1 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
- zenml/zen_server/dashboard/assets/key-icon-aH-QIa5R.js +1 -0
- zenml/zen_server/dashboard/assets/kubernetes-B2wmAJ1d.js +1 -0
- zenml/zen_server/dashboard/assets/layout-BtHBmE4w.js +1 -0
- zenml/zen_server/dashboard/assets/link-external-b9AXw_sW.js +1 -0
- zenml/zen_server/dashboard/assets/login-command-CkqxPtV3.js +1 -0
- zenml/zen_server/dashboard/assets/login-mutation-DNDVp_2H.js +1 -0
- zenml/zen_server/dashboard/assets/logs-WMSM52RF.js +1 -0
- zenml/zen_server/dashboard/assets/mcp-Cb1aMeoq.webp +0 -0
- zenml/zen_server/dashboard/assets/metaflow-weOkWNyT.svg +10 -0
- zenml/zen_server/dashboard/assets/not-found-Bmup4ctE.js +1 -0
- zenml/zen_server/dashboard/assets/package-C6uypY4h.js +1 -0
- zenml/zen_server/dashboard/assets/page--XLMzHrn.js +1 -0
- zenml/zen_server/dashboard/assets/page-ANYGfEUL.js +1 -0
- zenml/zen_server/dashboard/assets/page-B5Sr8pib.js +1 -0
- zenml/zen_server/dashboard/assets/page-BC27C_OI.js +2 -0
- zenml/zen_server/dashboard/assets/page-BNxYrN0q.js +1 -0
- zenml/zen_server/dashboard/assets/page-BYJfqgLN.js +1 -0
- zenml/zen_server/dashboard/assets/page-B_0XkV48.js +1 -0
- zenml/zen_server/dashboard/assets/page-BrmJp1Wt.js +1 -0
- zenml/zen_server/dashboard/assets/page-C2nU3Gxn.js +1 -0
- zenml/zen_server/dashboard/assets/page-C70wZtV2.js +1 -0
- zenml/zen_server/dashboard/assets/page-CHRn1fQm.js +1 -0
- zenml/zen_server/dashboard/assets/page-CWr96ZKN.js +1 -0
- zenml/zen_server/dashboard/assets/page-CXAbSyp9.js +1 -0
- zenml/zen_server/dashboard/assets/page-CaeI9ptC.js +1 -0
- zenml/zen_server/dashboard/assets/page-Cc8ZEuj4.js +1 -0
- zenml/zen_server/dashboard/assets/page-CltCNL0T.js +1 -0
- zenml/zen_server/dashboard/assets/page-CmlYj7Nl.js +1 -0
- zenml/zen_server/dashboard/assets/page-D6Ev5P8V.js +1 -0
- zenml/zen_server/dashboard/assets/page-D9Oh05fl.js +1 -0
- zenml/zen_server/dashboard/assets/page-DGlm1RVc.js +1 -0
- zenml/zen_server/dashboard/assets/page-DN4BVIOL.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dif8CWyZ.js +1 -0
- zenml/zen_server/dashboard/assets/page-DlIi5ThM.js +1 -0
- zenml/zen_server/dashboard/assets/page-DoW7YxTu.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dth9X1Ih.js +1 -0
- zenml/zen_server/dashboard/assets/page-DweqqCkF.js +1 -0
- zenml/zen_server/dashboard/assets/page-DyOJ_pq3.js +1 -0
- zenml/zen_server/dashboard/assets/page-Hn8q9iJZ.js +1 -0
- zenml/zen_server/dashboard/assets/page-IhckKFnD.js +6 -0
- zenml/zen_server/dashboard/assets/page-LyZ_l8vR.js +1 -0
- zenml/zen_server/dashboard/assets/page-PamGpk0j.js +1 -0
- zenml/zen_server/dashboard/assets/page-PxOWfKgF.js +2 -0
- zenml/zen_server/dashboard/assets/persist-DeXRG61d.js +1 -0
- zenml/zen_server/dashboard/assets/persist-vP0-Xl4f.js +1 -0
- zenml/zen_server/dashboard/assets/plus-tf1V2hTJ.js +1 -0
- zenml/zen_server/dashboard/assets/refresh-BjOeWlEq.js +1 -0
- zenml/zen_server/dashboard/assets/repos-video-D8kpu60k.svg +9 -0
- zenml/zen_server/dashboard/assets/rocket-DjT2cDvG.js +1 -0
- zenml/zen_server/dashboard/assets/service-DH_oUqQj.js +2 -0
- zenml/zen_server/dashboard/assets/settings_preview-0JLrRgHP.webp +0 -0
- zenml/zen_server/dashboard/assets/sharedSchema-Bw1_Wa7l.js +14 -0
- zenml/zen_server/dashboard/assets/stack-detail-query-B_0R_fd6.js +1 -0
- zenml/zen_server/dashboard/assets/stefan-B08Ftbba.webp +0 -0
- zenml/zen_server/dashboard/assets/templates-1S_8WeSK.webp +0 -0
- zenml/zen_server/dashboard/assets/tick-circle-BEX_Tp4v.js +1 -0
- zenml/zen_server/dashboard/assets/tour-cover-BYfeen6M.webp +0 -0
- zenml/zen_server/dashboard/assets/trash-arLUMWMS.js +1 -0
- zenml/zen_server/dashboard/assets/update-server-settings-mutation-D9qYhfaN.js +1 -0
- zenml/zen_server/dashboard/assets/upgrade-form-CwRHBuXB.webp +0 -0
- zenml/zen_server/dashboard/assets/url-Dh93fvh0.js +1 -0
- zenml/zen_server/dashboard/assets/zod-BwEbpOxH.js +1 -0
- zenml/zen_server/dashboard/index.html +19 -1
- zenml/zen_server/deploy/__init__.py +7 -16
- zenml/zen_server/deploy/base_provider.py +49 -78
- zenml/zen_server/deploy/{local → daemon}/__init__.py +3 -3
- zenml/zen_server/deploy/{local/local_provider.py → daemon/daemon_provider.py} +48 -66
- zenml/zen_server/deploy/{local/local_zen_server.py → daemon/daemon_zen_server.py} +78 -62
- zenml/zen_server/deploy/deployer.py +94 -175
- zenml/zen_server/deploy/deployment.py +23 -17
- zenml/zen_server/deploy/docker/docker_provider.py +15 -31
- zenml/zen_server/deploy/docker/docker_zen_server.py +30 -35
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +3 -13
- zenml/zen_server/deploy/helm/templates/NOTES.txt +23 -7
- zenml/zen_server/deploy/helm/templates/_environment.tpl +175 -23
- zenml/zen_server/deploy/helm/templates/server-db-job.yaml +45 -18
- zenml/zen_server/deploy/helm/templates/server-db-pvc.yaml +25 -0
- zenml/zen_server/deploy/helm/templates/server-deployment.yaml +22 -6
- zenml/zen_server/deploy/helm/templates/server-secret.yaml +11 -10
- zenml/zen_server/deploy/helm/values.yaml +210 -28
- zenml/zen_server/exceptions.py +20 -1
- zenml/zen_server/feature_gate/__init__.py +13 -0
- zenml/zen_server/feature_gate/endpoint_utils.py +61 -0
- zenml/zen_server/feature_gate/feature_gate_interface.py +49 -0
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +125 -0
- zenml/zen_server/jwt.py +64 -32
- zenml/zen_server/rate_limit.py +200 -0
- zenml/zen_server/rbac/endpoint_utils.py +92 -9
- zenml/zen_server/rbac/models.py +21 -17
- zenml/zen_server/rbac/rbac_sql_zen_store.py +175 -0
- zenml/zen_server/rbac/utils.py +71 -30
- zenml/zen_server/rbac/zenml_cloud_rbac.py +13 -188
- zenml/zen_server/routers/actions_endpoints.py +324 -0
- zenml/zen_server/routers/artifact_version_endpoints.py +28 -2
- zenml/zen_server/routers/auth_endpoints.py +249 -131
- zenml/zen_server/routers/code_repositories_endpoints.py +1 -0
- zenml/zen_server/routers/devices_endpoints.py +56 -49
- zenml/zen_server/routers/event_source_endpoints.py +327 -0
- zenml/zen_server/routers/logs_endpoints.py +66 -0
- zenml/zen_server/routers/model_versions_endpoints.py +59 -0
- zenml/zen_server/routers/models_endpoints.py +7 -1
- zenml/zen_server/routers/pipeline_builds_endpoints.py +6 -1
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +35 -0
- zenml/zen_server/routers/pipelines_endpoints.py +19 -32
- zenml/zen_server/routers/plugin_endpoints.py +107 -0
- zenml/zen_server/routers/run_templates_endpoints.py +212 -0
- zenml/zen_server/routers/runs_endpoints.py +91 -32
- zenml/zen_server/routers/schedule_endpoints.py +1 -0
- zenml/zen_server/routers/secrets_endpoints.py +4 -2
- zenml/zen_server/routers/server_endpoints.py +186 -4
- zenml/zen_server/routers/service_connectors_endpoints.py +56 -0
- zenml/zen_server/routers/service_endpoints.py +180 -0
- zenml/zen_server/routers/stack_components_endpoints.py +2 -1
- zenml/zen_server/routers/stack_deployment_endpoints.py +164 -0
- zenml/zen_server/routers/steps_endpoints.py +21 -12
- zenml/zen_server/routers/triggers_endpoints.py +336 -0
- zenml/zen_server/routers/users_endpoints.py +280 -45
- zenml/zen_server/routers/webhook_endpoints.py +127 -0
- zenml/zen_server/routers/workspaces_endpoints.py +220 -185
- zenml/zen_server/secure_headers.py +120 -0
- zenml/{new → zen_server/template_execution}/__init__.py +1 -1
- zenml/zen_server/template_execution/runner_entrypoint_configuration.py +42 -0
- zenml/zen_server/template_execution/utils.py +474 -0
- zenml/zen_server/template_execution/workload_manager_interface.py +92 -0
- zenml/zen_server/utils.py +374 -74
- zenml/zen_server/zen_server_api.py +299 -52
- zenml/zen_stores/base_zen_store.py +90 -58
- zenml/zen_stores/migrations/alembic.py +22 -9
- zenml/zen_stores/migrations/env.py +2 -2
- zenml/zen_stores/migrations/utils.py +731 -0
- zenml/zen_stores/migrations/versions/0.21.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.21.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.22.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.23.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.30.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.31.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.31.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.32.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.32.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.33.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.34.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.35.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.35.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.36.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.36.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.37.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.38.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.39.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.39.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.40.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.40.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.40.2_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.40.3_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.41.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.42.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.42.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.43.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.44.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.44.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.44.2_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.44.3_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.1_release_0_45_1.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.2_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.3_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.4_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.5_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.45.6_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.46.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.46.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.47.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.50.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.51.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.52.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.53.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.53.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.54.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.54.1_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.55.0_release.py +0 -1
- zenml/zen_stores/migrations/versions/0.55.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.55.2_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.55.3_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.55.4_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.55.5_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.2_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.3_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.56.4_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.57.0.rc1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.57.0.rc2_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.57.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.57.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.58.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.58.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.58.2_release.py +23 -0
- 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/0.62.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.63.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.64.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.65.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.66.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.70.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.71.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.72.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/026d4577b6a0_add_code_path.py +39 -0
- zenml/zen_stores/migrations/versions/03742aa7fdd7_add_secrets.py +1 -0
- zenml/zen_stores/migrations/versions/0701da9951a0_added_service_table.py +94 -0
- zenml/zen_stores/migrations/versions/0b06faa59c93_add_service_connectors.py +1 -0
- zenml/zen_stores/migrations/versions/0d707865f404_adding_labels_to_stacks.py +30 -0
- zenml/zen_stores/migrations/versions/0e4735b23577_increase_pipeline_spec_field_length.py +1 -0
- zenml/zen_stores/migrations/versions/1041bc644e0d_remove_secrets_manager.py +6 -3
- zenml/zen_stores/migrations/versions/10a907dad202_delete_mlmd_tables.py +2 -1
- zenml/zen_stores/migrations/versions/14d687c8fa1c_rename_model_config_to_model_version.py +1 -0
- zenml/zen_stores/migrations/versions/19f27d5b234e_add_build_and_deployment_tables.py +1 -0
- zenml/zen_stores/migrations/versions/1a9a9d2a836d_admin_users.py +56 -0
- zenml/zen_stores/migrations/versions/1ac1b9c04da1_make_secrets_values_optional.py +1 -0
- zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +99 -0
- zenml/zen_stores/migrations/versions/1d74e596abb8_add_run_once_start_time_to_schedule.py +36 -0
- zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
- zenml/zen_stores/migrations/versions/248dfd320b68_update_size_of_flavor_config_schema.py +1 -0
- zenml/zen_stores/migrations/versions/25155145c545_separate_actions_and_triggers.py +228 -0
- zenml/zen_stores/migrations/versions/26351d482b9e_add_step_run_unique_constraint.py +37 -0
- zenml/zen_stores/migrations/versions/26b776ad583e_redesign_artifacts.py +9 -10
- zenml/zen_stores/migrations/versions/2d201872e23c_remove_db_dependency_loop.py +29 -0
- zenml/zen_stores/migrations/versions/37835ce041d2_optimizing_database.py +4 -3
- zenml/zen_stores/migrations/versions/389046140cad_data_versioning.py +1 -0
- zenml/zen_stores/migrations/versions/3944116bbd56_rename_project_to_workspace.py +1 -0
- zenml/zen_stores/migrations/versions/3b68abe58f44_add_model_watchtower_entities.py +1 -0
- zenml/zen_stores/migrations/versions/3c5a367730c2_add_environment_info_to_runs.py +1 -0
- zenml/zen_stores/migrations/versions/3dcc5d20e82f_add_last_user_activity.py +51 -0
- zenml/zen_stores/migrations/versions/43a86093b60e_add_labels_for_stack_components.py +1 -0
- zenml/zen_stores/migrations/versions/46506f72f0ed_add_server_settings.py +123 -0
- zenml/zen_stores/migrations/versions/479103df60b6_add_triggers.py +162 -0
- zenml/zen_stores/migrations/versions/4a3087070f4e_add_step_source_code.py +1 -0
- zenml/zen_stores/migrations/versions/4c41c0ca42db_add_code_repository_table.py +1 -0
- zenml/zen_stores/migrations/versions/4d688d8f7aff_rename_model_version_to_model.py +1 -0
- zenml/zen_stores/migrations/versions/4e1972485075_endpoint_artifact_deployment_artifact.py +1 -0
- zenml/zen_stores/migrations/versions/4f66af55fbb9_rename_model_config_model_to_model_.py +1 -0
- zenml/zen_stores/migrations/versions/5330ba58bf20_rename_tables_and_foreign_keys.py +8 -9
- zenml/zen_stores/migrations/versions/5994f9ad0489_introduce_role_permissions.py +4 -2
- zenml/zen_stores/migrations/versions/5cc3f41cf048_add_save_models_to_registry.py +1 -0
- zenml/zen_stores/migrations/versions/6119cd9b93c2_tags_table.py +1 -0
- zenml/zen_stores/migrations/versions/623a234c11f5_add_sdk_docs_url_to_flavors.py +1 -0
- zenml/zen_stores/migrations/versions/6917bce75069_add_pipeline_run_unique_constraint.py +5 -4
- zenml/zen_stores/migrations/versions/6a28c4fd0ef2_add_caching_info.py +1 -0
- zenml/zen_stores/migrations/versions/6f707b385dc1_fix_model_artifacts.py +1 -0
- zenml/zen_stores/migrations/versions/722392c91006_make_is_service_account_mandatory.py +1 -0
- zenml/zen_stores/migrations/versions/72675226b2de_unique_users.py +31 -0
- zenml/zen_stores/migrations/versions/72722dee4686_track_server_version.py +1 -0
- zenml/zen_stores/migrations/versions/7280c14811d6_use_text_type.py +1 -0
- zenml/zen_stores/migrations/versions/728c6369cfaa_add_name_column_to_input_artifact_pk.py +4 -2
- zenml/zen_stores/migrations/versions/729263e47b55_fix_external_input_artifacts.py +1 -0
- zenml/zen_stores/migrations/versions/743ec82b1b3c_update_size_of_build_images.py +3 -2
- zenml/zen_stores/migrations/versions/7500f434b71c_remove_shared_columns.py +4 -2
- zenml/zen_stores/migrations/versions/76a7b9451ccd_add_build_template_deployment_id.py +52 -0
- zenml/zen_stores/migrations/versions/7834208cc3f6_artifact_project_scoping.py +9 -7
- zenml/zen_stores/migrations/versions/7b651bf6822e_track_secrets_in_db.py +7 -7
- zenml/zen_stores/migrations/versions/7d1919bb1ef0_add_run_templates.py +100 -0
- zenml/zen_stores/migrations/versions/7e4a481d17f7_add_identity_table.py +3 -2
- zenml/zen_stores/migrations/versions/7f603e583dd7_fixed_migration.py +2 -1
- zenml/zen_stores/migrations/versions/86fa52918b54_remove_teams_and_roles.py +1 -0
- zenml/zen_stores/migrations/versions/8a64fbfecda0_add_num_outputs_to_run_step.py +1 -0
- zenml/zen_stores/migrations/versions/8ed03137cacc_polymorthic_run_metadata.py +1 -0
- zenml/zen_stores/migrations/versions/904464ea4041_add_pipeline_model_run_unique_constraints.py +192 -0
- zenml/zen_stores/migrations/versions/909550c7c4da_remove_user_hub_token.py +36 -0
- zenml/zen_stores/migrations/versions/93cbda80a732_add_service_accounts.py +1 -0
- zenml/zen_stores/migrations/versions/979eff8fc4b1_add_code_repo_description_and_logo_url.py +1 -0
- zenml/zen_stores/migrations/versions/9971237fa937_artifact_visualizations.py +1 -0
- zenml/zen_stores/migrations/versions/9d8020441014_increase_step_configuration_length.py +1 -0
- zenml/zen_stores/migrations/versions/a1237ba94fd8_add_model_version_producer_run_unique_.py +68 -0
- zenml/zen_stores/migrations/versions/a39c4184c8ce_remove_secrets_manager_flavors.py +3 -2
- zenml/zen_stores/migrations/versions/a91762e6be36_artifact_version_table.py +5 -4
- zenml/zen_stores/migrations/versions/ade72effebaf_added_logs_table.py +1 -0
- zenml/zen_stores/migrations/versions/alembic_start.py +2 -1
- zenml/zen_stores/migrations/versions/b4eccf34dfa3_add_hub_token_to_user_model.py +1 -0
- zenml/zen_stores/migrations/versions/b4fca5241eea_migrate_onboarding_state.py +167 -0
- zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +33 -0
- zenml/zen_stores/migrations/versions/b59aa68fdb1f_simplify_pipelines.py +139 -0
- zenml/zen_stores/migrations/versions/b73bc71f1106_remove_component_spec_path.py +36 -0
- zenml/zen_stores/migrations/versions/bf2120261b5a_add_configured_model_version_id.py +74 -0
- zenml/zen_stores/migrations/versions/c1b18cec3a48_increase_length_on_flavor_config_schema.py +1 -0
- zenml/zen_stores/migrations/versions/c22561cbb3a9_add_artifact_unique_constraints.py +86 -0
- zenml/zen_stores/migrations/versions/cc269488e5a9_separate_run_metadata.py +135 -0
- zenml/zen_stores/migrations/versions/cc9894cb58aa_add_user_metadata.py +41 -0
- zenml/zen_stores/migrations/versions/ccd68b7825ae_add_status_to_pipeline_and_step_run.py +1 -0
- zenml/zen_stores/migrations/versions/d02b3d3464cf_add_orchestrator_run_id_column.py +1 -0
- zenml/zen_stores/migrations/versions/d26471b6fe8f_update_build_filtering.py +1 -0
- zenml/zen_stores/migrations/versions/d7b3acf9aa46_create_schedule_table.py +1 -0
- zenml/zen_stores/migrations/versions/e1d66d91a099_add_stack_and_component_spec_paths_to_.py +1 -0
- zenml/zen_stores/migrations/versions/e5225281b4d3_add_connector_skew_tolerance.py +1 -0
- zenml/zen_stores/migrations/versions/e65aa6708ff7_pipeline_versioning.py +1 -0
- zenml/zen_stores/migrations/versions/ec0d785ca296_create_run_metadata_table.py +1 -0
- zenml/zen_stores/migrations/versions/ec6307720f92_simplify_model_version_links.py +119 -0
- zenml/zen_stores/migrations/versions/f3b3964e3a0f_add_oauth_devices.py +1 -0
- zenml/zen_stores/migrations/versions/f49904a80aa7_increase_length_of_artifact_table_sources.py +1 -0
- zenml/zen_stores/migrations/versions/fbd7f18ced1e_increase_step_run_field_lengths.py +5 -4
- zenml/zen_stores/rest_zen_store.py +1326 -305
- zenml/zen_stores/schemas/__init__.py +22 -3
- zenml/zen_stores/schemas/action_schemas.py +192 -0
- zenml/zen_stores/schemas/api_key_schemas.py +23 -10
- zenml/zen_stores/schemas/artifact_schemas.py +112 -49
- zenml/zen_stores/schemas/artifact_visualization_schemas.py +17 -8
- zenml/zen_stores/schemas/base_schemas.py +27 -0
- zenml/zen_stores/schemas/code_repository_schemas.py +25 -10
- zenml/zen_stores/schemas/component_schemas.py +74 -11
- zenml/zen_stores/schemas/constants.py +16 -0
- zenml/zen_stores/schemas/device_schemas.py +29 -15
- zenml/zen_stores/schemas/event_source_schemas.py +188 -0
- zenml/zen_stores/schemas/flavor_schemas.py +19 -9
- zenml/zen_stores/schemas/logs_schemas.py +12 -6
- zenml/zen_stores/schemas/model_schemas.py +192 -139
- zenml/zen_stores/schemas/pipeline_build_schemas.py +16 -16
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +58 -17
- zenml/zen_stores/schemas/pipeline_run_schemas.py +170 -35
- zenml/zen_stores/schemas/pipeline_schemas.py +51 -33
- zenml/zen_stores/schemas/run_metadata_schemas.py +28 -78
- zenml/zen_stores/schemas/run_template_schemas.py +267 -0
- zenml/zen_stores/schemas/schedule_schema.py +15 -5
- zenml/zen_stores/schemas/secret_schemas.py +18 -10
- zenml/zen_stores/schemas/server_settings_schemas.py +129 -0
- zenml/zen_stores/schemas/service_connector_schemas.py +13 -6
- zenml/zen_stores/schemas/service_schemas.py +258 -0
- zenml/zen_stores/schemas/stack_schemas.py +23 -6
- zenml/zen_stores/schemas/step_run_schemas.py +132 -41
- zenml/zen_stores/schemas/tag_schemas.py +31 -50
- zenml/zen_stores/schemas/trigger_schemas.py +316 -0
- zenml/zen_stores/schemas/user_schemas.py +66 -23
- zenml/zen_stores/schemas/utils.py +112 -0
- zenml/zen_stores/schemas/workspace_schemas.py +36 -19
- zenml/zen_stores/secrets_stores/aws_secrets_store.py +41 -32
- zenml/zen_stores/secrets_stores/azure_secrets_store.py +20 -23
- zenml/zen_stores/secrets_stores/base_secrets_store.py +80 -12
- zenml/zen_stores/secrets_stores/gcp_secrets_store.py +42 -33
- zenml/zen_stores/secrets_stores/hashicorp_secrets_store.py +7 -11
- zenml/zen_stores/secrets_stores/secrets_store_interface.py +1 -0
- zenml/zen_stores/secrets_stores/service_connector_secrets_store.py +15 -8
- zenml/zen_stores/secrets_stores/sql_secrets_store.py +8 -9
- zenml/zen_stores/sql_zen_store.py +4062 -799
- zenml/zen_stores/template_utils.py +263 -0
- zenml/zen_stores/zen_store_interface.py +614 -44
- zenml_nightly-0.72.0.dev20250116.dist-info/METADATA +486 -0
- zenml_nightly-0.72.0.dev20250116.dist-info/RECORD +1294 -0
- {zenml_nightly-0.55.0.dev20240124.dist-info → zenml_nightly-0.72.0.dev20250116.dist-info}/WHEEL +1 -1
- CLA.md +0 -110
- CODE-OF-CONDUCT.md +0 -132
- CONTRIBUTING.md +0 -260
- README.md +0 -304
- RELEASE_NOTES.md +0 -3919
- ROADMAP.md +0 -5
- SECURITY.md +0 -15
- zenml/_hub/client.py +0 -285
- zenml/_hub/constants.py +0 -21
- zenml/_hub/utils.py +0 -80
- zenml/api.py +0 -61
- zenml/cli/hub.py +0 -1115
- zenml/cli/stack_recipes.py +0 -469
- zenml/integrations/gcp/google_cloud_function.py +0 -187
- zenml/integrations/gcp/google_cloud_scheduler.py +0 -83
- zenml/integrations/gcp/orchestrators/vertex_scheduler/main.py +0 -91
- zenml/integrations/gcp/orchestrators/vertex_scheduler/requirements.txt +0 -2
- zenml/integrations/kserve/__init__.py +0 -57
- zenml/integrations/kserve/custom_deployer/zenml_custom_model.py +0 -175
- zenml/integrations/kserve/flavors/kserve_model_deployer_flavor.py +0 -137
- zenml/integrations/kserve/model_deployers/kserve_model_deployer.py +0 -1003
- zenml/integrations/kserve/secret_schemas/secret_schemas.py +0 -65
- zenml/integrations/kserve/services/kserve_deployment.py +0 -596
- zenml/integrations/kserve/steps/__init__.py +0 -22
- zenml/integrations/kserve/steps/kserve_deployer.py +0 -472
- zenml/integrations/kserve/steps/kserve_step_utils.py +0 -293
- zenml/integrations/kubeflow/utils.py +0 -96
- zenml/lineage_graph/lineage_graph.py +0 -244
- zenml/lineage_graph/node/artifact_node.py +0 -52
- zenml/lineage_graph/node/step_node.py +0 -41
- zenml/models/v2/base/internal.py +0 -37
- zenml/models/v2/base/update.py +0 -40
- zenml/models/v2/misc/hub_plugin_models.py +0 -79
- zenml/new/pipelines/deserialization_utils.py +0 -291
- zenml/new/pipelines/model_utils.py +0 -72
- zenml/new/pipelines/pipeline_decorator.py +0 -109
- zenml/new/steps/step_decorator.py +0 -160
- zenml/pipelines/base_pipeline.py +0 -274
- zenml/post_execution/pipeline.py +0 -58
- zenml/post_execution/pipeline_run.py +0 -55
- zenml/services/service_registry.py +0 -214
- zenml/services/terraform/__init__.py +0 -14
- zenml/services/terraform/terraform_service.py +0 -441
- zenml/steps/step_environment.py +0 -108
- zenml/steps/step_output.py +0 -36
- zenml/utils/mlstacks_utils.py +0 -635
- zenml/utils/terraform_utils.py +0 -42
- zenml/zen_server/dashboard/_redirects +0 -1
- zenml/zen_server/dashboard/asset-manifest.json +0 -131
- zenml/zen_server/dashboard/manifest.json +0 -25
- zenml/zen_server/dashboard/precache-manifest.c139638dcc4d9d3425353266447a2fad.js +0 -462
- zenml/zen_server/dashboard/robots.txt +0 -2
- zenml/zen_server/dashboard/service-worker.js +0 -39
- zenml/zen_server/dashboard/static/css/2.5b37d44a.chunk.css +0 -16
- zenml/zen_server/dashboard/static/css/2.5b37d44a.chunk.css.map +0 -1
- zenml/zen_server/dashboard/static/css/main.77e46c35.chunk.css +0 -2
- zenml/zen_server/dashboard/static/css/main.77e46c35.chunk.css.map +0 -1
- zenml/zen_server/dashboard/static/js/2.bb4cef22.chunk.js +0 -3
- zenml/zen_server/dashboard/static/js/2.bb4cef22.chunk.js.LICENSE.txt +0 -95
- zenml/zen_server/dashboard/static/js/2.bb4cef22.chunk.js.map +0 -1
- zenml/zen_server/dashboard/static/js/main.270838b4.chunk.js +0 -2
- zenml/zen_server/dashboard/static/js/main.270838b4.chunk.js.map +0 -1
- zenml/zen_server/dashboard/static/js/runtime-main.bfca2edd.js +0 -2
- zenml/zen_server/dashboard/static/js/runtime-main.bfca2edd.js.map +0 -1
- zenml/zen_server/dashboard/static/media/AlertTriangle.28aee535.svg +0 -5
- zenml/zen_server/dashboard/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
- zenml/zen_server/dashboard/static/media/Back.86c23a22.svg +0 -4
- zenml/zen_server/dashboard/static/media/BookOpen.5cb101ff.svg +0 -4
- zenml/zen_server/dashboard/static/media/BoundingBox.1eb98717.svg +0 -10
- zenml/zen_server/dashboard/static/media/Burger.9b1c67d7.svg +0 -3
- zenml/zen_server/dashboard/static/media/Cached.2381fb8d.svg +0 -1
- zenml/zen_server/dashboard/static/media/Calendar.356e11c7.svg +0 -3
- zenml/zen_server/dashboard/static/media/ChartBarHorizontal.0247447b.svg +0 -6
- zenml/zen_server/dashboard/static/media/ChartLine.0d79e18d.svg +0 -4
- zenml/zen_server/dashboard/static/media/ChatDots.2e1c9211.svg +0 -6
- zenml/zen_server/dashboard/static/media/Check.dad6beb2.svg +0 -3
- zenml/zen_server/dashboard/static/media/CheckCircleFilled.c19566d0.svg +0 -3
- zenml/zen_server/dashboard/static/media/Checkbox.af50e31e.svg +0 -3
- zenml/zen_server/dashboard/static/media/ChevronDown.f860ce32.svg +0 -3
- zenml/zen_server/dashboard/static/media/ChevronDownLight.6642d756.svg +0 -3
- zenml/zen_server/dashboard/static/media/ChevronLeft.f6edfcdb.svg +0 -3
- zenml/zen_server/dashboard/static/media/CircleCheck.f98fd6ca.svg +0 -1
- zenml/zen_server/dashboard/static/media/Clock.ffc9de95.svg +0 -3
- zenml/zen_server/dashboard/static/media/Close.74e9efbc.svg +0 -5
- zenml/zen_server/dashboard/static/media/CloseWithBorder.6960930a.svg +0 -3
- zenml/zen_server/dashboard/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
- zenml/zen_server/dashboard/static/media/CloudArrowUp.0aecb235.svg +0 -6
- zenml/zen_server/dashboard/static/media/Code.ef0f33b5.svg +0 -3
- zenml/zen_server/dashboard/static/media/Config.0be63f8a.svg +0 -1
- zenml/zen_server/dashboard/static/media/Connector.9fd46ef1.svg +0 -10
- zenml/zen_server/dashboard/static/media/Copy.36e2112a.svg +0 -1
- zenml/zen_server/dashboard/static/media/Dashboard.d05787e0.svg +0 -3
- zenml/zen_server/dashboard/static/media/Data.b1c3b5f8.svg +0 -3
- zenml/zen_server/dashboard/static/media/Delete.3c361b28.svg +0 -8
- zenml/zen_server/dashboard/static/media/Docs.7541d478.svg +0 -7
- zenml/zen_server/dashboard/static/media/Download.fba04d87.svg +0 -5
- zenml/zen_server/dashboard/static/media/Edit.490eb294.svg +0 -6
- zenml/zen_server/dashboard/static/media/EmptyRightArrow.23749d01.svg +0 -3
- zenml/zen_server/dashboard/static/media/Example.6396cd37.svg +0 -5
- zenml/zen_server/dashboard/static/media/Extension.1394cd4a.svg +0 -3
- zenml/zen_server/dashboard/static/media/Eye.d9e4ee62.svg +0 -4
- zenml/zen_server/dashboard/static/media/Failed.0213c1a0.svg +0 -1
- zenml/zen_server/dashboard/static/media/FileText.1f15bacd.svg +0 -7
- zenml/zen_server/dashboard/static/media/Filter.ab6b9c0d.svg +0 -3
- zenml/zen_server/dashboard/static/media/Folders.12b29887.svg +0 -5
- zenml/zen_server/dashboard/static/media/FunnelFill.6df4c143.svg +0 -3
- zenml/zen_server/dashboard/static/media/GitCommit.7dd9c2aa.svg +0 -5
- zenml/zen_server/dashboard/static/media/GitHub_Logo.cefc2023.png +0 -0
- zenml/zen_server/dashboard/static/media/Graph.2c63a892.svg +0 -11
- zenml/zen_server/dashboard/static/media/History.08329240.svg +0 -3
- zenml/zen_server/dashboard/static/media/Home.0843b0d5.svg +0 -3
- zenml/zen_server/dashboard/static/media/ImageBuilder.ea762d9c.svg +0 -6
- zenml/zen_server/dashboard/static/media/InProgress.304a0edc.svg +0 -1
- zenml/zen_server/dashboard/static/media/Info.9fe10c5c.svg +0 -3
- zenml/zen_server/dashboard/static/media/KeyboardReturn.491afbe3.svg +0 -3
- zenml/zen_server/dashboard/static/media/Link.72bbb55d.svg +0 -4
- zenml/zen_server/dashboard/static/media/Lock.30f5e1fe.svg +0 -5
- zenml/zen_server/dashboard/static/media/Lock2.a769ea52.svg +0 -3
- zenml/zen_server/dashboard/static/media/LockKey.92f21621.svg +0 -6
- zenml/zen_server/dashboard/static/media/Logs.8bf4d005.svg +0 -5
- zenml/zen_server/dashboard/static/media/MinusCircle.4188f418.svg +0 -4
- zenml/zen_server/dashboard/static/media/ModelRegistry.f0de050a.svg +0 -6
- zenml/zen_server/dashboard/static/media/MultiUser.a2ba7c67.svg +0 -10
- zenml/zen_server/dashboard/static/media/PaginationFirst.92628634.svg +0 -4
- zenml/zen_server/dashboard/static/media/PaginationLast.00d3c732.svg +0 -4
- zenml/zen_server/dashboard/static/media/PaginationNext.86158845.svg +0 -3
- zenml/zen_server/dashboard/static/media/PaginationPrev.60c18a88.svg +0 -3
- zenml/zen_server/dashboard/static/media/Pen.f2d831d4.svg +0 -6
- zenml/zen_server/dashboard/static/media/PhotoCamera.179d6d4c.svg +0 -3
- zenml/zen_server/dashboard/static/media/Pipeline.30d298b0.svg +0 -7
- zenml/zen_server/dashboard/static/media/Plus.5aa1c16b.svg +0 -3
- zenml/zen_server/dashboard/static/media/PlusCircle.92d860dd.svg +0 -5
- zenml/zen_server/dashboard/static/media/Repositories.71a36b8c.svg +0 -3
- zenml/zen_server/dashboard/static/media/RightArrow.f30d3871.svg +0 -29
- zenml/zen_server/dashboard/static/media/Rocket.63bf7b9d.svg +0 -3
- zenml/zen_server/dashboard/static/media/RocketLaunch.1bff2b59.svg +0 -6
- zenml/zen_server/dashboard/static/media/Rubik-Medium.c87313aa.ttf +0 -0
- zenml/zen_server/dashboard/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
- zenml/zen_server/dashboard/static/media/Run.daec4fb2.svg +0 -6
- zenml/zen_server/dashboard/static/media/Search.d1afcce5.svg +0 -4
- zenml/zen_server/dashboard/static/media/Settings.59ca73ae.svg +0 -4
- zenml/zen_server/dashboard/static/media/Share2.46c3ff66.svg +0 -3
- zenml/zen_server/dashboard/static/media/SignOut.6aa718c5.svg +0 -3
- zenml/zen_server/dashboard/static/media/SimplePlus.5cf7ec20.svg +0 -3
- zenml/zen_server/dashboard/static/media/SingleUser.bef3a095.svg +0 -4
- zenml/zen_server/dashboard/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
- zenml/zen_server/dashboard/static/media/Stack.19b604ac.svg +0 -5
- zenml/zen_server/dashboard/static/media/StackComponent.b1ba90b5.svg +0 -4
- zenml/zen_server/dashboard/static/media/Star.f0c25022.svg +0 -9
- zenml/zen_server/dashboard/static/media/StarOutline.94ca8cd9.svg +0 -3
- zenml/zen_server/dashboard/static/media/Storefront.4b4796fe.svg +0 -3
- zenml/zen_server/dashboard/static/media/Stream.543e3039.svg +0 -3
- zenml/zen_server/dashboard/static/media/SupportAgent.510ddf1f.svg +0 -8
- zenml/zen_server/dashboard/static/media/Table.77033750.svg +0 -6
- zenml/zen_server/dashboard/static/media/Tool.d5785486.svg +0 -3
- zenml/zen_server/dashboard/static/media/UserPlus.741a99d7.svg +0 -6
- zenml/zen_server/dashboard/static/media/Verified.0625b2a0.svg +0 -3
- zenml/zen_server/dashboard/static/media/addNew.4fb6c939.svg +0 -8
- zenml/zen_server/dashboard/static/media/arrowClose.cbd53f3f.svg +0 -3
- zenml/zen_server/dashboard/static/media/arrowOpen.6ceef0af.svg +0 -3
- zenml/zen_server/dashboard/static/media/check_small.30bc0138.svg +0 -3
- zenml/zen_server/dashboard/static/media/circleArrowSideClose.98d6013e.svg +0 -18
- zenml/zen_server/dashboard/static/media/circleArrowSideOpen.63653df6.svg +0 -18
- zenml/zen_server/dashboard/static/media/image.104fd14b.png +0 -0
- zenml/zen_server/dashboard/static/media/imageAddIcon.e83004a9.svg +0 -7
- zenml/zen_server/dashboard/static/media/logo.93333e5c.svg +0 -1
- zenml/zen_server/dashboard/static/media/logo_small.4204397d.svg +0 -3
- zenml/zen_server/dashboard/static/media/logo_white.d4b4414e.svg +0 -20
- zenml/zen_server/dashboard/static/media/notConnected.5e2c8ea7.svg +0 -8
- zenml/zen_server/dashboard/static/media/plugin-fallback.72c294e6.svg +0 -6
- zenml/zen_server/dashboard/static/media/share.bcd998b0.svg +0 -5
- zenml/zen_server/dashboard/static/media/stars.08a9b19a.svg +0 -8
- zenml/zen_server/deploy/terraform/__init__.py +0 -41
- zenml/zen_server/deploy/terraform/providers/__init__.py +0 -14
- zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
- zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -332
- zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -14
- zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
- zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -179
- zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
- zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -111
- zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
- zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -14
- zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
- zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
- zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
- zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -188
- zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -111
- zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -14
- zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
- zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -183
- zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -122
- zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -255
- zenml/zen_server/routers/run_metadata_endpoints.py +0 -97
- zenml_nightly-0.55.0.dev20240124.dist-info/METADATA +0 -438
- zenml_nightly-0.55.0.dev20240124.dist-info/RECORD +0 -1072
- {zenml_nightly-0.55.0.dev20240124.dist-info → zenml_nightly-0.72.0.dev20250116.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.55.0.dev20240124.dist-info → zenml_nightly-0.72.0.dev20250116.dist-info}/entry_points.txt +0 -0
zenml/cli/server.py
CHANGED
@@ -14,35 +14,36 @@
|
|
14
14
|
"""CLI for managing ZenML server deployments."""
|
15
15
|
|
16
16
|
import ipaddress
|
17
|
-
import
|
18
|
-
import
|
19
|
-
from typing import Any, Dict, Optional, Union
|
17
|
+
import re
|
18
|
+
from typing import List, Optional, Union
|
20
19
|
|
21
20
|
import click
|
22
|
-
import yaml
|
23
21
|
from rich.errors import MarkupError
|
24
22
|
|
25
23
|
import zenml
|
26
|
-
from zenml.analytics.enums import AnalyticsEvent
|
27
|
-
from zenml.analytics.utils import track_handler
|
28
24
|
from zenml.cli import utils as cli_utils
|
29
|
-
from zenml.cli.cli import cli
|
30
|
-
from zenml.cli.
|
25
|
+
from zenml.cli.cli import TagGroup, cli
|
26
|
+
from zenml.cli.login import login, logout
|
31
27
|
from zenml.client import Client
|
32
28
|
from zenml.config.global_config import GlobalConfiguration
|
33
29
|
from zenml.console import console
|
34
|
-
from zenml.enums import
|
35
|
-
from zenml.exceptions import
|
30
|
+
from zenml.enums import CliCategories, StoreType
|
31
|
+
from zenml.exceptions import AuthorizationException
|
36
32
|
from zenml.logger import get_logger
|
37
|
-
from zenml.
|
38
|
-
from zenml.
|
33
|
+
from zenml.login.credentials import ServerCredentials, ServerType
|
34
|
+
from zenml.services.service_status import ServiceState
|
35
|
+
from zenml.zen_server.utils import connected_to_local_server, get_local_server
|
39
36
|
|
40
37
|
logger = get_logger(__name__)
|
41
38
|
|
42
|
-
LOCAL_ZENML_SERVER_NAME = "local"
|
43
39
|
|
40
|
+
@cli.command(
|
41
|
+
"up",
|
42
|
+
help="""Start the ZenML dashboard locally.
|
44
43
|
|
45
|
-
|
44
|
+
DEPRECATED: Please use `zenml login --local` instead.
|
45
|
+
""",
|
46
|
+
)
|
46
47
|
@click.option(
|
47
48
|
"--docker",
|
48
49
|
is_flag=True,
|
@@ -72,14 +73,6 @@ LOCAL_ZENML_SERVER_NAME = "local"
|
|
72
73
|
default=False,
|
73
74
|
type=click.BOOL,
|
74
75
|
)
|
75
|
-
@click.option(
|
76
|
-
"--connect",
|
77
|
-
is_flag=True,
|
78
|
-
help="Connect the client to the local server even when already connected "
|
79
|
-
"to a remote ZenML server.",
|
80
|
-
default=False,
|
81
|
-
type=click.BOOL,
|
82
|
-
)
|
83
76
|
@click.option(
|
84
77
|
"--image",
|
85
78
|
type=str,
|
@@ -100,7 +93,6 @@ def up(
|
|
100
93
|
] = None,
|
101
94
|
port: Optional[int] = None,
|
102
95
|
blocking: bool = False,
|
103
|
-
connect: bool = False,
|
104
96
|
image: Optional[str] = None,
|
105
97
|
ngrok_token: Optional[str] = None,
|
106
98
|
) -> None:
|
@@ -111,127 +103,44 @@ def up(
|
|
111
103
|
ip_address: The IP address to bind the server to.
|
112
104
|
port: The port to bind the server to.
|
113
105
|
blocking: Block the CLI while the server is running.
|
114
|
-
connect: Connect the client to the local server even when already
|
115
|
-
connected to a remote ZenML server.
|
116
106
|
image: A custom Docker image to use for the server, when the
|
117
107
|
`--docker` flag is set.
|
118
108
|
ngrok_token: An ngrok auth token to use for exposing the ZenML dashboard
|
119
109
|
on a public domain. Primarily used for accessing the dashboard in
|
120
110
|
Colab.
|
121
111
|
"""
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
logger.warning(
|
126
|
-
"The `--connect` flag is deprecated, has no effect, and will be "
|
127
|
-
"removed in a future release."
|
128
|
-
)
|
129
|
-
|
130
|
-
gc = GlobalConfiguration()
|
131
|
-
|
132
|
-
# Raise an error if the client is already connected to a remote server.
|
133
|
-
if gc.store is not None and gc.store.type == StoreType.REST:
|
134
|
-
if not gc.zen_store.is_local_store():
|
135
|
-
cli_utils.error(
|
136
|
-
"Your ZenML client is already connected to a remote server. If "
|
137
|
-
"you want to spin up a local ZenML server, please disconnect "
|
138
|
-
"from the remote server first by running `zenml disconnect`."
|
139
|
-
)
|
140
|
-
|
141
|
-
if docker:
|
142
|
-
from zenml.utils.docker_utils import check_docker
|
143
|
-
|
144
|
-
if not check_docker():
|
145
|
-
cli_utils.error(
|
146
|
-
"Docker does not seem to be installed on your system. Please "
|
147
|
-
"install Docker to use the Docker ZenML server local "
|
148
|
-
"deployment or use one of the other deployment options."
|
149
|
-
)
|
150
|
-
provider = ServerProviderType.DOCKER
|
151
|
-
else:
|
152
|
-
if sys.platform == "win32" and not blocking:
|
153
|
-
cli_utils.error(
|
154
|
-
"Running the ZenML server locally as a background process is "
|
155
|
-
"not supported on Windows. Please use the `--blocking` flag "
|
156
|
-
"to run the server in blocking mode, or run the server in "
|
157
|
-
"a Docker container by setting `--docker` instead."
|
158
|
-
)
|
159
|
-
else:
|
160
|
-
pass
|
161
|
-
provider = ServerProviderType.LOCAL
|
162
|
-
|
163
|
-
deployer = ServerDeployer()
|
164
|
-
|
165
|
-
server = get_active_deployment(local=True)
|
166
|
-
if server and server.config.provider != provider:
|
167
|
-
deployer.remove_server(LOCAL_ZENML_SERVER_NAME)
|
168
|
-
|
169
|
-
config_attrs: Dict[str, Any] = dict(
|
170
|
-
name=LOCAL_ZENML_SERVER_NAME,
|
171
|
-
provider=provider,
|
112
|
+
cli_utils.warning(
|
113
|
+
"The `zenml up` command is deprecated and will be removed in a "
|
114
|
+
"future release. Please use the `zenml login --local` command instead."
|
172
115
|
)
|
173
|
-
if not docker:
|
174
|
-
config_attrs["blocking"] = blocking
|
175
|
-
elif image:
|
176
|
-
config_attrs["image"] = image
|
177
|
-
if port is not None:
|
178
|
-
config_attrs["port"] = port
|
179
|
-
if ip_address is not None and provider in [
|
180
|
-
ServerProviderType.LOCAL,
|
181
|
-
ServerProviderType.DOCKER,
|
182
|
-
]:
|
183
|
-
config_attrs["ip_address"] = ip_address
|
184
|
-
|
185
|
-
from zenml.zen_server.deploy.deployment import ServerDeploymentConfig
|
186
|
-
|
187
|
-
server_config = ServerDeploymentConfig(**config_attrs)
|
188
|
-
if blocking:
|
189
|
-
from zenml.constants import (
|
190
|
-
DEFAULT_USERNAME,
|
191
|
-
)
|
192
|
-
|
193
|
-
cli_utils.declare(
|
194
|
-
"The local ZenML dashboard is about to deploy in a "
|
195
|
-
"blocking process. You can connect to it using the "
|
196
|
-
f"'{DEFAULT_USERNAME}' username and an empty password."
|
197
|
-
)
|
198
|
-
server = deployer.deploy_server(server_config)
|
199
|
-
|
200
|
-
assert gc.store is not None
|
201
116
|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
117
|
+
# Calling the `zenml login` command
|
118
|
+
cli_utils.declare("Calling `zenml login --local`...")
|
119
|
+
login.callback( # type: ignore[misc]
|
120
|
+
local=True,
|
121
|
+
docker=docker,
|
122
|
+
ip_address=ip_address,
|
123
|
+
port=port,
|
124
|
+
blocking=blocking,
|
125
|
+
image=image,
|
126
|
+
ngrok_token=ngrok_token,
|
127
|
+
)
|
213
128
|
|
214
|
-
if server.status and server.status.url:
|
215
|
-
cli_utils.declare(
|
216
|
-
f"The local ZenML dashboard is available at "
|
217
|
-
f"'{server.status.url}'. You can connect to it using the "
|
218
|
-
f"'{DEFAULT_USERNAME}' username and an empty password. "
|
219
|
-
)
|
220
|
-
zenml.show(
|
221
|
-
ngrok_token=ngrok_token,
|
222
|
-
username=DEFAULT_USERNAME,
|
223
|
-
password=DEFAULT_PASSWORD,
|
224
|
-
)
|
225
129
|
|
130
|
+
@cli.command(
|
131
|
+
"show",
|
132
|
+
help="""Show the ZenML dashboard.
|
226
133
|
|
134
|
+
DEPRECATED: Please use `zenml server show` instead.
|
135
|
+
""",
|
136
|
+
)
|
227
137
|
@click.option(
|
228
138
|
"--ngrok-token",
|
229
139
|
type=str,
|
230
140
|
default=None,
|
231
141
|
help="Specify an ngrok auth token to use for exposing the ZenML server.",
|
232
142
|
)
|
233
|
-
|
234
|
-
def show(ngrok_token: Optional[str] = None) -> None:
|
143
|
+
def legacy_show(ngrok_token: Optional[str] = None) -> None:
|
235
144
|
"""Show the ZenML dashboard.
|
236
145
|
|
237
146
|
Args:
|
@@ -239,286 +148,126 @@ def show(ngrok_token: Optional[str] = None) -> None:
|
|
239
148
|
on a public domain. Primarily used for accessing the dashboard in
|
240
149
|
Colab.
|
241
150
|
"""
|
242
|
-
|
243
|
-
zenml
|
244
|
-
|
245
|
-
|
246
|
-
|
151
|
+
cli_utils.warning(
|
152
|
+
"The `zenml show` command is deprecated and will be removed in a "
|
153
|
+
"future release. Please use the `zenml server show` command "
|
154
|
+
"instead."
|
155
|
+
)
|
247
156
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
server = get_active_deployment(local=True)
|
157
|
+
# Calling the `zenml server show` command
|
158
|
+
cli_utils.declare("Calling `zenml server show`...")
|
159
|
+
show(local=False, ngrok_token=ngrok_token)
|
252
160
|
|
253
|
-
if not server:
|
254
|
-
cli_utils.declare("The local ZenML dashboard is not running.")
|
255
161
|
|
256
|
-
|
257
|
-
|
162
|
+
@cli.command(
|
163
|
+
"down",
|
164
|
+
help="""Shut down the local ZenML dashboard.
|
258
165
|
|
259
|
-
|
260
|
-
|
261
|
-
|
166
|
+
DEPRECATED: Please use `zenml logout local` instead.
|
167
|
+
""",
|
168
|
+
)
|
169
|
+
def down() -> None:
|
170
|
+
"""Shut down the local ZenML dashboard."""
|
171
|
+
cli_utils.warning(
|
172
|
+
"The `zenml down` command is deprecated and will be removed in a "
|
173
|
+
"future release. Please use the `zenml logout --local` command instead."
|
174
|
+
)
|
262
175
|
|
263
|
-
|
264
|
-
|
176
|
+
# Calling the `zenml logout` command
|
177
|
+
cli_utils.declare("Calling `zenml logout --local`...")
|
178
|
+
logout.callback( # type: ignore[misc]
|
179
|
+
local=True
|
180
|
+
)
|
265
181
|
|
266
182
|
|
267
|
-
@cli.command(
|
268
|
-
|
269
|
-
"--provider",
|
270
|
-
"-p",
|
271
|
-
type=click.Choice(
|
272
|
-
[
|
273
|
-
ServerProviderType.AWS.value,
|
274
|
-
ServerProviderType.GCP.value,
|
275
|
-
ServerProviderType.AZURE.value,
|
276
|
-
],
|
277
|
-
case_sensitive=True,
|
278
|
-
),
|
279
|
-
default=None,
|
280
|
-
help="Server deployment provider.",
|
281
|
-
)
|
282
|
-
@click.option(
|
283
|
-
"--name",
|
284
|
-
type=str,
|
285
|
-
help="A name for the ZenML server deployment. This is used as a prefix for "
|
286
|
-
"the names of deployed resources, such as database services and Kubernetes "
|
287
|
-
"resources.",
|
288
|
-
)
|
289
|
-
@click.option(
|
290
|
-
"--username",
|
291
|
-
type=str,
|
292
|
-
default=None,
|
293
|
-
help="The username to use for the provisioned admin account.",
|
294
|
-
)
|
295
|
-
@click.option(
|
296
|
-
"--password",
|
297
|
-
type=str,
|
298
|
-
default=None,
|
299
|
-
help="The initial password to use for the provisioned admin account.",
|
300
|
-
)
|
301
|
-
@click.option(
|
302
|
-
"--timeout",
|
303
|
-
"-t",
|
304
|
-
type=click.INT,
|
305
|
-
default=None,
|
306
|
-
help="Time in seconds to wait for the server to be deployed.",
|
307
|
-
)
|
308
|
-
@click.option(
|
309
|
-
"--config",
|
310
|
-
help="Use a YAML or JSON configuration or configuration file.",
|
311
|
-
required=False,
|
312
|
-
type=str,
|
313
|
-
)
|
314
|
-
@click.option(
|
315
|
-
"--connect",
|
316
|
-
is_flag=True,
|
317
|
-
help="Connect your client to the ZenML server after it is successfully "
|
318
|
-
"deployed.",
|
319
|
-
default=False,
|
320
|
-
type=click.BOOL,
|
321
|
-
)
|
322
|
-
@click.option(
|
323
|
-
"--gcp-project-id",
|
324
|
-
help="The project in GCP to deploy the server to. ",
|
325
|
-
required=False,
|
326
|
-
type=str,
|
183
|
+
@cli.command(
|
184
|
+
"status", help="Show information about the current configuration."
|
327
185
|
)
|
328
|
-
def
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
name: Optional[str] = None,
|
334
|
-
timeout: Optional[int] = None,
|
335
|
-
config: Optional[str] = None,
|
336
|
-
gcp_project_id: Optional[str] = None,
|
337
|
-
) -> None:
|
338
|
-
"""Deploy the ZenML server in a cloud provider.
|
186
|
+
def status() -> None:
|
187
|
+
"""Show details about the current configuration."""
|
188
|
+
from zenml.login.credentials_store import get_credentials_store
|
189
|
+
from zenml.login.pro.client import ZenMLProClient
|
190
|
+
from zenml.login.pro.constants import ZENML_PRO_API_URL
|
339
191
|
|
340
|
-
|
341
|
-
|
342
|
-
provider: ZenML server provider name.
|
343
|
-
connect: Connecting the client to the ZenML server.
|
344
|
-
username: The username for the provisioned admin account.
|
345
|
-
password: The initial password to use for the provisioned admin account.
|
346
|
-
timeout: Time in seconds to wait for the server to start.
|
347
|
-
config: A YAML or JSON configuration or configuration file to use.
|
348
|
-
gcp_project_id: The project in GCP to deploy the server to.
|
349
|
-
"""
|
350
|
-
with track_handler(
|
351
|
-
event=AnalyticsEvent.ZENML_SERVER_DEPLOYED
|
352
|
-
) as analytics_handler:
|
353
|
-
try:
|
354
|
-
terraform_utils.verify_terraform_installation()
|
355
|
-
except RuntimeError as e:
|
356
|
-
cli_utils.error(str(e))
|
192
|
+
gc = GlobalConfiguration()
|
193
|
+
client = Client()
|
357
194
|
|
358
|
-
|
195
|
+
store_cfg = gc.store_configuration
|
359
196
|
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
197
|
+
# Write about the current ZenML client
|
198
|
+
cli_utils.declare("-----ZenML Client Status-----")
|
199
|
+
if gc.uses_default_store():
|
200
|
+
cli_utils.declare(
|
201
|
+
f"Connected to the local ZenML database: '{store_cfg.url}'"
|
202
|
+
)
|
203
|
+
elif connected_to_local_server():
|
204
|
+
cli_utils.declare(
|
205
|
+
f"Connected to the local ZenML server: {store_cfg.url}"
|
206
|
+
)
|
207
|
+
elif re.match(r"^mysql://", store_cfg.url):
|
208
|
+
cli_utils.declare(
|
209
|
+
f"Connected directly to a SQL database: '{store_cfg.url}'"
|
210
|
+
)
|
211
|
+
else:
|
212
|
+
credentials_store = get_credentials_store()
|
213
|
+
server = credentials_store.get_credentials(store_cfg.url)
|
214
|
+
if server:
|
215
|
+
if server.type == ServerType.PRO:
|
216
|
+
# If connected to a ZenML Pro server, refresh the server info
|
217
|
+
pro_credentials = credentials_store.get_pro_credentials(
|
218
|
+
pro_api_url=server.pro_api_url or ZENML_PRO_API_URL,
|
219
|
+
allow_expired=False,
|
369
220
|
)
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
password = config_dict.get("password", password)
|
375
|
-
|
376
|
-
if not name:
|
377
|
-
name = click.prompt(
|
378
|
-
"ZenML server name (used as a prefix for the names of deployed "
|
379
|
-
"resources)",
|
380
|
-
default="zenml",
|
381
|
-
)
|
382
|
-
config_dict["name"] = name
|
383
|
-
|
384
|
-
if not provider:
|
385
|
-
provider = click.prompt(
|
386
|
-
"ZenML server provider",
|
387
|
-
type=click.Choice(
|
388
|
-
[
|
389
|
-
ServerProviderType.AWS.value,
|
390
|
-
ServerProviderType.GCP.value,
|
391
|
-
ServerProviderType.AZURE.value,
|
392
|
-
],
|
393
|
-
case_sensitive=True,
|
394
|
-
),
|
395
|
-
default=ServerProviderType.AWS.value,
|
396
|
-
)
|
397
|
-
config_dict["provider"] = provider
|
398
|
-
|
399
|
-
if provider == ServerProviderType.GCP.value:
|
400
|
-
if "project_id" not in config_dict:
|
401
|
-
if not gcp_project_id:
|
402
|
-
gcp_project_id = click.prompt(
|
403
|
-
"GCP project ID",
|
221
|
+
if pro_credentials:
|
222
|
+
pro_client = ZenMLProClient(pro_credentials.url)
|
223
|
+
pro_servers = pro_client.tenant.list(
|
224
|
+
url=store_cfg.url, member_only=True
|
404
225
|
)
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
if not password:
|
415
|
-
password = click.prompt(
|
416
|
-
"ZenML admin account password", hide_input=True
|
417
|
-
)
|
418
|
-
config_dict["password"] = password
|
419
|
-
|
420
|
-
from zenml.zen_server.deploy.deployment import ServerDeploymentConfig
|
421
|
-
|
422
|
-
server_config = ServerDeploymentConfig.parse_obj(config_dict)
|
423
|
-
|
424
|
-
from zenml.zen_server.deploy.deployer import ServerDeployer
|
425
|
-
|
426
|
-
deployer = ServerDeployer()
|
427
|
-
|
428
|
-
server = get_active_deployment(local=False)
|
429
|
-
if server:
|
430
|
-
if server.config.provider != provider:
|
431
|
-
cli_utils.error(
|
432
|
-
"ZenML is already deployed using a different provider "
|
433
|
-
f"({server.config.provider}). Please tear down the "
|
434
|
-
"existing deployment by running `zenml destroy` before "
|
435
|
-
"deploying a new one."
|
226
|
+
if pro_servers:
|
227
|
+
credentials_store.update_server_info(
|
228
|
+
server_url=store_cfg.url,
|
229
|
+
server_info=pro_servers[0],
|
230
|
+
)
|
231
|
+
|
232
|
+
cli_utils.declare(
|
233
|
+
f"Connected to a ZenML Pro server: `{server.server_name_hyperlink}`"
|
234
|
+
f" [{server.server_id_hyperlink}]"
|
436
235
|
)
|
437
236
|
|
438
|
-
|
439
|
-
|
440
|
-
f"An existing deployment with a different name "
|
441
|
-
f"'{server.config.name}' already exists. Please tear down "
|
442
|
-
f"the existing deployment by running `zenml destroy` "
|
443
|
-
f"before deploying a new one."
|
237
|
+
cli_utils.declare(
|
238
|
+
f" ZenML Pro Organization: {server.organization_hyperlink}"
|
444
239
|
)
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
analytics_handler.metadata = metadata
|
453
|
-
|
454
|
-
if server.status and server.status.url:
|
455
|
-
cli_utils.declare(
|
456
|
-
f"ZenML server '{name}' running at '{server.status.url}'."
|
457
|
-
)
|
458
|
-
|
459
|
-
if connect and username:
|
460
|
-
deployer.connect_to_server(
|
461
|
-
server_config.name,
|
462
|
-
username,
|
463
|
-
password or "",
|
464
|
-
verify_ssl=server.status.ca_crt
|
465
|
-
if server.status.ca_crt is not None
|
466
|
-
else False,
|
240
|
+
if pro_credentials:
|
241
|
+
cli_utils.declare(
|
242
|
+
f" ZenML Pro authentication: {pro_credentials.auth_status}"
|
243
|
+
)
|
244
|
+
else:
|
245
|
+
cli_utils.declare(
|
246
|
+
f"Connected to a remote ZenML server: `{server.dashboard_hyperlink}`"
|
467
247
|
)
|
468
248
|
|
249
|
+
cli_utils.declare(f" Dashboard: {server.dashboard_hyperlink}")
|
250
|
+
cli_utils.declare(f" API: {server.api_hyperlink}")
|
251
|
+
cli_utils.declare(f" Server status: '{server.status}'")
|
252
|
+
cli_utils.declare(f" Server authentication: {server.auth_status}")
|
469
253
|
|
470
|
-
@cli.command(
|
471
|
-
"destroy", help="Tear down and clean up the cloud ZenML deployment."
|
472
|
-
)
|
473
|
-
def destroy() -> None:
|
474
|
-
"""Tear down and clean up a cloud ZenML deployment."""
|
475
|
-
server = get_active_deployment(local=False)
|
476
|
-
if not server:
|
477
|
-
cli_utils.declare("No cloud ZenML server has been deployed.")
|
478
|
-
return
|
479
|
-
|
480
|
-
from zenml.zen_server.deploy.deployer import ServerDeployer
|
481
|
-
|
482
|
-
deployer = ServerDeployer()
|
483
|
-
deployer.remove_server(server.config.name)
|
484
|
-
|
485
|
-
cli_utils.declare(
|
486
|
-
"The ZenML server has been torn down and all resources removed."
|
487
|
-
)
|
488
|
-
|
489
|
-
|
490
|
-
@cli.command(
|
491
|
-
"status", help="Show information about the current configuration."
|
492
|
-
)
|
493
|
-
def status() -> None:
|
494
|
-
"""Show details about the current configuration."""
|
495
|
-
gc = GlobalConfiguration()
|
496
|
-
client = Client()
|
497
|
-
|
498
|
-
store_cfg = gc.store
|
499
|
-
|
500
|
-
# Write about the current ZenML server
|
501
|
-
cli_utils.declare("-----ZenML Server Status-----")
|
502
|
-
if store_cfg is not None:
|
503
|
-
if gc.uses_default_store():
|
504
|
-
cli_utils.declare(
|
505
|
-
f"Connected to a local ZenML database: ('{store_cfg.url}')"
|
506
|
-
)
|
507
254
|
else:
|
508
255
|
cli_utils.declare(
|
509
|
-
f"Connected to a ZenML server:
|
256
|
+
f"Connected to a remote ZenML server: [link={store_cfg.url}]"
|
257
|
+
f"{store_cfg.url}[/link]"
|
510
258
|
)
|
511
259
|
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
260
|
+
try:
|
261
|
+
client.zen_store.get_store_info()
|
262
|
+
except Exception as e:
|
263
|
+
cli_utils.warning(f"Error while initializing client: {e}")
|
264
|
+
else:
|
265
|
+
# Write about the active entities
|
266
|
+
scope = "repository" if client.uses_local_configuration else "global"
|
267
|
+
cli_utils.declare(f" The active user is: '{client.active_user.name}'")
|
268
|
+
cli_utils.declare(
|
269
|
+
f" The active stack is: '{client.active_stack_model.name}' ({scope})"
|
270
|
+
)
|
522
271
|
|
523
272
|
if client.root:
|
524
273
|
cli_utils.declare(f"Active repository root: {client.root}")
|
@@ -529,17 +278,34 @@ def status() -> None:
|
|
529
278
|
f"Local store files are located at: '{gc.local_stores_path}'"
|
530
279
|
)
|
531
280
|
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
281
|
+
cli_utils.declare("\n-----Local ZenML Server Status-----")
|
282
|
+
local_server = get_local_server()
|
283
|
+
if local_server:
|
284
|
+
if local_server.status:
|
285
|
+
if local_server.status.status == ServiceState.ACTIVE:
|
286
|
+
cli_utils.declare(
|
287
|
+
f"The local {local_server.config.provider} server is "
|
288
|
+
f"running at: {local_server.status.url}"
|
289
|
+
)
|
290
|
+
else:
|
291
|
+
cli_utils.declare(
|
292
|
+
f"The local {local_server.config.provider} server is not "
|
293
|
+
"available."
|
294
|
+
)
|
295
|
+
cli_utils.declare(
|
296
|
+
f" Server state: {local_server.status.status}"
|
297
|
+
)
|
298
|
+
if local_server.status.status_message:
|
299
|
+
cli_utils.declare(
|
300
|
+
f" Status message: {local_server.status.status_message}"
|
301
|
+
)
|
302
|
+
else:
|
303
|
+
cli_utils.declare(
|
304
|
+
f"The local {local_server.config.provider} server is not "
|
305
|
+
"running."
|
306
|
+
)
|
307
|
+
else:
|
308
|
+
cli_utils.declare("The local server has not been started.")
|
543
309
|
|
544
310
|
|
545
311
|
@cli.command(
|
@@ -547,57 +313,17 @@ def status() -> None:
|
|
547
313
|
help=(
|
548
314
|
"""Connect to a remote ZenML server.
|
549
315
|
|
550
|
-
|
551
|
-
|
552
|
-
* to connect to a ZenML deployment using web login:
|
553
|
-
|
554
|
-
zenml connect --url=http://zenml.example.com:8080
|
555
|
-
|
556
|
-
* to connect to a ZenML deployment using command line arguments:
|
316
|
+
DEPRECATED: Please use `zenml login` instead.
|
557
317
|
|
558
|
-
|
559
|
-
|
560
|
-
* to use a configuration file:
|
561
|
-
|
562
|
-
zenml connect --config=/path/to/zenml_config.yaml
|
563
|
-
|
564
|
-
* when no arguments are supplied, ZenML will attempt to connect to the
|
565
|
-
last ZenML server deployed from the local host using the 'zenml deploy'
|
566
|
-
command.
|
567
|
-
|
568
|
-
The configuration file must be a YAML or JSON file with the following
|
569
|
-
attributes:
|
570
|
-
|
571
|
-
url: The URL of the ZenML server.
|
572
|
-
|
573
|
-
username: The username to use for authentication.
|
574
|
-
|
575
|
-
password: The password to use for authentication.
|
576
|
-
|
577
|
-
verify_ssl: Either a boolean, in which case it controls whether the
|
578
|
-
server's TLS certificate is verified, or a string, in which case it
|
579
|
-
must be a path to a CA certificate bundle to use or the CA bundle
|
580
|
-
value itself.
|
318
|
+
Examples:
|
581
319
|
|
582
|
-
|
583
|
-
ZenML server to be successful before issuing a timeout error
|
584
|
-
(default: 5).
|
320
|
+
* to re-login to the current ZenML server or connect to a ZenML Pro server:
|
585
321
|
|
586
|
-
|
322
|
+
zenml connect
|
587
323
|
|
588
|
-
|
589
|
-
username: admin\n
|
590
|
-
password: Pa$$word123\n
|
591
|
-
verify_ssl: |\n
|
592
|
-
-----BEGIN CERTIFICATE-----
|
593
|
-
MIIDETCCAfmgAwIBAgIQYUmQg2LR/pHAMZb/vQwwXjANBgkqhkiG9w0BAQsFADAT
|
594
|
-
MREwDwYDVQQDEwh6ZW5tbC1jYTAeFw0yMjA5MjYxMzI3NDhaFw0yMzA5MjYxMzI3\n
|
595
|
-
...\n
|
596
|
-
ULnzA0JkRWRnFqH6uXeJo1KAVqtxn1xf8PYxx3NlNDr9wi8KKwARf2lwm6sH4mvq
|
597
|
-
1aZ/0iYnGKCu7rLJzxeguliMf69E\n
|
598
|
-
-----END CERTIFICATE-----
|
599
|
-
http_timeout: 10
|
324
|
+
* to log in to a particular ZenML server:
|
600
325
|
|
326
|
+
zenml connect --url=http://zenml.example.com:8080
|
601
327
|
"""
|
602
328
|
),
|
603
329
|
)
|
@@ -610,15 +336,15 @@ def status() -> None:
|
|
610
336
|
)
|
611
337
|
@click.option(
|
612
338
|
"--username",
|
613
|
-
help="The username that is used to authenticate with a ZenML
|
614
|
-
"omitted, the web login will be used.",
|
339
|
+
help="(Deprecated) The username that is used to authenticate with a ZenML "
|
340
|
+
"server. If omitted, the web login will be used.",
|
615
341
|
required=False,
|
616
342
|
type=str,
|
617
343
|
)
|
618
344
|
@click.option(
|
619
345
|
"--password",
|
620
|
-
help="The password that is used to authenticate with a ZenML
|
621
|
-
"omitted, a prompt will be shown to enter the password.",
|
346
|
+
help="(Deprecated) The password that is used to authenticate with a ZenML "
|
347
|
+
"server. If omitted, a prompt will be shown to enter the password.",
|
622
348
|
required=False,
|
623
349
|
type=str,
|
624
350
|
)
|
@@ -629,12 +355,6 @@ def status() -> None:
|
|
629
355
|
required=False,
|
630
356
|
type=str,
|
631
357
|
)
|
632
|
-
@click.option(
|
633
|
-
"--workspace",
|
634
|
-
help="The workspace to use when connecting to the ZenML server.",
|
635
|
-
required=False,
|
636
|
-
type=str,
|
637
|
-
)
|
638
358
|
@click.option(
|
639
359
|
"--no-verify-ssl",
|
640
360
|
is_flag=True,
|
@@ -648,29 +368,13 @@ def status() -> None:
|
|
648
368
|
required=False,
|
649
369
|
type=str,
|
650
370
|
)
|
651
|
-
@click.option(
|
652
|
-
"--config",
|
653
|
-
help="Use a YAML or JSON configuration or configuration file.",
|
654
|
-
required=False,
|
655
|
-
type=str,
|
656
|
-
)
|
657
|
-
@click.option(
|
658
|
-
"--raw-config",
|
659
|
-
is_flag=True,
|
660
|
-
help="Whether to use the configuration without prompting for missing "
|
661
|
-
"fields.",
|
662
|
-
default=False,
|
663
|
-
)
|
664
371
|
def connect(
|
665
372
|
url: Optional[str] = None,
|
666
373
|
username: Optional[str] = None,
|
667
374
|
password: Optional[str] = None,
|
668
375
|
api_key: Optional[str] = None,
|
669
|
-
workspace: Optional[str] = None,
|
670
376
|
no_verify_ssl: bool = False,
|
671
377
|
ssl_ca_cert: Optional[str] = None,
|
672
|
-
config: Optional[str] = None,
|
673
|
-
raw_config: bool = False,
|
674
378
|
) -> None:
|
675
379
|
"""Connect to a remote ZenML server.
|
676
380
|
|
@@ -682,159 +386,56 @@ def connect(
|
|
682
386
|
server.
|
683
387
|
api_key: The API key that is used to authenticate with the ZenML
|
684
388
|
server.
|
685
|
-
workspace: The active workspace that is used to connect to the ZenML
|
686
|
-
server.
|
687
389
|
no_verify_ssl: Whether to verify the server's TLS certificate.
|
688
390
|
ssl_ca_cert: A path to a CA bundle to use to verify the server's TLS
|
689
391
|
certificate or the CA bundle value itself.
|
690
|
-
config: A YAML or JSON configuration or configuration file to use.
|
691
|
-
raw_config: Whether to use the configuration without prompting for
|
692
|
-
missing fields.
|
693
392
|
"""
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
# Raise an error if a local server is running when trying to connect to
|
698
|
-
# another server
|
699
|
-
active_deployment = get_active_deployment(local=True)
|
700
|
-
if (
|
701
|
-
active_deployment
|
702
|
-
and active_deployment.status
|
703
|
-
and active_deployment.status.url != url
|
704
|
-
):
|
705
|
-
cli_utils.error(
|
706
|
-
"You're trying to connect to a remote ZenML server but already "
|
707
|
-
"have a local server running. This can lead to unexpected "
|
708
|
-
"behavior. Please shut down the local server by running "
|
709
|
-
"`zenml down` before connecting to a remote server."
|
710
|
-
)
|
711
|
-
|
712
|
-
store_dict: Dict[str, Any] = {}
|
713
|
-
verify_ssl: Union[str, bool] = (
|
714
|
-
ssl_ca_cert if ssl_ca_cert is not None else not no_verify_ssl
|
393
|
+
cli_utils.warning(
|
394
|
+
"The `zenml connect` command is deprecated and will be removed in a "
|
395
|
+
"future release. Please use the `zenml login` command instead. "
|
715
396
|
)
|
716
397
|
|
717
|
-
if
|
718
|
-
if os.path.isfile(config):
|
719
|
-
store_dict = yaml_utils.read_yaml(config)
|
720
|
-
else:
|
721
|
-
store_dict = yaml.safe_load(config)
|
722
|
-
if not isinstance(store_dict, dict):
|
723
|
-
cli_utils.error(
|
724
|
-
"The configuration argument must be JSON/YAML content or "
|
725
|
-
"point to a valid configuration file."
|
726
|
-
)
|
727
|
-
|
728
|
-
if raw_config:
|
729
|
-
store_config = StoreConfiguration.parse_obj(store_dict)
|
730
|
-
GlobalConfiguration().set_store(store_config)
|
731
|
-
return
|
732
|
-
|
733
|
-
url = store_dict.get("url", url)
|
734
|
-
username = username or store_dict.get("username")
|
735
|
-
password = password or store_dict.get("password")
|
736
|
-
api_key = api_key or store_dict.get("api_key")
|
737
|
-
verify_ssl = store_dict.get("verify_ssl", verify_ssl)
|
738
|
-
|
739
|
-
elif url is None:
|
740
|
-
server = get_active_deployment(local=False)
|
741
|
-
|
742
|
-
if server is None or not server.status or not server.status.url:
|
743
|
-
cli_utils.warning(
|
744
|
-
"Running `zenml connect` without arguments can only be used to "
|
745
|
-
"connect to a ZenML server previously deployed from this host "
|
746
|
-
"with `zenml deploy`, but no such active deployment was found. "
|
747
|
-
"Please use the `--url` or `--config` command line arguments "
|
748
|
-
"to configure how to connect to a remote third party ZenML "
|
749
|
-
"server. Alternatively, call `zenml up` to start the ZenML "
|
750
|
-
"dashboard locally."
|
751
|
-
)
|
752
|
-
return
|
753
|
-
url = server.status.url
|
754
|
-
if server.status.ca_crt:
|
755
|
-
verify_ssl = server.status.ca_crt
|
756
|
-
|
757
|
-
if not url:
|
758
|
-
url = click.prompt("ZenML server URL", type=str)
|
759
|
-
else:
|
760
|
-
cli_utils.declare(f"Connecting to: '{url}'...")
|
761
|
-
assert url is not None
|
762
|
-
|
763
|
-
store_dict["url"] = url
|
764
|
-
store_type = BaseZenStore.get_store_type(url)
|
765
|
-
if store_type == StoreType.REST:
|
766
|
-
store_dict["verify_ssl"] = verify_ssl
|
767
|
-
|
768
|
-
if not username and not api_key:
|
769
|
-
if store_type == StoreType.REST:
|
770
|
-
store_dict["api_token"] = web_login(url=url, verify_ssl=verify_ssl)
|
771
|
-
else:
|
772
|
-
username = click.prompt("Username", type=str)
|
773
|
-
|
774
|
-
if username:
|
775
|
-
store_dict["username"] = username
|
776
|
-
|
777
|
-
if password is None:
|
778
|
-
password = click.prompt(
|
779
|
-
f"Password for user {username} (press ENTER for empty password)",
|
780
|
-
default="",
|
781
|
-
hide_input=True,
|
782
|
-
)
|
783
|
-
store_dict["password"] = password
|
784
|
-
elif api_key:
|
785
|
-
store_dict["api_key"] = api_key
|
786
|
-
|
787
|
-
store_config_class = BaseZenStore.get_store_config_class(store_type)
|
788
|
-
assert store_config_class is not None
|
789
|
-
|
790
|
-
store_config = store_config_class.parse_obj(store_dict)
|
791
|
-
try:
|
792
|
-
GlobalConfiguration().set_store(store_config)
|
793
|
-
except IllegalOperationError:
|
398
|
+
if password is not None or username is not None:
|
794
399
|
cli_utils.warning(
|
795
|
-
|
796
|
-
|
400
|
+
"Connecting to a ZenML server using a username and password is "
|
401
|
+
"insecure because the password is locally stored on your "
|
402
|
+
"filesystem and is no longer supported. The web login workflow will "
|
403
|
+
"be used instead. An alternative for non-interactive environments "
|
404
|
+
"is to create and use a service account API key (see "
|
405
|
+
"https://docs.zenml.io/how-to/connecting-to-zenml/connect-with-a-service-account "
|
406
|
+
"for more information)."
|
797
407
|
)
|
798
408
|
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
)
|
409
|
+
# Calling the `zenml login` command
|
410
|
+
cli_utils.declare("Calling `zenml login`...")
|
411
|
+
login.callback( # type: ignore[misc]
|
412
|
+
server=url,
|
413
|
+
api_key=api_key,
|
414
|
+
no_verify_ssl=no_verify_ssl,
|
415
|
+
ssl_ca_cert=ssl_ca_cert,
|
416
|
+
)
|
808
417
|
|
809
418
|
|
810
|
-
@cli.command(
|
419
|
+
@cli.command(
|
420
|
+
"disconnect",
|
421
|
+
help="""Disconnect from a ZenML server.
|
422
|
+
|
423
|
+
DEPRECATED: Please use `zenml logout` instead.
|
424
|
+
""",
|
425
|
+
)
|
811
426
|
def disconnect_server() -> None:
|
812
427
|
"""Disconnect from a ZenML server."""
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
if gc.store is None:
|
819
|
-
cli_utils.warning("No ZenML server is currently connected.")
|
820
|
-
return
|
428
|
+
cli_utils.warning(
|
429
|
+
"The `zenml disconnect` command is deprecated and will be removed in a "
|
430
|
+
"future release. Please use the `zenml logout` command instead."
|
431
|
+
)
|
821
432
|
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
deployer = ServerDeployer()
|
826
|
-
deployer.disconnect_from_server()
|
827
|
-
else:
|
828
|
-
gc.set_default_store()
|
829
|
-
cli_utils.declare("Restored default store configuration.")
|
433
|
+
# Calling the `zenml logout` command
|
434
|
+
cli_utils.declare("Calling `zenml logout`...")
|
435
|
+
logout.callback() # type: ignore[misc]
|
830
436
|
|
831
437
|
|
832
|
-
@cli.command("logs", help="Show the logs for the local
|
833
|
-
@click.option(
|
834
|
-
"--local",
|
835
|
-
is_flag=True,
|
836
|
-
help="Show the logs for the local ZenML server.",
|
837
|
-
)
|
438
|
+
@cli.command("logs", help="Show the logs for the local ZenML server.")
|
838
439
|
@click.option(
|
839
440
|
"--follow",
|
840
441
|
"-f",
|
@@ -855,7 +456,6 @@ def disconnect_server() -> None:
|
|
855
456
|
help="Show raw log contents (don't pretty-print logs).",
|
856
457
|
)
|
857
458
|
def logs(
|
858
|
-
local: bool = False,
|
859
459
|
follow: bool = False,
|
860
460
|
raw: bool = False,
|
861
461
|
tail: Optional[int] = None,
|
@@ -863,37 +463,31 @@ def logs(
|
|
863
463
|
"""Display the logs for a ZenML server.
|
864
464
|
|
865
465
|
Args:
|
866
|
-
local: Whether to show the logs for the local ZenML server.
|
867
466
|
follow: Continue to output new log data as it becomes available.
|
868
467
|
tail: Only show the last NUM lines of log output.
|
869
468
|
raw: Show raw log contents (don't pretty-print logs).
|
870
469
|
"""
|
871
|
-
server =
|
872
|
-
if not local:
|
873
|
-
remote_server = get_active_deployment(local=False)
|
874
|
-
if remote_server is not None:
|
875
|
-
server = remote_server
|
876
|
-
|
470
|
+
server = get_local_server()
|
877
471
|
if server is None:
|
878
472
|
cli_utils.error(
|
879
473
|
"The local ZenML dashboard is not running. Please call `zenml "
|
880
|
-
"
|
474
|
+
"login --local` first to start the ZenML dashboard locally."
|
881
475
|
)
|
882
476
|
|
883
|
-
|
884
|
-
|
885
|
-
from zenml.zen_server.deploy.deployer import ServerDeployer
|
477
|
+
from zenml.zen_server.deploy.deployer import LocalServerDeployer
|
886
478
|
|
887
|
-
deployer =
|
479
|
+
deployer = LocalServerDeployer()
|
888
480
|
|
889
|
-
cli_utils.declare(
|
481
|
+
cli_utils.declare(
|
482
|
+
f"Showing logs for the local {server.config.provider} server"
|
483
|
+
)
|
890
484
|
|
891
485
|
from zenml.zen_server.deploy.exceptions import (
|
892
486
|
ServerDeploymentNotFoundError,
|
893
487
|
)
|
894
488
|
|
895
489
|
try:
|
896
|
-
logs = deployer.get_server_logs(
|
490
|
+
logs = deployer.get_server_logs(follow=follow, tail=tail)
|
897
491
|
except ServerDeploymentNotFoundError as e:
|
898
492
|
cli_utils.error(f"Server not found: {e}")
|
899
493
|
|
@@ -906,3 +500,276 @@ def logs(
|
|
906
500
|
console.print(line)
|
907
501
|
except MarkupError:
|
908
502
|
console.print(line, markup=False)
|
503
|
+
|
504
|
+
|
505
|
+
@cli.group(cls=TagGroup, tag=CliCategories.MANAGEMENT_TOOLS)
|
506
|
+
def server() -> None:
|
507
|
+
"""Commands for managing ZenML servers."""
|
508
|
+
|
509
|
+
|
510
|
+
@server.command(
|
511
|
+
"list",
|
512
|
+
help="""List all ZenML servers that this client is authenticated to.
|
513
|
+
|
514
|
+
The CLI can be authenticated to multiple ZenML servers at the same time,
|
515
|
+
even though it can only be connected to one server at a time. You can list
|
516
|
+
all the ZenML servers that the client is currently authenticated to by
|
517
|
+
using this command.
|
518
|
+
|
519
|
+
When logged in to ZenML Pro, this list will also include all ZenML Pro
|
520
|
+
servers that the authenticated user can access or could potentially access,
|
521
|
+
including details such as their current state and the organization they
|
522
|
+
belong to.
|
523
|
+
|
524
|
+
The complete list of servers displayed by this command includes the
|
525
|
+
following:
|
526
|
+
|
527
|
+
* ZenML Pro servers that the authenticated ZenML Pro user can or could
|
528
|
+
access. The client needs to be logged to ZenML Pro via
|
529
|
+
`zenml login --pro` to access these servers.
|
530
|
+
|
531
|
+
* ZenML servers that the client has logged in to via
|
532
|
+
`zenml login --url` in the past.
|
533
|
+
|
534
|
+
* the local ZenML server started with `zenml login --local`, if one is
|
535
|
+
running.
|
536
|
+
|
537
|
+
By default, this command does not display ZenML servers that are not
|
538
|
+
accessible: servers that are not running, are no longer accessible due to
|
539
|
+
an expired authentication and ZenML Pro servers where the user is not a
|
540
|
+
member. To include these servers in the list, use the `--all` flag.
|
541
|
+
""",
|
542
|
+
)
|
543
|
+
@click.option(
|
544
|
+
"--verbose",
|
545
|
+
"-v",
|
546
|
+
is_flag=True,
|
547
|
+
help="Show verbose output.",
|
548
|
+
)
|
549
|
+
@click.option(
|
550
|
+
"--all",
|
551
|
+
"-a",
|
552
|
+
is_flag=True,
|
553
|
+
help="Show all ZenML servers, including those that are not running "
|
554
|
+
"and those with an expired authentication.",
|
555
|
+
)
|
556
|
+
@click.option(
|
557
|
+
"--pro-api-url",
|
558
|
+
type=str,
|
559
|
+
default=None,
|
560
|
+
help="Custom URL for the ZenML Pro API. Useful when disconnecting "
|
561
|
+
"from a self-hosted ZenML Pro deployment.",
|
562
|
+
)
|
563
|
+
def server_list(
|
564
|
+
verbose: bool = False,
|
565
|
+
all: bool = False,
|
566
|
+
pro_api_url: Optional[str] = None,
|
567
|
+
) -> None:
|
568
|
+
"""List all ZenML servers that this client is authorized to access.
|
569
|
+
|
570
|
+
Args:
|
571
|
+
verbose: Whether to show verbose output.
|
572
|
+
all: Whether to show all ZenML servers.
|
573
|
+
pro_api_url: Custom URL for the ZenML Pro API.
|
574
|
+
"""
|
575
|
+
from zenml.login.credentials_store import get_credentials_store
|
576
|
+
from zenml.login.pro.client import ZenMLProClient
|
577
|
+
from zenml.login.pro.constants import ZENML_PRO_API_URL
|
578
|
+
from zenml.login.pro.tenant.models import TenantRead, TenantStatus
|
579
|
+
|
580
|
+
pro_api_url = pro_api_url or ZENML_PRO_API_URL
|
581
|
+
|
582
|
+
credentials_store = get_credentials_store()
|
583
|
+
pro_token = credentials_store.get_pro_token(
|
584
|
+
allow_expired=True, pro_api_url=pro_api_url
|
585
|
+
)
|
586
|
+
current_store_config = GlobalConfiguration().store_configuration
|
587
|
+
|
588
|
+
# The list of ZenML Pro servers kept in the credentials store
|
589
|
+
pro_servers = credentials_store.list_credentials(type=ServerType.PRO)
|
590
|
+
# The list of regular remote ZenML servers kept in the credentials store
|
591
|
+
servers = list(credentials_store.list_credentials(type=ServerType.REMOTE))
|
592
|
+
# The list of local ZenML servers kept in the credentials store
|
593
|
+
local_servers = list(
|
594
|
+
credentials_store.list_credentials(type=ServerType.LOCAL)
|
595
|
+
)
|
596
|
+
|
597
|
+
if pro_token and not pro_token.expired:
|
598
|
+
# If the ZenML Pro authentication is still valid, we include all ZenML
|
599
|
+
# Pro servers that the current ZenML Pro user can access, even those
|
600
|
+
# that the user has never connected to (and are therefore not stored in
|
601
|
+
# the credentials store).
|
602
|
+
|
603
|
+
accessible_pro_servers: List[TenantRead] = []
|
604
|
+
try:
|
605
|
+
client = ZenMLProClient(pro_api_url)
|
606
|
+
accessible_pro_servers = client.tenant.list(member_only=not all)
|
607
|
+
except AuthorizationException as e:
|
608
|
+
cli_utils.warning(f"ZenML Pro authorization error: {e}")
|
609
|
+
|
610
|
+
# We update the list of stored ZenML Pro servers with the ones that the
|
611
|
+
# client is a member of
|
612
|
+
for accessible_server in accessible_pro_servers:
|
613
|
+
for idx, stored_server in enumerate(pro_servers):
|
614
|
+
if stored_server.server_id == accessible_server.id:
|
615
|
+
# All ZenML Pro servers accessible by the current ZenML Pro
|
616
|
+
# user have an authentication that is valid at least until
|
617
|
+
# the current ZenML Pro authentication token expires.
|
618
|
+
stored_server.update_server_info(
|
619
|
+
accessible_server,
|
620
|
+
)
|
621
|
+
updated_server = stored_server.model_copy()
|
622
|
+
# Replace the current server API token with the current
|
623
|
+
# ZenML Pro API token to reflect the current authentication
|
624
|
+
# status.
|
625
|
+
updated_server.api_token = pro_token
|
626
|
+
pro_servers[idx] = updated_server
|
627
|
+
break
|
628
|
+
else:
|
629
|
+
stored_server = ServerCredentials(
|
630
|
+
url=accessible_server.url or "",
|
631
|
+
api_token=pro_token,
|
632
|
+
)
|
633
|
+
stored_server.update_server_info(accessible_server)
|
634
|
+
pro_servers.append(stored_server)
|
635
|
+
|
636
|
+
if not all:
|
637
|
+
accessible_pro_servers = [
|
638
|
+
s
|
639
|
+
for s in accessible_pro_servers
|
640
|
+
if s.status == TenantStatus.AVAILABLE
|
641
|
+
]
|
642
|
+
|
643
|
+
if not accessible_pro_servers:
|
644
|
+
cli_utils.declare(
|
645
|
+
"No ZenML Pro servers that are accessible to the current "
|
646
|
+
"user could be found."
|
647
|
+
)
|
648
|
+
if not all:
|
649
|
+
cli_utils.declare(
|
650
|
+
"Hint: use the `--all` flag to show all ZenML servers, "
|
651
|
+
"including those that the client is not currently "
|
652
|
+
"authorized to access or are not running."
|
653
|
+
)
|
654
|
+
|
655
|
+
elif pro_servers:
|
656
|
+
cli_utils.warning(
|
657
|
+
"The ZenML Pro authentication has expired. Please re-login "
|
658
|
+
"to ZenML Pro using `zenml login` to include all ZenML Pro servers "
|
659
|
+
"that you are a member of in the list."
|
660
|
+
)
|
661
|
+
|
662
|
+
# We add the local server to the list of servers, if it is running
|
663
|
+
local_server = get_local_server()
|
664
|
+
if local_server:
|
665
|
+
url = (
|
666
|
+
local_server.status.url if local_server.status else None
|
667
|
+
) or local_server.config.url
|
668
|
+
status = local_server.status.status if local_server.status else ""
|
669
|
+
local_servers.append(
|
670
|
+
ServerCredentials(
|
671
|
+
url=url or "",
|
672
|
+
status=status,
|
673
|
+
version=zenml.__version__,
|
674
|
+
server_id=GlobalConfiguration().user_id,
|
675
|
+
server_name=f"local {local_server.config.provider} server",
|
676
|
+
)
|
677
|
+
)
|
678
|
+
|
679
|
+
all_servers = pro_servers + local_servers + servers
|
680
|
+
|
681
|
+
if not all:
|
682
|
+
# Filter out servers that are expired or not running
|
683
|
+
all_servers = [s for s in all_servers if s.is_available]
|
684
|
+
|
685
|
+
if verbose:
|
686
|
+
columns = [
|
687
|
+
"type",
|
688
|
+
"server_id_hyperlink",
|
689
|
+
"server_name_hyperlink",
|
690
|
+
"organization_hyperlink" if pro_servers else "",
|
691
|
+
"version",
|
692
|
+
"status",
|
693
|
+
"dashboard_url",
|
694
|
+
"api_hyperlink",
|
695
|
+
"auth_status",
|
696
|
+
]
|
697
|
+
elif all:
|
698
|
+
columns = [
|
699
|
+
"type",
|
700
|
+
"server_id_hyperlink",
|
701
|
+
"server_name_hyperlink",
|
702
|
+
"organization_hyperlink" if pro_servers else "",
|
703
|
+
"version",
|
704
|
+
"status",
|
705
|
+
"api_hyperlink",
|
706
|
+
]
|
707
|
+
else:
|
708
|
+
columns = [
|
709
|
+
"type",
|
710
|
+
"server_id_hyperlink" if pro_servers else "",
|
711
|
+
"server_name_hyperlink",
|
712
|
+
"organization_hyperlink" if pro_servers else "",
|
713
|
+
"version",
|
714
|
+
"api_hyperlink" if servers else "",
|
715
|
+
]
|
716
|
+
|
717
|
+
# Remove empty columns
|
718
|
+
columns = [c for c in columns if c]
|
719
|
+
|
720
|
+
# Figure out if the client is already connected to one of the
|
721
|
+
# servers in the list
|
722
|
+
current_server: List[ServerCredentials] = []
|
723
|
+
if current_store_config.type == StoreType.REST:
|
724
|
+
current_server = [
|
725
|
+
s for s in all_servers if s.url == current_store_config.url
|
726
|
+
]
|
727
|
+
|
728
|
+
cli_utils.print_pydantic_models( # type: ignore[type-var]
|
729
|
+
all_servers,
|
730
|
+
columns=columns,
|
731
|
+
rename_columns={
|
732
|
+
"server_name_hyperlink": "name",
|
733
|
+
"server_id_hyperlink": "ID",
|
734
|
+
"organization_hyperlink": "organization",
|
735
|
+
"dashboard_url": "dashboard URL",
|
736
|
+
"api_hyperlink": "API URL",
|
737
|
+
"auth_status": "auth status",
|
738
|
+
},
|
739
|
+
active_models=current_server,
|
740
|
+
show_active=True,
|
741
|
+
)
|
742
|
+
|
743
|
+
|
744
|
+
@server.command(
|
745
|
+
"show",
|
746
|
+
help="Show the ZenML dashboard for the server that the client is connected to.",
|
747
|
+
)
|
748
|
+
@click.option(
|
749
|
+
"--local",
|
750
|
+
is_flag=True,
|
751
|
+
help="Show the ZenML dashboard for the local server.",
|
752
|
+
default=False,
|
753
|
+
type=click.BOOL,
|
754
|
+
)
|
755
|
+
@click.option(
|
756
|
+
"--ngrok-token",
|
757
|
+
type=str,
|
758
|
+
default=None,
|
759
|
+
help="Specify an ngrok auth token to use for exposing the local ZenML "
|
760
|
+
"server. Only used when `--local` is set. Primarily used for accessing the "
|
761
|
+
"local dashboard in Colab.",
|
762
|
+
)
|
763
|
+
def show(local: bool = False, ngrok_token: Optional[str] = None) -> None:
|
764
|
+
"""Show the ZenML dashboard.
|
765
|
+
|
766
|
+
Args:
|
767
|
+
local: Whether to show the ZenML dashboard for the local server.
|
768
|
+
ngrok_token: An ngrok auth token to use for exposing the ZenML dashboard
|
769
|
+
on a public domain. Primarily used for accessing the local dashboard
|
770
|
+
in Colab.
|
771
|
+
"""
|
772
|
+
try:
|
773
|
+
zenml.show(ngrok_token=ngrok_token)
|
774
|
+
except RuntimeError as e:
|
775
|
+
cli_utils.error(str(e))
|