zenml-nightly 0.58.2.dev20240623__py3-none-any.whl → 0.61.0.dev20240712__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +30 -9
- RELEASE_NOTES.md +240 -0
- zenml/VERSION +1 -1
- zenml/actions/base_action.py +177 -174
- zenml/actions/pipeline_run/pipeline_run_action.py +28 -23
- zenml/analytics/enums.py +3 -0
- zenml/artifact_stores/base_artifact_store.py +7 -1
- zenml/artifacts/utils.py +13 -10
- zenml/cli/__init__.py +28 -0
- zenml/cli/artifact.py +1 -2
- zenml/cli/integration.py +9 -8
- zenml/cli/server.py +6 -0
- zenml/cli/service_connectors.py +1 -0
- zenml/cli/stack.py +946 -39
- zenml/cli/stack_components.py +7 -0
- zenml/cli/text_utils.py +35 -1
- zenml/cli/utils.py +127 -10
- zenml/client.py +257 -72
- zenml/config/compiler.py +10 -9
- zenml/config/docker_settings.py +33 -14
- zenml/constants.py +11 -2
- zenml/container_registries/base_container_registry.py +1 -0
- zenml/enums.py +7 -0
- zenml/event_hub/base_event_hub.py +5 -5
- zenml/event_hub/event_hub.py +20 -14
- zenml/event_sources/base_event.py +0 -11
- zenml/event_sources/base_event_source.py +7 -0
- zenml/event_sources/webhooks/base_webhook_event_source.py +1 -4
- zenml/exceptions.py +4 -0
- zenml/hooks/hook_validators.py +2 -3
- zenml/integrations/aws/__init__.py +1 -0
- zenml/integrations/azure/__init__.py +1 -0
- zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +3 -3
- zenml/integrations/deepchecks/__init__.py +1 -0
- zenml/integrations/discord/__init__.py +1 -0
- zenml/integrations/evidently/__init__.py +1 -0
- zenml/integrations/facets/__init__.py +1 -0
- zenml/integrations/feast/__init__.py +1 -0
- zenml/integrations/gcp/__init__.py +3 -1
- zenml/integrations/gcp/google_credentials_mixin.py +1 -1
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +320 -64
- zenml/integrations/huggingface/__init__.py +1 -0
- zenml/integrations/integration.py +24 -0
- zenml/integrations/kubeflow/__init__.py +3 -0
- zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +1 -1
- zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +0 -1
- zenml/integrations/kubernetes/__init__.py +3 -1
- zenml/integrations/kubernetes/orchestrators/kube_utils.py +4 -1
- zenml/integrations/label_studio/annotators/label_studio_annotator.py +1 -0
- zenml/integrations/langchain/__init__.py +1 -0
- zenml/integrations/mlflow/__init__.py +4 -2
- zenml/integrations/neural_prophet/__init__.py +1 -0
- zenml/integrations/polars/__init__.py +1 -0
- zenml/integrations/prodigy/__init__.py +1 -0
- zenml/integrations/pycaret/__init__.py +6 -0
- zenml/integrations/registry.py +37 -0
- zenml/integrations/s3/artifact_stores/s3_artifact_store.py +93 -9
- zenml/integrations/seldon/__init__.py +1 -0
- zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +1 -0
- zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +2 -2
- zenml/integrations/skypilot/orchestrators/skypilot_base_vm_orchestrator.py +1 -1
- zenml/integrations/skypilot/orchestrators/skypilot_orchestrator_entrypoint.py +2 -2
- zenml/integrations/skypilot_aws/__init__.py +2 -1
- zenml/integrations/skypilot_azure/__init__.py +1 -1
- zenml/integrations/skypilot_gcp/__init__.py +1 -1
- zenml/integrations/skypilot_lambda/__init__.py +1 -1
- zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py +1 -1
- zenml/integrations/slack/__init__.py +1 -0
- zenml/integrations/tekton/__init__.py +1 -0
- zenml/integrations/tensorboard/__init__.py +0 -1
- zenml/integrations/tensorflow/__init__.py +18 -6
- zenml/integrations/wandb/__init__.py +1 -0
- zenml/logging/step_logging.py +54 -51
- zenml/models/__init__.py +28 -0
- zenml/models/v2/core/action.py +276 -0
- zenml/models/v2/core/component.py +18 -0
- zenml/models/v2/core/model.py +1 -2
- zenml/models/v2/core/service_connector.py +17 -0
- zenml/models/v2/core/stack.py +31 -0
- zenml/models/v2/core/trigger.py +182 -141
- zenml/models/v2/misc/full_stack.py +97 -0
- zenml/models/v2/misc/stack_deployment.py +86 -0
- zenml/new/pipelines/pipeline.py +14 -4
- zenml/new/pipelines/pipeline_decorator.py +1 -2
- zenml/new/pipelines/run_utils.py +1 -12
- zenml/new/steps/step_decorator.py +2 -3
- zenml/orchestrators/input_utils.py +3 -6
- zenml/pipelines/base_pipeline.py +0 -2
- zenml/pipelines/pipeline_decorator.py +1 -2
- zenml/stack/stack.py +3 -6
- zenml/stack/stack_component.py +4 -0
- zenml/stack_deployments/__init__.py +14 -0
- zenml/stack_deployments/aws_stack_deployment.py +254 -0
- zenml/stack_deployments/gcp_stack_deployment.py +260 -0
- zenml/stack_deployments/stack_deployment.py +208 -0
- zenml/stack_deployments/utils.py +44 -0
- zenml/steps/base_step.py +1 -2
- zenml/steps/step_decorator.py +1 -2
- zenml/types.py +10 -1
- zenml/utils/function_utils.py +1 -1
- zenml/utils/pagination_utils.py +7 -5
- zenml/utils/pipeline_docker_image_builder.py +117 -73
- zenml/utils/pydantic_utils.py +6 -5
- zenml/zen_server/cloud_utils.py +18 -3
- zenml/zen_server/dashboard/assets/{404-CDPQCl4D.js → 404-DpJaNHKF.js} +1 -1
- zenml/zen_server/dashboard/assets/@radix-CFOkMR_E.js +85 -0
- zenml/zen_server/dashboard/assets/{@react-router-DYovave8.js → @react-router-CO-OsFwI.js} +2 -2
- zenml/zen_server/dashboard/assets/{@reactflow-CHBapDaj.js → @reactflow-DJfzkHO1.js} +2 -2
- zenml/zen_server/dashboard/assets/@tanstack-DYiOyJUL.js +22 -0
- zenml/zen_server/dashboard/assets/AwarenessChannel-BYDLT2xC.js +1 -0
- zenml/zen_server/dashboard/assets/{CodeSnippet-BidtnWOi.js → CodeSnippet-BkOuRmyq.js} +2 -2
- zenml/zen_server/dashboard/assets/Commands-ZvWR1BRs.js +1 -0
- zenml/zen_server/dashboard/assets/CopyButton-DVwLkafa.js +2 -0
- zenml/zen_server/dashboard/assets/{CsvVizualization-BOuez-fG.js → CsvVizualization-C2IiqX4I.js} +7 -7
- zenml/zen_server/dashboard/assets/DisplayDate-DYgIjlDF.js +1 -0
- zenml/zen_server/dashboard/assets/EmptyState-BMLnFVlB.js +1 -0
- zenml/zen_server/dashboard/assets/Error-CqX0VqW_.js +1 -0
- zenml/zen_server/dashboard/assets/ExecutionStatus-BoLUXR9t.js +1 -0
- zenml/zen_server/dashboard/assets/Helpbox-LFydyVwh.js +1 -0
- zenml/zen_server/dashboard/assets/Infobox-DnENC0sh.js +1 -0
- zenml/zen_server/dashboard/assets/InlineAvatar-CbJtYr0t.js +1 -0
- zenml/zen_server/dashboard/assets/{MarkdownVisualization-DsB2QZiK.js → MarkdownVisualization-xp3hhULl.js} +2 -2
- zenml/zen_server/dashboard/assets/Pagination-DEbVUupy.js +1 -0
- zenml/zen_server/dashboard/assets/PasswordChecker-DUveqlva.js +1 -0
- zenml/zen_server/dashboard/assets/SetPassword-BYBdbQDo.js +1 -0
- zenml/zen_server/dashboard/assets/SuccessStep-Nx743hll.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-DnM-c11H.js → UpdatePasswordSchemas-DF9gSzE0.js} +1 -1
- zenml/zen_server/dashboard/assets/{aws-t0gKCj_R.js → aws-BgKTfTfx.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-BVvhm5dy.js → check-circle-i56092KI.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-zcvCWmyP.js → chevron-down-D_ZlKMqH.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-CJ50E9Gr.js → chevron-right-double-BiEMg7rd.js} +1 -1
- zenml/zen_server/dashboard/assets/cloud-only-DVbIeckv.js +1 -0
- zenml/zen_server/dashboard/assets/{copy-BRhQz3j-.js → copy-BXNk6BjL.js} +1 -1
- zenml/zen_server/dashboard/assets/{database-CRRnyFWh.js → database-1xWSgZfO.js} +1 -1
- zenml/zen_server/dashboard/assets/{docker-BAonhm6G.js → docker-CQMVm_4d.js} +1 -1
- zenml/zen_server/dashboard/assets/{file-text-CbVERUON.js → file-text-CqD_iu6l.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-B8rqCvqn.js → help-bu_DgLKI.js} +1 -1
- zenml/zen_server/dashboard/assets/index-C_CrU4vI.js +1 -0
- zenml/zen_server/dashboard/assets/index-DK1ynKjA.js +55 -0
- zenml/zen_server/dashboard/assets/index-inApY3KQ.css +1 -0
- zenml/zen_server/dashboard/assets/index-rK_Wuy2W.js +1 -0
- zenml/zen_server/dashboard/assets/index.esm-Corw4lXQ.js +1 -0
- zenml/zen_server/dashboard/assets/{login-mutation-wzzl23C6.js → login-mutation-BUnVASxp.js} +1 -1
- zenml/zen_server/dashboard/assets/not-found-B4VnX8gK.js +1 -0
- zenml/zen_server/dashboard/assets/package-CsUhPmou.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BmkSiYeQ.js → page-3efNCDeb.js} +2 -2
- zenml/zen_server/dashboard/assets/page-7zTHbhhI.js +1 -0
- zenml/zen_server/dashboard/assets/page-BEs6jK71.js +1 -0
- zenml/zen_server/dashboard/assets/page-BpSqIf4B.js +1 -0
- zenml/zen_server/dashboard/assets/{page-AQKopn_4.js → page-Bx6o0ARS.js} +1 -1
- zenml/zen_server/dashboard/assets/page-C43QGHTt.js +9 -0
- zenml/zen_server/dashboard/assets/page-CR0OG7ss.js +1 -0
- zenml/zen_server/dashboard/assets/page-CRTJ0UuR.js +1 -0
- zenml/zen_server/dashboard/assets/page-CUZIGO-3.js +1 -0
- zenml/zen_server/dashboard/assets/page-CaopxiU1.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CuT1SUik.js → page-Cx67M0QT.js} +1 -1
- zenml/zen_server/dashboard/assets/page-D7Z399xy.js +1 -0
- zenml/zen_server/dashboard/assets/page-D93kd7Xj.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BzVZGExK.js → page-DKlIdAe5.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-Bi5AI0S7.js → page-DMOYZppS.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DMsSn3dv.js +2 -0
- zenml/zen_server/dashboard/assets/{page-BW6Ket3a.js → page-Dc_7KMQE.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DvCvroOM.js +1 -0
- zenml/zen_server/dashboard/assets/page-Hus2pr9T.js +1 -0
- zenml/zen_server/dashboard/assets/page-JyfeDUfu.js +1 -0
- zenml/zen_server/dashboard/assets/{page-yN4rZ-ZS.js → page-Sxn82W-5.js} +1 -1
- zenml/zen_server/dashboard/assets/page-TKXERe16.js +1 -0
- zenml/zen_server/dashboard/assets/page-Xu8JEjSU.js +1 -0
- zenml/zen_server/dashboard/assets/{play-circle-DK5QMJyp.js → play-circle-CNtZKDnW.js} +1 -1
- zenml/zen_server/dashboard/assets/plus-DOeLmm7C.js +1 -0
- zenml/zen_server/dashboard/assets/{terminal-B2ovgWuz.js → terminal-By9cErXc.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-0Wgz8pUE.js → update-server-settings-mutation-CR8e3Sir.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-6_xv0WJS.js → url-DuQMeqYA.js} +1 -1
- zenml/zen_server/dashboard/assets/{zod-DrZvVLjd.js → zod-BhoGpZ63.js} +1 -1
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/dashboard_legacy/asset-manifest.json +4 -4
- zenml/zen_server/dashboard_legacy/index.html +1 -1
- zenml/zen_server/dashboard_legacy/{precache-manifest.f4abc5b7cfa7d90c1caf5521918e29a8.js → precache-manifest.c8c57fb0d2132b1d3c2119e776b7dfb3.js} +4 -4
- zenml/zen_server/dashboard_legacy/service-worker.js +1 -1
- zenml/zen_server/dashboard_legacy/static/js/{main.ac2f17d0.chunk.js → main.382439a7.chunk.js} +2 -2
- zenml/zen_server/dashboard_legacy/static/js/{main.ac2f17d0.chunk.js.map → main.382439a7.chunk.js.map} +1 -1
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +11 -5
- zenml/zen_server/pipeline_deployment/utils.py +57 -44
- zenml/zen_server/rbac/models.py +1 -0
- zenml/zen_server/rbac/utils.py +22 -1
- zenml/zen_server/rbac/zenml_cloud_rbac.py +11 -5
- zenml/zen_server/routers/actions_endpoints.py +324 -0
- zenml/zen_server/routers/stack_deployment_endpoints.py +158 -0
- zenml/zen_server/routers/triggers_endpoints.py +30 -158
- zenml/zen_server/routers/workspaces_endpoints.py +64 -0
- zenml/zen_server/zen_server_api.py +4 -0
- zenml/zen_stores/migrations/utils.py +1 -1
- zenml/zen_stores/migrations/versions/0.60.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.61.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0d707865f404_adding_labels_to_stacks.py +30 -0
- zenml/zen_stores/migrations/versions/25155145c545_separate_actions_and_triggers.py +228 -0
- zenml/zen_stores/rest_zen_store.py +248 -8
- zenml/zen_stores/schemas/__init__.py +2 -0
- zenml/zen_stores/schemas/action_schemas.py +192 -0
- zenml/zen_stores/schemas/stack_schemas.py +10 -0
- zenml/zen_stores/schemas/step_run_schemas.py +27 -11
- zenml/zen_stores/schemas/trigger_schemas.py +43 -50
- zenml/zen_stores/schemas/user_schemas.py +10 -2
- zenml/zen_stores/schemas/workspace_schemas.py +5 -0
- zenml/zen_stores/sql_zen_store.py +540 -36
- zenml/zen_stores/zen_store_interface.py +165 -0
- {zenml_nightly-0.58.2.dev20240623.dist-info → zenml_nightly-0.61.0.dev20240712.dist-info}/METADATA +33 -11
- {zenml_nightly-0.58.2.dev20240623.dist-info → zenml_nightly-0.61.0.dev20240712.dist-info}/RECORD +213 -193
- zenml/zen_server/dashboard/assets/@radix-C9DBgJhe.js +0 -77
- zenml/zen_server/dashboard/assets/@tanstack-CEbkxrhX.js +0 -30
- zenml/zen_server/dashboard/assets/AwarenessChannel-nXGpmj_f.js +0 -1
- zenml/zen_server/dashboard/assets/Cards-nwsvQLVS.js +0 -1
- zenml/zen_server/dashboard/assets/Commands-DuIWKg_Q.js +0 -1
- zenml/zen_server/dashboard/assets/CopyButton-B_YSm-Ds.js +0 -2
- zenml/zen_server/dashboard/assets/DisplayDate-BdguISQF.js +0 -1
- zenml/zen_server/dashboard/assets/EmptyState-BkooiGtL.js +0 -1
- zenml/zen_server/dashboard/assets/Error-B6M0dPph.js +0 -1
- zenml/zen_server/dashboard/assets/Helpbox-BQoqCm04.js +0 -1
- zenml/zen_server/dashboard/assets/Infobox-Ce9mefqU.js +0 -1
- zenml/zen_server/dashboard/assets/InlineAvatar-DGf3dVhV.js +0 -1
- zenml/zen_server/dashboard/assets/PageHeader-DGaemzjc.js +0 -1
- zenml/zen_server/dashboard/assets/Pagination-DVYfBCCc.js +0 -1
- zenml/zen_server/dashboard/assets/PasswordChecker-DSLBp7Vl.js +0 -1
- zenml/zen_server/dashboard/assets/SetPassword-B5s7DJug.js +0 -1
- zenml/zen_server/dashboard/assets/SuccessStep-ZzczaM7g.js +0 -1
- zenml/zen_server/dashboard/assets/cloud-only-Ba_ShBR5.js +0 -1
- zenml/zen_server/dashboard/assets/index-CWJ3xbIf.css +0 -1
- zenml/zen_server/dashboard/assets/index-QORVVTMN.js +0 -55
- zenml/zen_server/dashboard/assets/index.esm-F7nqy9zY.js +0 -1
- zenml/zen_server/dashboard/assets/not-found-Dh2la7kh.js +0 -1
- zenml/zen_server/dashboard/assets/page-B-5jAKoO.js +0 -1
- zenml/zen_server/dashboard/assets/page-B-vWk8a6.js +0 -1
- zenml/zen_server/dashboard/assets/page-B0BrqfS8.js +0 -1
- zenml/zen_server/dashboard/assets/page-BQxVFlUl.js +0 -1
- zenml/zen_server/dashboard/assets/page-ByrHy6Ss.js +0 -1
- zenml/zen_server/dashboard/assets/page-CPtY4Kv_.js +0 -1
- zenml/zen_server/dashboard/assets/page-CmmukLsl.js +0 -1
- zenml/zen_server/dashboard/assets/page-D2D-7qyr.js +0 -9
- zenml/zen_server/dashboard/assets/page-DAQQyLxT.js +0 -1
- zenml/zen_server/dashboard/assets/page-DHkUMl_E.js +0 -1
- zenml/zen_server/dashboard/assets/page-DZCbwOEs.js +0 -2
- zenml/zen_server/dashboard/assets/page-DdaIt20-.js +0 -1
- zenml/zen_server/dashboard/assets/page-LqLs24Ot.js +0 -1
- zenml/zen_server/dashboard/assets/page-lebv0c7C.js +0 -1
- {zenml_nightly-0.58.2.dev20240623.dist-info → zenml_nightly-0.61.0.dev20240712.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.58.2.dev20240623.dist-info → zenml_nightly-0.61.0.dev20240712.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.58.2.dev20240623.dist-info → zenml_nightly-0.61.0.dev20240712.dist-info}/entry_points.txt +0 -0
zenml/client.py
CHANGED
@@ -19,7 +19,6 @@ import os
|
|
19
19
|
from abc import ABCMeta
|
20
20
|
from collections import Counter
|
21
21
|
from datetime import datetime
|
22
|
-
from functools import partial
|
23
22
|
from pathlib import Path
|
24
23
|
from typing import (
|
25
24
|
TYPE_CHECKING,
|
@@ -82,6 +81,10 @@ from zenml.exceptions import (
|
|
82
81
|
from zenml.io import fileio
|
83
82
|
from zenml.logger import get_logger
|
84
83
|
from zenml.models import (
|
84
|
+
ActionFilter,
|
85
|
+
ActionRequest,
|
86
|
+
ActionResponse,
|
87
|
+
ActionUpdate,
|
85
88
|
APIKeyFilter,
|
86
89
|
APIKeyRequest,
|
87
90
|
APIKeyResponse,
|
@@ -201,7 +204,7 @@ if TYPE_CHECKING:
|
|
201
204
|
logger = get_logger(__name__)
|
202
205
|
|
203
206
|
AnyResponse = TypeVar("AnyResponse", bound=BaseIdentifiedResponse) # type: ignore[type-arg]
|
204
|
-
|
207
|
+
F = TypeVar("F", bound=Callable[..., Any])
|
205
208
|
|
206
209
|
|
207
210
|
class ClientConfiguration(FileSyncModel):
|
@@ -307,11 +310,11 @@ class ClientMetaClass(ABCMeta):
|
|
307
310
|
return cls._global_client
|
308
311
|
|
309
312
|
|
310
|
-
def _fail_for_sql_zen_store(method:
|
311
|
-
"""Decorator for
|
313
|
+
def _fail_for_sql_zen_store(method: F) -> F:
|
314
|
+
"""Decorator for methods that are not allowed with a SQLZenStore.
|
312
315
|
|
313
316
|
Args:
|
314
|
-
method: The method
|
317
|
+
method: The method to decorate.
|
315
318
|
|
316
319
|
Returns:
|
317
320
|
The decorated method.
|
@@ -327,7 +330,7 @@ def _fail_for_sql_zen_store(method: Callable[..., T]) -> Callable[..., T]:
|
|
327
330
|
)
|
328
331
|
return method(self, *args, **kwargs)
|
329
332
|
|
330
|
-
return wrapper
|
333
|
+
return cast(F, wrapper)
|
331
334
|
|
332
335
|
|
333
336
|
@evaluate_all_lazy_load_args_in_client_methods
|
@@ -1149,6 +1152,7 @@ class Client(metaclass=ClientMetaClass):
|
|
1149
1152
|
name: str,
|
1150
1153
|
components: Mapping[StackComponentType, Union[str, UUID]],
|
1151
1154
|
stack_spec_file: Optional[str] = None,
|
1155
|
+
labels: Optional[Dict[str, Any]] = None,
|
1152
1156
|
) -> StackResponse:
|
1153
1157
|
"""Registers a stack and its components.
|
1154
1158
|
|
@@ -1156,6 +1160,7 @@ class Client(metaclass=ClientMetaClass):
|
|
1156
1160
|
name: The name of the stack to register.
|
1157
1161
|
components: dictionary which maps component types to component names
|
1158
1162
|
stack_spec_file: path to the stack spec file
|
1163
|
+
labels: The labels of the stack.
|
1159
1164
|
|
1160
1165
|
Returns:
|
1161
1166
|
The model of the registered stack.
|
@@ -1180,6 +1185,7 @@ class Client(metaclass=ClientMetaClass):
|
|
1180
1185
|
stack_spec_path=stack_spec_file,
|
1181
1186
|
workspace=self.active_workspace.id,
|
1182
1187
|
user=self.active_user.id,
|
1188
|
+
labels=labels,
|
1183
1189
|
)
|
1184
1190
|
|
1185
1191
|
self._validate_stack_configuration(stack=stack)
|
@@ -1223,8 +1229,8 @@ class Client(metaclass=ClientMetaClass):
|
|
1223
1229
|
size: int = PAGE_SIZE_DEFAULT,
|
1224
1230
|
logical_operator: LogicalOperators = LogicalOperators.AND,
|
1225
1231
|
id: Optional[Union[UUID, str]] = None,
|
1226
|
-
created: Optional[datetime] = None,
|
1227
|
-
updated: Optional[datetime] = None,
|
1232
|
+
created: Optional[Union[datetime, str]] = None,
|
1233
|
+
updated: Optional[Union[datetime, str]] = None,
|
1228
1234
|
name: Optional[str] = None,
|
1229
1235
|
description: Optional[str] = None,
|
1230
1236
|
workspace_id: Optional[Union[str, UUID]] = None,
|
@@ -1275,6 +1281,7 @@ class Client(metaclass=ClientMetaClass):
|
|
1275
1281
|
name_id_or_prefix: Optional[Union[UUID, str]] = None,
|
1276
1282
|
name: Optional[str] = None,
|
1277
1283
|
stack_spec_file: Optional[str] = None,
|
1284
|
+
labels: Optional[Dict[str, Any]] = None,
|
1278
1285
|
description: Optional[str] = None,
|
1279
1286
|
component_updates: Optional[
|
1280
1287
|
Dict[StackComponentType, List[Union[UUID, str]]]
|
@@ -1285,7 +1292,8 @@ class Client(metaclass=ClientMetaClass):
|
|
1285
1292
|
Args:
|
1286
1293
|
name_id_or_prefix: The name, id or prefix of the stack to update.
|
1287
1294
|
name: the new name of the stack.
|
1288
|
-
stack_spec_file: path to the stack spec file
|
1295
|
+
stack_spec_file: path to the stack spec file.
|
1296
|
+
labels: The new labels of the stack component.
|
1289
1297
|
description: the new description of the stack.
|
1290
1298
|
component_updates: dictionary which maps stack component types to
|
1291
1299
|
lists of new stack component names or ids.
|
@@ -1339,6 +1347,15 @@ class Client(metaclass=ClientMetaClass):
|
|
1339
1347
|
for c_type, c_list in components_dict.items()
|
1340
1348
|
}
|
1341
1349
|
|
1350
|
+
if labels is not None:
|
1351
|
+
existing_labels = stack.labels or {}
|
1352
|
+
existing_labels.update(labels)
|
1353
|
+
|
1354
|
+
existing_labels = {
|
1355
|
+
k: v for k, v in existing_labels.items() if v is not None
|
1356
|
+
}
|
1357
|
+
update_model.labels = existing_labels
|
1358
|
+
|
1342
1359
|
updated_stack = self.zen_store.update_stack(
|
1343
1360
|
stack_id=stack.id,
|
1344
1361
|
stack_update=update_model,
|
@@ -2435,9 +2452,7 @@ class Client(metaclass=ClientMetaClass):
|
|
2435
2452
|
)
|
2436
2453
|
|
2437
2454
|
for pipeline in depaginate(
|
2438
|
-
|
2439
|
-
Client().list_pipelines, name=name_id_or_prefix
|
2440
|
-
)
|
2455
|
+
Client().list_pipelines, name=name_id_or_prefix
|
2441
2456
|
):
|
2442
2457
|
Client().delete_pipeline(pipeline.id)
|
2443
2458
|
else:
|
@@ -2575,11 +2590,9 @@ class Client(metaclass=ClientMetaClass):
|
|
2575
2590
|
)
|
2576
2591
|
|
2577
2592
|
builds = depaginate(
|
2578
|
-
|
2579
|
-
|
2580
|
-
|
2581
|
-
stack_id=stack.id if stack else None,
|
2582
|
-
)
|
2593
|
+
self.list_builds,
|
2594
|
+
pipeline_id=pipeline.id,
|
2595
|
+
stack_id=stack.id if stack else None,
|
2583
2596
|
)
|
2584
2597
|
|
2585
2598
|
for build in builds:
|
@@ -2754,18 +2767,18 @@ class Client(metaclass=ClientMetaClass):
|
|
2754
2767
|
self,
|
2755
2768
|
name: str,
|
2756
2769
|
configuration: Dict[str, Any],
|
2757
|
-
description: str,
|
2758
2770
|
flavor: str,
|
2759
2771
|
event_source_subtype: PluginSubType,
|
2772
|
+
description: str = "",
|
2760
2773
|
) -> EventSourceResponse:
|
2761
|
-
"""Registers
|
2774
|
+
"""Registers an event source.
|
2762
2775
|
|
2763
2776
|
Args:
|
2764
|
-
name: The name of the
|
2765
|
-
configuration: Configuration for this event source
|
2766
|
-
|
2767
|
-
|
2768
|
-
|
2777
|
+
name: The name of the event source to create.
|
2778
|
+
configuration: Configuration for this event source.
|
2779
|
+
flavor: The flavor of event source.
|
2780
|
+
event_source_subtype: The event source subtype.
|
2781
|
+
description: The description of the event source.
|
2769
2782
|
|
2770
2783
|
Returns:
|
2771
2784
|
The model of the registered event source.
|
@@ -2935,52 +2948,218 @@ class Client(metaclass=ClientMetaClass):
|
|
2935
2948
|
self.zen_store.delete_event_source(event_source_id=event_source.id)
|
2936
2949
|
logger.info("Deleted event_source with name '%s'.", event_source.name)
|
2937
2950
|
|
2951
|
+
# --------------------------------- Actions -------------------------
|
2952
|
+
|
2953
|
+
@_fail_for_sql_zen_store
|
2954
|
+
def create_action(
|
2955
|
+
self,
|
2956
|
+
name: str,
|
2957
|
+
flavor: str,
|
2958
|
+
action_type: PluginSubType,
|
2959
|
+
configuration: Dict[str, Any],
|
2960
|
+
service_account_id: UUID,
|
2961
|
+
auth_window: Optional[int] = None,
|
2962
|
+
description: str = "",
|
2963
|
+
) -> ActionResponse:
|
2964
|
+
"""Create an action.
|
2965
|
+
|
2966
|
+
Args:
|
2967
|
+
name: The name of the action.
|
2968
|
+
flavor: The flavor of the action,
|
2969
|
+
action_type: The action subtype.
|
2970
|
+
configuration: The action configuration.
|
2971
|
+
service_account_id: The service account that is used to execute the
|
2972
|
+
action.
|
2973
|
+
auth_window: The time window in minutes for which the service
|
2974
|
+
account is authorized to execute the action. Set this to 0 to
|
2975
|
+
authorize the service account indefinitely (not recommended).
|
2976
|
+
description: The description of the action.
|
2977
|
+
|
2978
|
+
Returns:
|
2979
|
+
The created action
|
2980
|
+
"""
|
2981
|
+
action = ActionRequest(
|
2982
|
+
name=name,
|
2983
|
+
description=description,
|
2984
|
+
flavor=flavor,
|
2985
|
+
plugin_subtype=action_type,
|
2986
|
+
configuration=configuration,
|
2987
|
+
service_account_id=service_account_id,
|
2988
|
+
auth_window=auth_window,
|
2989
|
+
user=self.active_user.id,
|
2990
|
+
workspace=self.active_workspace.id,
|
2991
|
+
)
|
2992
|
+
|
2993
|
+
return self.zen_store.create_action(action=action)
|
2994
|
+
|
2995
|
+
@_fail_for_sql_zen_store
|
2996
|
+
def get_action(
|
2997
|
+
self,
|
2998
|
+
name_id_or_prefix: Union[UUID, str],
|
2999
|
+
allow_name_prefix_match: bool = True,
|
3000
|
+
hydrate: bool = True,
|
3001
|
+
) -> ActionResponse:
|
3002
|
+
"""Get an action by name, ID or prefix.
|
3003
|
+
|
3004
|
+
Args:
|
3005
|
+
name_id_or_prefix: The name, ID or prefix of the action.
|
3006
|
+
allow_name_prefix_match: If True, allow matching by name prefix.
|
3007
|
+
hydrate: Flag deciding whether to hydrate the output model(s)
|
3008
|
+
by including metadata fields in the response.
|
3009
|
+
|
3010
|
+
Returns:
|
3011
|
+
The action.
|
3012
|
+
"""
|
3013
|
+
return self._get_entity_by_id_or_name_or_prefix(
|
3014
|
+
get_method=self.zen_store.get_action,
|
3015
|
+
list_method=self.list_actions,
|
3016
|
+
name_id_or_prefix=name_id_or_prefix,
|
3017
|
+
allow_name_prefix_match=allow_name_prefix_match,
|
3018
|
+
hydrate=hydrate,
|
3019
|
+
)
|
3020
|
+
|
3021
|
+
@_fail_for_sql_zen_store
|
3022
|
+
def list_actions(
|
3023
|
+
self,
|
3024
|
+
sort_by: str = "created",
|
3025
|
+
page: int = PAGINATION_STARTING_PAGE,
|
3026
|
+
size: int = PAGE_SIZE_DEFAULT,
|
3027
|
+
logical_operator: LogicalOperators = LogicalOperators.AND,
|
3028
|
+
id: Optional[Union[UUID, str]] = None,
|
3029
|
+
created: Optional[datetime] = None,
|
3030
|
+
updated: Optional[datetime] = None,
|
3031
|
+
name: Optional[str] = None,
|
3032
|
+
flavor: Optional[str] = None,
|
3033
|
+
action_type: Optional[str] = None,
|
3034
|
+
workspace_id: Optional[Union[str, UUID]] = None,
|
3035
|
+
user_id: Optional[Union[str, UUID]] = None,
|
3036
|
+
hydrate: bool = False,
|
3037
|
+
) -> Page[ActionResponse]:
|
3038
|
+
"""List actions.
|
3039
|
+
|
3040
|
+
Args:
|
3041
|
+
sort_by: The column to sort by
|
3042
|
+
page: The page of items
|
3043
|
+
size: The maximum size of all pages
|
3044
|
+
logical_operator: Which logical operator to use [and, or]
|
3045
|
+
id: Use the id of the action to filter by.
|
3046
|
+
created: Use to filter by time of creation
|
3047
|
+
updated: Use the last updated date for filtering
|
3048
|
+
workspace_id: The id of the workspace to filter by.
|
3049
|
+
user_id: The id of the user to filter by.
|
3050
|
+
name: The name of the action to filter by.
|
3051
|
+
flavor: The flavor of the action to filter by.
|
3052
|
+
action_type: The type of the action to filter by.
|
3053
|
+
hydrate: Flag deciding whether to hydrate the output model(s)
|
3054
|
+
by including metadata fields in the response.
|
3055
|
+
|
3056
|
+
Returns:
|
3057
|
+
A page of actions.
|
3058
|
+
"""
|
3059
|
+
filter_model = ActionFilter(
|
3060
|
+
page=page,
|
3061
|
+
size=size,
|
3062
|
+
sort_by=sort_by,
|
3063
|
+
logical_operator=logical_operator,
|
3064
|
+
workspace_id=workspace_id,
|
3065
|
+
user_id=user_id,
|
3066
|
+
name=name,
|
3067
|
+
id=id,
|
3068
|
+
flavor=flavor,
|
3069
|
+
plugin_subtype=action_type,
|
3070
|
+
created=created,
|
3071
|
+
updated=updated,
|
3072
|
+
)
|
3073
|
+
filter_model.set_scope_workspace(self.active_workspace.id)
|
3074
|
+
return self.zen_store.list_actions(filter_model, hydrate=hydrate)
|
3075
|
+
|
3076
|
+
@_fail_for_sql_zen_store
|
3077
|
+
def update_action(
|
3078
|
+
self,
|
3079
|
+
name_id_or_prefix: Union[UUID, str],
|
3080
|
+
name: Optional[str] = None,
|
3081
|
+
description: Optional[str] = None,
|
3082
|
+
configuration: Optional[Dict[str, Any]] = None,
|
3083
|
+
service_account_id: Optional[UUID] = None,
|
3084
|
+
auth_window: Optional[int] = None,
|
3085
|
+
) -> ActionResponse:
|
3086
|
+
"""Update an action.
|
3087
|
+
|
3088
|
+
Args:
|
3089
|
+
name_id_or_prefix: The name, id or prefix of the action to update.
|
3090
|
+
name: The new name of the action.
|
3091
|
+
description: The new description of the action.
|
3092
|
+
configuration: The new configuration of the action.
|
3093
|
+
service_account_id: The new service account that is used to execute
|
3094
|
+
the action.
|
3095
|
+
auth_window: The new time window in minutes for which the service
|
3096
|
+
account is authorized to execute the action. Set this to 0 to
|
3097
|
+
authorize the service account indefinitely (not recommended).
|
3098
|
+
|
3099
|
+
Returns:
|
3100
|
+
The updated action.
|
3101
|
+
"""
|
3102
|
+
action = self.get_action(
|
3103
|
+
name_id_or_prefix=name_id_or_prefix, allow_name_prefix_match=False
|
3104
|
+
)
|
3105
|
+
|
3106
|
+
update_model = ActionUpdate(
|
3107
|
+
name=name,
|
3108
|
+
description=description,
|
3109
|
+
configuration=configuration,
|
3110
|
+
service_account_id=service_account_id,
|
3111
|
+
auth_window=auth_window,
|
3112
|
+
)
|
3113
|
+
|
3114
|
+
return self.zen_store.update_action(
|
3115
|
+
action_id=action.id,
|
3116
|
+
action_update=update_model,
|
3117
|
+
)
|
3118
|
+
|
3119
|
+
@_fail_for_sql_zen_store
|
3120
|
+
def delete_action(self, name_id_or_prefix: Union[str, UUID]) -> None:
|
3121
|
+
"""Delete an action.
|
3122
|
+
|
3123
|
+
Args:
|
3124
|
+
name_id_or_prefix: The name, id or prefix id of the action
|
3125
|
+
to delete.
|
3126
|
+
"""
|
3127
|
+
action = self.get_action(
|
3128
|
+
name_id_or_prefix=name_id_or_prefix, allow_name_prefix_match=False
|
3129
|
+
)
|
3130
|
+
|
3131
|
+
self.zen_store.delete_action(action_id=action.id)
|
3132
|
+
logger.info("Deleted action with name '%s'.", action.name)
|
3133
|
+
|
2938
3134
|
# --------------------------------- Triggers -------------------------
|
2939
3135
|
|
2940
3136
|
@_fail_for_sql_zen_store
|
2941
3137
|
def create_trigger(
|
2942
3138
|
self,
|
2943
3139
|
name: str,
|
2944
|
-
description: str,
|
2945
3140
|
event_source_id: UUID,
|
2946
3141
|
event_filter: Dict[str, Any],
|
2947
|
-
|
2948
|
-
|
2949
|
-
action_subtype: PluginSubType,
|
2950
|
-
service_account: Union[str, UUID],
|
2951
|
-
auth_window: Optional[int] = None,
|
3142
|
+
action_id: UUID,
|
3143
|
+
description: str = "",
|
2952
3144
|
) -> TriggerResponse:
|
2953
3145
|
"""Registers a trigger.
|
2954
3146
|
|
2955
3147
|
Args:
|
2956
3148
|
name: The name of the trigger to create.
|
2957
|
-
description: The description of the trigger
|
2958
3149
|
event_source_id: The id of the event source id
|
2959
3150
|
event_filter: The event filter
|
2960
|
-
|
2961
|
-
|
2962
|
-
action_subtype: The action subtype
|
2963
|
-
service_account: The service account
|
2964
|
-
auth_window: The auth window
|
3151
|
+
action_id: The ID of the action that should be triggered.
|
3152
|
+
description: The description of the trigger
|
2965
3153
|
|
2966
3154
|
Returns:
|
2967
|
-
The
|
3155
|
+
The created trigger.
|
2968
3156
|
"""
|
2969
|
-
# Fetch the service account
|
2970
|
-
service_account_model = self.get_service_account(
|
2971
|
-
name_id_or_prefix=service_account, allow_name_prefix_match=False
|
2972
|
-
)
|
2973
|
-
|
2974
3157
|
trigger = TriggerRequest(
|
2975
3158
|
name=name,
|
2976
3159
|
description=description,
|
2977
3160
|
event_source_id=event_source_id,
|
2978
3161
|
event_filter=event_filter,
|
2979
|
-
|
2980
|
-
action_flavor=action_flavor,
|
2981
|
-
action_subtype=action_subtype,
|
2982
|
-
service_account_id=service_account_model.id,
|
2983
|
-
auth_window=auth_window,
|
3162
|
+
action_id=action_id,
|
2984
3163
|
user=self.active_user.id,
|
2985
3164
|
workspace=self.active_workspace.id,
|
2986
3165
|
)
|
@@ -2994,10 +3173,10 @@ class Client(metaclass=ClientMetaClass):
|
|
2994
3173
|
allow_name_prefix_match: bool = True,
|
2995
3174
|
hydrate: bool = True,
|
2996
3175
|
) -> TriggerResponse:
|
2997
|
-
"""Get a
|
3176
|
+
"""Get a trigger by name, ID or prefix.
|
2998
3177
|
|
2999
3178
|
Args:
|
3000
|
-
name_id_or_prefix: The name, ID or prefix of the
|
3179
|
+
name_id_or_prefix: The name, ID or prefix of the trigger.
|
3001
3180
|
allow_name_prefix_match: If True, allow matching by name prefix.
|
3002
3181
|
hydrate: Flag deciding whether to hydrate the output model(s)
|
3003
3182
|
by including metadata fields in the response.
|
@@ -3025,6 +3204,11 @@ class Client(metaclass=ClientMetaClass):
|
|
3025
3204
|
updated: Optional[datetime] = None,
|
3026
3205
|
name: Optional[str] = None,
|
3027
3206
|
event_source_id: Optional[UUID] = None,
|
3207
|
+
action_id: Optional[UUID] = None,
|
3208
|
+
event_source_flavor: Optional[str] = None,
|
3209
|
+
event_source_subtype: Optional[str] = None,
|
3210
|
+
action_flavor: Optional[str] = None,
|
3211
|
+
action_subtype: Optional[str] = None,
|
3028
3212
|
workspace_id: Optional[Union[str, UUID]] = None,
|
3029
3213
|
user_id: Optional[Union[str, UUID]] = None,
|
3030
3214
|
hydrate: bool = False,
|
@@ -3042,7 +3226,14 @@ class Client(metaclass=ClientMetaClass):
|
|
3042
3226
|
workspace_id: The id of the workspace to filter by.
|
3043
3227
|
user_id: The id of the user to filter by.
|
3044
3228
|
name: The name of the trigger to filter by.
|
3045
|
-
event_source_id: The event source associated with the
|
3229
|
+
event_source_id: The event source associated with the trigger.
|
3230
|
+
action_id: The action associated with the trigger.
|
3231
|
+
event_source_flavor: Flavor of the event source associated with the
|
3232
|
+
trigger.
|
3233
|
+
event_source_subtype: Type of the event source associated with the
|
3234
|
+
trigger.
|
3235
|
+
action_flavor: Flavor of the action associated with the trigger.
|
3236
|
+
action_subtype: Type of the action associated with the trigger.
|
3046
3237
|
hydrate: Flag deciding whether to hydrate the output model(s)
|
3047
3238
|
by including metadata fields in the response.
|
3048
3239
|
|
@@ -3058,6 +3249,11 @@ class Client(metaclass=ClientMetaClass):
|
|
3058
3249
|
user_id=user_id,
|
3059
3250
|
name=name,
|
3060
3251
|
event_source_id=event_source_id,
|
3252
|
+
action_id=action_id,
|
3253
|
+
event_source_flavor=event_source_flavor,
|
3254
|
+
event_source_subtype=event_source_subtype,
|
3255
|
+
action_flavor=action_flavor,
|
3256
|
+
action_subtype=action_subtype,
|
3061
3257
|
id=id,
|
3062
3258
|
created=created,
|
3063
3259
|
updated=updated,
|
@@ -3074,10 +3270,7 @@ class Client(metaclass=ClientMetaClass):
|
|
3074
3270
|
name: Optional[str] = None,
|
3075
3271
|
description: Optional[str] = None,
|
3076
3272
|
event_filter: Optional[Dict[str, Any]] = None,
|
3077
|
-
action: Optional[Dict[str, Any]] = None,
|
3078
3273
|
is_active: Optional[bool] = None,
|
3079
|
-
service_account: Optional[Union[str, UUID]] = None,
|
3080
|
-
auth_window: Optional[int] = None,
|
3081
3274
|
) -> TriggerResponse:
|
3082
3275
|
"""Updates a trigger.
|
3083
3276
|
|
@@ -3086,11 +3279,7 @@ class Client(metaclass=ClientMetaClass):
|
|
3086
3279
|
name: the new name of the trigger.
|
3087
3280
|
description: the new description of the trigger.
|
3088
3281
|
event_filter: The event filter configuration.
|
3089
|
-
|
3090
|
-
is_active: Optional[bool] = Allows for activation/deactivating the
|
3091
|
-
event source
|
3092
|
-
service_account: The service account
|
3093
|
-
auth_window: The auth window
|
3282
|
+
is_active: Whether the trigger is active or not.
|
3094
3283
|
|
3095
3284
|
Returns:
|
3096
3285
|
The model of the updated trigger.
|
@@ -3108,17 +3297,8 @@ class Client(metaclass=ClientMetaClass):
|
|
3108
3297
|
name=name,
|
3109
3298
|
description=description,
|
3110
3299
|
event_filter=event_filter,
|
3111
|
-
action=action,
|
3112
3300
|
is_active=is_active,
|
3113
|
-
auth_window=auth_window,
|
3114
3301
|
)
|
3115
|
-
if service_account:
|
3116
|
-
# Fetch the service account
|
3117
|
-
service_account_model = self.get_service_account(
|
3118
|
-
name_id_or_prefix=service_account,
|
3119
|
-
allow_name_prefix_match=False,
|
3120
|
-
)
|
3121
|
-
update_model.service_account_id = service_account_model.id
|
3122
3302
|
|
3123
3303
|
if name:
|
3124
3304
|
if self.list_triggers(name=name):
|
@@ -3771,7 +3951,7 @@ class Client(metaclass=ClientMetaClass):
|
|
3771
3951
|
"""
|
3772
3952
|
if delete_from_artifact_store:
|
3773
3953
|
unused_artifact_versions = depaginate(
|
3774
|
-
|
3954
|
+
self.list_artifact_versions, only_unused=True
|
3775
3955
|
)
|
3776
3956
|
for unused_artifact_version in unused_artifact_versions:
|
3777
3957
|
self._delete_artifact_from_artifact_store(
|
@@ -3980,7 +4160,7 @@ class Client(metaclass=ClientMetaClass):
|
|
3980
4160
|
ValueError: If the artifact version is still used in any runs.
|
3981
4161
|
"""
|
3982
4162
|
if artifact_version not in depaginate(
|
3983
|
-
|
4163
|
+
self.list_artifact_versions, only_unused=True
|
3984
4164
|
):
|
3985
4165
|
raise ValueError(
|
3986
4166
|
"The metadata of artifact versions that are used in runs "
|
@@ -5495,6 +5675,7 @@ class Client(metaclass=ClientMetaClass):
|
|
5495
5675
|
name_id_or_prefix=name_id_or_prefix,
|
5496
5676
|
resource_type=resource_type,
|
5497
5677
|
resource_id=resource_id,
|
5678
|
+
verify=False,
|
5498
5679
|
)
|
5499
5680
|
|
5500
5681
|
connector_client.configure_local_client(
|
@@ -5508,6 +5689,7 @@ class Client(metaclass=ClientMetaClass):
|
|
5508
5689
|
name_id_or_prefix: Union[UUID, str],
|
5509
5690
|
resource_type: Optional[str] = None,
|
5510
5691
|
resource_id: Optional[str] = None,
|
5692
|
+
verify: bool = False,
|
5511
5693
|
) -> "ServiceConnector":
|
5512
5694
|
"""Get the client side of a service connector instance to use with a local client.
|
5513
5695
|
|
@@ -5523,6 +5705,8 @@ class Client(metaclass=ClientMetaClass):
|
|
5523
5705
|
equivalent to the one requested, a `ValueError` exception is
|
5524
5706
|
raised. May be omitted for connectors and resource types that do
|
5525
5707
|
not support multiple resource instances.
|
5708
|
+
verify: Whether to verify that the service connector configuration
|
5709
|
+
and credentials can be used to gain access to the resource.
|
5526
5710
|
|
5527
5711
|
Returns:
|
5528
5712
|
The client side of the indicated service connector instance that can
|
@@ -5560,9 +5744,10 @@ class Client(metaclass=ClientMetaClass):
|
|
5560
5744
|
)
|
5561
5745
|
)
|
5562
5746
|
|
5563
|
-
|
5564
|
-
|
5565
|
-
|
5747
|
+
if verify:
|
5748
|
+
# Verify the connector client on the local machine, because the
|
5749
|
+
# server-side implementation may not be able to do so
|
5750
|
+
connector_client.verify()
|
5566
5751
|
else:
|
5567
5752
|
connector_instance = (
|
5568
5753
|
service_connector_registry.instantiate_connector(
|
zenml/config/compiler.py
CHANGED
@@ -192,10 +192,6 @@ class Compiler:
|
|
192
192
|
Args:
|
193
193
|
pipeline: The pipeline to configure.
|
194
194
|
config: The run configurations.
|
195
|
-
|
196
|
-
Raises:
|
197
|
-
KeyError: If the run configuration contains options for a
|
198
|
-
non-existent step.
|
199
195
|
"""
|
200
196
|
with pipeline.__suppress_configure_warnings__():
|
201
197
|
pipeline.configure(
|
@@ -209,11 +205,16 @@ class Compiler:
|
|
209
205
|
parameters=config.parameters,
|
210
206
|
)
|
211
207
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
208
|
+
invalid_step_configs = set(config.steps) - set(pipeline.invocations)
|
209
|
+
if invalid_step_configs:
|
210
|
+
logger.warning(
|
211
|
+
f"Configuration for step invocations {invalid_step_configs} "
|
212
|
+
"cannot be applied to any pipeline step invocations, "
|
213
|
+
"ignoring..."
|
214
|
+
)
|
215
|
+
|
216
|
+
for key in invalid_step_configs:
|
217
|
+
config.steps.pop(key)
|
217
218
|
|
218
219
|
# Override `enable_cache` of all steps if set at run level
|
219
220
|
if config.enable_cache is not None:
|