metaflow 2.12.4__py2.py3-none-any.whl → 2.12.6__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/cli.py +1 -1
- metaflow/plugins/argo/argo_workflows.py +6 -2
- metaflow/plugins/cards/card_cli.py +36 -25
- metaflow/plugins/cards/card_modules/basic.py +13 -0
- metaflow/plugins/pypi/conda_decorator.py +8 -0
- metaflow/plugins/pypi/conda_environment.py +10 -10
- metaflow/plugins/pypi/pip.py +31 -3
- metaflow/plugins/pypi/pypi_decorator.py +8 -0
- metaflow/version.py +1 -1
- {metaflow-2.12.4.dist-info → metaflow-2.12.6.dist-info}/METADATA +2 -2
- {metaflow-2.12.4.dist-info → metaflow-2.12.6.dist-info}/RECORD +15 -15
- {metaflow-2.12.4.dist-info → metaflow-2.12.6.dist-info}/WHEEL +1 -1
- {metaflow-2.12.4.dist-info → metaflow-2.12.6.dist-info}/LICENSE +0 -0
- {metaflow-2.12.4.dist-info → metaflow-2.12.6.dist-info}/entry_points.txt +0 -0
- {metaflow-2.12.4.dist-info → metaflow-2.12.6.dist-info}/top_level.txt +0 -0
metaflow/cli.py
CHANGED
@@ -946,7 +946,7 @@ def start(
|
|
946
946
|
ctx.obj.environment = [
|
947
947
|
e for e in ENVIRONMENTS + [MetaflowEnvironment] if e.TYPE == environment
|
948
948
|
][0](ctx.obj.flow)
|
949
|
-
ctx.obj.environment.validate_environment(
|
949
|
+
ctx.obj.environment.validate_environment(ctx.obj.logger, datastore)
|
950
950
|
|
951
951
|
ctx.obj.event_logger = LOGGING_SIDECARS[event_logger](
|
952
952
|
flow=ctx.obj.flow, env=ctx.obj.environment
|
@@ -6,6 +6,7 @@ import shlex
|
|
6
6
|
import sys
|
7
7
|
from collections import defaultdict
|
8
8
|
from hashlib import sha1
|
9
|
+
from math import inf
|
9
10
|
|
10
11
|
from metaflow import JSONType, current
|
11
12
|
from metaflow.decorators import flow_decorators
|
@@ -901,7 +902,9 @@ class ArgoWorkflows(object):
|
|
901
902
|
"argo-{{workflow.name}}/%s/{{tasks.%s.outputs.parameters.task-id}}"
|
902
903
|
% (n, self._sanitize(n))
|
903
904
|
for n in node.in_funcs
|
904
|
-
]
|
905
|
+
],
|
906
|
+
# NOTE: We set zlibmin to infinite because zlib compression for the Argo input-paths breaks template value substitution.
|
907
|
+
zlibmin=inf,
|
905
908
|
)
|
906
909
|
)
|
907
910
|
]
|
@@ -2154,7 +2157,8 @@ class ArgoWorkflows(object):
|
|
2154
2157
|
# everything within the body.
|
2155
2158
|
# NOTE: We need the conditional logic in order to successfully fall back to the default value
|
2156
2159
|
# when the event payload does not contain a key for a parameter.
|
2157
|
-
|
2160
|
+
# NOTE: Keys might contain dashes, so use the safer 'get' for fetching the value
|
2161
|
+
data_template='{{ if (hasKey $.Input.body.payload "%s") }}{{- (get $.Input.body.payload "%s" | toJson) -}}{{- else -}}{{ (fail "use-default-instead") }}{{- end -}}'
|
2158
2162
|
% (v, v),
|
2159
2163
|
# Unfortunately the sensor needs to
|
2160
2164
|
# record the default values for
|
@@ -388,6 +388,22 @@ def card_read_options_and_arguments(func):
|
|
388
388
|
return wrapper
|
389
389
|
|
390
390
|
|
391
|
+
def _extract_reload_token(data, task, mf_card):
|
392
|
+
if "render_seq" not in data:
|
393
|
+
return "never"
|
394
|
+
|
395
|
+
if data["render_seq"] == "final":
|
396
|
+
# final data update should always trigger a card reload to show
|
397
|
+
# the final card, hence a different token for the final update
|
398
|
+
return "final"
|
399
|
+
elif mf_card.RELOAD_POLICY == mf_card.RELOAD_POLICY_ALWAYS:
|
400
|
+
return "render-seq-%s" % data["render_seq"]
|
401
|
+
elif mf_card.RELOAD_POLICY == mf_card.RELOAD_POLICY_NEVER:
|
402
|
+
return "never"
|
403
|
+
elif mf_card.RELOAD_POLICY == mf_card.RELOAD_POLICY_ONCHANGE:
|
404
|
+
return mf_card.reload_content_token(task, data)
|
405
|
+
|
406
|
+
|
391
407
|
def update_card(mf_card, mode, task, data, timeout_value=None):
|
392
408
|
"""
|
393
409
|
This method will be responsible for creating a card/data-update based on the `mode`.
|
@@ -432,31 +448,21 @@ def update_card(mf_card, mode, task, data, timeout_value=None):
|
|
432
448
|
- `timeout_stack_trace` : stack trace of the function if it timed out.
|
433
449
|
"""
|
434
450
|
|
435
|
-
def _reload_token():
|
436
|
-
if "render_seq" not in data:
|
437
|
-
return "never"
|
438
|
-
|
439
|
-
if data["render_seq"] == "final":
|
440
|
-
# final data update should always trigger a card reload to show
|
441
|
-
# the final card, hence a different token for the final update
|
442
|
-
return "final"
|
443
|
-
elif mf_card.RELOAD_POLICY == mf_card.RELOAD_POLICY_ALWAYS:
|
444
|
-
return "render-seq-%s" % data["render_seq"]
|
445
|
-
elif mf_card.RELOAD_POLICY == mf_card.RELOAD_POLICY_NEVER:
|
446
|
-
return "never"
|
447
|
-
elif mf_card.RELOAD_POLICY == mf_card.RELOAD_POLICY_ONCHANGE:
|
448
|
-
return mf_card.reload_content_token(task, data)
|
449
|
-
|
450
451
|
def _add_token_html(html):
|
451
452
|
if html is None:
|
452
453
|
return None
|
453
|
-
return html.replace(
|
454
|
+
return html.replace(
|
455
|
+
mf_card.RELOAD_POLICY_TOKEN,
|
456
|
+
_extract_reload_token(data=data, task=task, mf_card=mf_card),
|
457
|
+
)
|
454
458
|
|
455
459
|
def _add_token_json(json_msg):
|
456
460
|
if json_msg is None:
|
457
461
|
return None
|
458
462
|
return {
|
459
|
-
"reload_token":
|
463
|
+
"reload_token": _extract_reload_token(
|
464
|
+
data=data, task=task, mf_card=mf_card
|
465
|
+
),
|
460
466
|
"data": json_msg,
|
461
467
|
"created_on": time.time(),
|
462
468
|
}
|
@@ -740,8 +746,16 @@ def create(
|
|
740
746
|
# 3. `refresh` is implemented but it raises an exception. (We do nothing. Don't store anything.)
|
741
747
|
# 4. `refresh` is implemented but it times out. (We do nothing. Don't store anything.)
|
742
748
|
|
749
|
+
def _render_error_card(stack_trace):
|
750
|
+
_card = error_card()
|
751
|
+
token = _extract_reload_token(data, task, _card)
|
752
|
+
return _card.render(
|
753
|
+
task,
|
754
|
+
stack_trace=stack_trace,
|
755
|
+
).replace(mf_card.RELOAD_POLICY_TOKEN, token)
|
756
|
+
|
743
757
|
if error_stack_trace is not None and mode != "refresh":
|
744
|
-
rendered_content =
|
758
|
+
rendered_content = _render_error_card(error_stack_trace)
|
745
759
|
elif (
|
746
760
|
rendered_info.is_implemented
|
747
761
|
and rendered_info.timed_out
|
@@ -753,18 +767,15 @@ def create(
|
|
753
767
|
"To increase the timeout duration for card rendering, please set the `timeout` parameter in the @card decorator. "
|
754
768
|
"\nStack Trace : \n%s"
|
755
769
|
) % (timeout, rendered_info.timeout_stack_trace)
|
756
|
-
rendered_content =
|
757
|
-
task,
|
758
|
-
stack_trace=timeout_stack_trace,
|
759
|
-
)
|
770
|
+
rendered_content = _render_error_card(timeout_stack_trace)
|
760
771
|
elif (
|
761
772
|
rendered_info.is_implemented
|
762
773
|
and rendered_info.data is None
|
763
774
|
and render_error_card
|
764
775
|
and mode != "refresh"
|
765
776
|
):
|
766
|
-
rendered_content =
|
767
|
-
|
777
|
+
rendered_content = _render_error_card(
|
778
|
+
"No information rendered from card of type %s" % type
|
768
779
|
)
|
769
780
|
elif (
|
770
781
|
not rendered_info.is_implemented
|
@@ -775,7 +786,7 @@ def create(
|
|
775
786
|
"Card of type %s is a runtime time card with no `render_runtime` implemented. "
|
776
787
|
"Please implement `render_runtime` method to allow rendering this card at runtime."
|
777
788
|
) % type
|
778
|
-
rendered_content =
|
789
|
+
rendered_content = _render_error_card(message)
|
779
790
|
|
780
791
|
# todo : should we save native type for error card or error type ?
|
781
792
|
if type is not None and re.match(CARD_ID_PATTERN, type) is not None:
|
@@ -542,11 +542,24 @@ class ErrorCard(MetaflowCard):
|
|
542
542
|
|
543
543
|
type = "error"
|
544
544
|
|
545
|
+
RELOAD_POLICY = MetaflowCard.RELOAD_POLICY_ONCHANGE
|
546
|
+
|
545
547
|
def __init__(self, options={}, components=[], graph=None):
|
546
548
|
self._only_repr = True
|
547
549
|
self._graph = None if graph is None else transform_flow_graph(graph)
|
548
550
|
self._components = components
|
549
551
|
|
552
|
+
def reload_content_token(self, task, data):
|
553
|
+
"""
|
554
|
+
The reload token will change when the component array has changed in the Metaflow card.
|
555
|
+
The change in the component array is signified by the change in the component_update_ts.
|
556
|
+
"""
|
557
|
+
if task.finished:
|
558
|
+
return "final"
|
559
|
+
# `component_update_ts` will never be None. It is set to a default value when the `ComponentStore` is instantiated
|
560
|
+
# And it is updated when components added / removed / changed from the `ComponentStore`.
|
561
|
+
return "runtime-%s" % (str(data["component_update_ts"]))
|
562
|
+
|
550
563
|
def render(self, task, stack_trace=None):
|
551
564
|
RENDER_TEMPLATE = read_file(RENDER_TEMPLATE_PATH)
|
552
565
|
JS_DATA = read_file(JS_PATH)
|
@@ -100,6 +100,10 @@ class CondaStepDecorator(StepDecorator):
|
|
100
100
|
# --environment=pypi to --environment=conda
|
101
101
|
_supported_virtual_envs.extend(["pypi"])
|
102
102
|
|
103
|
+
# TODO: Hardcoded for now to support Docker environment.
|
104
|
+
# We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
|
105
|
+
_supported_virtual_envs.extend(["docker"])
|
106
|
+
|
103
107
|
# The --environment= requirement ensures that valid virtual environments are
|
104
108
|
# created for every step to execute it, greatly simplifying the @conda
|
105
109
|
# implementation.
|
@@ -340,6 +344,10 @@ class CondaFlowDecorator(FlowDecorator):
|
|
340
344
|
# --environment=pypi to --environment=conda
|
341
345
|
_supported_virtual_envs.extend(["pypi"])
|
342
346
|
|
347
|
+
# TODO: Hardcoded for now to support Docker environment.
|
348
|
+
# We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
|
349
|
+
_supported_virtual_envs.extend(["docker"])
|
350
|
+
|
343
351
|
# The --environment= requirement ensures that valid virtual environments are
|
344
352
|
# created for every step to execute it, greatly simplifying the @conda
|
345
353
|
# implementation.
|
@@ -48,9 +48,9 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
48
48
|
# Apply conda decorator to manage the task execution lifecycle.
|
49
49
|
return ("conda",) + super().decospecs()
|
50
50
|
|
51
|
-
def validate_environment(self,
|
51
|
+
def validate_environment(self, logger, datastore_type):
|
52
52
|
self.datastore_type = datastore_type
|
53
|
-
self.
|
53
|
+
self.logger = logger
|
54
54
|
|
55
55
|
# Avoiding circular imports.
|
56
56
|
from metaflow.plugins import DATASTORES
|
@@ -65,7 +65,7 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
65
65
|
micromamba = Micromamba()
|
66
66
|
self.solvers = {"conda": micromamba, "pypi": Pip(micromamba)}
|
67
67
|
|
68
|
-
def init_environment(self, echo):
|
68
|
+
def init_environment(self, echo, only_steps=None):
|
69
69
|
# The implementation optimizes for latency to ensure as many operations can
|
70
70
|
# be turned into cheap no-ops as feasible. Otherwise, we focus on maintaining
|
71
71
|
# a balance between latency and maintainability of code without re-implementing
|
@@ -77,6 +77,8 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
77
77
|
def environments(type_):
|
78
78
|
seen = set()
|
79
79
|
for step in self.flow:
|
80
|
+
if only_steps and step.name not in only_steps:
|
81
|
+
continue
|
80
82
|
environment = self.get_environment(step)
|
81
83
|
if type_ in environment and environment["id_"] not in seen:
|
82
84
|
seen.add(environment["id_"])
|
@@ -165,7 +167,7 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
165
167
|
self.write_to_environment_manifest([id_, platform, type_], packages)
|
166
168
|
|
167
169
|
# First resolve environments through Conda, before PyPI.
|
168
|
-
|
170
|
+
self.logger("Bootstrapping virtual environment(s) ...")
|
169
171
|
for solver in ["conda", "pypi"]:
|
170
172
|
with ThreadPoolExecutor() as executor:
|
171
173
|
results = list(
|
@@ -178,11 +180,9 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
178
180
|
)
|
179
181
|
if self.datastore_type not in ["local"]:
|
180
182
|
# Cache packages only when a remote datastore is in play.
|
181
|
-
storage = self.datastore(
|
182
|
-
_datastore_packageroot(self.datastore, self.echo)
|
183
|
-
)
|
183
|
+
storage = self.datastore(_datastore_packageroot(self.datastore, echo))
|
184
184
|
cache(storage, results, solver)
|
185
|
-
|
185
|
+
self.logger("Virtual environment(s) bootstrapped!")
|
186
186
|
|
187
187
|
def executable(self, step_name, default=None):
|
188
188
|
step = next(step for step in self.flow if step.name == step_name)
|
@@ -220,7 +220,7 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
220
220
|
disabled = decorator.attributes["disabled"]
|
221
221
|
if not disabled or str(disabled).lower() == "false":
|
222
222
|
environment[decorator.name] = {
|
223
|
-
k: decorator.attributes[k]
|
223
|
+
k: copy.deepcopy(decorator.attributes[k])
|
224
224
|
for k in decorator.attributes
|
225
225
|
if k != "disabled"
|
226
226
|
}
|
@@ -316,7 +316,7 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
316
316
|
**environment,
|
317
317
|
**{
|
318
318
|
"package_root": _datastore_packageroot(
|
319
|
-
self.datastore, self.
|
319
|
+
self.datastore, self.logger
|
320
320
|
)
|
321
321
|
},
|
322
322
|
}
|
metaflow/plugins/pypi/pip.py
CHANGED
@@ -9,7 +9,6 @@ from itertools import chain, product
|
|
9
9
|
from urllib.parse import unquote
|
10
10
|
|
11
11
|
from metaflow.exception import MetaflowException
|
12
|
-
from metaflow.util import which
|
13
12
|
|
14
13
|
from .micromamba import Micromamba
|
15
14
|
from .utils import pip_tags, wheel_tags
|
@@ -25,6 +24,23 @@ class PipException(MetaflowException):
|
|
25
24
|
super(PipException, self).__init__(msg)
|
26
25
|
|
27
26
|
|
27
|
+
class PipPackageNotFound(Exception):
|
28
|
+
"Wrapper for pip package resolve errors."
|
29
|
+
|
30
|
+
def __init__(self, error):
|
31
|
+
self.error = error
|
32
|
+
try:
|
33
|
+
# Parse the package spec from error message:
|
34
|
+
# ERROR: ERROR: Could not find a version that satisfies the requirement pkg==0.0.1 (from versions: none)
|
35
|
+
# ERROR: No matching distribution found for pkg==0.0.1
|
36
|
+
self.package_spec = re.search(
|
37
|
+
"ERROR: No matching distribution found for (.*)", self.error
|
38
|
+
)[1]
|
39
|
+
self.package_name = re.match("\w*", self.package_spec)[0]
|
40
|
+
except Exception:
|
41
|
+
pass
|
42
|
+
|
43
|
+
|
28
44
|
METADATA_FILE = "{prefix}/.pip/metadata"
|
29
45
|
INSTALLATION_MARKER = "{prefix}/.pip/id"
|
30
46
|
|
@@ -81,7 +97,16 @@ class Pip(object):
|
|
81
97
|
cmd.append(f"{package}{version}")
|
82
98
|
else:
|
83
99
|
cmd.append(f"{package}=={version}")
|
84
|
-
|
100
|
+
try:
|
101
|
+
self._call(prefix, cmd)
|
102
|
+
except PipPackageNotFound as ex:
|
103
|
+
# pretty print package errors
|
104
|
+
raise PipException(
|
105
|
+
"Could not find a binary distribution for %s \n"
|
106
|
+
"for the platform %s\n\n"
|
107
|
+
"Note that ***@pypi*** does not currently support source distributions"
|
108
|
+
% (ex.package_spec, platform)
|
109
|
+
)
|
85
110
|
|
86
111
|
def _format(dl_info):
|
87
112
|
res = {k: v for k, v in dl_info.items() if k in ["url"]}
|
@@ -302,11 +327,14 @@ class Pip(object):
|
|
302
327
|
.strip()
|
303
328
|
)
|
304
329
|
except subprocess.CalledProcessError as e:
|
330
|
+
errors = e.stderr.decode()
|
331
|
+
if "No matching distribution" in errors:
|
332
|
+
raise PipPackageNotFound(errors)
|
305
333
|
raise PipException(
|
306
334
|
"command '{cmd}' returned error ({code}) {output}\n{stderr}".format(
|
307
335
|
cmd=" ".join(e.cmd),
|
308
336
|
code=e.returncode,
|
309
337
|
output=e.output.decode(),
|
310
|
-
stderr=
|
338
|
+
stderr=errors,
|
311
339
|
)
|
312
340
|
)
|
@@ -70,6 +70,10 @@ class PyPIStepDecorator(StepDecorator):
|
|
70
70
|
# --environment=pypi to --environment=conda
|
71
71
|
_supported_virtual_envs.extend(["pypi"])
|
72
72
|
|
73
|
+
# TODO: Hardcoded for now to support Docker environment.
|
74
|
+
# We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
|
75
|
+
_supported_virtual_envs.extend(["docker"])
|
76
|
+
|
73
77
|
# The --environment= requirement ensures that valid virtual environments are
|
74
78
|
# created for every step to execute it, greatly simplifying the @pypi
|
75
79
|
# implementation.
|
@@ -119,6 +123,10 @@ class PyPIFlowDecorator(FlowDecorator):
|
|
119
123
|
# --environment=pypi to --environment=conda
|
120
124
|
_supported_virtual_envs.extend(["pypi"])
|
121
125
|
|
126
|
+
# TODO: Hardcoded for now to support Docker environment.
|
127
|
+
# We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
|
128
|
+
_supported_virtual_envs.extend(["docker"])
|
129
|
+
|
122
130
|
# The --environment= requirement ensures that valid virtual environments are
|
123
131
|
# created for every step to execute it, greatly simplifying the @conda
|
124
132
|
# implementation.
|
metaflow/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
metaflow_version = "2.12.
|
1
|
+
metaflow_version = "2.12.6"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: metaflow
|
3
|
-
Version: 2.12.
|
3
|
+
Version: 2.12.6
|
4
4
|
Summary: Metaflow: More Data Science, 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.12.
|
29
|
+
Requires-Dist: metaflow-stubs ==2.12.6 ; extra == 'stubs'
|
30
30
|
|
31
31
|

|
32
32
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
metaflow/R.py,sha256=CqVfIatvmjciuICNnoyyNGrwE7Va9iXfLdFbQa52hwA,3958
|
2
2
|
metaflow/__init__.py,sha256=3GEqivYycw6mvjn-ndEFGuCdYnGztciQgEWX87vjf6M,5885
|
3
3
|
metaflow/cards.py,sha256=tP1_RrtmqdFh741pqE4t98S7SA0MtGRlGvRICRZF1Mg,426
|
4
|
-
metaflow/cli.py,sha256=
|
4
|
+
metaflow/cli.py,sha256=VXNA2qL3-OpKiEjw7-YqHWZqjL0wBcXjcvsIU1Pufkg,33746
|
5
5
|
metaflow/cli_args.py,sha256=lcgBGNTvfaiPxiUnejAe60Upt9swG6lRy1_3OqbU6MY,2616
|
6
6
|
metaflow/clone_util.py,sha256=XfUX0vssu_hPlyZfhFl1AOnKkLqvt33Qp8xNrmdocGg,2057
|
7
7
|
metaflow/cmd_with_io.py,sha256=kl53HkAIyv0ecpItv08wZYczv7u3msD1VCcciqigqf0,588
|
@@ -35,7 +35,7 @@ metaflow/tuple_util.py,sha256=_G5YIEhuugwJ_f6rrZoelMFak3DqAR2tt_5CapS1XTY,830
|
|
35
35
|
metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
|
36
36
|
metaflow/util.py,sha256=m5womQ7y-jXehuMyHPfByDbZ4HwTJxzs869cPOlMR8s,13057
|
37
37
|
metaflow/vendor.py,sha256=FchtA9tH22JM-eEtJ2c9FpUdMn8sSb1VHuQS56EcdZk,5139
|
38
|
-
metaflow/version.py,sha256=
|
38
|
+
metaflow/version.py,sha256=W4Z4K8bmvALkOGfzpEO-uMEWPW_3H7Ez7xUk75yIURk,28
|
39
39
|
metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
|
40
40
|
metaflow/_vendor/typing_extensions.py,sha256=0nUs5p1A_UrZigrAVBoOEM6TxU37zzPDUtiij1ZwpNc,110417
|
41
41
|
metaflow/_vendor/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
|
@@ -174,7 +174,7 @@ metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=iDReG-7FKnumrtQg-HY6cCUAAqN
|
|
174
174
|
metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
175
175
|
metaflow/plugins/argo/argo_client.py,sha256=MKKhMCbWOPzf6z5zQQiyDRHHkAXcO7ipboDZDqAAvOk,15849
|
176
176
|
metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
|
177
|
-
metaflow/plugins/argo/argo_workflows.py,sha256=
|
177
|
+
metaflow/plugins/argo/argo_workflows.py,sha256=j07kwbloA4MIPjvaia3Efyvfw3k0nZ99yO3D6gnZy5k,130683
|
178
178
|
metaflow/plugins/argo/argo_workflows_cli.py,sha256=sZTpgfmc50eT3e0qIxpVqUgWhTcYlO1HM4gU6Oaya8g,33259
|
179
179
|
metaflow/plugins/argo/argo_workflows_decorator.py,sha256=K5t4uIk2IXPdK7v7DEjj3buSB8ikLjLycKjbZUYeiaw,6781
|
180
180
|
metaflow/plugins/argo/generate_input_paths.py,sha256=loYsI6RFX9LlFsHb7Fe-mzlTTtRdySoOu7sYDy-uXK0,881
|
@@ -207,7 +207,7 @@ metaflow/plugins/azure/azure_utils.py,sha256=j3kAxi2oC-fMpw8YegJvqsAwxi_m7jGPxCa
|
|
207
207
|
metaflow/plugins/azure/blob_service_client_factory.py,sha256=MtyPftBxrXdXMxwhKgLepG6mtlb_2BhJLG_fvbO6D14,6527
|
208
208
|
metaflow/plugins/azure/includefile_support.py,sha256=Wv3g3RlGtLbxAh3Reg0BDLWwqavYibQNCDWddlH7XCE,4706
|
209
209
|
metaflow/plugins/cards/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
210
|
-
metaflow/plugins/cards/card_cli.py,sha256=
|
210
|
+
metaflow/plugins/cards/card_cli.py,sha256=R4J7mOit9xg514iqg0VHHwCmUZS7UxpNTBVt6Lx6SBQ,34999
|
211
211
|
metaflow/plugins/cards/card_client.py,sha256=30dFBoC3axc261GeV7QCIs_V1OHhRtS31S0wEWsjw90,9501
|
212
212
|
metaflow/plugins/cards/card_creator.py,sha256=E_NCmWPK6DzkqigtpUpeddCDbjnKF6dJcE6IvWzwiyA,7740
|
213
213
|
metaflow/plugins/cards/card_datastore.py,sha256=3K19wE0CZVvOpuYUytftIYYnHHn3pMZJE87FMD6OYlM,14244
|
@@ -218,7 +218,7 @@ metaflow/plugins/cards/component_serializer.py,sha256=Row7c_8_euJcF_I1lWHdgMRj7d
|
|
218
218
|
metaflow/plugins/cards/exception.py,sha256=2UqlNb-Kxpg6cuLu2sBEIPTIElwlVBsSpeCgDYKTxWg,5222
|
219
219
|
metaflow/plugins/cards/card_modules/__init__.py,sha256=WI2IAsFiKGyqPrHtO9S9-MbyVtUTgWJNL4xjJaBErRo,3437
|
220
220
|
metaflow/plugins/cards/card_modules/base.html,sha256=Y208ZKIZqEWWUcoBFTLTdWKAG0C8xH5lmyCRSjaN2FY,21004
|
221
|
-
metaflow/plugins/cards/card_modules/basic.py,sha256=
|
221
|
+
metaflow/plugins/cards/card_modules/basic.py,sha256=tv-Dl9qnWWOB7E1oYlvxvDNWR3EB95gnN8K1Yo8W_J8,24077
|
222
222
|
metaflow/plugins/cards/card_modules/bundle.css,sha256=ms2wOKftlPM_i6bC_4BkrmqCOj8mYw9OFvRCJF9FSV4,11981
|
223
223
|
metaflow/plugins/cards/card_modules/card.py,sha256=HspyT4d3VeXq4k3sLRLm0-2k4ScKefHu25EDuYgMtPA,4209
|
224
224
|
metaflow/plugins/cards/card_modules/components.py,sha256=Yvq9lqR_5EFVPM0ruzYTft635_dGIbkJhgxrQlPz1eg,25321
|
@@ -285,11 +285,11 @@ metaflow/plugins/metadata/local.py,sha256=YhLJC5zjVJrvQFIyQ92ZBByiUmhCC762RUX7IT
|
|
285
285
|
metaflow/plugins/metadata/service.py,sha256=ihq5F7KQZlxvYwzH_-jyP2aWN_I96i2vp92j_d697s8,20204
|
286
286
|
metaflow/plugins/pypi/__init__.py,sha256=0YFZpXvX7HCkyBFglatual7XGifdA1RwC3U4kcizyak,1037
|
287
287
|
metaflow/plugins/pypi/bootstrap.py,sha256=Hik3PZ_RQC8T6hEf-NE2Xr_jq2ZIUkpgUtJlx-rqJgU,5107
|
288
|
-
metaflow/plugins/pypi/conda_decorator.py,sha256
|
289
|
-
metaflow/plugins/pypi/conda_environment.py,sha256=
|
288
|
+
metaflow/plugins/pypi/conda_decorator.py,sha256=phrUvVC5QrfNwPqIByrXsnpRDg1SNVsfpl1wbAVrykI,14679
|
289
|
+
metaflow/plugins/pypi/conda_environment.py,sha256=COybS4bogDm956UzOzbd4JupE7PBbEMqq1dfl-f9DYM,19339
|
290
290
|
metaflow/plugins/pypi/micromamba.py,sha256=wlVN2fm4WXFh3jVNtpDfu4XEz6VJKbmFNp0QvqlMIuI,12179
|
291
|
-
metaflow/plugins/pypi/pip.py,sha256=
|
292
|
-
metaflow/plugins/pypi/pypi_decorator.py,sha256=
|
291
|
+
metaflow/plugins/pypi/pip.py,sha256=uYPEHYV1_PtY4QA3NqUcVSPBAlRucGeY9tuyz7sB7aY,13641
|
292
|
+
metaflow/plugins/pypi/pypi_decorator.py,sha256=Plmm4fhLECW-sj1QSFI84Gva7qqqwlJsqJ8laCRKIzw,6073
|
293
293
|
metaflow/plugins/pypi/pypi_environment.py,sha256=FYMg8kF3lXqcLfRYWD83a9zpVjcoo_TARqMGZ763rRk,230
|
294
294
|
metaflow/plugins/pypi/utils.py,sha256=ds1Mnv_DaxGnLAYp7ozg_K6oyguGyNhvHfE-75Ia1YA,2836
|
295
295
|
metaflow/plugins/secrets/__init__.py,sha256=mhJaN2eMS_ZZVewAMR2E-JdP5i0t3v9e6Dcwd-WpruE,310
|
@@ -332,9 +332,9 @@ metaflow/tutorials/07-worldview/README.md,sha256=5vQTrFqulJ7rWN6r20dhot9lI2sVj9W
|
|
332
332
|
metaflow/tutorials/07-worldview/worldview.ipynb,sha256=ztPZPI9BXxvW1QdS2Tfe7LBuVzvFvv0AToDnsDJhLdE,2237
|
333
333
|
metaflow/tutorials/08-autopilot/README.md,sha256=GnePFp_q76jPs991lMUqfIIh5zSorIeWznyiUxzeUVE,1039
|
334
334
|
metaflow/tutorials/08-autopilot/autopilot.ipynb,sha256=DQoJlILV7Mq9vfPBGW-QV_kNhWPjS5n6SJLqePjFYLY,3191
|
335
|
-
metaflow-2.12.
|
336
|
-
metaflow-2.12.
|
337
|
-
metaflow-2.12.
|
338
|
-
metaflow-2.12.
|
339
|
-
metaflow-2.12.
|
340
|
-
metaflow-2.12.
|
335
|
+
metaflow-2.12.6.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
|
336
|
+
metaflow-2.12.6.dist-info/METADATA,sha256=aTpN9idMdHJ1zv9CxVHgfJKMdfbhlHNnS2XF_xtt1hE,5906
|
337
|
+
metaflow-2.12.6.dist-info/WHEEL,sha256=0XQbNV6JE5ziJsWjIU8TRRv0N6SohNonLWgP86g5fiI,109
|
338
|
+
metaflow-2.12.6.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
|
339
|
+
metaflow-2.12.6.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
|
340
|
+
metaflow-2.12.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|