zenml-nightly 0.66.0.dev20240910__py3-none-any.whl → 0.66.0.dev20240918__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 CHANGED
@@ -1 +1 @@
1
- 0.66.0.dev20240910
1
+ 0.66.0.dev20240918
@@ -35,6 +35,7 @@ def _create_api_key(
35
35
  name: str,
36
36
  description: Optional[str],
37
37
  set_key: bool = False,
38
+ output_file: Optional[str] = None,
38
39
  ) -> None:
39
40
  """Create an API key.
40
41
 
@@ -44,6 +45,7 @@ def _create_api_key(
44
45
  name: Name of the API key
45
46
  description: The API key description.
46
47
  set_key: Configure the local client with the generated key.
48
+ output_file: Output file to write the API key to.
47
49
  """
48
50
  client = Client()
49
51
  zen_store = client.zen_store
@@ -74,13 +76,19 @@ def _create_api_key(
74
76
  )
75
77
  return
76
78
 
77
- cli_utils.declare(
78
- f"The API key value is: '{api_key.key}'\nPlease store it safely as "
79
- "it will not be shown again.\nTo configure a ZenML client to use "
80
- "this API key, run:\n\n"
81
- f"zenml connect --url {zen_store.config.url} --api-key \\\n"
82
- f" '{api_key.key}'\n"
83
- )
79
+ if output_file and api_key.key:
80
+ with open(output_file, "w") as f:
81
+ f.write(api_key.key)
82
+
83
+ cli_utils.declare(f"Wrote API key value to {output_file}")
84
+ else:
85
+ cli_utils.declare(
86
+ f"The API key value is: '{api_key.key}'\nPlease store it safely as "
87
+ "it will not be shown again.\nTo configure a ZenML client to use "
88
+ "this API key, run:\n\n"
89
+ f"zenml connect --url {zen_store.config.url} --api-key \\\n"
90
+ f" '{api_key.key}'\n"
91
+ )
84
92
 
85
93
 
86
94
  @cli.group(cls=TagGroup, tag=CliCategories.IDENTITY_AND_SECURITY)
@@ -111,11 +119,18 @@ def service_account() -> None:
111
119
  help=("Configure the local client to use the generated API key."),
112
120
  is_flag=True,
113
121
  )
122
+ @click.option(
123
+ "--output-file",
124
+ type=str,
125
+ required=False,
126
+ help="File to write the API key to.",
127
+ )
114
128
  def create_service_account(
115
129
  service_account_name: str,
116
130
  description: str = "",
117
131
  create_api_key: bool = True,
118
132
  set_api_key: bool = False,
133
+ output_file: Optional[str] = None,
119
134
  ) -> None:
120
135
  """Create a new service account.
121
136
 
@@ -124,6 +139,7 @@ def create_service_account(
124
139
  description: The API key description.
125
140
  create_api_key: Create an API key for the service account.
126
141
  set_api_key: Configure the local client to use the generated API key.
142
+ output_file: Output file to write the API key to.
127
143
  """
128
144
  client = Client()
129
145
  try:
@@ -142,6 +158,7 @@ def create_service_account(
142
158
  name="default",
143
159
  description="Default API key.",
144
160
  set_key=set_api_key,
161
+ output_file=output_file,
145
162
  )
146
163
 
147
164
 
@@ -302,12 +319,19 @@ def api_key(
302
319
  is_flag=True,
303
320
  help="Configure the local client with the generated key.",
304
321
  )
322
+ @click.option(
323
+ "--output-file",
324
+ type=str,
325
+ required=False,
326
+ help="File to write the API key to.",
327
+ )
305
328
  @click.pass_obj
306
329
  def create_api_key(
307
330
  service_account_name_or_id: str,
308
331
  name: str,
309
332
  description: Optional[str],
310
333
  set_key: bool = False,
334
+ output_file: Optional[str] = None,
311
335
  ) -> None:
312
336
  """Create an API key.
313
337
 
@@ -317,12 +341,14 @@ def create_api_key(
317
341
  name: Name of the API key
318
342
  description: The API key description.
319
343
  set_key: Configure the local client with the generated key.
344
+ output_file: Output file to write the API key to.
320
345
  """
321
346
  _create_api_key(
322
347
  service_account_name_or_id=service_account_name_or_id,
323
348
  name=name,
324
349
  description=description,
325
350
  set_key=set_key,
351
+ output_file=output_file,
326
352
  )
327
353
 
328
354
 
@@ -450,12 +476,19 @@ def update_api_key(
450
476
  is_flag=True,
451
477
  help="Configure the local client with the generated key.",
452
478
  )
