zenml-nightly 0.72.0.dev20250120__py3-none-any.whl → 0.72.0.dev20250121__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/constants.py +5 -0
- zenml/integrations/airflow/orchestrators/dag_generator.py +16 -0
- zenml/integrations/slack/__init__.py +1 -2
- zenml/integrations/slack/alerters/slack_alerter.py +119 -61
- zenml/integrations/slack/flavors/slack_alerter_flavor.py +18 -8
- zenml/materializers/built_in_materializer.py +17 -2
- zenml/pipelines/pipeline_definition.py +1 -1
- zenml/utils/yaml_utils.py +3 -4
- {zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.72.0.dev20250121.dist-info}/METADATA +1 -1
- {zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.72.0.dev20250121.dist-info}/RECORD +14 -14
- {zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.72.0.dev20250121.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.72.0.dev20250121.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.72.0.dev20250121.dist-info}/entry_points.txt +0 -0
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.72.0.
|
1
|
+
0.72.0.dev20250121
|
zenml/constants.py
CHANGED
@@ -174,6 +174,11 @@ ENV_ZENML_PIPELINE_RUN_API_TOKEN_EXPIRATION = (
|
|
174
174
|
"ZENML_PIPELINE_API_TOKEN_EXPIRATION"
|
175
175
|
)
|
176
176
|
|
177
|
+
# Materializer environment variables
|
178
|
+
ENV_ZENML_MATERIALIZER_ALLOW_NON_ASCII_JSON_DUMPS = (
|
179
|
+
"ZENML_MATERIALIZER_ALLOW_NON_ASCII_JSON_DUMPS"
|
180
|
+
)
|
181
|
+
|
177
182
|
# ZenML Server environment variables
|
178
183
|
ENV_ZENML_SERVER_PREFIX = "ZENML_SERVER_"
|
179
184
|
ENV_ZENML_SERVER_PRO_PREFIX = "ZENML_SERVER_PRO_"
|
@@ -119,6 +119,22 @@ def get_operator_init_kwargs(
|
|
119
119
|
except ImportError:
|
120
120
|
pass
|
121
121
|
|
122
|
+
try:
|
123
|
+
# Support for apache-airflow-providers-cncf-kubernetes>=10.0.0 where
|
124
|
+
# the import changed
|
125
|
+
from airflow.providers.cncf.kubernetes.operators.pod import (
|
126
|
+
KubernetesPodOperator,
|
127
|
+
)
|
128
|
+
|
129
|
+
if issubclass(operator_class, KubernetesPodOperator):
|
130
|
+
init_kwargs.update(
|
131
|
+
get_kubernetes_pod_operator_init_kwargs(
|
132
|
+
dag_config=dag_config, task_config=task_config
|
133
|
+
)
|
134
|
+
)
|
135
|
+
except ImportError:
|
136
|
+
pass
|
137
|
+
|
122
138
|
init_kwargs.update(task_config.operator_args)
|
123
139
|
return init_kwargs
|
124
140
|
|
@@ -30,8 +30,7 @@ class SlackIntegration(Integration):
|
|
30
30
|
"""
|
31
31
|
|
32
32
|
NAME = SLACK
|
33
|
-
REQUIREMENTS = ["slack-sdk
|
34
|
-
REQUIREMENTS_IGNORED_ON_UNINSTALL = ["aiohttp"]
|
33
|
+
REQUIREMENTS = ["slack-sdk==3.30.0"]
|
35
34
|
|
36
35
|
@classmethod
|
37
36
|
def flavors(cls) -> List[Type[Flavor]]:
|
@@ -14,12 +14,12 @@
|
|
14
14
|
# or implied. See the License for the specific language governing
|
15
15
|
# permissions and limitations under the License.
|
16
16
|
|
17
|
-
|
17
|
+
import time
|
18
|
+
from typing import Dict, List, Optional, Type, cast
|
18
19
|
|
19
20
|
from pydantic import BaseModel
|
20
21
|
from slack_sdk import WebClient
|
21
22
|
from slack_sdk.errors import SlackApiError
|
22
|
-
from slack_sdk.rtm import RTMClient
|
23
23
|
|
24
24
|
from zenml import get_step_context
|
25
25
|
from zenml.alerter.base_alerter import BaseAlerter, BaseAlerterStepParameters
|
@@ -58,7 +58,7 @@ class SlackAlerterParameters(BaseAlerterStepParameters):
|
|
58
58
|
payload: Optional[SlackAlerterPayload] = None
|
59
59
|
include_format_blocks: Optional[bool] = True
|
60
60
|
|
61
|
-
# Allowing user to use their own custom blocks in the
|
61
|
+
# Allowing user to use their own custom blocks in the Slack post message
|
62
62
|
blocks: Optional[List[Dict]] = None # type: ignore
|
63
63
|
|
64
64
|
|
@@ -96,7 +96,7 @@ class SlackAlerter(BaseAlerter):
|
|
96
96
|
|
97
97
|
Raises:
|
98
98
|
RuntimeError: if config is not of type `BaseAlerterStepConfig`.
|
99
|
-
ValueError: if a
|
99
|
+
ValueError: if a Slack channel was neither defined in the config
|
100
100
|
nor in the slack alerter component.
|
101
101
|
"""
|
102
102
|
if params and not isinstance(params, BaseAlerterStepParameters):
|
@@ -111,24 +111,48 @@ class SlackAlerter(BaseAlerter):
|
|
111
111
|
):
|
112
112
|
return params.slack_channel_id
|
113
113
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
114
|
+
try:
|
115
|
+
settings = cast(
|
116
|
+
SlackAlerterSettings,
|
117
|
+
self.get_settings(get_step_context().step_run),
|
118
|
+
)
|
119
|
+
except RuntimeError:
|
120
|
+
settings = None
|
121
|
+
|
122
|
+
if settings is not None and settings.slack_channel_id is not None:
|
119
123
|
return settings.slack_channel_id
|
120
124
|
|
121
|
-
if self.config.
|
122
|
-
return self.config.
|
125
|
+
if self.config.slack_channel_id is not None:
|
126
|
+
return self.config.slack_channel_id
|
123
127
|
|
124
128
|
raise ValueError(
|
125
|
-
"
|
126
|
-
"
|
127
|
-
"
|
129
|
+
"The `slack_channel_id` is not set either in the runtime settings, "
|
130
|
+
"or the component configuration of the alerter. Please specify at "
|
131
|
+
"least one."
|
128
132
|
)
|
129
133
|
|
134
|
+
def _get_timeout_duration(self) -> int:
|
135
|
+
"""Gets the timeout duration used by the ask method .
|
136
|
+
|
137
|
+
Returns:
|
138
|
+
number of seconds for the timeout to happen.
|
139
|
+
"""
|
140
|
+
try:
|
141
|
+
settings = cast(
|
142
|
+
SlackAlerterSettings,
|
143
|
+
self.get_settings(get_step_context().step_run),
|
144
|
+
)
|
145
|
+
except RuntimeError:
|
146
|
+
settings = None
|
147
|
+
|
148
|
+
if settings is not None:
|
149
|
+
return settings.timeout
|
150
|
+
|
151
|
+
return self.config.timeout
|
152
|
+
|
153
|
+
@staticmethod
|
130
154
|
def _get_approve_msg_options(
|
131
|
-
|
155
|
+
params: Optional[BaseAlerterStepParameters],
|
132
156
|
) -> List[str]:
|
133
157
|
"""Define which messages will lead to approval during ask().
|
134
158
|
|
@@ -146,8 +170,9 @@ class SlackAlerter(BaseAlerter):
|
|
146
170
|
return params.approve_msg_options
|
147
171
|
return DEFAULT_APPROVE_MSG_OPTIONS
|
148
172
|
|
173
|
+
@staticmethod
|
149
174
|
def _get_disapprove_msg_options(
|
150
|
-
|
175
|
+
params: Optional[BaseAlerterStepParameters],
|
151
176
|
) -> List[str]:
|
152
177
|
"""Define which messages will lead to disapproval during ask().
|
153
178
|
|
@@ -165,8 +190,8 @@ class SlackAlerter(BaseAlerter):
|
|
165
190
|
return params.disapprove_msg_options
|
166
191
|
return DEFAULT_DISAPPROVE_MSG_OPTIONS
|
167
192
|
|
193
|
+
@staticmethod
|
168
194
|
def _create_blocks(
|
169
|
-
self,
|
170
195
|
message: Optional[str],
|
171
196
|
params: Optional[BaseAlerterStepParameters],
|
172
197
|
) -> List[Dict]: # type: ignore
|
@@ -185,7 +210,8 @@ class SlackAlerter(BaseAlerter):
|
|
185
210
|
return params.blocks
|
186
211
|
elif hasattr(params, "payload") and params.payload is not None:
|
187
212
|
logger.info(
|
188
|
-
"No custom blocks set. Using default blocks for Slack
|
213
|
+
"No custom blocks set. Using default blocks for Slack "
|
214
|
+
"alerter."
|
189
215
|
)
|
190
216
|
payload = params.payload
|
191
217
|
return [
|
@@ -228,7 +254,8 @@ class SlackAlerter(BaseAlerter):
|
|
228
254
|
return []
|
229
255
|
else:
|
230
256
|
logger.info(
|
231
|
-
"params is not of type SlackAlerterParameters. Returning empty
|
257
|
+
"params is not of type SlackAlerterParameters. Returning empty "
|
258
|
+
"blocks."
|
232
259
|
)
|
233
260
|
return []
|
234
261
|
|
@@ -253,64 +280,95 @@ class SlackAlerter(BaseAlerter):
|
|
253
280
|
response = client.chat_postMessage(
|
254
281
|
channel=slack_channel_id, text=message, blocks=blocks
|
255
282
|
)
|
283
|
+
if not response.get("ok", False):
|
284
|
+
error_details = response.get("error", "Unknown error")
|
285
|
+
logger.error(
|
286
|
+
f"Failed to send message to Slack channel. "
|
287
|
+
f"Error: {error_details}. Full response: {response}"
|
288
|
+
)
|
289
|
+
return False
|
256
290
|
return True
|
257
291
|
except SlackApiError as error:
|
258
|
-
|
259
|
-
logger.error(
|
292
|
+
error_message = error.response.get("error", "Unknown error")
|
293
|
+
logger.error(
|
294
|
+
"SlackAlerter.post() failed with Slack API error: "
|
295
|
+
f"{error_message}. Full response: {error.response}"
|
296
|
+
)
|
297
|
+
return False
|
298
|
+
except Exception as e:
|
299
|
+
logger.error(f"Unexpected error in SlackAlerter.post(): {str(e)}")
|
260
300
|
return False
|
261
301
|
|
262
302
|
def ask(
|
263
|
-
self,
|
303
|
+
self, question: str, params: Optional[BaseAlerterStepParameters] = None
|
264
304
|
) -> bool:
|
265
305
|
"""Post a message to a Slack channel and wait for approval.
|
266
306
|
|
267
307
|
Args:
|
268
|
-
|
308
|
+
question: Initial message to be posted.
|
269
309
|
params: Optional parameters.
|
270
310
|
|
271
311
|
Returns:
|
272
312
|
True if a user approved the operation, else False
|
273
313
|
"""
|
274
|
-
rtm = RTMClient(token=self.config.slack_token)
|
275
314
|
slack_channel_id = self._get_channel_id(params=params)
|
276
315
|
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
def post_initial_message(**payload: Any) -> None:
|
281
|
-
"""Post an initial message in a channel and start listening.
|
316
|
+
client = WebClient(token=self.config.slack_token)
|
317
|
+
approve_options = self._get_approve_msg_options(params)
|
318
|
+
disapprove_options = self._get_disapprove_msg_options(params)
|
282
319
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
channel=slack_channel_id, text=message, blocks=blocks
|
320
|
+
try:
|
321
|
+
# Send message to the Slack channel
|
322
|
+
response = client.chat_postMessage(
|
323
|
+
channel=slack_channel_id,
|
324
|
+
text=question,
|
325
|
+
blocks=self._create_blocks(question, params),
|
290
326
|
)
|
291
327
|
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
328
|
+
if not response.get("ok", False):
|
329
|
+
error_details = response.get("error", "Unknown error")
|
330
|
+
logger.error(
|
331
|
+
f"Failed to send the initial message to the Slack channel. "
|
332
|
+
f"Error: {error_details}. Full response: {response}"
|
333
|
+
)
|
334
|
+
return False
|
335
|
+
|
336
|
+
# Retrieve timestamp of sent message
|
337
|
+
timestamp = response["ts"]
|
338
|
+
|
339
|
+
# Wait for a response
|
340
|
+
start_time = time.time()
|
341
|
+
|
342
|
+
while time.time() - start_time < self._get_timeout_duration():
|
343
|
+
history = client.conversations_history(
|
344
|
+
channel=slack_channel_id, oldest=timestamp
|
345
|
+
)
|
346
|
+
for msg in history["messages"]:
|
347
|
+
if "ts" in msg and "user" in msg:
|
348
|
+
user_message = msg["text"].strip().lower()
|
349
|
+
if user_message in [
|
350
|
+
opt.lower() for opt in approve_options
|
351
|
+
]:
|
352
|
+
logger.info("User approved the operation.")
|
353
|
+
return True
|
354
|
+
elif user_message in [
|
355
|
+
opt.lower() for opt in disapprove_options
|
356
|
+
]:
|
357
|
+
logger.info("User disapproved the operation.")
|
358
|
+
return False
|
359
|
+
|
360
|
+
time.sleep(1) # Polling interval
|
361
|
+
|
362
|
+
logger.warning("No response received within the timeout period.")
|
363
|
+
return False
|
364
|
+
|
365
|
+
except SlackApiError as error:
|
366
|
+
error_message = error.response.get("error", "Unknown error")
|
367
|
+
logger.error(
|
368
|
+
f"SlackAlerter.ask() failed with Slack API error: "
|
369
|
+
f"{error_message}. Full response: {error.response}"
|
370
|
+
)
|
371
|
+
return False
|
372
|
+
except Exception as e:
|
373
|
+
logger.error(f"Unexpected error in SlackAlerter.ask(): {str(e)}")
|
374
|
+
return False
|
@@ -19,6 +19,7 @@ from zenml.alerter.base_alerter import BaseAlerterConfig, BaseAlerterFlavor
|
|
19
19
|
from zenml.config.base_settings import BaseSettings
|
20
20
|
from zenml.integrations.slack import SLACK_ALERTER_FLAVOR
|
21
21
|
from zenml.logger import get_logger
|
22
|
+
from zenml.utils.deprecation_utils import deprecate_pydantic_attributes
|
22
23
|
from zenml.utils.secret_utils import SecretField
|
23
24
|
|
24
25
|
logger = get_logger(__name__)
|
@@ -32,21 +33,28 @@ class SlackAlerterSettings(BaseSettings):
|
|
32
33
|
|
33
34
|
Attributes:
|
34
35
|
slack_channel_id: The ID of the Slack channel to use for communication.
|
36
|
+
timeout: The amount of seconds to wait for the ask method.
|
35
37
|
"""
|
36
38
|
|
37
39
|
slack_channel_id: Optional[str] = None
|
40
|
+
timeout: int = 300
|
38
41
|
|
39
42
|
|
40
|
-
class SlackAlerterConfig(BaseAlerterConfig):
|
43
|
+
class SlackAlerterConfig(BaseAlerterConfig, SlackAlerterSettings):
|
41
44
|
"""Slack alerter config.
|
42
45
|
|
43
46
|
Attributes:
|
44
47
|
slack_token: The Slack token tied to the Slack account to be used.
|
45
|
-
default_slack_channel_id: The ID of the default Slack
|
48
|
+
default_slack_channel_id: (deprecated) The ID of the default Slack
|
49
|
+
channel to use for communication.
|
46
50
|
"""
|
47
51
|
|
48
52
|
slack_token: str = SecretField()
|
53
|
+
|
49
54
|
default_slack_channel_id: Optional[str] = None
|
55
|
+
_deprecation_validator = deprecate_pydantic_attributes(
|
56
|
+
("default_slack_channel_id", "slack_channel_id")
|
57
|
+
)
|
50
58
|
|
51
59
|
@property
|
52
60
|
def is_valid(self) -> bool:
|
@@ -60,9 +68,11 @@ class SlackAlerterConfig(BaseAlerterConfig):
|
|
60
68
|
from slack_sdk.errors import SlackApiError
|
61
69
|
except ImportError:
|
62
70
|
logger.warning(
|
63
|
-
"Unable to validate
|
71
|
+
"Unable to validate the slack alerter, because the Slack "
|
72
|
+
"integration is not installed."
|
64
73
|
)
|
65
74
|
return True
|
75
|
+
|
66
76
|
client = WebClient(token=self.slack_token)
|
67
77
|
try:
|
68
78
|
# Check slack token validity
|
@@ -70,10 +80,10 @@ class SlackAlerterConfig(BaseAlerterConfig):
|
|
70
80
|
if not response["ok"]:
|
71
81
|
return False
|
72
82
|
|
73
|
-
if self.
|
83
|
+
if self.slack_channel_id:
|
74
84
|
# Check channel validity
|
75
85
|
response = client.conversations_info(
|
76
|
-
channel=self.
|
86
|
+
channel=self.slack_channel_id
|
77
87
|
)
|
78
88
|
valid: bool = response["ok"]
|
79
89
|
return valid
|
@@ -97,7 +107,7 @@ class SlackAlerterFlavor(BaseAlerterFlavor):
|
|
97
107
|
|
98
108
|
@property
|
99
109
|
def docs_url(self) -> Optional[str]:
|
100
|
-
"""A
|
110
|
+
"""A URL to point at docs explaining this flavor.
|
101
111
|
|
102
112
|
Returns:
|
103
113
|
A flavor docs url.
|
@@ -106,7 +116,7 @@ class SlackAlerterFlavor(BaseAlerterFlavor):
|
|
106
116
|
|
107
117
|
@property
|
108
118
|
def sdk_docs_url(self) -> Optional[str]:
|
109
|
-
"""A
|
119
|
+
"""A URL to point at SDK docs explaining this flavor.
|
110
120
|
|
111
121
|
Returns:
|
112
122
|
A flavor SDK docs url.
|
@@ -115,7 +125,7 @@ class SlackAlerterFlavor(BaseAlerterFlavor):
|
|
115
125
|
|
116
126
|
@property
|
117
127
|
def logo_url(self) -> str:
|
118
|
-
"""A
|
128
|
+
"""A URL to represent the flavor in the dashboard.
|
119
129
|
|
120
130
|
Returns:
|
121
131
|
The flavor logo.
|
@@ -28,6 +28,10 @@ from typing import (
|
|
28
28
|
)
|
29
29
|
|
30
30
|
from zenml.artifact_stores.base_artifact_store import BaseArtifactStore
|
31
|
+
from zenml.constants import (
|
32
|
+
ENV_ZENML_MATERIALIZER_ALLOW_NON_ASCII_JSON_DUMPS,
|
33
|
+
handle_bool_env_var,
|
34
|
+
)
|
31
35
|
from zenml.enums import ArtifactType, VisualizationType
|
32
36
|
from zenml.logger import get_logger
|
33
37
|
from zenml.materializers.base_materializer import BaseMaterializer
|
@@ -48,6 +52,9 @@ BASIC_TYPES = (
|
|
48
52
|
str,
|
49
53
|
type(None),
|
50
54
|
) # complex/bytes are not JSON serializable
|
55
|
+
ZENML_MATERIALIZER_ALLOW_NON_ASCII_JSON_DUMPS = handle_bool_env_var(
|
56
|
+
ENV_ZENML_MATERIALIZER_ALLOW_NON_ASCII_JSON_DUMPS, False
|
57
|
+
)
|
51
58
|
|
52
59
|
|
53
60
|
class BuiltInMaterializer(BaseMaterializer):
|
@@ -94,7 +101,11 @@ class BuiltInMaterializer(BaseMaterializer):
|
|
94
101
|
Args:
|
95
102
|
data: The data to store.
|
96
103
|
"""
|
97
|
-
yaml_utils.write_json(
|
104
|
+
yaml_utils.write_json(
|
105
|
+
self.data_path,
|
106
|
+
data,
|
107
|
+
ensure_ascii=not ZENML_MATERIALIZER_ALLOW_NON_ASCII_JSON_DUMPS,
|
108
|
+
)
|
98
109
|
|
99
110
|
def extract_metadata(
|
100
111
|
self, data: Union[bool, float, int, str]
|
@@ -371,7 +382,11 @@ class BuiltInContainerMaterializer(BaseMaterializer):
|
|
371
382
|
|
372
383
|
# If the data is serializable, just write it into a single JSON file.
|
373
384
|
if _is_serializable(data):
|
374
|
-
yaml_utils.write_json(
|
385
|
+
yaml_utils.write_json(
|
386
|
+
self.data_path,
|
387
|
+
data,
|
388
|
+
ensure_ascii=not ZENML_MATERIALIZER_ALLOW_NON_ASCII_JSON_DUMPS,
|
389
|
+
)
|
375
390
|
return
|
376
391
|
|
377
392
|
# non-serializable dict: Handle as non-serializable list of lists.
|
@@ -474,7 +474,7 @@ def pipeline_(param_name: str):
|
|
474
474
|
step_name()
|
475
475
|
|
476
476
|
if __name__=="__main__":
|
477
|
-
pipeline_.with_options(
|
477
|
+
pipeline_.with_options(config_path="config.yaml")(param_name="value2")
|
478
478
|
```
|
479
479
|
To avoid this consider setting pipeline parameters only in one place (config or code).
|
480
480
|
"""
|
zenml/utils/yaml_utils.py
CHANGED
@@ -122,6 +122,7 @@ def write_json(
|
|
122
122
|
file_path: str,
|
123
123
|
contents: Any,
|
124
124
|
encoder: Optional[Type[json.JSONEncoder]] = None,
|
125
|
+
**json_dump_args: Any,
|
125
126
|
) -> None:
|
126
127
|
"""Write contents as JSON format to file_path.
|
127
128
|
|
@@ -129,6 +130,7 @@ def write_json(
|
|
129
130
|
file_path: Path to JSON file.
|
130
131
|
contents: Contents of JSON file.
|
131
132
|
encoder: Custom JSON encoder to use when saving json.
|
133
|
+
**json_dump_args: Extra arguments to pass to json.dumps.
|
132
134
|
|
133
135
|
Raises:
|
134
136
|
FileNotFoundError: if directory does not exist.
|
@@ -140,10 +142,7 @@ def write_json(
|
|
140
142
|
raise FileNotFoundError(f"Directory {dir_} does not exist.")
|
141
143
|
io_utils.write_file_contents_as_string(
|
142
144
|
file_path,
|
143
|
-
json.dumps(
|
144
|
-
contents,
|
145
|
-
cls=encoder,
|
146
|
-
),
|
145
|
+
json.dumps(contents, cls=encoder, **json_dump_args),
|
147
146
|
)
|
148
147
|
|
149
148
|
|
{zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.72.0.dev20250121.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=hoLPejHlgKwSc8ZXN10Ej4lKjBInKSP2jVTd1klSUTc,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
|
@@ -85,7 +85,7 @@ zenml/config/step_run_info.py,sha256=KiVRSTtKmZ1GbvseDTap2imr7XwMHD3jSFVpyLNEK1I
|
|
85
85
|
zenml/config/store_config.py,sha256=Cla5p5dTB6nNlo8_OZDs9hod5hspi64vxwtZj882XgU,3559
|
86
86
|
zenml/config/strict_base_model.py,sha256=iHnO9qOmLUP_eiy9IjRr3JjIs1l1I_CsRQ76EyAneYU,860
|
87
87
|
zenml/console.py,sha256=hj_KerPQKwnyKACj0ehSqUQX0mGVCJBKE1QvCt6ik3A,1160
|
88
|
-
zenml/constants.py,sha256=
|
88
|
+
zenml/constants.py,sha256=kCdTTDV5r48dUSD1AVCPH1DL7GqUjhFSErh4Zdp7LCE,15639
|
89
89
|
zenml/container_registries/__init__.py,sha256=ZSPbBIOnzhg88kQSpYgKe_POLuru14m629665-kAVAA,2200
|
90
90
|
zenml/container_registries/azure_container_registry.py,sha256=t1sfDa94Vzbyqtb1iPFNutJ2EXV5_p9CUNITasoiQ70,2667
|
91
91
|
zenml/container_registries/base_container_registry.py,sha256=6c2e32wuqxYHJXm5OV2LY1MtX9yopB7WZtes9fmTAz0,7625
|
@@ -129,7 +129,7 @@ zenml/integrations/airflow/flavors/__init__.py,sha256=Y48mn5OxERPPaXDBd5CFAIn6yh
|
|
129
129
|
zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py,sha256=VfZQD2H-WwIgVD1Fi7uewdnkvRoSykY0YCfROFDadXg,6189
|
130
130
|
zenml/integrations/airflow/orchestrators/__init__.py,sha256=UPly5wqlFdzLSiCeEtIExRXjTNdO0ys2tHSEbEv1Dks,845
|
131
131
|
zenml/integrations/airflow/orchestrators/airflow_orchestrator.py,sha256=8JwNhrvCJi9jgtQPQpNXWFJqE_CGkVtO5t-Rp_eyDVo,15305
|
132
|
-
zenml/integrations/airflow/orchestrators/dag_generator.py,sha256=
|
132
|
+
zenml/integrations/airflow/orchestrators/dag_generator.py,sha256=H5OWZte6q1mXR-joXCbpKJ2KGPIhSOCL0ok-RIiZ1OQ,7345
|
133
133
|
zenml/integrations/argilla/__init__.py,sha256=YeF9Vhv-hIk8k8vnfNuJXzkieLi0TwRZlghefv96KZ4,1455
|
134
134
|
zenml/integrations/argilla/annotators/__init__.py,sha256=QjRMxIQ-skulcLN94GuHuukrmZH27e8lke_tXUp8MOg,798
|
135
135
|
zenml/integrations/argilla/annotators/argilla_annotator.py,sha256=aIA5rcwfOYLnUVp2c_aaTAUnVW8GV9gP8myze_jY_qY,15586
|
@@ -504,11 +504,11 @@ zenml/integrations/skypilot_lambda/flavors/__init__.py,sha256=2Chuv2ViYTppU4Gltv
|
|
504
504
|
zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py,sha256=INsSw8yP48v9TvTp_lRNV1TwXvK-fPhkLAlmUb6971o,4063
|
505
505
|
zenml/integrations/skypilot_lambda/orchestrators/__init__.py,sha256=3S2SmBfCp-ID78dRXh1QoI1uSxpG0M63Ul8lhDOC3AU,1021
|
506
506
|
zenml/integrations/skypilot_lambda/orchestrators/skypilot_lambda_vm_orchestrator.py,sha256=G7vq0l4U0EsIIOc2AeEMCa8BBy94MscgfBpfpy_p6BY,3050
|
507
|
-
zenml/integrations/slack/__init__.py,sha256=
|
507
|
+
zenml/integrations/slack/__init__.py,sha256=7H4CzJzDJKsAYj_eqr8Omlx7zCu3tUP_K5EzhM_K6hs,1513
|
508
508
|
zenml/integrations/slack/alerters/__init__.py,sha256=Jc28JIUWq-k4b6-UkmdIs4WYTuWR2Pvg8Hw7zyoqYN0,733
|
509
|
-
zenml/integrations/slack/alerters/slack_alerter.py,sha256=
|
509
|
+
zenml/integrations/slack/alerters/slack_alerter.py,sha256=QjlZK5lDbeuaFcoysZerACFo7J7r-XAw2vy5kDEyTdM,13128
|
510
510
|
zenml/integrations/slack/flavors/__init__.py,sha256=JOmt7i06JHgW36vYcHwHk1qSC3xOgPCK26Ij73CNtww,886
|
511
|
-
zenml/integrations/slack/flavors/slack_alerter_flavor.py,sha256=
|
511
|
+
zenml/integrations/slack/flavors/slack_alerter_flavor.py,sha256=6hRaC-TByBO2tlFZB3pOTPLkwVvffktegzX0U9vxZNg,4616
|
512
512
|
zenml/integrations/slack/steps/__init__.py,sha256=46AYxvMjeqDJvkrzktWwqLj0H1ecfzKOaq4LKTin_ek,661
|
513
513
|
zenml/integrations/slack/steps/slack_alerter_ask_step.py,sha256=bS-4qCjeqEHWjKOmSBw6mcjjt9u6tNy8NaZ3KQyMtso,2521
|
514
514
|
zenml/integrations/slack/steps/slack_alerter_post_step.py,sha256=o4jPh7oQ_rKC1GzJ2UfH1ov9LFxGVcHXHy6HWpmjPNY,2268
|
@@ -592,7 +592,7 @@ zenml/login/server_info.py,sha256=-_sK2L-curHdzUv1JDOwF6GoEeAXT5vFZN0J-5Ug4wU,16
|
|
592
592
|
zenml/login/web_login.py,sha256=Kq_fA9UQEravB2DtAkMmNvDttk8xppnxV617tCYUl6U,9186
|
593
593
|
zenml/materializers/__init__.py,sha256=maME5CxKcgOkIFwG_iARt1-tuW8u8ZhTzfw50uyv_BA,1667
|
594
594
|
zenml/materializers/base_materializer.py,sha256=M4hwkw7PB0LskCE92r-S35011l7DlFemit-EuUCW3Nc,14002
|
595
|
-
zenml/materializers/built_in_materializer.py,sha256=
|
595
|
+
zenml/materializers/built_in_materializer.py,sha256=cRbuNNvYpvHXYOXysd26HSFo3GNtOlrpmo2cX84Gi-A,16150
|
596
596
|
zenml/materializers/cloudpickle_materializer.py,sha256=x8a6jEMTky6N2YVHiwrnGWSfVJUpiy-4kQsD2Aqj_E0,4837
|
597
597
|
zenml/materializers/materializer_registry.py,sha256=ic-aWhJ2Ex9F_rml2dDVAxhRfW3nd71QMxzfTPP6BIM,4002
|
598
598
|
zenml/materializers/numpy_materializer.py,sha256=OLcHF9Z0tAqQ_U8TraA0vGmZjHoT7eT_XevncIutt0M,1715
|
@@ -692,7 +692,7 @@ zenml/pipelines/__init__.py,sha256=hpIX7hN8jsQRHT5R-xSXZL88qrHwkmrvGLQeu1rWt4o,8
|
|
692
692
|
zenml/pipelines/build_utils.py,sha256=Jas5D8QnjXzizMtcCrJY4dcddeix7QFXbhoY25R47M4,26133
|
693
693
|
zenml/pipelines/pipeline_context.py,sha256=V_p-F9W7cBIlTjS0iv5-uJYMzaOj8bAUkc_uNhQgBms,3579
|
694
694
|
zenml/pipelines/pipeline_decorator.py,sha256=FIbflYOMavbuyGmqsx3F5zZgg0oXMTi1eAcGXciljOs,4293
|
695
|
-
zenml/pipelines/pipeline_definition.py,sha256=
|
695
|
+
zenml/pipelines/pipeline_definition.py,sha256=ByHnPiQWUdyy6UTMcKPXsbClTyFFO_geOGfOMTsRnt8,55924
|
696
696
|
zenml/pipelines/run_utils.py,sha256=KFR2sAvBNiQfw7QFb6-lqwn-ssJWOuw51B3zi3wwCdA,11618
|
697
697
|
zenml/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
698
698
|
zenml/plugins/base_plugin_flavor.py,sha256=88IxFW91UB_rQ8xPlfRnIhIJh7A308NEq2epMMdlOng,2530
|
@@ -790,7 +790,7 @@ zenml/utils/typed_model.py,sha256=00EAo1I1VnOBHG4-ce8dPkyHRPpgi67SRIU-KdewRWs,47
|
|
790
790
|
zenml/utils/typing_utils.py,sha256=jP7JKrlLsuMIStXhwKFNWykE6SMOR72tJIJ_qEbQSNc,6555
|
791
791
|
zenml/utils/uuid_utils.py,sha256=aOGQ2SdREexcVQICPU2jUAgjvAJxTmh4ESdM52PEhck,2045
|
792
792
|
zenml/utils/visualization_utils.py,sha256=bRhgho_c8oKSBGtT4ptWj0PsXsKTKs64L3qZty3sBTM,4702
|
793
|
-
zenml/utils/yaml_utils.py,sha256=
|
793
|
+
zenml/utils/yaml_utils.py,sha256=747M_BTf3lcHFgJDF8RJxnnGIbCU8e9YxBBMmoQ5O_U,5834
|
794
794
|
zenml/zen_server/__init__.py,sha256=WyltI9TzFW2mEHZVOs6alLWMCQrrZaFALtrQXs83STA,1355
|
795
795
|
zenml/zen_server/auth.py,sha256=oP5dN9pyBDbwPlQyjGKZptmmzMAfsefLMz9_Av7qLAQ,39131
|
796
796
|
zenml/zen_server/cache.py,sha256=Tc4TSugmsU1bhThxlYfE8rv0KmltIX1CcVHgzrJ0Eus,6633
|
@@ -1287,8 +1287,8 @@ zenml/zen_stores/secrets_stores/sql_secrets_store.py,sha256=Bq1djrUP9saoD7vECjS7
|
|
1287
1287
|
zenml/zen_stores/sql_zen_store.py,sha256=uE5Rk-Fh_vsAaO0UjDY4hKZp7745R_RbkDAW9C-b5gY,416468
|
1288
1288
|
zenml/zen_stores/template_utils.py,sha256=EKYBgmDLTS_PSMWaIO5yvHPLiQvMqHcsAe6NUCrv-i4,9068
|
1289
1289
|
zenml/zen_stores/zen_store_interface.py,sha256=vf2gKBWfUUPtcGZC35oQB6pPNVzWVyQC8nWxVLjfrxM,92692
|
1290
|
-
zenml_nightly-0.72.0.
|
1291
|
-
zenml_nightly-0.72.0.
|
1292
|
-
zenml_nightly-0.72.0.
|
1293
|
-
zenml_nightly-0.72.0.
|
1294
|
-
zenml_nightly-0.72.0.
|
1290
|
+
zenml_nightly-0.72.0.dev20250121.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
|
1291
|
+
zenml_nightly-0.72.0.dev20250121.dist-info/METADATA,sha256=brWIMEOeCfOB7g4Y5RyggwjwZ3c6sIxwJqwxvRIRzts,21355
|
1292
|
+
zenml_nightly-0.72.0.dev20250121.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
1293
|
+
zenml_nightly-0.72.0.dev20250121.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
|
1294
|
+
zenml_nightly-0.72.0.dev20250121.dist-info/RECORD,,
|
{zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.72.0.dev20250121.dist-info}/LICENSE
RENAMED
File without changes
|
{zenml_nightly-0.72.0.dev20250120.dist-info → zenml_nightly-0.72.0.dev20250121.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|