metaflow 2.17.5__py2.py3-none-any.whl → 2.18.0__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/lint.py +22 -0
- metaflow/plugins/argo/argo_workflows.py +4 -2
- metaflow/plugins/package_cli.py +1 -1
- metaflow/task.py +3 -1
- metaflow/user_configs/config_parameters.py +3 -1
- metaflow/version.py +1 -1
- {metaflow-2.17.5.dist-info → metaflow-2.18.0.dist-info}/METADATA +2 -2
- {metaflow-2.17.5.dist-info → metaflow-2.18.0.dist-info}/RECORD +15 -15
- {metaflow-2.17.5.data → metaflow-2.18.0.data}/data/share/metaflow/devtools/Makefile +0 -0
- {metaflow-2.17.5.data → metaflow-2.18.0.data}/data/share/metaflow/devtools/Tiltfile +0 -0
- {metaflow-2.17.5.data → metaflow-2.18.0.data}/data/share/metaflow/devtools/pick_services.sh +0 -0
- {metaflow-2.17.5.dist-info → metaflow-2.18.0.dist-info}/WHEEL +0 -0
- {metaflow-2.17.5.dist-info → metaflow-2.18.0.dist-info}/entry_points.txt +0 -0
- {metaflow-2.17.5.dist-info → metaflow-2.18.0.dist-info}/licenses/LICENSE +0 -0
- {metaflow-2.17.5.dist-info → metaflow-2.18.0.dist-info}/top_level.txt +0 -0
metaflow/lint.py
CHANGED
@@ -416,3 +416,25 @@ def check_nested_foreach(graph):
|
|
416
416
|
if node.type == "foreach":
|
417
417
|
if any(graph[p].type == "foreach" for p in node.split_parents):
|
418
418
|
raise LintWarn(msg.format(node), node.func_lineno, node.source_file)
|
419
|
+
|
420
|
+
|
421
|
+
@linter.ensure_static_graph
|
422
|
+
@linter.check
|
423
|
+
def check_ambiguous_joins(graph):
|
424
|
+
for node in graph:
|
425
|
+
if node.type == "join":
|
426
|
+
problematic_parents = [
|
427
|
+
p_name
|
428
|
+
for p_name in node.in_funcs
|
429
|
+
if graph[p_name].type == "split-switch"
|
430
|
+
]
|
431
|
+
if problematic_parents:
|
432
|
+
msg = (
|
433
|
+
"A conditional path cannot lead directly to a join step.\n"
|
434
|
+
"In your conditional step(s) {parents}, one or more of the possible paths transition directly to the join step {join_name}.\n"
|
435
|
+
"As a workaround, please introduce an intermediate, unconditional step on that specific path before joining."
|
436
|
+
).format(
|
437
|
+
parents=", ".join("*%s*" % p for p in problematic_parents),
|
438
|
+
join_name="*%s*" % node.name,
|
439
|
+
)
|
440
|
+
raise LintWarn(msg, node.func_lineno, node.source_file)
|
@@ -1894,8 +1894,10 @@ class ArgoWorkflows(object):
|
|
1894
1894
|
# foreach-joins straight out of conditional branches are not yet supported
|
1895
1895
|
if self._is_conditional_join_node(node):
|
1896
1896
|
raise ArgoWorkflowsException(
|
1897
|
-
"
|
1898
|
-
"As a workaround,
|
1897
|
+
"Conditional steps inside a foreach that transition directly into a join step are not currently supported.\n"
|
1898
|
+
"As a workaround, add a common step after the conditional steps %s "
|
1899
|
+
"that will transition to a join."
|
1900
|
+
% ", ".join("*%s*" % f for f in node.in_funcs)
|
1899
1901
|
)
|
1900
1902
|
# Set aggregated input-paths for a for-each join
|
1901
1903
|
foreach_step = next(
|
metaflow/plugins/package_cli.py
CHANGED
@@ -60,7 +60,7 @@ def list(obj, archive=False):
|
|
60
60
|
@click.pass_obj
|
61
61
|
def save(obj, path):
|
62
62
|
with open(path, "wb") as f:
|
63
|
-
f.write(obj.package.blob
|
63
|
+
f.write(obj.package.blob)
|
64
64
|
obj.echo(
|
65
65
|
"Code package saved in *%s* with metadata: %s"
|
66
66
|
% (path, obj.package.package_metadata),
|
metaflow/task.py
CHANGED
@@ -121,8 +121,10 @@ class MetaflowTask(object):
|
|
121
121
|
r = w.post_step(orig_step_func.name, self.flow, raised_exception)
|
122
122
|
except Exception as ex:
|
123
123
|
r = ex
|
124
|
-
if r is None
|
124
|
+
if r is None:
|
125
125
|
raised_exception = None
|
126
|
+
elif isinstance(r, Exception):
|
127
|
+
raised_exception = r
|
126
128
|
elif isinstance(r, tuple):
|
127
129
|
if len(r) == 2:
|
128
130
|
raised_exception, fake_next_call_args = r
|
@@ -271,6 +271,9 @@ class ConfigValue(collections.abc.Mapping, dict):
|
|
271
271
|
v = obj
|
272
272
|
return v
|
273
273
|
|
274
|
+
def __reduce__(self):
|
275
|
+
return (self.__class__, (self.to_dict(),))
|
276
|
+
|
274
277
|
|
275
278
|
class DelayEvaluator(collections.abc.Mapping):
|
276
279
|
"""
|
@@ -484,7 +487,6 @@ class Config(Parameter, collections.abc.Mapping):
|
|
484
487
|
parser: Optional[Union[str, Callable[[str], Dict[Any, Any]]]] = None,
|
485
488
|
**kwargs: Dict[str, str]
|
486
489
|
):
|
487
|
-
|
488
490
|
if default is not None and default_value is not None:
|
489
491
|
raise MetaflowException(
|
490
492
|
"For config '%s', you can only specify default or default_value, not both"
|
metaflow/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
metaflow_version = "2.
|
1
|
+
metaflow_version = "2.18.0"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: metaflow
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.18.0
|
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.
|
29
|
+
Requires-Dist: metaflow-stubs==2.18.0; extra == "stubs"
|
30
30
|
Dynamic: author
|
31
31
|
Dynamic: author-email
|
32
32
|
Dynamic: classifier
|
@@ -14,7 +14,7 @@ metaflow/flowspec.py,sha256=9wsO2_QoO_VHKusKdpslfbwQREOwf0fAzF-DSEA0iZ8,41968
|
|
14
14
|
metaflow/graph.py,sha256=UOeClj-JeORRlZWOQMI1CirkrCpTvVWvRcSwODCajMg,19263
|
15
15
|
metaflow/includefile.py,sha256=RtISGl1V48qjkJBakUZ9yPpHV102h7pOIFiKP8PLHpc,20927
|
16
16
|
metaflow/integrations.py,sha256=LlsaoePRg03DjENnmLxZDYto3NwWc9z_PtU6nJxLldg,1480
|
17
|
-
metaflow/lint.py,sha256=
|
17
|
+
metaflow/lint.py,sha256=A2NdUq_MnQal_RUCMC8ZOSR0VYZGyi2mSgwPQB0UzQo,15343
|
18
18
|
metaflow/meta_files.py,sha256=vlgJHI8GJUKzXoxdrVoH8yyCF5bhFgwYemUgnyd1wgM,342
|
19
19
|
metaflow/metaflow_config.py,sha256=lsdfr_1eS4cP6g1OgLWePKzUIypUGVjNxffRhKlFWfA,24102
|
20
20
|
metaflow/metaflow_config_funcs.py,sha256=5GlvoafV6SxykwfL8D12WXSfwjBN_NsyuKE_Q3gjGVE,6738
|
@@ -31,12 +31,12 @@ metaflow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
31
|
metaflow/pylint_wrapper.py,sha256=tJjmdsgtbHTCqg_oA6fV6SbWq_3V5XUgE9xH0zJ1CGU,3004
|
32
32
|
metaflow/runtime.py,sha256=3R44AFI04LWahbfa2v0yDYIWHIz6sau26p1SnzYFNew,86888
|
33
33
|
metaflow/tagging_util.py,sha256=ctyf0Q1gBi0RyZX6J0e9DQGNkNHblV_CITfy66axXB4,2346
|
34
|
-
metaflow/task.py,sha256=
|
34
|
+
metaflow/task.py,sha256=jnh_qteVIW0sP3Y2MBfJR2eEv_MGnOW1quPO_1OltH0,39244
|
35
35
|
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=GQnbrtyPirqYpqhPvarOOi5VzV-a2pEEafFGrBt3LNo,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
|
@@ -205,7 +205,7 @@ metaflow/plugins/debug_monitor.py,sha256=Md5X_sDOSssN9pt2D8YcaIjTK5JaQD55UAYTcF6
|
|
205
205
|
metaflow/plugins/environment_decorator.py,sha256=6m9j2B77d-Ja_l_9CTJ__0O6aB2a8Qt_lAZu6UjAcUA,587
|
206
206
|
metaflow/plugins/events_decorator.py,sha256=T_YSK-DlgZhd3ge9PlpTRNaMi15GK0tKZMZl1NdV9DQ,24403
|
207
207
|
metaflow/plugins/logs_cli.py,sha256=77W5UNagU2mOKSMMvrQxQmBLRzvmjK-c8dWxd-Ygbqs,11410
|
208
|
-
metaflow/plugins/package_cli.py,sha256=
|
208
|
+
metaflow/plugins/package_cli.py,sha256=GOxKJs9Wt0x9VtcTJ2EG_wj6pWnlS0XBFAyHpCzzuvs,2000
|
209
209
|
metaflow/plugins/parallel_decorator.py,sha256=wtR_3eRIP3eV7fBIm15oouRjmHBFZ9OklxdaNvttLEQ,9702
|
210
210
|
metaflow/plugins/project_decorator.py,sha256=uhwsguEj7OM_E2OnY1ap3MoGocQHeywuJSa-qPuWn-U,7592
|
211
211
|
metaflow/plugins/resources_decorator.py,sha256=AtoOwg4mHYHYthg-CAfbfam-QiT0ViuDLDoukoDvF6Q,1347
|
@@ -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=URF89Inj4gXQJ5p4_nFPTQihj-LlQZP0yq38kIlmhKU,207599
|
234
234
|
metaflow/plugins/argo/argo_workflows_cli.py,sha256=L5KwcT6Vd4HqAXFCPGmHUONgM2eOCTbvxdoIs6CQchw,51877
|
235
235
|
metaflow/plugins/argo/argo_workflows_decorator.py,sha256=CLSjPqFTGucZ2_dSQGAYkoWWUZBQ9TCBXul4rxhDj3w,8282
|
236
236
|
metaflow/plugins/argo/argo_workflows_deployer.py,sha256=6kHxEnYXJwzNCM9swI8-0AckxtPWqwhZLerYkX8fxUM,4444
|
@@ -421,19 +421,19 @@ metaflow/tutorials/08-autopilot/README.md,sha256=GnePFp_q76jPs991lMUqfIIh5zSorIe
|
|
421
421
|
metaflow/tutorials/08-autopilot/autopilot.ipynb,sha256=DQoJlILV7Mq9vfPBGW-QV_kNhWPjS5n6SJLqePjFYLY,3191
|
422
422
|
metaflow/user_configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
423
423
|
metaflow/user_configs/config_options.py,sha256=d3hKA6WRPe21PdTl7sBnxIp5sE6zBpRtgAGx7hWkkfw,21380
|
424
|
-
metaflow/user_configs/config_parameters.py,sha256=
|
424
|
+
metaflow/user_configs/config_parameters.py,sha256=1KZC1x7i-M-PfscIEOMUJ5NT2HTzFsB0HtNMTp_8hqE,20967
|
425
425
|
metaflow/user_decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
426
426
|
metaflow/user_decorators/common.py,sha256=0u9NRLQ95TfJCjWVEOGT4MJ9WoQgAMBM9kJ2gJGlVjk,5362
|
427
427
|
metaflow/user_decorators/mutable_flow.py,sha256=EywKTN3cnXPQF_s62wQaC4a4aH14j8oeqzD3yZaiDxw,19467
|
428
428
|
metaflow/user_decorators/mutable_step.py,sha256=-BY0UDXf_RCAEnC5JlLzEXGdiw1KD9oSrSxS_SWaB9Y,16791
|
429
429
|
metaflow/user_decorators/user_flow_decorator.py,sha256=2yDwZq9QGv9W-7kEuKwa8o4ZkTvuHJ5ESz7VVrGViAI,9890
|
430
430
|
metaflow/user_decorators/user_step_decorator.py,sha256=4558NR8RJtN22OyTwCXO80bAMhMTaRGMoX12b1GMcPc,27232
|
431
|
-
metaflow-2.
|
432
|
-
metaflow-2.
|
433
|
-
metaflow-2.
|
434
|
-
metaflow-2.
|
435
|
-
metaflow-2.
|
436
|
-
metaflow-2.
|
437
|
-
metaflow-2.
|
438
|
-
metaflow-2.
|
439
|
-
metaflow-2.
|
431
|
+
metaflow-2.18.0.data/data/share/metaflow/devtools/Makefile,sha256=TT4TCq8ALSfqYyGqDPocN5oPcZe2FqoCZxmGO1LmyCc,13760
|
432
|
+
metaflow-2.18.0.data/data/share/metaflow/devtools/Tiltfile,sha256=Ty5p6AD3MwJAcAnOGv4yMz8fExAsnNQ11r8whK6uzzw,21381
|
433
|
+
metaflow-2.18.0.data/data/share/metaflow/devtools/pick_services.sh,sha256=DCnrMXwtApfx3B4S-YiZESMyAFHbXa3VuNL0MxPLyiE,2196
|
434
|
+
metaflow-2.18.0.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
|
435
|
+
metaflow-2.18.0.dist-info/METADATA,sha256=Ic26QTgdp3FKW3w-l43idt6wchjKZWHfNrcN5bCUyeE,6740
|
436
|
+
metaflow-2.18.0.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
437
|
+
metaflow-2.18.0.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
|
438
|
+
metaflow-2.18.0.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
|
439
|
+
metaflow-2.18.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|