479
+ @click.option(
480
+ "--output-file",
481
+ type=str,
482
+ required=False,
483
+ help="File to write the API key to.",
484
+ )
453
485
  @click.pass_obj
454
486
  def rotate_api_key(
455
487
  service_account_name_or_id: str,
456
488
  name_or_id: str,
457
489
  retain: int = 0,
458
490
  set_key: bool = False,
491
+ output_file: Optional[str] = None,
459
492
  ) -> None:
460
493
  """Rotate an API key.
461
494
 
@@ -466,6 +499,7 @@ def rotate_api_key(
466
499
  retain: Number of minutes for which the previous key is still valid
467
500
  after it has been rotated.
468
501
  set_key: Configure the local client with the newly generated key.
502
+ output_file: Output file to write the API key to.
469
503
  """
470
504
  client = Client()
471
505
  zen_store = client.zen_store
@@ -499,13 +533,19 @@ def rotate_api_key(
499
533
  )
500
534
  return
501
535
 
502
- cli_utils.declare(
503
- f"The new API key value is: '{api_key.key}'\nPlease store it "
504
- "safely as it will not be shown again.\nTo configure a ZenML "
505
- "client to use this API key, run:\n\n"
506
- f"zenml connect --url {zen_store.config.url} --api-key \\\n"
507
- f" '{api_key.key}'\n"
508
- )
536
+ if output_file and api_key.key:
537
+ with open(output_file, "w") as f:
538
+ f.write(api_key.key)
539
+
540
+ cli_utils.declare(f"Wrote API key value to {output_file}")
541
+ else:
542
+ cli_utils.declare(
543
+ f"The new API key value is: '{api_key.key}'\nPlease store it "
544
+ "safely as it will not be shown again.\nTo configure a ZenML "
545
+ "client to use this API key, run:\n\n"
546
+ f"zenml connect --url {zen_store.config.url} --api-key \\\n"
547
+ f" '{api_key.key}'\n"
548
+ )
509
549
 
510
550
 
511
551
  @api_key.command("delete")
zenml/client.py CHANGED
@@ -3748,6 +3748,7 @@ class Client(metaclass=ClientMetaClass):
3748
3748
  end_time: Optional[Union[datetime, str]] = None,
3749
3749
  num_steps: Optional[Union[int, str]] = None,
3750
3750
  unlisted: Optional[bool] = None,
3751
+ templatable: Optional[bool] = None,
3751
3752
  tag: Optional[str] = None,
3752
3753
  hydrate: bool = False,
3753
3754
  ) -> Page[PipelineRunResponse]:
@@ -3778,6 +3779,7 @@ class Client(metaclass=ClientMetaClass):
3778
3779
  end_time: The end_time for the pipeline run
3779
3780
  num_steps: The number of steps for the pipeline run
3780
3781
  unlisted: If the runs should be unlisted or not.
3782
+ templatable: If the runs should be templatable or not.
3781
3783
  tag: Tag to filter by.
3782
3784
  hydrate: Flag deciding whether to hydrate the output model(s)
3783
3785
  by including metadata fields in the response.
@@ -3811,6 +3813,7 @@ class Client(metaclass=ClientMetaClass):
3811
3813
  num_steps=num_steps,
3812
3814
  tag=tag,
3813
3815
  unlisted=unlisted,
3816
+ templatable=templatable,
3814
3817
  )
3815
3818
  runs_filter_model.set_scope_workspace(self.active_workspace.id)
3816
3819
  return self.zen_store.list_runs(
@@ -235,6 +235,9 @@ class PipelineRunResponseMetadata(WorkspaceScopedResponseMetadata):
235
235
  default=None,
236
236
  description="Template used for the pipeline run.",
237
237
  )
238
+ is_templatable: bool = Field(
239
+ description="Whether a template can be created from this run.",
240
+ )
238
241
 
239
242
 
240
243
  class PipelineRunResponseResources(WorkspaceScopedResponseResources):
@@ -477,6 +480,15 @@ class PipelineRunResponse(
477
480
  """
478
481
  return self.get_metadata().template_id
479
482
 
483
+ @property
484
+ def is_templatable(self) -> bool:
485
+ """The `is_templatable` property.
486
+
487
+ Returns:
488
+ the value of the property.
489
+ """
490
+ return self.get_metadata().is_templatable
491
+
480
492
  @property
481
493
  def model_version(self) -> Optional[ModelVersionResponse]:
482
494
  """The `model_version` property.
@@ -511,6 +523,7 @@ class PipelineRunFilter(WorkspaceScopedTaggableFilter):
511
523
  "stack_id",
512
524
  "template_id",
513
525
  "pipeline_name",
526
+ "templatable",
514
527
  ]
