zenml-nightly 0.73.0.dev20250127__py3-none-any.whl → 0.73.0.dev20250128__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/cli/code_repository.py +69 -1
- zenml/client.py +50 -18
- zenml/config/schedule.py +47 -10
- zenml/entrypoints/base_entrypoint_configuration.py +5 -3
- zenml/integrations/github/code_repositories/github_code_repository.py +20 -8
- zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +9 -3
- zenml/models/v2/core/schedule.py +42 -21
- zenml/pipelines/build_utils.py +43 -7
- zenml/pipelines/pipeline_definition.py +2 -1
- zenml/utils/code_repository_utils.py +9 -2
- zenml/utils/deprecation_utils.py +4 -2
- zenml/utils/pipeline_docker_image_builder.py +0 -3
- zenml/zen_stores/schemas/code_repository_schemas.py +3 -0
- {zenml_nightly-0.73.0.dev20250127.dist-info → zenml_nightly-0.73.0.dev20250128.dist-info}/METADATA +1 -1
- {zenml_nightly-0.73.0.dev20250127.dist-info → zenml_nightly-0.73.0.dev20250128.dist-info}/RECORD +19 -19
- {zenml_nightly-0.73.0.dev20250127.dist-info → zenml_nightly-0.73.0.dev20250128.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.73.0.dev20250127.dist-info → zenml_nightly-0.73.0.dev20250128.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.73.0.dev20250127.dist-info → zenml_nightly-0.73.0.dev20250128.dist-info}/entry_points.txt +0 -0
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.73.0.
|
1
|
+
0.73.0.dev20250128
|
zenml/cli/code_repository.py
CHANGED
@@ -42,7 +42,7 @@ def code_repository() -> None:
|
|
42
42
|
context_settings={"ignore_unknown_options": True},
|
43
43
|
help="Register a code repository.",
|
44
44
|
)
|
45
|
-
@click.argument("name", type=
|
45
|
+
@click.argument("name", type=str)
|
46
46
|
@click.option(
|
47
47
|
"--type",
|
48
48
|
"-t",
|
@@ -183,6 +183,74 @@ def list_code_repositories(**kwargs: Any) -> None:
|
|
183
183
|
)
|
184
184
|
|
185
185
|
|
186
|
+
@code_repository.command(
|
187
|
+
"update",
|
188
|
+
help="Update a code repository.",
|
189
|
+
context_settings={"ignore_unknown_options": True},
|
190
|
+
)
|
191
|
+
@click.argument("name_or_id", type=str, required=True)
|
192
|
+
@click.option(
|
193
|
+
"--name",
|
194
|
+
"-n",
|
195
|
+
type=str,
|
196
|
+
required=False,
|
197
|
+
help="The new code repository name.",
|
198
|
+
)
|
199
|
+
@click.option(
|
200
|
+
"--description",
|
201
|
+
"-d",
|
202
|
+
type=str,
|
203
|
+
required=False,
|
204
|
+
help="The new code repository description.",
|
205
|
+
)
|
206
|
+
@click.option(
|
207
|
+
"--logo-url",
|
208
|
+
"-l",
|
209
|
+
type=str,
|
210
|
+
required=False,
|
211
|
+
help="New URL of a logo (png, jpg or svg) for the code repository.",
|
212
|
+
)
|
213
|
+
@click.argument(
|
214
|
+
"args",
|
215
|
+
nargs=-1,
|
216
|
+
type=click.UNPROCESSED,
|
217
|
+
)
|
218
|
+
def update_code_repository(
|
219
|
+
name_or_id: str,
|
220
|
+
name: Optional[str],
|
221
|
+
description: Optional[str],
|
222
|
+
logo_url: Optional[str],
|
223
|
+
args: List[str],
|
224
|
+
) -> None:
|
225
|
+
"""Update a code repository.
|
226
|
+
|
227
|
+
Args:
|
228
|
+
name_or_id: Name or ID of the code repository to update.
|
229
|
+
name: New name of the code repository.
|
230
|
+
description: New description of the code repository.
|
231
|
+
logo_url: New logo URL of the code repository.
|
232
|
+
args: Code repository configurations.
|
233
|
+
"""
|
234
|
+
parsed_name_or_id, parsed_args = cli_utils.parse_name_and_extra_arguments(
|
235
|
+
list(args) + [name_or_id], expand_args=True, name_mandatory=True
|
236
|
+
)
|
237
|
+
assert parsed_name_or_id
|
238
|
+
|
239
|
+
with console.status(
|
240
|
+
f"Updating code repository '{parsed_name_or_id}'...\n"
|
241
|
+
):
|
242
|
+
Client().update_code_repository(
|
243
|
+
name_id_or_prefix=parsed_name_or_id,
|
244
|
+
name=name,
|
245
|
+
description=description,
|
246
|
+
logo_url=logo_url,
|
247
|
+
config=parsed_args,
|
248
|
+
)
|
249
|
+
cli_utils.declare(
|
250
|
+
f"Successfully updated code repository `{parsed_name_or_id}`."
|
251
|
+
)
|
252
|
+
|
253
|
+
|
186
254
|
@code_repository.command("delete")
|
187
255
|
@click.argument("name_or_id", type=str, required=True)
|
188
256
|
@click.option(
|
zenml/client.py
CHANGED
@@ -4952,25 +4952,15 @@ class Client(metaclass=ClientMetaClass):
|
|
4952
4952
|
|
4953
4953
|
# --------------------------- Code repositories ---------------------------
|
4954
4954
|
|
4955
|
-
|
4956
|
-
|
4957
|
-
|
4958
|
-
|
4959
|
-
|
4960
|
-
description: Optional[str] = None,
|
4961
|
-
logo_url: Optional[str] = None,
|
4962
|
-
) -> CodeRepositoryResponse:
|
4963
|
-
"""Create a new code repository.
|
4955
|
+
@staticmethod
|
4956
|
+
def _validate_code_repository_config(
|
4957
|
+
source: Source, config: Dict[str, Any]
|
4958
|
+
) -> None:
|
4959
|
+
"""Validate a code repository config.
|
4964
4960
|
|
4965
4961
|
Args:
|
4966
|
-
|
4967
|
-
config: The
|
4968
|
-
source: The code repository implementation source.
|
4969
|
-
description: The code repository description.
|
4970
|
-
logo_url: URL of a logo (png, jpg or svg) for the code repository.
|
4971
|
-
|
4972
|
-
Returns:
|
4973
|
-
The created code repository.
|
4962
|
+
source: The code repository source.
|
4963
|
+
config: The code repository config.
|
4974
4964
|
|
4975
4965
|
Raises:
|
4976
4966
|
RuntimeError: If the provided config is invalid.
|
@@ -4983,13 +4973,38 @@ class Client(metaclass=ClientMetaClass):
|
|
4983
4973
|
)
|
4984
4974
|
)
|
4985
4975
|
try:
|
4986
|
-
#
|
4976
|
+
# This does a login to verify the credentials
|
4987
4977
|
code_repo_class(id=uuid4(), config=config)
|
4978
|
+
|
4979
|
+
# Explicitly access the config for pydantic validation, in case
|
4980
|
+
# the login for some reason did not do that.
|
4981
|
+
_ = code_repo_class.config
|
4988
4982
|
except Exception as e:
|
4989
4983
|
raise RuntimeError(
|
4990
4984
|
"Failed to validate code repository config."
|
4991
4985
|
) from e
|
4992
4986
|
|
4987
|
+
def create_code_repository(
|
4988
|
+
self,
|
4989
|
+
name: str,
|
4990
|
+
config: Dict[str, Any],
|
4991
|
+
source: Source,
|
4992
|
+
description: Optional[str] = None,
|
4993
|
+
logo_url: Optional[str] = None,
|
4994
|
+
) -> CodeRepositoryResponse:
|
4995
|
+
"""Create a new code repository.
|
4996
|
+
|
4997
|
+
Args:
|
4998
|
+
name: Name of the code repository.
|
4999
|
+
config: The configuration for the code repository.
|
5000
|
+
source: The code repository implementation source.
|
5001
|
+
description: The code repository description.
|
5002
|
+
logo_url: URL of a logo (png, jpg or svg) for the code repository.
|
5003
|
+
|
5004
|
+
Returns:
|
5005
|
+
The created code repository.
|
5006
|
+
"""
|
5007
|
+
self._validate_code_repository_config(source=source, config=config)
|
4993
5008
|
repo_request = CodeRepositoryRequest(
|
4994
5009
|
user=self.active_user.id,
|
4995
5010
|
workspace=self.active_workspace.id,
|
@@ -5088,6 +5103,7 @@ class Client(metaclass=ClientMetaClass):
|
|
5088
5103
|
name: Optional[str] = None,
|
5089
5104
|
description: Optional[str] = None,
|
5090
5105
|
logo_url: Optional[str] = None,
|
5106
|
+
config: Optional[Dict[str, Any]] = None,
|
5091
5107
|
) -> CodeRepositoryResponse:
|
5092
5108
|
"""Update a code repository.
|
5093
5109
|
|
@@ -5097,6 +5113,10 @@ class Client(metaclass=ClientMetaClass):
|
|
5097
5113
|
name: New name of the code repository.
|
5098
5114
|
description: New description of the code repository.
|
5099
5115
|
logo_url: New logo URL of the code repository.
|
5116
|
+
config: New configuration options for the code repository. Will
|
5117
|
+
be used to update the existing configuration values. To remove
|
5118
|
+
values from the existing configuration, set the value for that
|
5119
|
+
key to `None`.
|
5100
5120
|
|
5101
5121
|
Returns:
|
5102
5122
|
The updated code repository.
|
@@ -5107,6 +5127,18 @@ class Client(metaclass=ClientMetaClass):
|
|
5107
5127
|
update = CodeRepositoryUpdate(
|
5108
5128
|
name=name, description=description, logo_url=logo_url
|
5109
5129
|
)
|
5130
|
+
if config is not None:
|
5131
|
+
combined_config = repo.config
|
5132
|
+
combined_config.update(config)
|
5133
|
+
combined_config = {
|
5134
|
+
k: v for k, v in combined_config.items() if v is not None
|
5135
|
+
}
|
5136
|
+
|
5137
|
+
self._validate_code_repository_config(
|
5138
|
+
source=repo.source, config=combined_config
|
5139
|
+
)
|
5140
|
+
update.config = combined_config
|
5141
|
+
|
5110
5142
|
return self.zen_store.update_code_repository(
|
5111
5143
|
code_repository_id=repo.id, update=update
|
5112
5144
|
)
|
zenml/config/schedule.py
CHANGED
@@ -13,10 +13,15 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Class for defining a pipeline schedule."""
|
15
15
|
|
16
|
-
import datetime
|
16
|
+
from datetime import datetime, timedelta
|
17
17
|
from typing import Optional
|
18
18
|
|
19
|
-
from pydantic import
|
19
|
+
from pydantic import (
|
20
|
+
BaseModel,
|
21
|
+
ValidationInfo,
|
22
|
+
field_validator,
|
23
|
+
model_validator,
|
24
|
+
)
|
20
25
|
|
21
26
|
from zenml.logger import get_logger
|
22
27
|
|
@@ -32,8 +37,12 @@ class Schedule(BaseModel):
|
|
32
37
|
and time.
|
33
38
|
cron_expression: Cron expression for the pipeline schedule. If a value
|
34
39
|
for this is set it takes precedence over the start time + interval.
|
35
|
-
start_time:
|
36
|
-
|
40
|
+
start_time: When the schedule should start. If this is a datetime object
|
41
|
+
without any timezone, it is treated as a datetime in the local
|
42
|
+
timezone.
|
43
|
+
end_time: When the schedule should end. If this is a datetime object
|
44
|
+
without any timezone, it is treated as a datetime in the local
|
45
|
+
timezone.
|
37
46
|
interval_second: datetime timedelta indicating the seconds between two
|
38
47
|
recurring runs for a periodic schedule.
|
39
48
|
catchup: Whether the recurring run should catch up if behind schedule.
|
@@ -43,17 +52,45 @@ class Schedule(BaseModel):
|
|
43
52
|
schedules the latest interval if more than one interval is ready to
|
44
53
|
be scheduled. Usually, if your pipeline handles backfill
|
45
54
|
internally, you should turn catchup off to avoid duplicate backfill.
|
46
|
-
run_once_start_time:
|
47
|
-
|
55
|
+
run_once_start_time: When to run the pipeline once. If this is a
|
56
|
+
datetime object without any timezone, it is treated as a datetime
|
57
|
+
in the local timezone.
|
48
58
|
"""
|
49
59
|
|
50
60
|
name: Optional[str] = None
|
51
61
|
cron_expression: Optional[str] = None
|
52
|
-
start_time: Optional[datetime
|
53
|
-
end_time: Optional[datetime
|
54
|
-
interval_second: Optional[
|
62
|
+
start_time: Optional[datetime] = None
|
63
|
+
end_time: Optional[datetime] = None
|
64
|
+
interval_second: Optional[timedelta] = None
|
55
65
|
catchup: bool = False
|
56
|
-
run_once_start_time: Optional[datetime
|
66
|
+
run_once_start_time: Optional[datetime] = None
|
67
|
+
|
68
|
+
@field_validator(
|
69
|
+
"start_time", "end_time", "run_once_start_time", mode="after"
|
70
|
+
)
|
71
|
+
@classmethod
|
72
|
+
def _ensure_timezone(
|
73
|
+
cls, value: Optional[datetime], info: ValidationInfo
|
74
|
+
) -> Optional[datetime]:
|
75
|
+
"""Ensures that all datetimes are timezone aware.
|
76
|
+
|
77
|
+
Args:
|
78
|
+
value: The datetime.
|
79
|
+
info: The validation info.
|
80
|
+
|
81
|
+
Returns:
|
82
|
+
A timezone aware datetime or None.
|
83
|
+
"""
|
84
|
+
if value and value.tzinfo is None:
|
85
|
+
assert info.field_name
|
86
|
+
logger.warning(
|
87
|
+
"Your schedule `%s` is missing a timezone. It will be treated "
|
88
|
+
"as a datetime in your local timezone.",
|
89
|
+
info.field_name,
|
90
|
+
)
|
91
|
+
value = value.astimezone()
|
92
|
+
|
93
|
+
return value
|
57
94
|
|
58
95
|
@model_validator(mode="after")
|
59
96
|
def _ensure_cron_or_periodic_schedule_configured(self) -> "Schedule":
|
@@ -214,12 +214,14 @@ class BaseEntrypointConfiguration(ABC):
|
|
214
214
|
if not should_download_code:
|
215
215
|
return
|
216
216
|
|
217
|
-
if
|
217
|
+
if code_path := deployment.code_path:
|
218
|
+
code_utils.download_code_from_artifact_store(code_path=code_path)
|
219
|
+
elif code_reference := deployment.code_reference:
|
220
|
+
# TODO: This might fail if the code repository had unpushed changes
|
221
|
+
# at the time the pipeline run was started.
|
218
222
|
self.download_code_from_code_repository(
|
219
223
|
code_reference=code_reference
|
220
224
|
)
|
221
|
-
elif code_path := deployment.code_path:
|
222
|
-
code_utils.download_code_from_artifact_store(code_path=code_path)
|
223
225
|
else:
|
224
226
|
raise RuntimeError(
|
225
227
|
"Code download required but no code reference or path provided."
|
@@ -18,7 +18,7 @@ import re
|
|
18
18
|
from typing import List, Optional
|
19
19
|
|
20
20
|
import requests
|
21
|
-
from github import Github, GithubException
|
21
|
+
from github import Consts, Github, GithubException
|
22
22
|
from github.Repository import Repository
|
23
23
|
|
24
24
|
from zenml.code_repositories import (
|
@@ -30,6 +30,7 @@ from zenml.code_repositories.base_code_repository import (
|
|
30
30
|
)
|
31
31
|
from zenml.code_repositories.git import LocalGitRepositoryContext
|
32
32
|
from zenml.logger import get_logger
|
33
|
+
from zenml.utils import deprecation_utils
|
33
34
|
from zenml.utils.secret_utils import SecretField
|
34
35
|
|
35
36
|
logger = get_logger(__name__)
|
@@ -39,19 +40,24 @@ class GitHubCodeRepositoryConfig(BaseCodeRepositoryConfig):
|
|
39
40
|
"""Config for GitHub code repositories.
|
40
41
|
|
41
42
|
Args:
|
42
|
-
|
43
|
+
api_url: The GitHub API URL.
|
43
44
|
owner: The owner of the repository.
|
44
45
|
repository: The name of the repository.
|
45
46
|
host: The host of the repository.
|
46
47
|
token: The token to access the repository.
|
47
48
|
"""
|
48
49
|
|
49
|
-
|
50
|
+
api_url: Optional[str] = None
|
50
51
|
owner: str
|
51
52
|
repository: str
|
52
53
|
host: Optional[str] = "github.com"
|
53
54
|
token: Optional[str] = SecretField(default=None)
|
54
55
|
|
56
|
+
url: Optional[str] = None
|
57
|
+
_deprecation_validator = deprecation_utils.deprecate_pydantic_attributes(
|
58
|
+
("url", "api_url")
|
59
|
+
)
|
60
|
+
|
55
61
|
|
56
62
|
class GitHubCodeRepository(BaseCodeRepository):
|
57
63
|
"""GitHub code repository."""
|
@@ -95,7 +101,7 @@ class GitHubCodeRepository(BaseCodeRepository):
|
|
95
101
|
Raises:
|
96
102
|
RuntimeError: If the repository is not public.
|
97
103
|
"""
|
98
|
-
url = f"
|
104
|
+
url = f"{Consts.DEFAULT_BASE_URL}/repos/{owner}/{repo}"
|
99
105
|
response = requests.get(url, timeout=7)
|
100
106
|
|
101
107
|
try:
|
@@ -103,12 +109,15 @@ class GitHubCodeRepository(BaseCodeRepository):
|
|
103
109
|
pass
|
104
110
|
else:
|
105
111
|
raise RuntimeError(
|
106
|
-
"It is not possible to access this repository as it does
|
107
|
-
"
|
112
|
+
"It is not possible to access this repository as it does "
|
113
|
+
"not appear to be public. Access to private repositories "
|
114
|
+
"is only possible when a token is provided. Please provide "
|
115
|
+
"a token and try again"
|
108
116
|
)
|
109
117
|
except Exception as e:
|
110
118
|
raise RuntimeError(
|
111
|
-
|
119
|
+
"An error occurred while checking if repository is public: "
|
120
|
+
f"{str(e)}"
|
112
121
|
)
|
113
122
|
|
114
123
|
def login(
|
@@ -120,7 +129,10 @@ class GitHubCodeRepository(BaseCodeRepository):
|
|
120
129
|
RuntimeError: If the login fails.
|
121
130
|
"""
|
122
131
|
try:
|
123
|
-
self._github_session = Github(
|
132
|
+
self._github_session = Github(
|
133
|
+
login_or_token=self.config.token,
|
134
|
+
base_url=self.config.api_url or Consts.DEFAULT_BASE_URL,
|
135
|
+
)
|
124
136
|
if self.config.token:
|
125
137
|
user = self._github_session.get_user().login
|
126
138
|
logger.debug(f"Logged in as {user}")
|
@@ -31,6 +31,7 @@ from zenml.code_repositories.git.local_git_repository_context import (
|
|
31
31
|
LocalGitRepositoryContext,
|
32
32
|
)
|
33
33
|
from zenml.logger import get_logger
|
34
|
+
from zenml.utils import deprecation_utils
|
34
35
|
from zenml.utils.secret_utils import SecretField
|
35
36
|
|
36
37
|
logger = get_logger(__name__)
|
@@ -40,19 +41,24 @@ class GitLabCodeRepositoryConfig(BaseCodeRepositoryConfig):
|
|
40
41
|
"""Config for GitLab code repositories.
|
41
42
|
|
42
43
|
Args:
|
43
|
-
|
44
|
+
instance_url: The URL of the GitLab instance.
|
44
45
|
group: The group of the project.
|
45
46
|
project: The name of the GitLab project.
|
46
47
|
host: The host of GitLab in case it is self-hosted instance.
|
47
48
|
token: The token to access the repository.
|
48
49
|
"""
|
49
50
|
|
50
|
-
|
51
|
+
instance_url: Optional[str] = None
|
51
52
|
group: str
|
52
53
|
project: str
|
53
54
|
host: Optional[str] = "gitlab.com"
|
54
55
|
token: str = SecretField()
|
55
56
|
|
57
|
+
url: Optional[str] = None
|
58
|
+
_deprecation_validator = deprecation_utils.deprecate_pydantic_attributes(
|
59
|
+
("url", "instance_url")
|
60
|
+
)
|
61
|
+
|
56
62
|
|
57
63
|
class GitLabCodeRepository(BaseCodeRepository):
|
58
64
|
"""GitLab code repository."""
|
@@ -85,7 +91,7 @@ class GitLabCodeRepository(BaseCodeRepository):
|
|
85
91
|
"""
|
86
92
|
try:
|
87
93
|
self._gitlab_session = Gitlab(
|
88
|
-
self.config.
|
94
|
+
url=self.config.instance_url, private_token=self.config.token
|
89
95
|
)
|
90
96
|
self._gitlab_session.auth()
|
91
97
|
user = self._gitlab_session.user or None
|
zenml/models/v2/core/schedule.py
CHANGED
@@ -13,11 +13,11 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Models representing schedules."""
|
15
15
|
|
16
|
-
import datetime
|
16
|
+
from datetime import datetime, timedelta, timezone
|
17
17
|
from typing import Dict, Optional, Union
|
18
18
|
from uuid import UUID
|
19
19
|
|
20
|
-
from pydantic import Field, model_validator
|
20
|
+
from pydantic import Field, field_validator, model_validator
|
21
21
|
|
22
22
|
from zenml.constants import STR_FIELD_MAX_LENGTH
|
23
23
|
from zenml.logger import get_logger
|
@@ -46,15 +46,36 @@ class ScheduleRequest(WorkspaceScopedRequest):
|
|
46
46
|
active: bool
|
47
47
|
|
48
48
|
cron_expression: Optional[str] = None
|
49
|
-
start_time: Optional[datetime
|
50
|
-
end_time: Optional[datetime
|
51
|
-
interval_second: Optional[
|
49
|
+
start_time: Optional[datetime] = None
|
50
|
+
end_time: Optional[datetime] = None
|
51
|
+
interval_second: Optional[timedelta] = None
|
52
52
|
catchup: bool = False
|
53
|
-
run_once_start_time: Optional[datetime
|
53
|
+
run_once_start_time: Optional[datetime] = None
|
54
54
|
|
55
55
|
orchestrator_id: Optional[UUID]
|
56
56
|
pipeline_id: Optional[UUID]
|
57
57
|
|
58
|
+
@field_validator(
|
59
|
+
"start_time", "end_time", "run_once_start_time", mode="after"
|
60
|
+
)
|
61
|
+
@classmethod
|
62
|
+
def _ensure_tzunaware_utc(
|
63
|
+
cls, value: Optional[datetime]
|
64
|
+
) -> Optional[datetime]:
|
65
|
+
"""Ensures that all datetimes are timezone unaware and in UTC time.
|
66
|
+
|
67
|
+
Args:
|
68
|
+
value: The datetime.
|
69
|
+
|
70
|
+
Returns:
|
71
|
+
The datetime in UTC time without timezone.
|
72
|
+
"""
|
73
|
+
if value and value.tzinfo:
|
74
|
+
value = value.astimezone(timezone.utc)
|
75
|
+
value = value.replace(tzinfo=None)
|
76
|
+
|
77
|
+
return value
|
78
|
+
|
58
79
|
@model_validator(mode="after")
|
59
80
|
def _ensure_cron_or_periodic_schedule_configured(
|
60
81
|
self,
|
@@ -108,11 +129,11 @@ class ScheduleUpdate(BaseUpdate):
|
|
108
129
|
name: Optional[str] = None
|
109
130
|
active: Optional[bool] = None
|
110
131
|
cron_expression: Optional[str] = None
|
111
|
-
start_time: Optional[datetime
|
112
|
-
end_time: Optional[datetime
|
113
|
-
interval_second: Optional[
|
132
|
+
start_time: Optional[datetime] = None
|
133
|
+
end_time: Optional[datetime] = None
|
134
|
+
interval_second: Optional[timedelta] = None
|
114
135
|
catchup: Optional[bool] = None
|
115
|
-
run_once_start_time: Optional[datetime
|
136
|
+
run_once_start_time: Optional[datetime] = None
|
116
137
|
orchestrator_id: Optional[UUID] = None
|
117
138
|
pipeline_id: Optional[UUID] = None
|
118
139
|
|
@@ -125,11 +146,11 @@ class ScheduleResponseBody(WorkspaceScopedResponseBody):
|
|
125
146
|
|
126
147
|
active: bool
|
127
148
|
cron_expression: Optional[str] = None
|
128
|
-
start_time: Optional[datetime
|
129
|
-
end_time: Optional[datetime
|
130
|
-
interval_second: Optional[
|
149
|
+
start_time: Optional[datetime] = None
|
150
|
+
end_time: Optional[datetime] = None
|
151
|
+
interval_second: Optional[timedelta] = None
|
131
152
|
catchup: bool = False
|
132
|
-
run_once_start_time: Optional[datetime
|
153
|
+
run_once_start_time: Optional[datetime] = None
|
133
154
|
|
134
155
|
|
135
156
|
class ScheduleResponseMetadata(WorkspaceScopedResponseMetadata):
|
@@ -217,7 +238,7 @@ class ScheduleResponse(
|
|
217
238
|
return self.get_body().cron_expression
|
218
239
|
|
219
240
|
@property
|
220
|
-
def start_time(self) -> Optional[datetime
|
241
|
+
def start_time(self) -> Optional[datetime]:
|
221
242
|
"""The `start_time` property.
|
222
243
|
|
223
244
|
Returns:
|
@@ -226,7 +247,7 @@ class ScheduleResponse(
|
|
226
247
|
return self.get_body().start_time
|
227
248
|
|
228
249
|
@property
|
229
|
-
def end_time(self) -> Optional[datetime
|
250
|
+
def end_time(self) -> Optional[datetime]:
|
230
251
|
"""The `end_time` property.
|
231
252
|
|
232
253
|
Returns:
|
@@ -235,7 +256,7 @@ class ScheduleResponse(
|
|
235
256
|
return self.get_body().end_time
|
236
257
|
|
237
258
|
@property
|
238
|
-
def run_once_start_time(self) -> Optional[datetime
|
259
|
+
def run_once_start_time(self) -> Optional[datetime]:
|
239
260
|
"""The `run_once_start_time` property.
|
240
261
|
|
241
262
|
Returns:
|
@@ -244,7 +265,7 @@ class ScheduleResponse(
|
|
244
265
|
return self.get_body().run_once_start_time
|
245
266
|
|
246
267
|
@property
|
247
|
-
def interval_second(self) -> Optional[
|
268
|
+
def interval_second(self) -> Optional[timedelta]:
|
248
269
|
"""The `interval_second` property.
|
249
270
|
|
250
271
|
Returns:
|
@@ -313,10 +334,10 @@ class ScheduleFilter(WorkspaceScopedFilter):
|
|
313
334
|
default=None,
|
314
335
|
description="The cron expression, describing the schedule",
|
315
336
|
)
|
316
|
-
start_time: Optional[Union[datetime
|
337
|
+
start_time: Optional[Union[datetime, str]] = Field(
|
317
338
|
default=None, description="Start time", union_mode="left_to_right"
|
318
339
|
)
|
319
|
-
end_time: Optional[Union[datetime
|
340
|
+
end_time: Optional[Union[datetime, str]] = Field(
|
320
341
|
default=None, description="End time", union_mode="left_to_right"
|
321
342
|
)
|
322
343
|
interval_second: Optional[Optional[float]] = Field(
|
@@ -332,7 +353,7 @@ class ScheduleFilter(WorkspaceScopedFilter):
|
|
332
353
|
default=None,
|
333
354
|
description="Name of the schedule",
|
334
355
|
)
|
335
|
-
run_once_start_time: Optional[Union[datetime
|
356
|
+
run_once_start_time: Optional[Union[datetime, str]] = Field(
|
336
357
|
default=None,
|
337
358
|
description="The time at which the schedule should run once",
|
338
359
|
union_mode="left_to_right",
|
zenml/pipelines/build_utils.py
CHANGED
@@ -30,7 +30,6 @@ from zenml.code_repositories import BaseCodeRepository
|
|
30
30
|
from zenml.logger import get_logger
|
31
31
|
from zenml.models import (
|
32
32
|
BuildItem,
|
33
|
-
CodeReferenceRequest,
|
34
33
|
PipelineBuildBase,
|
35
34
|
PipelineBuildRequest,
|
36
35
|
PipelineBuildResponse,
|
@@ -362,6 +361,7 @@ def create_pipeline_build(
|
|
362
361
|
item_key = checksums[checksum]
|
363
362
|
image_name_or_digest = images[item_key].image
|
364
363
|
contains_code = images[item_key].contains_code
|
364
|
+
requires_code_download = images[item_key].requires_code_download
|
365
365
|
dockerfile = images[item_key].dockerfile
|
366
366
|
requirements = images[item_key].requirements
|
367
367
|
else:
|
@@ -373,7 +373,7 @@ def create_pipeline_build(
|
|
373
373
|
include_files = build_config.should_include_files(
|
374
374
|
code_repository=code_repository,
|
375
375
|
)
|
376
|
-
|
376
|
+
requires_code_download = build_config.should_download_files(
|
377
377
|
code_repository=code_repository,
|
378
378
|
)
|
379
379
|
pass_code_repo = (
|
@@ -391,7 +391,6 @@ def create_pipeline_build(
|
|
391
391
|
tag=tag,
|
392
392
|
stack=stack,
|
393
393
|
include_files=include_files,
|
394
|
-
download_files=download_files,
|
395
394
|
entrypoint=build_config.entrypoint,
|
396
395
|
extra_files=build_config.extra_files,
|
397
396
|
code_repository=code_repository if pass_code_repo else None,
|
@@ -404,7 +403,7 @@ def create_pipeline_build(
|
|
404
403
|
requirements=requirements,
|
405
404
|
settings_checksum=checksum,
|
406
405
|
contains_code=contains_code,
|
407
|
-
requires_code_download=
|
406
|
+
requires_code_download=requires_code_download,
|
408
407
|
)
|
409
408
|
checksums[checksum] = combined_key
|
410
409
|
|
@@ -537,6 +536,14 @@ def verify_local_repository_context(
|
|
537
536
|
)
|
538
537
|
code_repository = BaseCodeRepository.from_model(model)
|
539
538
|
|
539
|
+
if will_download_from_code_repository(
|
540
|
+
deployment=deployment, local_repo_context=local_repo_context
|
541
|
+
):
|
542
|
+
logger.info(
|
543
|
+
"Using code repository `%s` to download code for this run.",
|
544
|
+
model.name,
|
545
|
+
)
|
546
|
+
|
540
547
|
return code_repository
|
541
548
|
|
542
549
|
|
@@ -695,14 +702,15 @@ def compute_stack_checksum(stack: StackResponse) -> str:
|
|
695
702
|
def should_upload_code(
|
696
703
|
deployment: PipelineDeploymentBase,
|
697
704
|
build: Optional[PipelineBuildResponse],
|
698
|
-
|
705
|
+
can_download_from_code_repository: bool,
|
699
706
|
) -> bool:
|
700
707
|
"""Checks whether the current code should be uploaded for the deployment.
|
701
708
|
|
702
709
|
Args:
|
703
710
|
deployment: The deployment.
|
704
711
|
build: The build for the deployment.
|
705
|
-
|
712
|
+
can_download_from_code_repository: Whether the code can be downloaded
|
713
|
+
from a code repository.
|
706
714
|
|
707
715
|
Returns:
|
708
716
|
Whether the current code should be uploaded for the deployment.
|
@@ -718,7 +726,7 @@ def should_upload_code(
|
|
718
726
|
docker_settings = step.config.docker_settings
|
719
727
|
|
720
728
|
if (
|
721
|
-
|
729
|
+
can_download_from_code_repository
|
722
730
|
and docker_settings.allow_download_from_code_repository
|
723
731
|
):
|
724
732
|
# No upload needed for this step
|
@@ -728,3 +736,31 @@ def should_upload_code(
|
|
728
736
|
return True
|
729
737
|
|
730
738
|
return False
|
739
|
+
|
740
|
+
|
741
|
+
def will_download_from_code_repository(
|
742
|
+
deployment: PipelineDeploymentBase,
|
743
|
+
local_repo_context: "LocalRepositoryContext",
|
744
|
+
) -> bool:
|
745
|
+
"""Checks whether a code repository will be used to download code.
|
746
|
+
|
747
|
+
Args:
|
748
|
+
deployment: The deployment.
|
749
|
+
local_repo_context: The local repository context.
|
750
|
+
|
751
|
+
Returns:
|
752
|
+
Whether a code repository will be used to download code.
|
753
|
+
"""
|
754
|
+
if not build_required(deployment=deployment):
|
755
|
+
return False
|
756
|
+
|
757
|
+
if local_repo_context.has_local_changes:
|
758
|
+
return False
|
759
|
+
|
760
|
+
for step in deployment.step_configurations.values():
|
761
|
+
docker_settings = step.config.docker_settings
|
762
|
+
|
763
|
+
if docker_settings.allow_download_from_code_repository:
|
764
|
+
return True
|
765
|
+
|
766
|
+
return False
|
@@ -701,6 +701,7 @@ To avoid this consider setting pipeline parameters only in one place (config or
|
|
701
701
|
code_repository = build_utils.verify_local_repository_context(
|
702
702
|
deployment=deployment, local_repo_context=local_repo_context
|
703
703
|
)
|
704
|
+
can_download_from_code_repository = code_repository is not None
|
704
705
|
|
705
706
|
if prevent_build_reuse:
|
706
707
|
logger.warning(
|
@@ -737,7 +738,7 @@ To avoid this consider setting pipeline parameters only in one place (config or
|
|
737
738
|
if build_utils.should_upload_code(
|
738
739
|
deployment=deployment,
|
739
740
|
build=build_model,
|
740
|
-
|
741
|
+
can_download_from_code_repository=can_download_from_code_repository,
|
741
742
|
):
|
742
743
|
code_archive = code_utils.CodeArchive(
|
743
744
|
root=source_utils.get_source_root()
|
@@ -109,9 +109,16 @@ def find_active_code_repository(
|
|
109
109
|
for model in depaginate(list_method=Client().list_code_repositories):
|
110
110
|
try:
|
111
111
|
repo = BaseCodeRepository.from_model(model)
|
112
|
-
except
|
112
|
+
except ImportError:
|
113
113
|
logger.debug(
|
114
|
-
"Failed to
|
114
|
+
"Failed to import code repository class.", exc_info=True
|
115
|
+
)
|
116
|
+
continue
|
117
|
+
except Exception as e:
|
118
|
+
logger.warning(
|
119
|
+
"Failed to instantiate or login to code repository `%s`: %s",
|
120
|
+
model.name,
|
121
|
+
e,
|
115
122
|
)
|
116
123
|
continue
|
117
124
|
|
zenml/utils/deprecation_utils.py
CHANGED
@@ -132,14 +132,16 @@ def deprecate_pydantic_attributes(
|
|
132
132
|
if replacement_attribute is None:
|
133
133
|
_warn(
|
134
134
|
message=f"The attribute `{deprecated_attribute}` of class "
|
135
|
-
f"`{cls.__name__}` will be
|
135
|
+
f"`{cls.__name__}` is deprecated and will be removed in "
|
136
|
+
"the future.",
|
136
137
|
attribute=deprecated_attribute,
|
137
138
|
)
|
138
139
|
continue
|
139
140
|
|
140
141
|
_warn(
|
141
142
|
message=f"The attribute `{deprecated_attribute}` of class "
|
142
|
-
f"`{cls.__name__}` will be
|
143
|
+
f"`{cls.__name__}` is deprecated and will be removed in the "
|
144
|
+
"future. Use the "
|
143
145
|
f"attribute `{replacement_attribute}` instead.",
|
144
146
|
attribute=deprecated_attribute,
|
145
147
|
)
|
@@ -78,7 +78,6 @@ class PipelineDockerImageBuilder:
|
|
78
78
|
tag: str,
|
79
79
|
stack: "Stack",
|
80
80
|
include_files: bool,
|
81
|
-
download_files: bool,
|
82
81
|
entrypoint: Optional[str] = None,
|
83
82
|
extra_files: Optional[Dict[str, str]] = None,
|
84
83
|
code_repository: Optional["BaseCodeRepository"] = None,
|
@@ -93,7 +92,6 @@ class PipelineDockerImageBuilder:
|
|
93
92
|
tag: The tag to use for the image.
|
94
93
|
stack: The stack on which the pipeline will be deployed.
|
95
94
|
include_files: Whether to include files in the build context.
|
96
|
-
download_files: Whether to download files in the build context.
|
97
95
|
entrypoint: Entrypoint to use for the final image. If left empty,
|
98
96
|
no entrypoint will be included in the image.
|
99
97
|
extra_files: Extra files to add to the build context. Keys are the
|
@@ -165,7 +163,6 @@ class PipelineDockerImageBuilder:
|
|
165
163
|
docker_settings.apt_packages,
|
166
164
|
docker_settings.environment,
|
167
165
|
include_files,
|
168
|
-
download_files,
|
169
166
|
entrypoint,
|
170
167
|
extra_files,
|
171
168
|
]
|
{zenml_nightly-0.73.0.dev20250127.dist-info → zenml_nightly-0.73.0.dev20250128.dist-info}/RECORD
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
zenml/README.md,sha256=827dekbOWAs1BpW7VF1a4d7EbwPbjwccX-2zdXBENZo,1777
|
2
|
-
zenml/VERSION,sha256=
|
2
|
+
zenml/VERSION,sha256=idxxoPzqv46tqwm3PHoXsGFsEa0kogFk5FNLMlg5-3Y,19
|
3
3
|
zenml/__init__.py,sha256=SkMObQA41ajqdZqGErN00S1Vf3KAxpLvbZ-OBy5uYoo,2130
|
4
4
|
zenml/actions/__init__.py,sha256=mrt6wPo73iKRxK754_NqsGyJ3buW7RnVeIGXr1xEw8Y,681
|
5
5
|
zenml/actions/base_action.py,sha256=UcaHev6BTuLDwuswnyaPjdA8AgUqB5xPZ-lRtuvf2FU,25553
|
@@ -32,7 +32,7 @@ zenml/cli/artifact.py,sha256=7lsAS52DroBTFkFWxkyb-lIDOGP5jPL_Se_RDG_2jgg,9564
|
|
32
32
|
zenml/cli/authorized_device.py,sha256=_1PzE3BM2SmwtuzRliEMStvbBRKWQmg_lbwCRtn8dBg,4324
|
33
33
|
zenml/cli/base.py,sha256=CGWqHb5A8k4XwzOQ4cdV25zWb9qOZr-xOq46wL3we1M,28243
|
34
34
|
zenml/cli/cli.py,sha256=Pnq468IZ4oqzluA_gZ5PsrdnSPEyHcasIH-xI1_8Y_Q,5454
|
35
|
-
zenml/cli/code_repository.py,sha256=
|
35
|
+
zenml/cli/code_repository.py,sha256=UEgiVTzb184AaSrNmO-ylaZ9f_OXXe76EHbf9zrZVc8,8746
|
36
36
|
zenml/cli/config.py,sha256=UI_j0a_zRgEUd2q0zuOi4UgbjiCYjMJ_Y9iSg-wi8Oo,2768
|
37
37
|
zenml/cli/downgrade.py,sha256=eTpXts8y4s3wEUwOlvZGWsTngoMV8Stuzj0K-SAQUGU,1887
|
38
38
|
zenml/cli/feature.py,sha256=Q8tNvWBlRze3FUyn0_VpOdl316ZW87476j7ezJb16GA,4387
|
@@ -55,7 +55,7 @@ zenml/cli/user_management.py,sha256=fTuRworQahst_j78qPYTtgciUeUOxwo7efiyPwmj2tI,
|
|
55
55
|
zenml/cli/utils.py,sha256=aCSQFjfaLtBt4OYzYDwO2Rmdmn-b5AVBqpBGvv7OT7E,86420
|
56
56
|
zenml/cli/version.py,sha256=nm1iSU_1V6-MUwpMKeXcwFhLYGUMLswvQL67cEuCpxA,3635
|
57
57
|
zenml/cli/workspace.py,sha256=bp02aXou574ToWPD8OAIB_cg3mvpE011H8aMKegT-nU,2970
|
58
|
-
zenml/client.py,sha256=
|
58
|
+
zenml/client.py,sha256=f0ySssFW_m7G5cj9UKEeA0Tm-e8GwfjIvLaVuixHnKM,283418
|
59
59
|
zenml/client_lazy_loader.py,sha256=MOBgS1ITYqGvPUnWQ6edn9s8Hr_72YfWbwEIfHKUr9g,7104
|
60
60
|
zenml/code_repositories/__init__.py,sha256=W5bDfzAG8OXIKZSV1L-VHuzMcSCYa9qzTdPb3jqfyYw,920
|
61
61
|
zenml/code_repositories/base_code_repository.py,sha256=_DbxIBxvJlN0PFhST0vlTIQ26Q6V3Nar0kYdeGaJrk8,4386
|
@@ -74,7 +74,7 @@ zenml/config/pipeline_run_configuration.py,sha256=RoX2lGjWGm_0aE2ZMfsREjo0QnwWb4
|
|
74
74
|
zenml/config/pipeline_spec.py,sha256=uWpiIfznJvXAiKs1yMIUDT1h1tYEFNO-RDVTYcIv9CE,2821
|
75
75
|
zenml/config/resource_settings.py,sha256=bl3xahx--XS9p1CsTDSuvkZX9Oxb-Zj85UpefR8WrYs,3899
|
76
76
|
zenml/config/retry_config.py,sha256=4UH1xqw0G6fSEbXSNKfmiFEkwadxQef9BGMe3JBm6NI,929
|
77
|
-
zenml/config/schedule.py,sha256=
|
77
|
+
zenml/config/schedule.py,sha256=qtMWa-mEo7jIKvDzQUstMwe57gdbvyWAQ7ggsoddbCA,5349
|
78
78
|
zenml/config/secret_reference_mixin.py,sha256=6DOgOH_w1_coNs1NasMjY8SOv0MqzWQZxwrWsfncsgs,5862
|
79
79
|
zenml/config/secrets_store_config.py,sha256=y05zqyQhr_DGrs3IfBGa_FRoZ043hSYRT5wzrx-zHTU,2818
|
80
80
|
zenml/config/server_config.py,sha256=SR0JerBn-NCQRflQ0WuDWEsjM4wc9VBoqwx4CF59Lpc,31192
|
@@ -96,7 +96,7 @@ zenml/container_registries/github_container_registry.py,sha256=rbcGkFfPDk-Il0T9F
|
|
96
96
|
zenml/data_validators/__init__.py,sha256=9Fa0jiUSQ_JsLMHYjqDayWQl4m_uuai9tQjIP60OTk8,886
|
97
97
|
zenml/data_validators/base_data_validator.py,sha256=reGUJ6NEFfd_wocrcYBSU5QHCSBOll-pP_suTP_bfv0,9839
|
98
98
|
zenml/entrypoints/__init__.py,sha256=2CMemOrHIJauxAss6k7dKFtsCFqgYR-JbAx4REoCaE8,946
|
99
|
-
zenml/entrypoints/base_entrypoint_configuration.py,sha256
|
99
|
+
zenml/entrypoints/base_entrypoint_configuration.py,sha256=-JCuetzQGOPo5R6VmM2q2JVcLaEimrGPikTkXFXuiOI,10468
|
100
100
|
zenml/entrypoints/entrypoint.py,sha256=XNgXBCMKoidmP0_AYgMpqo-neG8Y8jG0rj43ofTDZ9E,2033
|
101
101
|
zenml/entrypoints/pipeline_entrypoint_configuration.py,sha256=To-vTP29qAE36ndJDF1fRw9wL2Nk2bsBuO-ayAwvSmo,1646
|
102
102
|
zenml/entrypoints/step_entrypoint_configuration.py,sha256=fETr5E7eH8QEWYqgaarIrLQzrPrdLEr194xhd3H5yU4,7206
|
@@ -276,14 +276,14 @@ zenml/integrations/gcp/step_operators/__init__.py,sha256=iPkob2LtPIQ-OHszhbNz_oj
|
|
276
276
|
zenml/integrations/gcp/step_operators/vertex_step_operator.py,sha256=qPQOSacCFUcXCl0MkuzVkxpewU8NAPjiGQsjBF1N0ro,13492
|
277
277
|
zenml/integrations/github/__init__.py,sha256=A8Yd--BbAG3HEfbWYOIEy_kzyLs2tBiawiLMosXd1Do,1467
|
278
278
|
zenml/integrations/github/code_repositories/__init__.py,sha256=ub_hSE2ks2mZB1aeHRjQYz7QIRQIgOw2s080IIqJaGs,817
|
279
|
-
zenml/integrations/github/code_repositories/github_code_repository.py,sha256=
|
279
|
+
zenml/integrations/github/code_repositories/github_code_repository.py,sha256=7s4NjOn_bItAbwcxQQQfo9IlW8vowleUQMiBjjn6iJo,7041
|
280
280
|
zenml/integrations/github/plugins/__init__.py,sha256=yf7xkBs8wEUMP2-nFbDIVeXs1omHtZoyZBgobMYB1l0,804
|
281
281
|
zenml/integrations/github/plugins/event_sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
282
282
|
zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py,sha256=x5OSiWOsQprrleo8s8oIjgFZ7hz_tw66MLJYlSqONvc,17239
|
283
283
|
zenml/integrations/github/plugins/github_webhook_event_source_flavor.py,sha256=jth8sxrmyg22-wT5Ax0fdsiLhTQwHXxaiTnB3kD97pk,1669
|
284
284
|
zenml/integrations/gitlab/__init__.py,sha256=4Vz6XiPJYDZ9mos6L1FlgWsmueRCck86Sd8KRVj9NWQ,1003
|
285
285
|
zenml/integrations/gitlab/code_repositories/__init__.py,sha256=Ds7NL6tCqLApRsOgvUofEq3Ms2No5_Z095uvi1gLVIk,817
|
286
|
-
zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py,sha256=
|
286
|
+
zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py,sha256=P4boNw8ALFWWXrYiI9xG1cXiWhJXmoRoYmT8PQGBBBQ,5761
|
287
287
|
zenml/integrations/great_expectations/__init__.py,sha256=Vp7qJ2iA3BfPK1QZFYEiE8SB8lIM2S8SGmW35dW8A7M,2448
|
288
288
|
zenml/integrations/great_expectations/data_validators/__init__.py,sha256=Z16qmLfUoataEABQ6Ec-HSLM_a9VRALHFa4OoAyozIk,857
|
289
289
|
zenml/integrations/great_expectations/data_validators/ge_data_validator.py,sha256=qp2ZFqQiYPszRc6vGhZhK22GEHhGoTQ0Y9u0trXNQyg,21404
|
@@ -648,7 +648,7 @@ zenml/models/v2/core/pipeline_deployment.py,sha256=6PbpnEUAbTT-_jPmyNtKuTJHFGdGL
|
|
648
648
|
zenml/models/v2/core/pipeline_run.py,sha256=41TqY_CzUCWlunnyX6GBJ-OmcRtGIm9sHAXB4pIuwMo,32669
|
649
649
|
zenml/models/v2/core/run_metadata.py,sha256=YDiPVRzTUMVHqW4T_Ke4GJMdscp0aS_g8I4P8n70szc,2436
|
650
650
|
zenml/models/v2/core/run_template.py,sha256=A_dezNA9o1uJW-o1B9fYaSSWHwwglJYP3jvhWhGcJK4,12971
|
651
|
-
zenml/models/v2/core/schedule.py,sha256=
|
651
|
+
zenml/models/v2/core/schedule.py,sha256=JNYTGPXDPMz7A9OjhnHIXyOLQuoFnrzOwChGibz2xQY,10774
|
652
652
|
zenml/models/v2/core/secret.py,sha256=LoY5BMZIrU6KYa39layHt6cbAnmMR7yXizv_1Qqse6Q,11460
|
653
653
|
zenml/models/v2/core/server_settings.py,sha256=al6LAXhoQHsBiTv2qlwFn1AlI2F8miogGB4xjDE6KeA,6267
|
654
654
|
zenml/models/v2/core/service.py,sha256=lwCDOFk-OXmfhB_bOOJy7rhbkR40tCScQsWnllgL7II,14973
|
@@ -692,10 +692,10 @@ zenml/orchestrators/topsort.py,sha256=D8evz3X47zwpXd90NMLsJD-_uCeXtV6ClzNfDUrq7c
|
|
692
692
|
zenml/orchestrators/utils.py,sha256=faRm86Ed_KVFBYbiMriSM0z3NwsydJWDvLYX-7DSrkc,13153
|
693
693
|
zenml/orchestrators/wheeled_orchestrator.py,sha256=eOnMcnd3sCzfhA2l6qRAzF0rOXzaojbjvvYvTkqixQo,4791
|
694
694
|
zenml/pipelines/__init__.py,sha256=hpIX7hN8jsQRHT5R-xSXZL88qrHwkmrvGLQeu1rWt4o,873
|
695
|
-
zenml/pipelines/build_utils.py,sha256=
|
695
|
+
zenml/pipelines/build_utils.py,sha256=5eU1__3A37nRzYsNtExvtRfBHYXYOlDtcLS_cVT6zco,27255
|
696
696
|
zenml/pipelines/pipeline_context.py,sha256=V_p-F9W7cBIlTjS0iv5-uJYMzaOj8bAUkc_uNhQgBms,3579
|
697
697
|
zenml/pipelines/pipeline_decorator.py,sha256=FIbflYOMavbuyGmqsx3F5zZgg0oXMTi1eAcGXciljOs,4293
|
698
|
-
zenml/pipelines/pipeline_definition.py,sha256=
|
698
|
+
zenml/pipelines/pipeline_definition.py,sha256=bEloeIhfKjaKLG9zXccQ7Pb-KMRgNbVjVXeXC3X50HM,56034
|
699
699
|
zenml/pipelines/run_utils.py,sha256=4KuHIQFtLXTZNQBScTEkIG5pqNtu6xGm6UZT7ptyyKs,11623
|
700
700
|
zenml/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
701
701
|
zenml/plugins/base_plugin_flavor.py,sha256=88IxFW91UB_rQ8xPlfRnIhIJh7A308NEq2epMMdlOng,2530
|
@@ -756,12 +756,12 @@ zenml/types.py,sha256=LhGWJ4t3nybBk1l9Ox3tqqHbTYSuCqhkRsL5FqO6yf4,1206
|
|
756
756
|
zenml/utils/__init__.py,sha256=jaMTbjm8tLYkaRoxlZ0Em4ye_ZHOHKgP2goPTTiYGUQ,797
|
757
757
|
zenml/utils/archivable.py,sha256=QuLe1IhyABTrE6Y0hAT3tKjaUCpcze5ffZ_RKoKtJwY,6549
|
758
758
|
zenml/utils/callback_registry.py,sha256=QBWdaraLAxBxi8DKbv9X1SUpTKDhhj-XE0JomB2Ax2Y,2411
|
759
|
-
zenml/utils/code_repository_utils.py,sha256=
|
759
|
+
zenml/utils/code_repository_utils.py,sha256=f_VaN-QaCd66xVJJjM4mIo6Heu96-c9qdWh5XUjGpMY,4950
|
760
760
|
zenml/utils/code_utils.py,sha256=y7_vmqYv_e11xekFjK7Dm4LkFu6SGl73tr2fVxBAK3s,11336
|
761
761
|
zenml/utils/cuda_utils.py,sha256=RR21m__Zs-OnI5n-veFUzWniZjwLSbalHE5QV3jK1Hw,1624
|
762
762
|
zenml/utils/daemon.py,sha256=GZ7Dx6GLHK04SR50wBxpKYmFhxPBfdLWxJiAWzJC6cM,11863
|
763
763
|
zenml/utils/dashboard_utils.py,sha256=JyT-rOsqipazmImXBB-UzCg0GJ3UNzVCFdMcQisInfQ,5379
|
764
|
-
zenml/utils/deprecation_utils.py,sha256=
|
764
|
+
zenml/utils/deprecation_utils.py,sha256=QcWkOnzIRDKPOfkr523n3l2MoY2wE0LIPfbx99t4Gmg,6343
|
765
765
|
zenml/utils/dict_utils.py,sha256=i7KAaKrkaWA_cG5IvVfMnr0CwWlBJ7KAsGvP2wxjZI8,2667
|
766
766
|
zenml/utils/docker_utils.py,sha256=QvkKnvIYSKAhW7mErXwSaQ432-q1LAsLjo2YWSXD8Bk,13889
|
767
767
|
zenml/utils/downloaded_repository_context.py,sha256=S660PSSQ3dsNBA0qAj8ap_Thyw1n6x4VDcRWbCMDP2M,1502
|
@@ -779,7 +779,7 @@ zenml/utils/networking_utils.py,sha256=zTDbOMkMPRWiWLZ2ccchd37rvvZWIIh0Kr9dZE-VJ
|
|
779
779
|
zenml/utils/notebook_utils.py,sha256=VBMU9Qnx_NdpB1TQtnej56L0hRr11fwniOva3ltUT90,4113
|
780
780
|
zenml/utils/package_utils.py,sha256=wy0Mh8hHhOX2z1JfGN5lifG9yEsBQGLwNfur0M3J2tQ,2730
|
781
781
|
zenml/utils/pagination_utils.py,sha256=TufckOqOKeDPwE3ySefL05zOzGUUA2Fqx_QFVhE2so0,1445
|
782
|
-
zenml/utils/pipeline_docker_image_builder.py,sha256=
|
782
|
+
zenml/utils/pipeline_docker_image_builder.py,sha256=5gTY5bf58UYy1p_s7_4odEcunC7Hpe1DbdVnCFyPkiY,25034
|
783
783
|
zenml/utils/proxy_utils.py,sha256=fgRlLa9pfXJDoxtB31_YP7DClOMQLek_nMmM0et6i3w,7241
|
784
784
|
zenml/utils/pydantic_utils.py,sha256=oQcxY4VXuVY3n632atlvdmi12EYcSQ1xZuQJY3Je-sA,16592
|
785
785
|
zenml/utils/requirements_utils.py,sha256=pUVlQpEtLfz7lLJEUN-t7oHKLzdZZdgHoMzv0V5WXZI,2250
|
@@ -1253,7 +1253,7 @@ zenml/zen_stores/schemas/api_key_schemas.py,sha256=d_ewTrIJpRjLWupOZFpWcPSlRiHxi
|
|
1253
1253
|
zenml/zen_stores/schemas/artifact_schemas.py,sha256=_hXytHqa0BYrBLgZt8RdAid1n291d8wQ0HxNMIAjlJQ,14317
|
1254
1254
|
zenml/zen_stores/schemas/artifact_visualization_schemas.py,sha256=_gMNjOF0oJ0ruW5Ua86hDocvO4MT3ACAIx_BwFBJFWk,3693
|
1255
1255
|
zenml/zen_stores/schemas/base_schemas.py,sha256=-MDYnS4ZLDe6x75nTXuVrOSbcYOuECLNk-yxjfEdJh4,2043
|
1256
|
-
zenml/zen_stores/schemas/code_repository_schemas.py,sha256=
|
1256
|
+
zenml/zen_stores/schemas/code_repository_schemas.py,sha256=K2EFvu_bkF9-cDAVYpMntNidSu-zb3By7CVq6rLj97c,7489
|
1257
1257
|
zenml/zen_stores/schemas/component_schemas.py,sha256=vQ0GHbtvx-rgJDMPtIIbLs_KM8pRfNnF2EL41CYx48A,8260
|
1258
1258
|
zenml/zen_stores/schemas/constants.py,sha256=bcadtiWEWkpzRzvnj46yuAaC7DE09g2H9L9r398lV00,704
|
1259
1259
|
zenml/zen_stores/schemas/device_schemas.py,sha256=voVBknm14NmFpij1EGb_HhVlUng0cglCMXkYSxDRq1s,9126
|
@@ -1292,8 +1292,8 @@ zenml/zen_stores/secrets_stores/sql_secrets_store.py,sha256=Bq1djrUP9saoD7vECjS7
|
|
1292
1292
|
zenml/zen_stores/sql_zen_store.py,sha256=AaPwO6R_2QVsI_PmDktVTF-Fx6VzR64j-1oU7cJwVxI,416486
|
1293
1293
|
zenml/zen_stores/template_utils.py,sha256=EKYBgmDLTS_PSMWaIO5yvHPLiQvMqHcsAe6NUCrv-i4,9068
|
1294
1294
|
zenml/zen_stores/zen_store_interface.py,sha256=vf2gKBWfUUPtcGZC35oQB6pPNVzWVyQC8nWxVLjfrxM,92692
|
1295
|
-
zenml_nightly-0.73.0.
|
1296
|
-
zenml_nightly-0.73.0.
|
1297
|
-
zenml_nightly-0.73.0.
|
1298
|
-
zenml_nightly-0.73.0.
|
1299
|
-
zenml_nightly-0.73.0.
|
1295
|
+
zenml_nightly-0.73.0.dev20250128.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
|
1296
|
+
zenml_nightly-0.73.0.dev20250128.dist-info/METADATA,sha256=BV3mpMHnzE1NHGrXN1GGMGemkWe14SU-ysUGOXW2kg8,21355
|
1297
|
+
zenml_nightly-0.73.0.dev20250128.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
1298
|
+
zenml_nightly-0.73.0.dev20250128.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
|
1299
|
+
zenml_nightly-0.73.0.dev20250128.dist-info/RECORD,,
|
{zenml_nightly-0.73.0.dev20250127.dist-info → zenml_nightly-0.73.0.dev20250128.dist-info}/LICENSE
RENAMED
File without changes
|
{zenml_nightly-0.73.0.dev20250127.dist-info → zenml_nightly-0.73.0.dev20250128.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|