metaflow 2.16.7__py2.py3-none-any.whl → 2.16.8__py2.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.
- metaflow/plugins/argo/argo_workflows.py +60 -2
- metaflow/plugins/kubernetes/kubernetes_jobsets.py +26 -28
- metaflow/version.py +1 -1
- {metaflow-2.16.7.dist-info → metaflow-2.16.8.dist-info}/METADATA +2 -2
- {metaflow-2.16.7.dist-info → metaflow-2.16.8.dist-info}/RECORD +12 -12
- {metaflow-2.16.7.data → metaflow-2.16.8.data}/data/share/metaflow/devtools/Makefile +0 -0
- {metaflow-2.16.7.data → metaflow-2.16.8.data}/data/share/metaflow/devtools/Tiltfile +0 -0
- {metaflow-2.16.7.data → metaflow-2.16.8.data}/data/share/metaflow/devtools/pick_services.sh +0 -0
- {metaflow-2.16.7.dist-info → metaflow-2.16.8.dist-info}/WHEEL +0 -0
- {metaflow-2.16.7.dist-info → metaflow-2.16.8.dist-info}/entry_points.txt +0 -0
- {metaflow-2.16.7.dist-info → metaflow-2.16.8.dist-info}/licenses/LICENSE +0 -0
- {metaflow-2.16.7.dist-info → metaflow-2.16.8.dist-info}/top_level.txt +0 -0
@@ -3226,8 +3226,8 @@ class ArgoWorkflows(object):
|
|
3226
3226
|
Trigger().template(
|
3227
3227
|
TriggerTemplate(self.name)
|
3228
3228
|
# Trigger a deployed workflow template
|
3229
|
-
.
|
3230
|
-
|
3229
|
+
.k8s_trigger(
|
3230
|
+
StandardK8STrigger()
|
3231
3231
|
.source(
|
3232
3232
|
{
|
3233
3233
|
"resource": {
|
@@ -4205,6 +4205,10 @@ class TriggerTemplate(object):
|
|
4205
4205
|
self.payload = tree()
|
4206
4206
|
self.payload["name"] = name
|
4207
4207
|
|
4208
|
+
def k8s_trigger(self, k8s_trigger):
|
4209
|
+
self.payload["k8s"] = k8s_trigger.to_json()
|
4210
|
+
return self
|
4211
|
+
|
4208
4212
|
def argo_workflow_trigger(self, argo_workflow_trigger):
|
4209
4213
|
self.payload["argoWorkflow"] = argo_workflow_trigger.to_json()
|
4210
4214
|
return self
|
@@ -4279,3 +4283,57 @@ class TriggerParameter(object):
|
|
4279
4283
|
|
4280
4284
|
def __str__(self):
|
4281
4285
|
return json.dumps(self.payload, indent=4)
|
4286
|
+
|
4287
|
+
|
4288
|
+
class StandardK8STrigger(object):
|
4289
|
+
# https://pkg.go.dev/github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1#StandardK8STrigger
|
4290
|
+
|
4291
|
+
def __init__(self):
|
4292
|
+
tree = lambda: defaultdict(tree)
|
4293
|
+
self.payload = tree()
|
4294
|
+
self.payload["operation"] = "create"
|
4295
|
+
|
4296
|
+
def operation(self, operation):
|
4297
|
+
self.payload["operation"] = operation
|
4298
|
+
return self
|
4299
|
+
|
4300
|
+
def group(self, group):
|
4301
|
+
self.payload["group"] = group
|
4302
|
+
return self
|
4303
|
+
|
4304
|
+
def version(self, version):
|
4305
|
+
self.payload["version"] = version
|
4306
|
+
return self
|
4307
|
+
|
4308
|
+
def resource(self, resource):
|
4309
|
+
self.payload["resource"] = resource
|
4310
|
+
return self
|
4311
|
+
|
4312
|
+
def namespace(self, namespace):
|
4313
|
+
self.payload["namespace"] = namespace
|
4314
|
+
return self
|
4315
|
+
|
4316
|
+
def source(self, source):
|
4317
|
+
self.payload["source"] = source
|
4318
|
+
return self
|
4319
|
+
|
4320
|
+
def parameters(self, trigger_parameters):
|
4321
|
+
if "parameters" not in self.payload:
|
4322
|
+
self.payload["parameters"] = []
|
4323
|
+
for trigger_parameter in trigger_parameters:
|
4324
|
+
self.payload["parameters"].append(trigger_parameter.to_json())
|
4325
|
+
return self
|
4326
|
+
|
4327
|
+
def live_object(self, live_object=True):
|
4328
|
+
self.payload["liveObject"] = live_object
|
4329
|
+
return self
|
4330
|
+
|
4331
|
+
def patch_strategy(self, patch_strategy):
|
4332
|
+
self.payload["patchStrategy"] = patch_strategy
|
4333
|
+
return self
|
4334
|
+
|
4335
|
+
def to_json(self):
|
4336
|
+
return self.payload
|
4337
|
+
|
4338
|
+
def __str__(self):
|
4339
|
+
return json.dumps(self.payload, indent=4)
|
@@ -6,6 +6,7 @@ from collections import namedtuple
|
|
6
6
|
from metaflow.exception import MetaflowException
|
7
7
|
from metaflow.metaflow_config import KUBERNETES_JOBSET_GROUP, KUBERNETES_JOBSET_VERSION
|
8
8
|
from metaflow.tracing import inject_tracing_vars
|
9
|
+
from metaflow._vendor import yaml
|
9
10
|
|
10
11
|
from .kube_utils import qos_requests_and_limits
|
11
12
|
|
@@ -1025,34 +1026,32 @@ class KubernetesArgoJobSet(object):
|
|
1025
1026
|
|
1026
1027
|
def dump(self):
|
1027
1028
|
client = self._kubernetes_sdk
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
|
1034
|
-
|
1035
|
-
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
),
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
),
|
1052
|
-
status=None,
|
1053
|
-
)
|
1029
|
+
js_dict = client.ApiClient().sanitize_for_serialization(
|
1030
|
+
dict(
|
1031
|
+
apiVersion=self._group + "/" + self._version,
|
1032
|
+
kind="JobSet",
|
1033
|
+
metadata=client.api_client.ApiClient().sanitize_for_serialization(
|
1034
|
+
client.V1ObjectMeta(
|
1035
|
+
name=self.name,
|
1036
|
+
labels=self._labels,
|
1037
|
+
annotations=self._annotations,
|
1038
|
+
)
|
1039
|
+
),
|
1040
|
+
spec=dict(
|
1041
|
+
replicatedJobs=[self.control.dump(), self.worker.dump()],
|
1042
|
+
suspend=False,
|
1043
|
+
startupPolicy=None,
|
1044
|
+
successPolicy=None,
|
1045
|
+
# The Failure Policy helps setting the number of retries for the jobset.
|
1046
|
+
# but we don't rely on it and instead rely on either the local scheduler
|
1047
|
+
# or the Argo Workflows to handle retries.
|
1048
|
+
failurePolicy=None,
|
1049
|
+
network=None,
|
1050
|
+
),
|
1051
|
+
status=None,
|
1054
1052
|
)
|
1055
1053
|
)
|
1054
|
+
data = yaml.dump(js_dict, default_flow_style=False, indent=2)
|
1056
1055
|
# The values we populate in the Jobset manifest (for Argo Workflows) piggybacks on the Argo Workflow's templating engine.
|
1057
1056
|
# Even though Argo Workflows's templating helps us constructing all the necessary IDs and populating the fields
|
1058
1057
|
# required by Metaflow, we run into one glitch. When we construct JSON/YAML serializable objects,
|
@@ -1067,7 +1066,6 @@ class KubernetesArgoJobSet(object):
|
|
1067
1066
|
# Since the value of `num_parallel` can be dynamic and can change from run to run, we need to ensure that the
|
1068
1067
|
# value can be passed-down dynamically and is **explicitly set as a integer** in the Jobset Manifest submitted as a
|
1069
1068
|
# part of the Argo Workflow
|
1070
|
-
|
1071
|
-
quoted_substring = '"{{=asInt(inputs.parameters.workerCount)}}"'
|
1069
|
+
quoted_substring = "'{{=asInt(inputs.parameters.workerCount)}}'"
|
1072
1070
|
unquoted_substring = "{{=asInt(inputs.parameters.workerCount)}}"
|
1073
1071
|
return data.replace(quoted_substring, unquoted_substring)
|
metaflow/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
metaflow_version = "2.16.
|
1
|
+
metaflow_version = "2.16.8"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: metaflow
|
3
|
-
Version: 2.16.
|
3
|
+
Version: 2.16.8
|
4
4
|
Summary: Metaflow: More AI and ML, Less Engineering
|
5
5
|
Author: Metaflow Developers
|
6
6
|
Author-email: help@metaflow.org
|
@@ -26,7 +26,7 @@ License-File: LICENSE
|
|
26
26
|
Requires-Dist: requests
|
27
27
|
Requires-Dist: boto3
|
28
28
|
Provides-Extra: stubs
|
29
|
-
Requires-Dist: metaflow-stubs==2.16.
|
29
|
+
Requires-Dist: metaflow-stubs==2.16.8; extra == "stubs"
|
30
30
|
Dynamic: author
|
31
31
|
Dynamic: author-email
|
32
32
|
Dynamic: classifier
|
@@ -36,7 +36,7 @@ metaflow/tuple_util.py,sha256=_G5YIEhuugwJ_f6rrZoelMFak3DqAR2tt_5CapS1XTY,830
|
|
36
36
|
metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
|
37
37
|
metaflow/util.py,sha256=g2SOU_CRzJLgDM_UGF9QDMANMAIHAsDRXE6S76_YzsY,14594
|
38
38
|
metaflow/vendor.py,sha256=A82CGHfStZGDP5pQ5XzRjFkbN1ZC-vFmghXIrzMDDNg,5868
|
39
|
-
metaflow/version.py,sha256=
|
39
|
+
metaflow/version.py,sha256=LJ_ecrHE9dV_HLy2jVgiuSJcNaeKHWVVsTVcy4lccvs,28
|
40
40
|
metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
|
41
41
|
metaflow/_vendor/typing_extensions.py,sha256=q9zxWa6p6CzF1zZvSkygSlklduHf_b3K7MCxGz7MJRc,134519
|
42
42
|
metaflow/_vendor/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
|
@@ -230,7 +230,7 @@ metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=iDReG-7FKnumrtQg-HY6cCUAAqN
|
|
230
230
|
metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
231
231
|
metaflow/plugins/argo/argo_client.py,sha256=jLz0FjCTBvFLZt-8lZcMQhDcInhgEcGdPrU2Gvh67zA,17080
|
232
232
|
metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
|
233
|
-
metaflow/plugins/argo/argo_workflows.py,sha256=
|
233
|
+
metaflow/plugins/argo/argo_workflows.py,sha256=wgbtRcIfXesZ-1RF-1X-i_hjzOiLw7c41l_NBdnH-9I,189118
|
234
234
|
metaflow/plugins/argo/argo_workflows_cli.py,sha256=Le_GgvLVE1MhxQeOv-k5xp4L51tzQ6ZIq3_P-YEphIk,38784
|
235
235
|
metaflow/plugins/argo/argo_workflows_decorator.py,sha256=ogCSBmwsC2C3eusydrgjuAJd4qK18f1sI4jJwA4Fd-o,7800
|
236
236
|
metaflow/plugins/argo/argo_workflows_deployer.py,sha256=6kHxEnYXJwzNCM9swI8-0AckxtPWqwhZLerYkX8fxUM,4444
|
@@ -347,7 +347,7 @@ metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=qtWTQqp8i-hTKAA0RcJ_qeOuD8T
|
|
347
347
|
metaflow/plugins/kubernetes/kubernetes_client.py,sha256=tuvXP-QKpdeSmzVolB2R_TaacOr5DIb0j642eKcjsiM,6491
|
348
348
|
metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=X5KD0_Hd6DB332uzOWootgmniu3OkLX5ImQ5fnyVUSU,32438
|
349
349
|
metaflow/plugins/kubernetes/kubernetes_job.py,sha256=0QyEyi6XusHq5M7RqPY4ypQXrsQac-eG2O14b7inPOo,32277
|
350
|
-
metaflow/plugins/kubernetes/kubernetes_jobsets.py,sha256=
|
350
|
+
metaflow/plugins/kubernetes/kubernetes_jobsets.py,sha256=9DOGNdGnhOlaBsIp1Sl7ylIc444WRP7Y_fT2_JbPZLg,43040
|
351
351
|
metaflow/plugins/kubernetes/spot_metadata_cli.py,sha256=an0nWCxgflmqIPBCBrlb4m3DereDFFJBLt-KKhqcHc8,1670
|
352
352
|
metaflow/plugins/kubernetes/spot_monitor_sidecar.py,sha256=zrWU-smQwPnL6MBHmzTxWyEA00R6iKKQbhhy50xFwQ8,3832
|
353
353
|
metaflow/plugins/metadata_providers/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
@@ -426,12 +426,12 @@ metaflow/user_decorators/mutable_flow.py,sha256=icF7XFCS5FdlW3OEL68ZbQOtTPhLsUyc
|
|
426
426
|
metaflow/user_decorators/mutable_step.py,sha256=-BY0UDXf_RCAEnC5JlLzEXGdiw1KD9oSrSxS_SWaB9Y,16791
|
427
427
|
metaflow/user_decorators/user_flow_decorator.py,sha256=2yDwZq9QGv9W-7kEuKwa8o4ZkTvuHJ5ESz7VVrGViAI,9890
|
428
428
|
metaflow/user_decorators/user_step_decorator.py,sha256=JYNGXONWCpzwn-_bF5WiAkof4Ii9tRS4xdK8ojSxG6M,26007
|
429
|
-
metaflow-2.16.
|
430
|
-
metaflow-2.16.
|
431
|
-
metaflow-2.16.
|
432
|
-
metaflow-2.16.
|
433
|
-
metaflow-2.16.
|
434
|
-
metaflow-2.16.
|
435
|
-
metaflow-2.16.
|
436
|
-
metaflow-2.16.
|
437
|
-
metaflow-2.16.
|
429
|
+
metaflow-2.16.8.data/data/share/metaflow/devtools/Makefile,sha256=5n89OGIC_kE4wxtEI66VCucN-b-1w5bqvGeZYmeRGz8,13737
|
430
|
+
metaflow-2.16.8.data/data/share/metaflow/devtools/Tiltfile,sha256=I55XTG4RBnrMfDcYRtREXqqS8T9bF8agkZq0DlvdFLk,21404
|
431
|
+
metaflow-2.16.8.data/data/share/metaflow/devtools/pick_services.sh,sha256=DCnrMXwtApfx3B4S-YiZESMyAFHbXa3VuNL0MxPLyiE,2196
|
432
|
+
metaflow-2.16.8.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
|
433
|
+
metaflow-2.16.8.dist-info/METADATA,sha256=TmUiaW88Xki28z8MEUj6iEMjB0mnXxbcbUrw65Pi_wM,6740
|
434
|
+
metaflow-2.16.8.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
435
|
+
metaflow-2.16.8.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
|
436
|
+
metaflow-2.16.8.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
|
437
|
+
metaflow-2.16.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|