515
528
  name: Optional[str] = Field(
516
529
  default=None,
@@ -584,6 +597,7 @@ class PipelineRunFilter(WorkspaceScopedTaggableFilter):
584
597
  union_mode="left_to_right",
585
598
  )
586
599
  unlisted: Optional[bool] = None
600
+ templatable: Optional[bool] = None
587
601
 
588
602
  def get_custom_filters(
589
603
  self,
@@ -595,7 +609,7 @@ class PipelineRunFilter(WorkspaceScopedTaggableFilter):
595
609
  """
596
610
  custom_filters = super().get_custom_filters()
597
611
 
598
- from sqlmodel import and_
612
+ from sqlmodel import and_, col, or_
599
613
 
600
614
  from zenml.zen_stores.schemas import (
601
615
  CodeReferenceSchema,
@@ -668,4 +682,40 @@ class PipelineRunFilter(WorkspaceScopedTaggableFilter):
668
682
  )
669
683
  custom_filters.append(run_template_filter)
670
684
 
685
+ if self.templatable is not None:
686
+ if self.templatable is True:
687
+ templatable_filter = and_(
688
+ # The following condition is not perfect as it does not
689
+ # consider stacks with custom flavor components or local
690
+ # components, but the best we can do currently with our
691
+ # table columns.
692
+ PipelineRunSchema.deployment_id
693
+ == PipelineDeploymentSchema.id,
694
+ PipelineDeploymentSchema.build_id
695
+ == PipelineBuildSchema.id,
696
+ col(PipelineBuildSchema.is_local).is_(False),
697
+ col(PipelineBuildSchema.stack_id).is_not(None),
698
+ )
699
+ else:
700
+ templatable_filter = or_(
701
+ col(PipelineRunSchema.deployment_id).is_(None),
702
+ and_(
703
+ PipelineRunSchema.deployment_id
704
+ == PipelineDeploymentSchema.id,
705
+ col(PipelineDeploymentSchema.build_id).is_(None),
706
+ ),
707
+ and_(
708
+ PipelineRunSchema.deployment_id
709
+ == PipelineDeploymentSchema.id,
710
+ PipelineDeploymentSchema.build_id
711
+ == PipelineBuildSchema.id,
712
+ or_(
713
+ col(PipelineBuildSchema.is_local).is_(True),
714
+ col(PipelineBuildSchema.stack_id).is_(None),
715
+ ),
716
+ ),
717
+ )
718
+
719
+ custom_filters.append(templatable_filter)
720
+
671
721
  return custom_filters
@@ -261,8 +261,18 @@ class DockerServiceConnector(ServiceConnector):
261
261
  """
262
262
  assert self.resource_id is not None
263
263
 
264
+ # The reason we need to configure the local client here instead of
265
+ # using the `docker_client.login(...)` method is the following:
266
+ # When calling the login method on the python client, it stores the
267
+ # credentials in memory, but doesn't actually use them in future calls
268
+ # to push/pull images in case a credential store or credential helper is
269
+ # configured. If the cred store/helper contains invalid/expired
270
+ # credentials for the registry, these calls will fail.
271
+ # This solution is not ideal as we're now replacing potentially
272
+ # long-lived credentials in the cred store with our short lived ones,
273
+ # but the best we can do without modifying the docker library.
274
+ self._configure_local_client()
264
275
  docker_client = docker_utils._try_get_docker_client_from_env()
265
-
266
276
  self._authorize_client(docker_client, self.resource_id)
267
277
 
268
278
  return docker_client
zenml/stack/stack.py CHANGED
@@ -751,21 +751,6 @@ class Stack:
751
751
  updated=datetime.utcnow(),
752
752
  )
753
753
 
754
- logger.warning(
755
- "The stack `%s` contains components that require building "
756
- "Docker images. Older versions of ZenML always built these "
757
- "images locally, but since version 0.32.0 this behavior can be "
758
- "configured using the `image_builder` stack component. This "
759
- "stack will temporarily default to a local image builder that "
760
- "mirrors the previous behavior, but this will be removed in "
761
- "future versions of ZenML. Please add an image builder to this "
762
- "stack:\n"
763
- "`zenml image-builder register <NAME> ...\n"
764
- "zenml stack update %s -i <NAME>`",
765
- self.name,
766
- self.id,
767
- )
768
-
769
754
  self._image_builder = image_builder
770
755
 
