metaflow 2.12.8__py2.py3-none-any.whl → 2.12.10__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/__init__.py +2 -0
- metaflow/cli.py +12 -4
- metaflow/extension_support/plugins.py +1 -0
- metaflow/flowspec.py +8 -1
- metaflow/lint.py +13 -0
- metaflow/metaflow_current.py +0 -8
- metaflow/plugins/__init__.py +12 -0
- metaflow/plugins/argo/argo_workflows.py +616 -46
- metaflow/plugins/argo/argo_workflows_cli.py +70 -3
- metaflow/plugins/argo/argo_workflows_decorator.py +38 -7
- metaflow/plugins/argo/argo_workflows_deployer.py +290 -0
- metaflow/plugins/argo/daemon.py +59 -0
- metaflow/plugins/argo/jobset_input_paths.py +16 -0
- metaflow/plugins/aws/batch/batch_decorator.py +16 -13
- metaflow/plugins/aws/step_functions/step_functions_cli.py +45 -3
- metaflow/plugins/aws/step_functions/step_functions_deployer.py +251 -0
- metaflow/plugins/cards/card_cli.py +1 -1
- metaflow/plugins/kubernetes/kubernetes.py +279 -52
- metaflow/plugins/kubernetes/kubernetes_cli.py +26 -8
- metaflow/plugins/kubernetes/kubernetes_client.py +0 -1
- metaflow/plugins/kubernetes/kubernetes_decorator.py +56 -44
- metaflow/plugins/kubernetes/kubernetes_job.py +7 -6
- metaflow/plugins/kubernetes/kubernetes_jobsets.py +511 -272
- metaflow/plugins/parallel_decorator.py +108 -8
- metaflow/plugins/secrets/secrets_decorator.py +12 -3
- metaflow/plugins/test_unbounded_foreach_decorator.py +39 -4
- metaflow/runner/deployer.py +386 -0
- metaflow/runner/metaflow_runner.py +1 -20
- metaflow/runner/nbdeploy.py +130 -0
- metaflow/runner/nbrun.py +4 -28
- metaflow/runner/utils.py +49 -0
- metaflow/runtime.py +246 -134
- metaflow/version.py +1 -1
- {metaflow-2.12.8.dist-info → metaflow-2.12.10.dist-info}/METADATA +2 -2
- {metaflow-2.12.8.dist-info → metaflow-2.12.10.dist-info}/RECORD +39 -32
- {metaflow-2.12.8.dist-info → metaflow-2.12.10.dist-info}/WHEEL +1 -1
- {metaflow-2.12.8.dist-info → metaflow-2.12.10.dist-info}/LICENSE +0 -0
- {metaflow-2.12.8.dist-info → metaflow-2.12.10.dist-info}/entry_points.txt +0 -0
- {metaflow-2.12.8.dist-info → metaflow-2.12.10.dist-info}/top_level.txt +0 -0
metaflow/__init__.py
CHANGED
@@ -150,6 +150,8 @@ from . import tuple_util
|
|
150
150
|
if sys.version_info >= (3, 7):
|
151
151
|
from .runner.metaflow_runner import Runner
|
152
152
|
from .runner.nbrun import NBRunner
|
153
|
+
from .runner.deployer import Deployer
|
154
|
+
from .runner.nbdeploy import NBDeployer
|
153
155
|
|
154
156
|
__version_addl__ = []
|
155
157
|
_ext_debug("Loading top-level modules")
|
metaflow/cli.py
CHANGED
@@ -707,10 +707,18 @@ def resume(
|
|
707
707
|
"/".join((obj.flow.name, runtime.run_id)),
|
708
708
|
),
|
709
709
|
)
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
710
|
+
|
711
|
+
# We may skip clone-only resume if this is not a resume leader,
|
712
|
+
# and clone is already complete.
|
713
|
+
if runtime.should_skip_clone_only_execution():
|
714
|
+
return
|
715
|
+
|
716
|
+
with runtime.run_heartbeat():
|
717
|
+
if clone_only:
|
718
|
+
runtime.clone_original_run()
|
719
|
+
else:
|
720
|
+
runtime.clone_original_run(generate_task_obj=True, verbose=False)
|
721
|
+
runtime.execute()
|
714
722
|
|
715
723
|
|
716
724
|
@tracing.cli_entrypoint("cli/run")
|
@@ -180,6 +180,7 @@ _plugin_categories = {
|
|
180
180
|
"datastore": lambda x: x.TYPE,
|
181
181
|
"secrets_provider": lambda x: x.TYPE,
|
182
182
|
"gcp_client_provider": lambda x: x.name,
|
183
|
+
"deployer_impl_provider": lambda x: x.TYPE,
|
183
184
|
"azure_client_provider": lambda x: x.name,
|
184
185
|
"sidecar": None,
|
185
186
|
"logging_sidecar": None,
|
metaflow/flowspec.py
CHANGED
@@ -28,7 +28,14 @@ except NameError:
|
|
28
28
|
|
29
29
|
from .datastore.inputs import Inputs
|
30
30
|
|
31
|
-
INTERNAL_ARTIFACTS_SET = set(
|
31
|
+
INTERNAL_ARTIFACTS_SET = set(
|
32
|
+
[
|
33
|
+
"_foreach_values",
|
34
|
+
"_unbounded_foreach",
|
35
|
+
"_control_mapper_tasks",
|
36
|
+
"_control_task_is_mapper_zero",
|
37
|
+
]
|
38
|
+
)
|
32
39
|
|
33
40
|
|
34
41
|
class InvalidNextException(MetaflowException):
|
metaflow/lint.py
CHANGED
@@ -293,6 +293,19 @@ def check_parallel_step_after_next(graph):
|
|
293
293
|
raise LintWarn(msg.format(node))
|
294
294
|
|
295
295
|
|
296
|
+
@linter.ensure_static_graph
|
297
|
+
@linter.check
|
298
|
+
def check_join_followed_by_parallel_step(graph):
|
299
|
+
msg = (
|
300
|
+
"An @parallel step should be followed by a join step. Step *{0}* is called "
|
301
|
+
"after an @parallel step but is not a join step. Please add an extra `inputs` "
|
302
|
+
"argument to the step."
|
303
|
+
)
|
304
|
+
for node in graph:
|
305
|
+
if node.parallel_step and not graph[node.out_funcs[0]].type == "join":
|
306
|
+
raise LintWarn(msg.format(node.out_funcs[0]))
|
307
|
+
|
308
|
+
|
296
309
|
@linter.ensure_static_graph
|
297
310
|
@linter.check
|
298
311
|
def check_parallel_foreach_calls_parallel_step(graph):
|
metaflow/metaflow_current.py
CHANGED
@@ -260,14 +260,6 @@ class Current(object):
|
|
260
260
|
"""
|
261
261
|
return self._username
|
262
262
|
|
263
|
-
@property
|
264
|
-
def parallel(self):
|
265
|
-
return Parallel(
|
266
|
-
main_ip=os.environ.get("MF_PARALLEL_MAIN_IP", "127.0.0.1"),
|
267
|
-
num_nodes=int(os.environ.get("MF_PARALLEL_NUM_NODES", "1")),
|
268
|
-
node_index=int(os.environ.get("MF_PARALLEL_NODE_INDEX", "0")),
|
269
|
-
)
|
270
|
-
|
271
263
|
@property
|
272
264
|
def tags(self):
|
273
265
|
"""
|
metaflow/plugins/__init__.py
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import sys
|
2
|
+
|
1
3
|
from metaflow.extension_support.plugins import (
|
2
4
|
merge_lists,
|
3
5
|
process_plugins,
|
@@ -139,6 +141,13 @@ AZURE_CLIENT_PROVIDERS_DESC = [
|
|
139
141
|
("azure-default", ".azure.azure_credential.AzureDefaultClientProvider")
|
140
142
|
]
|
141
143
|
|
144
|
+
DEPLOYER_IMPL_PROVIDERS_DESC = [
|
145
|
+
("argo-workflows", ".argo.argo_workflows_deployer.ArgoWorkflowsDeployer"),
|
146
|
+
(
|
147
|
+
"step-functions",
|
148
|
+
".aws.step_functions.step_functions_deployer.StepFunctionsDeployer",
|
149
|
+
),
|
150
|
+
]
|
142
151
|
|
143
152
|
process_plugins(globals())
|
144
153
|
|
@@ -164,6 +173,9 @@ SECRETS_PROVIDERS = resolve_plugins("secrets_provider")
|
|
164
173
|
AZURE_CLIENT_PROVIDERS = resolve_plugins("azure_client_provider")
|
165
174
|
GCP_CLIENT_PROVIDERS = resolve_plugins("gcp_client_provider")
|
166
175
|
|
176
|
+
if sys.version_info >= (3, 7):
|
177
|
+
DEPLOYER_IMPL_PROVIDERS = resolve_plugins("deployer_impl_provider")
|
178
|
+
|
167
179
|
from .cards.card_modules import MF_EXTERNAL_CARDS
|
168
180
|
|
169
181
|
# Cards; due to the way cards were designed, it is harder to make them fit
|