771
756
  def prepare_pipeline_deployment(
@@ -421,23 +421,56 @@ class StackComponent:
421
421
  else:
422
422
  user_id = None
423
423
 
424
- return flavor.implementation_class(
425
- user=user_id,
426
- workspace=component_model.workspace.id,
427
- name=component_model.name,
428
- id=component_model.id,
429
- config=configuration,
430
- labels=component_model.labels,
431
- flavor=component_model.flavor,
432
- type=component_model.type,
433
- created=component_model.created,
434
- updated=component_model.updated,
435
- connector_requirements=flavor.service_connector_requirements,
436
- connector=component_model.connector.id
437
- if component_model.connector
438
- else None,
439
- connector_resource_id=component_model.connector_resource_id,
440
- )
424
+ try:
425
+ return flavor.implementation_class(
426
+ user=user_id,
427
+ workspace=component_model.workspace.id,
428
+ name=component_model.name,
429
+ id=component_model.id,
430
+ config=configuration,
431
+ labels=component_model.labels,
432
+ flavor=component_model.flavor,
433
+ type=component_model.type,
434
+ created=component_model.created,
435
+ updated=component_model.updated,
436
+ connector_requirements=flavor.service_connector_requirements,
437
+ connector=component_model.connector.id
438
+ if component_model.connector
439
+ else None,
440
+ connector_resource_id=component_model.connector_resource_id,
441
+ )
442
+ except ImportError as e:
443
+ from zenml.integrations.registry import integration_registry
444
+
445
+ integration_requirements = " ".join(
446
+ integration_registry.select_integration_requirements(
447
+ flavor_model.integration
448
+ )
449
+ )
450
+
451
+ if integration_registry.is_installed(flavor_model.integration):
452
+ raise ImportError(
453
+ f"{e}\n\n"
454
+ f"Something went wrong while trying to import from the "
455
+ f"`{flavor_model.integration}` integration. Please make "
456
+ "sure that all its requirements are installed properly by "
457
+ "reinstalling the integration either through our CLI: "
458
+ f"`zenml integration install {flavor_model.integration} "
459
+ "-y` or by manually installing its requirements: "
460
+ f"`pip install {integration_requirements}`. If the error"
461
+ "persists, please contact the ZenML team."
462
+ ) from e
463
+ else:
464
+ raise ImportError(
465
+ f"{e}\n\n"
466
+ f"The `{flavor_model.integration}` integration that you "
467
+ "are trying to use is not installed in your current "
468
+ "environment. Please make sure that it is installed by "
469
+ "either using our CLI: `zenml integration install "
470
+ f"{flavor_model.integration}` or by manually installing "
471
+ f"its requirements: `pip install "
472
+ f"{integration_requirements}`"
473
+ ) from e
441
474
 
442
475
  @property
443
476
  def config(self) -> StackComponentConfig:
zenml/steps/base_step.py CHANGED
@@ -592,16 +592,34 @@ class BaseStep(metaclass=BaseStepMeta):
592
592
  from zenml.new.pipelines.pipeline import Pipeline
593
593
 
594
594
  if not Pipeline.ACTIVE_PIPELINE:
595
- # The step is being called outside the context of a pipeline, either
596
- # run the step function or run it as a single step pipeline on the
597
- # active stack
595
+ from zenml import constants, get_step_context
596
+
597
+ # If the environment variable was set to explicitly not run on the
598
+ # stack, we do that.
598
599
  run_without_stack = handle_bool_env_var(
599
600
  ENV_ZENML_RUN_SINGLE_STEPS_WITHOUT_STACK, default=False
600
601
  )
601
602
  if run_without_stack:
602
603
  return self.call_entrypoint(*args, **kwargs)
604
+
605
+ try:
606
+ get_step_context()
607
+ except RuntimeError:
608
+ pass
603
609
  else:
604
- return run_as_single_step_pipeline(self, *args, **kwargs)
610
+ # We're currently inside the execution of a different step
611
+ # -> We don't want to launch another single step pipeline here,
612
+ # but instead just call the step function
613
+ return self.call_entrypoint(*args, **kwargs)
614
+
615
+ if constants.SHOULD_PREVENT_PIPELINE_EXECUTION:
616
+ logger.info(
617
+ "Preventing execution of step '%s'.",
618
+ self.name,
619
+ )
620
+ return
621
+
622
+ return run_as_single_step_pipeline(self, *args, **kwargs)
605
623
 
606
624
  (
607
625
  input_artifacts,
@@ -328,6 +328,15 @@ class PipelineRunSchema(NamedSchema, table=True):
328
328
  )
329
329
  metadata = None
330
330
  if include_metadata:
331
+ is_templatable = False
332
+ if (
333
+ self.deployment
334
+ and self.deployment.build
335
+ and not self.deployment.build.is_local
336
+ and self.deployment.build.stack
337
+ ):
338
+ is_templatable = True
339
+
331
340
  steps = {step.name: step.to_model() for step in self.step_runs}
332
341
 
333
342
  metadata = PipelineRunResponseMetadata(
@@ -346,6 +355,7 @@ class PipelineRunSchema(NamedSchema, table=True):
346
355
  template_id=self.deployment.template_id
347
356
  if self.deployment
348
357
  else None,
358
+ is_templatable=is_templatable,
349
359
  )
350
360
 
351
361
  resources = None
@@ -177,6 +177,7 @@ class RunTemplateSchema(BaseSchema, table=True):
177
177
  if (
178
178
  self.source_deployment
179
179
  and self.source_deployment.build
180
+ and not self.source_deployment.build.is_local
180
181
  and self.source_deployment.build.stack
181
182
  ):
182
183
  runnable = True
@@ -974,6 +974,7 @@ class SqlZenStore(BaseZenStore):
974
974
  RuntimeError: if the schema does not have a `to_model` method.
975
975
  """
976
976
  query = filter_model.apply_filter(query=query, table=table)
977
+ query = query.distinct()
977
978
 
978
979
  # Get the total amount of items in the database for a given query
979
980
  custom_fetch_result: Optional[Sequence[Any]] = None
@@ -7218,6 +7219,8 @@ class SqlZenStore(BaseZenStore):
7218
7219
  )
7219
7220
 
7220
7221
  # ----------------------------- Stacks -----------------------------
7222
+
7223
+ @track_decorator(AnalyticsEvent.REGISTERED_STACK)
7221
7224
  def create_stack(self, stack: StackRequest) -> StackResponse:
7222
7225
  """Register a full stack.
7223
7226
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zenml-nightly
3
- Version: 0.66.0.dev20240910
3
+ Version: 0.66.0.dev20240918
4
4
  Summary: ZenML: Write production-ready ML code.
5
5
  Home-page: https://zenml.io
6
6
  License: Apache-2.0
@@ -6,7 +6,7 @@ RELEASE_NOTES.md,sha256=GjuHlUd-5AcepXC8ETMkIRMxKVQtBekiuY_CW0oP4XQ,365106
6
6
  ROADMAP.md,sha256=hiLSmr16BH8Dfx7SaQM4JcXCGCVl6mFZPFAwJeDTrJU,407
7
7
  SECURITY.md,sha256=9DepA8y03yvCZLHEfcXLTDH4lUyKHquAdukBsccNN7c,682
8
8
  zenml/README.md,sha256=827dekbOWAs1BpW7VF1a4d7EbwPbjwccX-2zdXBENZo,1777
9
- zenml/VERSION,sha256=IIehTiT1H_PJFlSTpiWfIJ2bnVYUB7OQ3S6LYuDUvKI,19
9
+ zenml/VERSION,sha256=EFLZgxc91tLiAqNwF0fItVSwNRCUEwoiosAP0HS1FJI,19
10
10
  zenml/__init__.py,sha256=X_JnjAYTBG2ZYgcM2_FDPssygdj7z7VTAmU9HEi17p0,2306
11
11
  zenml/actions/__init__.py,sha256=mrt6wPo73iKRxK754_NqsGyJ3buW7RnVeIGXr1xEw8Y,681
12
12
  zenml/actions/base_action.py,sha256=UcaHev6BTuLDwuswnyaPjdA8AgUqB5xPZ-lRtuvf2FU,25553
@@ -51,7 +51,7 @@ zenml/cli/pipeline.py,sha256=8UO3ZjKZbaU3tiRLBsN-N3kK_i_bD-8Qbq_YpR8mstw,17442
51
51
  zenml/cli/secret.py,sha256=2WxDYg6iodnAVSbVJQvQEYWEgcy0oytcSBVnnyN0JOw,20135
52
52
  zenml/cli/served_model.py,sha256=lIPd6kOS9kfWFOsd3DSILtiYomINpmXrdpyP5vtQlj8,14604
53
53
  zenml/cli/server.py,sha256=N2cvu9C_z8CzwGu3a7P6fE2X8Se_rHEx30iq9nYMy9o,28682
54
- zenml/cli/service_accounts.py,sha256=MO8pVVjppdvIULFxpvQKlhfEDmRqvlH8aIbPTdNSHXU,16489
54
+ zenml/cli/service_accounts.py,sha256=V6Oeomcs0tg-MIOUbYABqTcO4PsGCdM2WXJH576iqKM,17723
55
55
  zenml/cli/service_connectors.py,sha256=v6o-FpTEnDXYcQXczBELwfWPCcYBi9z7b1GC90Fvp30,74397
56
56
  zenml/cli/stack.py,sha256=vT-7Kac_Cf2g9XoIzwrxdQYgtkpuv_d-BpDvL-p9XUk,82862
57
57
  zenml/cli/stack_components.py,sha256=BxWsqeu5e2DtP5TMjzE98d8Lqfwe5o45TC2awjil5wY,74144
@@ -63,7 +63,7 @@ zenml/cli/utils.py,sha256=whFzoFBxlDlldLahW7YzZc8HWcb7vGk0Jr5O5VlGcLk,91136
63
63
  zenml/cli/version.py,sha256=nm1iSU_1V6-MUwpMKeXcwFhLYGUMLswvQL67cEuCpxA,3635
64
64
  zenml/cli/web_login.py,sha256=yqJ4VRcnyz-QhWIyR2wfGpSVo_3pe3vOcRRYdluJsgI,7647
65
65
  zenml/cli/workspace.py,sha256=bp02aXou574ToWPD8OAIB_cg3mvpE011H8aMKegT-nU,2970
66
- zenml/client.py,sha256=HrwvGhrcNicL8SLDADinx4dZAJ753c8SCm19Pl4W8A4,279610
66
+ zenml/client.py,sha256=IZw7AGeqI84zjIE3Bv8r31NvxQY7_0KmDGsPcoAH468,279758
67
67
  zenml/client_lazy_loader.py,sha256=O3PK5yB3dfqdKINfOs_LNsmnOVTvKsUl80r3JsvKldQ,6570
68
68
  zenml/code_repositories/__init__.py,sha256=W5bDfzAG8OXIKZSV1L-VHuzMcSCYa9qzTdPb3jqfyYw,920
69
69
  zenml/code_repositories/base_code_repository.py,sha256=_DbxIBxvJlN0PFhST0vlTIQ26Q6V3Nar0kYdeGaJrk8,4386
@@ -618,7 +618,7 @@ zenml/models/v2/core/model_version_pipeline_run.py,sha256=ghxCdCckYyzOwiJHhB0LU0
618
618
  zenml/models/v2/core/pipeline.py,sha256=ZaKZ-Y0bmB6mokckLRpMXgR-UMAIwsa9NSRrdKoq6_k,8368
619
619
  zenml/models/v2/core/pipeline_build.py,sha256=-Y-9V1pcHq-jI2VPEyT-Chw5hGQMljvbcDF8s2-wiko,14875
620
620
  zenml/models/v2/core/pipeline_deployment.py,sha256=J10yhxqzSPXqTQZZPIN1zhe-yrZ5cEVvilkXBRiZwjg,12451
621
- zenml/models/v2/core/pipeline_run.py,sha256=VqxC8rI1OXbpuimmkm-F4dpyHrzQGke-hq-f8bhGwy0,21137
621
+ zenml/models/v2/core/pipeline_run.py,sha256=qMwbqapkJFhBdLABtPZAjzrczmNOorNjTFdxkkpsuAE,23192
622
622
  zenml/models/v2/core/run_metadata.py,sha256=u7c3LtZikb6EY6uwhXuqSIcaOgb0jDfGU8tQt3Ccerk,7863
623
623
  zenml/models/v2/core/run_template.py,sha256=baa6q0z40n6sa5XgmTXxS2gJmpq-kFvu7jnXMjWu47g,11728
624
624
  zenml/models/v2/core/schedule.py,sha256=QE6_2KFmamGMClS7-sE43hyNBfkVnml6rDqvmRmyiB8,10215
@@ -692,7 +692,7 @@ zenml/secret/schemas/azure_secret_schema.py,sha256=3WP-DRgqoHJVsJit8fQcxjd1KYX2E
692
692
  zenml/secret/schemas/basic_auth_secret_schema.py,sha256=q-4dDtycHyWkIdZGd-qnIp4n8cxZO13qT7w_sTA4hWY,1021
693
693
  zenml/secret/schemas/gcp_secret_schema.py,sha256=tDSxPXlfh4BOSICZjfJjUukfzEyBEgxpQzk4y-OV1AE,1677
694
694
  zenml/service_connectors/__init__.py,sha256=gIBAVUPBZtdO6JtEBCixy9YG4wZRA1mnaxaGAxi3T1Q,645
695
- zenml/service_connectors/docker_service_connector.py,sha256=vplyZNUxZhAyzXRdtAiSGMFZT87h9Wq8izE0HWh7OSQ,12441
695
+ zenml/service_connectors/docker_service_connector.py,sha256=_6WPqYCcSUf8JPakipbkJRvaN2ghhY7zCr38WCHG0SI,13218
696
696
  zenml/service_connectors/service_connector.py,sha256=HW8dTE826ZSD1vWQlqQRm8XYq08v7tDZQ8ORnJ5rTcE,55351
697
697
  zenml/service_connectors/service_connector_registry.py,sha256=lP0s0k7RIp9WZEW36Q0ygHD5urzF-wUwh41rbXWS5ss,9186
698
698
  zenml/service_connectors/service_connector_utils.py,sha256=h3wfVSPO0sQnARVRnih3l8P7LwkCmAgijThuHp2Z53E,18026
@@ -716,8 +716,8 @@ zenml/stack/__init__.py,sha256=vfHzaoRhPtS-XSlM8Vx1noJZDHF1Pj6LDz2knpn_QBg,1236
716
716
  zenml/stack/authentication_mixin.py,sha256=sg7GkpB-Ao9Gsa7Po0jxMn-_mVYUB42etmspZ6dk8cI,3982
717
717
  zenml/stack/flavor.py,sha256=rut-jFQFB6OGm25RRyMtYlJ3mm_6wrHYVI54Hmf9te4,9726
718
718
  zenml/stack/flavor_registry.py,sha256=IL0fRrxxQJ9YkCYCeADP7nwWEQo4XBElJY4owMjKGbQ,6108
719
- zenml/stack/stack.py,sha256=5pgR30_Xgj4Qi09zKYyleuaWwMhe0zvi4k7yF1r8_BM,38021
720
- zenml/stack/stack_component.py,sha256=DpWsgaqvPv9bJhACdMklL-Mjo453TjzQL4JVMzI3PQU,29887
719
+ zenml/stack/stack.py,sha256=JIRSNX1fRCubXGPCg-qjeVtlT9fDeAX-xiToDa9CeVk,37235
720
+ zenml/stack/stack_component.py,sha256=9sgAu2EGZ2yiEn_D0dq_kmytFmlt8spJ3iG0GlHIFVU,31634
721
721
  zenml/stack/stack_validator.py,sha256=hWbvvGIeWLj6NwSsF4GCc6RAxAWvxHXTcBZL9nJvcak,3111
722
722
  zenml/stack/utils.py,sha256=dcJsbLZf-hJYM9Ut8BfNzrWygmz6shHegqHPRVLoLWE,5840
723
723
  zenml/stack_deployments/__init__.py,sha256=-7593cQ_ZgRn774Ol-8AKXXQquIU4DSiaThVEr6TfWM,644
@@ -731,7 +731,7 @@ zenml/step_operators/base_step_operator.py,sha256=ZRnY6lcEHY8xZskrKKdPhgKg2BlEoh
731
731
  zenml/step_operators/step_operator_entrypoint_configuration.py,sha256=vG0Z9D2C72PYOZ_P3eXYTmm2TvL-dS_kHhSMq-coAKE,3690
732
732
  zenml/steps/__init__.py,sha256=IvxepI3tYp6LiVHFJnet9xZ7yFlH6NHCAI69SvQsfaI,1682
733
733
  zenml/steps/base_parameters.py,sha256=rKnALd0lMv0jOX8E9TwHJkeP3H-ijEFXY0T5dMCu9EQ,756
734
- zenml/steps/base_step.py,sha256=RsSIETBgBYk3phwTzN407iJy-Lp8Mtdzni8zNP4g7Sg,51852
734
+ zenml/steps/base_step.py,sha256=sQbGnPt_1-upcYAGPqqKW0xrULNZZc9NR_7fu2y5qQk,52434
735
735
  zenml/steps/entrypoint_function_utils.py,sha256=25LxlZ8E-3YoWEdAUFK4UZ04hbp4GNMqpKwD2O-Rp_0,12484
736
736
  zenml/steps/external_artifact.py,sha256=63ngwlSJvR8GoM93ttz1Mp6BuAg7xH-QZAsBvW3M80Q,1109
737
737
  zenml/steps/step_decorator.py,sha256=_rV5MGMziqNiOoxupZUy055o-a0b8Y4RtLuB6nLyYyg,8188
@@ -1370,10 +1370,10 @@ zenml/zen_stores/schemas/logs_schemas.py,sha256=qv6fs3JiVgzlmTXJqb_gG5NsU5q_50e0
1370
1370
  zenml/zen_stores/schemas/model_schemas.py,sha256=wLf1SeJPPzyq7Bm7oTTBdVHfZbOAWw027aKn_TJZ_JI,25559
1371
1371
  zenml/zen_stores/schemas/pipeline_build_schemas.py,sha256=QK3sVPYhumUx_x-H3YZ-RfnsxGhKfkMGdP5FC9WrQgU,5718
1372
1372
  zenml/zen_stores/schemas/pipeline_deployment_schemas.py,sha256=ihJswWXvaXilyNS8RnOfnZM1Yi1B9t7PN8t7f1vOoho,10177
1373
- zenml/zen_stores/schemas/pipeline_run_schemas.py,sha256=LbGX3Srz-zbhnCY4th9SVSlNoF3e5ss9WP4E1p5ODWw,15300
1373
+ zenml/zen_stores/schemas/pipeline_run_schemas.py,sha256=PP_r3HI9oWwV0v0lewUyf7LUUZiXlZ1FR53Y2NrWbFQ,15630
1374
1374
  zenml/zen_stores/schemas/pipeline_schemas.py,sha256=HjQfuH3WDpkf_gXPv5ExN6lMrzf82mHXttTqzdSitc0,5863
1375
1375
  zenml/zen_stores/schemas/run_metadata_schemas.py,sha256=pWu-WO0PCITPY5gcIB1uqGBWDT51J7LDzMrOLtNkAGg,6033
1376
- zenml/zen_stores/schemas/run_template_schemas.py,sha256=cT90S8gRYkijrMLqBK6WgpQC1c6LbBnOtMpAgAxhwrg,8768
1376
+ zenml/zen_stores/schemas/run_template_schemas.py,sha256=4uE7lHkIQROJRNpNdvATwEJMkeij6pXnHvOsT3q3VrI,8826
1377
1377
  zenml/zen_stores/schemas/schedule_schema.py,sha256=w3tAHt2mEQ7ILPz4ogRdLV4KivB7E2LtIZWkzXLzAIU,7354
1378
1378
  zenml/zen_stores/schemas/schema_utils.py,sha256=2qPNPfasnTmCW1RPeViXoTAp6oO-uRnUpEZ_rugcoNw,2612
1379
1379
  zenml/zen_stores/schemas/secret_schemas.py,sha256=nRzFkgR940BbS1nlBs4H3YuvFCiGGYZ1vQIsu3Y0Mvk,9884
@@ -1396,11 +1396,11 @@ zenml/zen_stores/secrets_stores/hashicorp_secrets_store.py,sha256=NfW1EHIA99lseb
1396
1396
  zenml/zen_stores/secrets_stores/secrets_store_interface.py,sha256=Q2Jbnt2Pp7NGlR-u1YBfRZV2g8su2Fd0ArBMdksAE-Q,2819
1397
1397
  zenml/zen_stores/secrets_stores/service_connector_secrets_store.py,sha256=kPYX-Z_OOhZCI1CP77ncfV7IsV4e8brklnTXmKxZYNc,7078
1398
1398
  zenml/zen_stores/secrets_stores/sql_secrets_store.py,sha256=Bq1djrUP9saoD7vECjS7-TlA_7sjJGgw1talri4spjU,8656
1399
- zenml/zen_stores/sql_zen_store.py,sha256=4z458K5ItHkAO0bEUAl6rWJDHKh6GS-sRrt2RPridnE,392435
1399
+ zenml/zen_stores/sql_zen_store.py,sha256=Sfw5nql38ZGfPbdIUNLMYsVrfMP1faRGMj0f1r1IYnk,392523
1400
1400
  zenml/zen_stores/template_utils.py,sha256=UB_CBoMIfBequa8g3H7aTI6V_ke1SJr4IW1qwFCL1jc,8932
1401
1401
  zenml/zen_stores/zen_store_interface.py,sha256=kzR_i8vHjULld3MquSaMorcab8lJk1e9RZquw1VXjHY,93510
1402
- zenml_nightly-0.66.0.dev20240910.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
1403
- zenml_nightly-0.66.0.dev20240910.dist-info/METADATA,sha256=HXKwlZMRzcjTm7ssSRK6JClUhT80eOXfXTf9BmBvR-s,20961
1404
- zenml_nightly-0.66.0.dev20240910.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1405
- zenml_nightly-0.66.0.dev20240910.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
1406
- zenml_nightly-0.66.0.dev20240910.dist-info/RECORD,,
1402
+ zenml_nightly-0.66.0.dev20240918.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
1403
+ zenml_nightly-0.66.0.dev20240918.dist-info/METADATA,sha256=UP3HTafnsWOeUXj64GD8CVeQeTeZGh6ekWMfQGT9whw,20961
1404
+ zenml_nightly-0.66.0.dev20240918.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1405
+ zenml_nightly-0.66.0.dev20240918.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
1406
+ zenml_nightly-0.66.0.dev20240918.dist-info/RECORD,,