metaflow 2.12.38__py2.py3-none-any.whl → 2.13__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 +1 -1
- metaflow/cli.py +111 -36
- metaflow/cli_args.py +2 -2
- metaflow/cli_components/run_cmds.py +3 -1
- metaflow/datastore/flow_datastore.py +2 -2
- metaflow/exception.py +8 -2
- metaflow/flowspec.py +48 -36
- metaflow/graph.py +28 -27
- metaflow/includefile.py +2 -2
- metaflow/lint.py +35 -20
- metaflow/metaflow_config.py +5 -0
- metaflow/parameters.py +11 -4
- metaflow/plugins/argo/argo_workflows_deployer_objects.py +47 -1
- metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py +13 -10
- metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +3 -0
- metaflow/plugins/cards/card_creator.py +1 -0
- metaflow/plugins/cards/card_decorator.py +46 -8
- metaflow/plugins/pypi/bootstrap.py +196 -61
- metaflow/plugins/pypi/conda_decorator.py +14 -26
- metaflow/plugins/pypi/conda_environment.py +76 -21
- metaflow/plugins/pypi/micromamba.py +42 -15
- metaflow/plugins/pypi/pip.py +8 -3
- metaflow/plugins/pypi/pypi_decorator.py +10 -9
- metaflow/runner/click_api.py +175 -39
- metaflow/runner/deployer.py +1 -1
- metaflow/runner/deployer_impl.py +8 -3
- metaflow/runner/metaflow_runner.py +10 -2
- metaflow/runner/nbdeploy.py +2 -0
- metaflow/runner/nbrun.py +1 -1
- metaflow/runner/subprocess_manager.py +3 -1
- metaflow/runner/utils.py +41 -19
- metaflow/user_configs/config_options.py +87 -34
- metaflow/user_configs/config_parameters.py +44 -25
- metaflow/util.py +2 -2
- metaflow/version.py +1 -1
- {metaflow-2.12.38.dist-info → metaflow-2.13.dist-info}/METADATA +2 -2
- {metaflow-2.12.38.dist-info → metaflow-2.13.dist-info}/RECORD +41 -41
- {metaflow-2.12.38.dist-info → metaflow-2.13.dist-info}/LICENSE +0 -0
- {metaflow-2.12.38.dist-info → metaflow-2.13.dist-info}/WHEEL +0 -0
- {metaflow-2.12.38.dist-info → metaflow-2.13.dist-info}/entry_points.txt +0 -0
- {metaflow-2.12.38.dist-info → metaflow-2.13.dist-info}/top_level.txt +0 -0
@@ -15,7 +15,7 @@ from ..util import get_username
|
|
15
15
|
|
16
16
|
_CONVERT_PREFIX = "@!c!@:"
|
17
17
|
_DEFAULT_PREFIX = "@!d!@:"
|
18
|
-
_NO_FILE = "@!n
|
18
|
+
_NO_FILE = "@!n!@:"
|
19
19
|
|
20
20
|
_CONVERTED_DEFAULT = _CONVERT_PREFIX + _DEFAULT_PREFIX
|
21
21
|
_CONVERTED_NO_FILE = _CONVERT_PREFIX + _NO_FILE
|
@@ -41,7 +41,8 @@ class ConvertPath(click.Path):
|
|
41
41
|
is_default = False
|
42
42
|
if value and value.startswith(_DEFAULT_PREFIX):
|
43
43
|
is_default = True
|
44
|
-
value =
|
44
|
+
value = value[len(_DEFAULT_PREFIX) :]
|
45
|
+
value = super().convert(value, param, ctx)
|
45
46
|
return self.convert_value(value, is_default)
|
46
47
|
|
47
48
|
@staticmethod
|
@@ -170,7 +171,15 @@ class ConfigInput:
|
|
170
171
|
cls.loaded_configs = all_configs
|
171
172
|
return cls.loaded_configs.get(config_name, None)
|
172
173
|
|
173
|
-
def process_configs(
|
174
|
+
def process_configs(
|
175
|
+
self,
|
176
|
+
flow_name: str,
|
177
|
+
param_name: str,
|
178
|
+
param_value: Dict[str, Optional[str]],
|
179
|
+
quiet: bool,
|
180
|
+
datastore: str,
|
181
|
+
click_obj: Optional[Any] = None,
|
182
|
+
):
|
174
183
|
from ..cli import echo_always, echo_dev_null # Prevent circular import
|
175
184
|
from ..flowspec import _FlowState # Prevent circular import
|
176
185
|
|
@@ -198,31 +207,32 @@ class ConfigInput:
|
|
198
207
|
# - the default (including None if there is no default). If the default is
|
199
208
|
# not None, it will start with _CONVERTED_DEFAULT since Click will make
|
200
209
|
# the value go through ConvertPath or ConvertDictOrStr
|
201
|
-
#
|
210
|
+
# - the actual value passed through prefixed with _CONVERT_PREFIX
|
202
211
|
|
203
212
|
debug.userconf_exec(
|
204
213
|
"Processing configs for %s -- incoming values: %s"
|
205
|
-
% (
|
214
|
+
% (param_name, str(param_value))
|
206
215
|
)
|
207
216
|
|
208
217
|
do_return = self._value_values is None and self._path_values is None
|
209
218
|
# We only keep around non default values. We could simplify by checking just one
|
210
219
|
# value and if it is default it means all are but this doesn't seem much more effort
|
211
220
|
# and is clearer
|
212
|
-
if
|
221
|
+
if param_name == "config_value":
|
213
222
|
self._value_values = {
|
214
223
|
k.lower(): v
|
215
|
-
for k, v in
|
224
|
+
for k, v in param_value
|
216
225
|
if v is not None and not v.startswith(_CONVERTED_DEFAULT)
|
217
226
|
}
|
218
227
|
else:
|
219
228
|
self._path_values = {
|
220
229
|
k.lower(): v
|
221
|
-
for k, v in
|
230
|
+
for k, v in param_value
|
222
231
|
if v is not None and not v.startswith(_CONVERTED_DEFAULT)
|
223
232
|
}
|
224
233
|
if do_return:
|
225
|
-
# One of
|
234
|
+
# One of values["value"] or values["path"] is None -- we are in the first
|
235
|
+
# go around
|
226
236
|
debug.userconf_exec("Incomplete config options; waiting for more")
|
227
237
|
return None
|
228
238
|
|
@@ -233,8 +243,13 @@ class ConfigInput:
|
|
233
243
|
# down configurations (like METAFLOW_FLOW_CONFIG) could still be present and
|
234
244
|
# would cause an issue -- we can ignore those as the kv. values should trump
|
235
245
|
# everything else.
|
246
|
+
# NOTE: These are all *non default* keys
|
236
247
|
all_keys = set(self._value_values).union(self._path_values)
|
237
|
-
|
248
|
+
|
249
|
+
if all_keys and click_obj:
|
250
|
+
click_obj.has_cl_config_options = True
|
251
|
+
# Make sure we have at least some non default keys (we need some if we have
|
252
|
+
# all kv)
|
238
253
|
has_all_kv = all_keys and all(
|
239
254
|
self._value_values.get(k, "").startswith(_CONVERT_PREFIX + "kv.")
|
240
255
|
for k in all_keys
|
@@ -244,27 +259,35 @@ class ConfigInput:
|
|
244
259
|
to_return = {}
|
245
260
|
|
246
261
|
if not has_all_kv:
|
247
|
-
# Check that the user didn't provide *both* a path and a value.
|
262
|
+
# Check that the user didn't provide *both* a path and a value. Again, these
|
263
|
+
# are only user-provided (not defaults)
|
248
264
|
common_keys = set(self._value_values or []).intersection(
|
249
265
|
[k for k, v in self._path_values.items()] or []
|
250
266
|
)
|
251
267
|
if common_keys:
|
252
|
-
|
268
|
+
exc = click.UsageError(
|
253
269
|
"Cannot provide both a value and a file for the same configuration. "
|
254
270
|
"Found such values for '%s'" % "', '".join(common_keys)
|
255
271
|
)
|
272
|
+
if click_obj:
|
273
|
+
click_obj.delayed_config_exception = exc
|
274
|
+
return None
|
275
|
+
raise exc
|
256
276
|
|
257
|
-
all_values = dict(self._path_values
|
258
|
-
all_values.update(self._value_values
|
277
|
+
all_values = dict(self._path_values)
|
278
|
+
all_values.update(self._value_values)
|
259
279
|
|
260
280
|
debug.userconf_exec("All config values: %s" % str(all_values))
|
261
281
|
|
262
282
|
merged_configs = {}
|
283
|
+
# Now look at everything (including defaults)
|
263
284
|
for name, (val, is_path) in self._defaults.items():
|
264
285
|
n = name.lower()
|
265
286
|
if n in all_values:
|
287
|
+
# We have the value provided by the user -- use that.
|
266
288
|
merged_configs[n] = all_values[n]
|
267
289
|
else:
|
290
|
+
# No value provided by the user -- use the default
|
268
291
|
if isinstance(val, DeployTimeField):
|
269
292
|
# This supports a default value that is a deploy-time field (similar
|
270
293
|
# to Parameter).)
|
@@ -273,25 +296,27 @@ class ConfigInput:
|
|
273
296
|
# of circularity. Note also that quiet and datastore are *eager*
|
274
297
|
# options so are available here.
|
275
298
|
param_ctx = ParameterContext(
|
276
|
-
flow_name=
|
299
|
+
flow_name=flow_name,
|
277
300
|
user_name=get_username(),
|
278
301
|
parameter_name=n,
|
279
|
-
logger=(
|
280
|
-
|
281
|
-
),
|
282
|
-
ds_type=ctx.params["datastore"],
|
302
|
+
logger=(echo_dev_null if quiet else echo_always),
|
303
|
+
ds_type=datastore,
|
283
304
|
configs=None,
|
284
305
|
)
|
285
306
|
val = val.fun(param_ctx)
|
286
307
|
if is_path:
|
287
308
|
# This is a file path
|
288
|
-
merged_configs[n] = ConvertPath.convert_value(val,
|
309
|
+
merged_configs[n] = ConvertPath.convert_value(val, True)
|
289
310
|
else:
|
290
311
|
# This is a value
|
291
|
-
merged_configs[n] = ConvertDictOrStr.convert_value(val,
|
312
|
+
merged_configs[n] = ConvertDictOrStr.convert_value(val, True)
|
292
313
|
else:
|
293
314
|
debug.userconf_exec("Fast path due to pre-processed values")
|
294
315
|
merged_configs = self._value_values
|
316
|
+
|
317
|
+
if click_obj:
|
318
|
+
click_obj.has_config_options = True
|
319
|
+
|
295
320
|
debug.userconf_exec("Configs merged with defaults: %s" % str(merged_configs))
|
296
321
|
|
297
322
|
missing_configs = set()
|
@@ -302,20 +327,27 @@ class ConfigInput:
|
|
302
327
|
if val is None:
|
303
328
|
missing_configs.add(name)
|
304
329
|
continue
|
305
|
-
if val.startswith(_CONVERTED_NO_FILE):
|
306
|
-
no_file.append(name)
|
307
|
-
continue
|
308
330
|
if val.startswith(_CONVERTED_DEFAULT_NO_FILE):
|
309
331
|
no_default_file.append(name)
|
310
332
|
continue
|
333
|
+
if val.startswith(_CONVERTED_NO_FILE):
|
334
|
+
no_file.append(name)
|
335
|
+
continue
|
336
|
+
|
311
337
|
val = val[len(_CONVERT_PREFIX) :] # Remove the _CONVERT_PREFIX
|
338
|
+
if val.startswith(_DEFAULT_PREFIX): # Remove the _DEFAULT_PREFIX if needed
|
339
|
+
val = val[len(_DEFAULT_PREFIX) :]
|
312
340
|
if val.startswith("kv."):
|
313
341
|
# This means to load it from a file
|
314
342
|
read_value = self.get_config(val[3:])
|
315
343
|
if read_value is None:
|
316
|
-
|
344
|
+
exc = click.UsageError(
|
317
345
|
"Could not find configuration '%s' in INFO file" % val
|
318
346
|
)
|
347
|
+
if click_obj:
|
348
|
+
click_obj.delayed_config_exception = exc
|
349
|
+
return None
|
350
|
+
raise exc
|
319
351
|
flow_cls._flow_state[_FlowState.CONFIGS][name] = read_value
|
320
352
|
to_return[name] = ConfigValue(read_value)
|
321
353
|
else:
|
@@ -348,13 +380,27 @@ class ConfigInput:
|
|
348
380
|
% (merged_configs[missing][len(_CONVERTED_DEFAULT_NO_FILE) :], missing)
|
349
381
|
)
|
350
382
|
if msgs:
|
351
|
-
|
383
|
+
exc = click.UsageError(
|
352
384
|
"Bad values passed for configuration options: %s" % ", ".join(msgs)
|
353
385
|
)
|
386
|
+
if click_obj:
|
387
|
+
click_obj.delayed_config_exception = exc
|
388
|
+
return None
|
389
|
+
raise exc
|
354
390
|
|
355
391
|
debug.userconf_exec("Finalized configs: %s" % str(to_return))
|
356
392
|
return to_return
|
357
393
|
|
394
|
+
def process_configs_click(self, ctx, param, value):
|
395
|
+
return self.process_configs(
|
396
|
+
ctx.obj.flow.name,
|
397
|
+
param.name,
|
398
|
+
value,
|
399
|
+
ctx.params["quiet"],
|
400
|
+
ctx.params["datastore"],
|
401
|
+
click_obj=ctx.obj,
|
402
|
+
)
|
403
|
+
|
358
404
|
def __str__(self):
|
359
405
|
return repr(self)
|
360
406
|
|
@@ -399,7 +445,7 @@ class LocalFileInput(click.Path):
|
|
399
445
|
return "LocalFileInput"
|
400
446
|
|
401
447
|
|
402
|
-
def
|
448
|
+
def config_options_with_config_input(cmd):
|
403
449
|
help_strs = []
|
404
450
|
required_names = []
|
405
451
|
defaults = {}
|
@@ -407,7 +453,7 @@ def config_options(cmd):
|
|
407
453
|
parsers = {}
|
408
454
|
flow_cls = getattr(current_flow, "flow_cls", None)
|
409
455
|
if flow_cls is None:
|
410
|
-
return cmd
|
456
|
+
return cmd, None
|
411
457
|
|
412
458
|
parameters = [p for _, p in flow_cls._get_parameters() if p.IS_CONFIG_PARAMETER]
|
413
459
|
# List all the configuration options
|
@@ -432,20 +478,22 @@ def config_options(cmd):
|
|
432
478
|
parsers[arg.name.lower()] = arg.parser
|
433
479
|
|
434
480
|
if not config_seen:
|
435
|
-
# No configurations -- don't add anything
|
436
|
-
|
481
|
+
# No configurations -- don't add anything; we set it to False so that it
|
482
|
+
# can be checked whether or not we called this.
|
483
|
+
return cmd, False
|
437
484
|
|
438
485
|
help_str = (
|
439
486
|
"Configuration options for the flow. "
|
440
|
-
"Multiple configurations can be specified."
|
487
|
+
"Multiple configurations can be specified. Cannot be used with resume."
|
441
488
|
)
|
442
489
|
help_str = "\n\n".join([help_str] + help_strs)
|
443
|
-
|
490
|
+
config_input = ConfigInput(required_names, defaults, parsers)
|
491
|
+
cb_func = config_input.process_configs_click
|
444
492
|
|
445
493
|
cmd.params.insert(
|
446
494
|
0,
|
447
495
|
click.Option(
|
448
|
-
["--config-value", "
|
496
|
+
["--config-value", "config_value"],
|
449
497
|
nargs=2,
|
450
498
|
multiple=True,
|
451
499
|
type=MultipleTuple([click.Choice(config_seen), ConvertDictOrStr()]),
|
@@ -470,7 +518,7 @@ def config_options(cmd):
|
|
470
518
|
cmd.params.insert(
|
471
519
|
0,
|
472
520
|
click.Option(
|
473
|
-
["--config", "
|
521
|
+
["--config", "config_file"],
|
474
522
|
nargs=2,
|
475
523
|
multiple=True,
|
476
524
|
type=MultipleTuple([click.Choice(config_seen), ConvertPath()]),
|
@@ -492,4 +540,9 @@ def config_options(cmd):
|
|
492
540
|
required=False,
|
493
541
|
),
|
494
542
|
)
|
543
|
+
return cmd, config_input
|
544
|
+
|
545
|
+
|
546
|
+
def config_options(cmd):
|
547
|
+
cmd, _ = config_options_with_config_input(cmd)
|
495
548
|
return cmd
|
@@ -70,10 +70,6 @@ class ConfigValue(collections.abc.Mapping):
|
|
70
70
|
# as well as a [] notation.
|
71
71
|
|
72
72
|
def __init__(self, data: Dict[str, Any]):
|
73
|
-
if any(not ID_PATTERN.match(k) for k in data.keys()):
|
74
|
-
raise MetaflowException(
|
75
|
-
"All keys in the configuration must be valid Python identifiers"
|
76
|
-
)
|
77
73
|
self._data = data
|
78
74
|
|
79
75
|
def __getattr__(self, key: str) -> Any:
|
@@ -177,7 +173,10 @@ class DelayEvaluator(collections.abc.Mapping):
|
|
177
173
|
def __getitem__(self, key):
|
178
174
|
if key == "%s%d" % (UNPACK_KEY, id(self)):
|
179
175
|
return self
|
180
|
-
|
176
|
+
if self._access is None:
|
177
|
+
raise KeyError(key)
|
178
|
+
self._access.append(key)
|
179
|
+
return self
|
181
180
|
|
182
181
|
def __len__(self):
|
183
182
|
return 1
|
@@ -338,7 +337,9 @@ class Config(Parameter, collections.abc.Mapping):
|
|
338
337
|
self._computed_value = None
|
339
338
|
|
340
339
|
def load_parameter(self, v):
|
341
|
-
|
340
|
+
if v is None:
|
341
|
+
return None
|
342
|
+
return ConfigValue(v)
|
342
343
|
|
343
344
|
def _store_value(self, v: Any) -> None:
|
344
345
|
self._computed_value = v
|
@@ -358,29 +359,47 @@ class Config(Parameter, collections.abc.Mapping):
|
|
358
359
|
return DelayEvaluator(self.name.lower())[key]
|
359
360
|
|
360
361
|
|
361
|
-
def resolve_delayed_evaluator(v: Any) -> Any:
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
362
|
+
def resolve_delayed_evaluator(v: Any, ignore_errors: bool = False) -> Any:
|
363
|
+
try:
|
364
|
+
if isinstance(v, DelayEvaluator):
|
365
|
+
return v()
|
366
|
+
if isinstance(v, dict):
|
367
|
+
return {
|
368
|
+
resolve_delayed_evaluator(k): resolve_delayed_evaluator(v)
|
369
|
+
for k, v in v.items()
|
370
|
+
}
|
371
|
+
if isinstance(v, list):
|
372
|
+
return [resolve_delayed_evaluator(x) for x in v]
|
373
|
+
if isinstance(v, tuple):
|
374
|
+
return tuple(resolve_delayed_evaluator(x) for x in v)
|
375
|
+
if isinstance(v, set):
|
376
|
+
return {resolve_delayed_evaluator(x) for x in v}
|
377
|
+
return v
|
378
|
+
except Exception as e:
|
379
|
+
if ignore_errors:
|
380
|
+
# Assumption is that default value of None is always allowed.
|
381
|
+
# This code path is *only* used when evaluating Parameters AND they
|
382
|
+
# use configs in their attributes AND the runner/deployer is being used
|
383
|
+
# AND CLICK_API_PROCESS_CONFIG is False. In those cases, all attributes in
|
384
|
+
# Parameter can be set to None except for required and show_default
|
385
|
+
# and even in those cases, a wrong value will have very limited consequence.
|
386
|
+
return None
|
387
|
+
raise e
|
388
|
+
|
389
|
+
|
390
|
+
def unpack_delayed_evaluator(
|
391
|
+
to_unpack: Dict[str, Any], ignore_errors: bool = False
|
392
|
+
) -> Dict[str, Any]:
|
379
393
|
result = {}
|
380
394
|
for k, v in to_unpack.items():
|
381
395
|
if not isinstance(k, str) or not k.startswith(UNPACK_KEY):
|
382
396
|
result[k] = v
|
383
397
|
else:
|
384
398
|
# k.startswith(UNPACK_KEY)
|
385
|
-
|
399
|
+
try:
|
400
|
+
result.update(resolve_delayed_evaluator(v[k]))
|
401
|
+
except Exception as e:
|
402
|
+
if ignore_errors:
|
403
|
+
continue
|
404
|
+
raise e
|
386
405
|
return result
|
metaflow/util.py
CHANGED
@@ -307,10 +307,10 @@ def dict_to_cli_options(params):
|
|
307
307
|
# keyword in Python, so we call it 'decospecs' in click args
|
308
308
|
if k == "decospecs":
|
309
309
|
k = "with"
|
310
|
-
if k in ("
|
310
|
+
if k in ("config_file", "config_value"):
|
311
311
|
# Special handling here since we gather them all in one option but actually
|
312
312
|
# need to send them one at a time using --config-value <name> kv.<name>
|
313
|
-
# Note it can be either
|
313
|
+
# Note it can be either config_file or config_value depending
|
314
314
|
# on click processing order.
|
315
315
|
for config_name in v.keys():
|
316
316
|
yield "--config-value"
|
metaflow/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
metaflow_version = "2.
|
1
|
+
metaflow_version = "2.13"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: metaflow
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.13
|
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.
|
29
|
+
Requires-Dist: metaflow-stubs==2.13; extra == "stubs"
|
30
30
|
|
31
31
|

|
32
32
|
|
@@ -1,22 +1,22 @@
|
|
1
1
|
metaflow/R.py,sha256=CqVfIatvmjciuICNnoyyNGrwE7Va9iXfLdFbQa52hwA,3958
|
2
|
-
metaflow/__init__.py,sha256=
|
2
|
+
metaflow/__init__.py,sha256=fbhdWiWnEoAX4KnzRHMY_iQcT-uYlMWhzrXPKvK0i5g,5832
|
3
3
|
metaflow/cards.py,sha256=tP1_RrtmqdFh741pqE4t98S7SA0MtGRlGvRICRZF1Mg,426
|
4
|
-
metaflow/cli.py,sha256=
|
5
|
-
metaflow/cli_args.py,sha256=
|
4
|
+
metaflow/cli.py,sha256=IfUZd9fiUrT_MaSUnahmdPXK81DB06NNhUO2aXe0_PI,21600
|
5
|
+
metaflow/cli_args.py,sha256=muIh9pdVqMRG09uAYFKcAcUKFyDE4N3Wm6YahWRaUNI,3594
|
6
6
|
metaflow/clone_util.py,sha256=LSuVbFpPUh92UW32DBcnZbL0FFw-4w3CLa0tpEbCkzk,2066
|
7
7
|
metaflow/cmd_with_io.py,sha256=kl53HkAIyv0ecpItv08wZYczv7u3msD1VCcciqigqf0,588
|
8
8
|
metaflow/debug.py,sha256=HEmt_16tJtqHXQXsqD9pqOFe3CWR5GZ7VwpaYQgnRdU,1466
|
9
9
|
metaflow/decorators.py,sha256=BxzcxPkc8SvVTDD5pNhE3bmy7bYn6pBPEF-WYjnw-MY,23911
|
10
10
|
metaflow/event_logger.py,sha256=joTVRqZPL87nvah4ZOwtqWX8NeraM_CXKXXGVpKGD8o,780
|
11
11
|
metaflow/events.py,sha256=ahjzkSbSnRCK9RZ-9vTfUviz_6gMvSO9DGkJ86X80-k,5300
|
12
|
-
metaflow/exception.py,sha256=
|
13
|
-
metaflow/flowspec.py,sha256=
|
14
|
-
metaflow/graph.py,sha256=
|
15
|
-
metaflow/includefile.py,sha256=
|
12
|
+
metaflow/exception.py,sha256=_m9ZBJM0cooHRslDqfxCPQmkChqaTh6fGxp7HvISnYI,5161
|
13
|
+
metaflow/flowspec.py,sha256=Ph4HrZPQ7t3Z7T3vAoNKlHCd7ejsOFkMrfXGpqttVtU,33952
|
14
|
+
metaflow/graph.py,sha256=cdpnWr85aEj_rRn-7EjbndWjr_i8Dt3P7-oPUW0NNpI,12393
|
15
|
+
metaflow/includefile.py,sha256=kWKDSlzVcRVNGG9PV5eB3o2ynrzqhVsfaLtkqjshn7Q,20948
|
16
16
|
metaflow/info_file.py,sha256=wtf2_F0M6dgiUu74AFImM8lfy5RrUw5Yj7Rgs2swKRY,686
|
17
17
|
metaflow/integrations.py,sha256=LlsaoePRg03DjENnmLxZDYto3NwWc9z_PtU6nJxLldg,1480
|
18
|
-
metaflow/lint.py,sha256=
|
19
|
-
metaflow/metaflow_config.py,sha256=
|
18
|
+
metaflow/lint.py,sha256=x4p6tnRzYqNNniCGXyrUW0WuYfTUgnaOMRivxvnxask,11661
|
19
|
+
metaflow/metaflow_config.py,sha256=AAhrK6f6CTm2ek8ZQJBLPmmkYzY_giBXPmso3i7fzSI,23266
|
20
20
|
metaflow/metaflow_config_funcs.py,sha256=5GlvoafV6SxykwfL8D12WXSfwjBN_NsyuKE_Q3gjGVE,6738
|
21
21
|
metaflow/metaflow_current.py,sha256=pfkXmkyHeMJhxIs6HBJNBEaBDpcl5kz9Wx5mW6F_3qo,7164
|
22
22
|
metaflow/metaflow_environment.py,sha256=rojFyGdyY56sN1HaEb1-0XX53Q3XPNnl0SaH-8xXZ8w,7987
|
@@ -25,7 +25,7 @@ metaflow/metaflow_version.py,sha256=duhIzfKZtcxMVMs2uiBqBvUarSHJqyWDwMhaBOQd_g0,
|
|
25
25
|
metaflow/monitor.py,sha256=T0NMaBPvXynlJAO_avKtk8OIIRMyEuMAyF8bIp79aZU,5323
|
26
26
|
metaflow/multicore_utils.py,sha256=yEo5T6Gemn4_vl8b6IOz7fsTUYtEyqa3AaKZgJY96Wc,4974
|
27
27
|
metaflow/package.py,sha256=yfwVMVB1mD-Sw94KwXNK3N-26YHoKMn6btrcgd67Izs,7845
|
28
|
-
metaflow/parameters.py,sha256=
|
28
|
+
metaflow/parameters.py,sha256=UVnRakZ-LHsc0ZFbDKNcLMZSWBvP-Ylw7P1_YjBHjDA,18595
|
29
29
|
metaflow/procpoll.py,sha256=U2tE4iK_Mwj2WDyVTx_Uglh6xZ-jixQOo4wrM9OOhxg,2859
|
30
30
|
metaflow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
31
31
|
metaflow/pylint_wrapper.py,sha256=zzBY9YaSUZOGH-ypDKAv2B_7XcoyMZj-zCoCrmYqNRc,2865
|
@@ -34,9 +34,9 @@ metaflow/tagging_util.py,sha256=ctyf0Q1gBi0RyZX6J0e9DQGNkNHblV_CITfy66axXB4,2346
|
|
34
34
|
metaflow/task.py,sha256=xVVLWy8NH16OlLu2VoOb1OfiFzcOVVCdQldlmb1Zb_w,29691
|
35
35
|
metaflow/tuple_util.py,sha256=_G5YIEhuugwJ_f6rrZoelMFak3DqAR2tt_5CapS1XTY,830
|
36
36
|
metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
|
37
|
-
metaflow/util.py,sha256=
|
37
|
+
metaflow/util.py,sha256=hKjHl6NYJkKBSU2tzdVbddfOX1zWK73T4GCO42A0XB4,14666
|
38
38
|
metaflow/vendor.py,sha256=FchtA9tH22JM-eEtJ2c9FpUdMn8sSb1VHuQS56EcdZk,5139
|
39
|
-
metaflow/version.py,sha256=
|
39
|
+
metaflow/version.py,sha256=BaRwavZkdhCd56-Zxg8AtAsFnVpBuCJItv_SPS2apM4,26
|
40
40
|
metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
|
41
41
|
metaflow/_vendor/typing_extensions.py,sha256=0nUs5p1A_UrZigrAVBoOEM6TxU37zzPDUtiij1ZwpNc,110417
|
42
42
|
metaflow/_vendor/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
|
@@ -113,7 +113,7 @@ metaflow/_vendor/v3_6/importlib_metadata/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
113
113
|
metaflow/cli_components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
114
114
|
metaflow/cli_components/dump_cmd.py,sha256=SZEX51BWNd1o3H2uHDkYA8KRvou5X8g5rTwpdu5vnNQ,2704
|
115
115
|
metaflow/cli_components/init_cmd.py,sha256=Er-BO59UEUV1HIsg81bRtZWT2D2IZNMp93l-AoZLCls,1519
|
116
|
-
metaflow/cli_components/run_cmds.py,sha256=
|
116
|
+
metaflow/cli_components/run_cmds.py,sha256=yBJfmQiICi2yEIluy9yixPb4IE84U6b4e_oiIrq7nKY,10437
|
117
117
|
metaflow/cli_components/step_cmd.py,sha256=Mkztidy-wxYH7KyLSVsWK7SeYPJIeihpDClzTn9-2oo,5057
|
118
118
|
metaflow/cli_components/utils.py,sha256=gpoDociadjnJD7MuiJup_MDR02ZJjjleejr0jPBu29c,6057
|
119
119
|
metaflow/client/__init__.py,sha256=1GtQB4Y_CBkzaxg32L1syNQSlfj762wmLrfrDxGi1b8,226
|
@@ -132,7 +132,7 @@ metaflow/datastore/content_addressed_store.py,sha256=6T7tNqL29kpmecyMLHF35RhoSBO
|
|
132
132
|
metaflow/datastore/datastore_set.py,sha256=R5pwnxg1DD8kBY9vElvd2eMknrvwTyiSwvQs67_z9bc,2361
|
133
133
|
metaflow/datastore/datastore_storage.py,sha256=7V43QuiWDQ_Q4oHw9y7Z7X9lYj3GI-LV1-xB3d2Tt5k,9038
|
134
134
|
metaflow/datastore/exceptions.py,sha256=r7Ab5FvHIzyFh6kwiptA1lO5nLqWg0xRBoeYGefvapA,373
|
135
|
-
metaflow/datastore/flow_datastore.py,sha256=
|
135
|
+
metaflow/datastore/flow_datastore.py,sha256=rDMEHdYwub1PwLp2uaK-8CHdd8hiwxqeELXzsUfuqZs,10250
|
136
136
|
metaflow/datastore/inputs.py,sha256=i43dXr2xvgtsgKMO9allgCR18bk80GeayeQFyUTH36w,449
|
137
137
|
metaflow/datastore/task_datastore.py,sha256=oIlA4COEghSNVPqsw9BA7og4nyiZy7375BBRQ09Sw4E,36176
|
138
138
|
metaflow/extension_support/__init__.py,sha256=2z0c4R8zsVmEFOMGT2Jujsl6xveDVa9KLll7moL58NE,52984
|
@@ -185,7 +185,7 @@ metaflow/plugins/argo/argo_workflows.py,sha256=lPPPKlHgz2cKYHM8mdq8Aywoi6vYytyCz
|
|
185
185
|
metaflow/plugins/argo/argo_workflows_cli.py,sha256=k8rDbHMXF-A0CxxEnVMvk_9OYobPIyjF-PHBGYfH8b4,36752
|
186
186
|
metaflow/plugins/argo/argo_workflows_decorator.py,sha256=QdM1rK9gM-lDhyZldK8WqvFqJDvfJ7i3JPR5Uzaq2as,7887
|
187
187
|
metaflow/plugins/argo/argo_workflows_deployer.py,sha256=6kHxEnYXJwzNCM9swI8-0AckxtPWqwhZLerYkX8fxUM,4444
|
188
|
-
metaflow/plugins/argo/argo_workflows_deployer_objects.py,sha256=
|
188
|
+
metaflow/plugins/argo/argo_workflows_deployer_objects.py,sha256=bs0E8WJGQYXuwi6u0OiwTn_jkfeKb5DywCmuJHeRl8I,13949
|
189
189
|
metaflow/plugins/argo/capture_error.py,sha256=Ys9dscGrTpW-ZCirLBU0gD9qBM0BjxyxGlUMKcwewQc,1852
|
190
190
|
metaflow/plugins/argo/generate_input_paths.py,sha256=loYsI6RFX9LlFsHb7Fe-mzlTTtRdySoOu7sYDy-uXK0,881
|
191
191
|
metaflow/plugins/argo/jobset_input_paths.py,sha256=_JhZWngA6p9Q_O2fx3pdzKI0WE-HPRHz_zFvY2pHPTQ,525
|
@@ -198,7 +198,7 @@ metaflow/plugins/aws/batch/batch_cli.py,sha256=gVQMWBLeuqO3U3PhVJSHLwa-CNHsmW0Cv
|
|
198
198
|
metaflow/plugins/aws/batch/batch_client.py,sha256=ddlGG0Vk1mkO7tcvJjDvNAVsVLOlqddF7MA1kKfHSqM,28830
|
199
199
|
metaflow/plugins/aws/batch/batch_decorator.py,sha256=1MAhri-A_CYN2op0LPZikWL30m5h0w05XA8PXqb-Gk8,17561
|
200
200
|
metaflow/plugins/aws/secrets_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
201
|
-
metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py,sha256=
|
201
|
+
metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py,sha256=bBrGw4gRcKX9SLD8iKqPm_S_Zw5Y6F8AjxP6jPbkPpI,8136
|
202
202
|
metaflow/plugins/aws/step_functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
203
203
|
metaflow/plugins/aws/step_functions/dynamo_db_client.py,sha256=c1nFZc9v_dLTD3iD-75I6wrlM6oM7YmxpFPTRo8Tra0,2327
|
204
204
|
metaflow/plugins/aws/step_functions/event_bridge_client.py,sha256=U9-tqKdih4KR-ZDRhFc-jHmYIcHgpS4swfgtTxNMB94,2690
|
@@ -210,7 +210,7 @@ metaflow/plugins/aws/step_functions/step_functions_cli.py,sha256=4RsVtkw_3FO9Y2H
|
|
210
210
|
metaflow/plugins/aws/step_functions/step_functions_client.py,sha256=DKpNwAIWElvWjFANs5Ku3rgzjxFoqAD6k-EF8Xhkg3Q,4754
|
211
211
|
metaflow/plugins/aws/step_functions/step_functions_decorator.py,sha256=LoZC5BuQLqyFtfE-sGla26l2xXlCKN9aSvIlzPKV134,3800
|
212
212
|
metaflow/plugins/aws/step_functions/step_functions_deployer.py,sha256=JKYtDhKivtXUWPklprZFzkqezh14loGDmk8mNk6QtpI,3714
|
213
|
-
metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py,sha256
|
213
|
+
metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py,sha256=-ElC48q739UJk4qGEYj6H7p8nZ4xsm1iJwh5B7kEsFE,7319
|
214
214
|
metaflow/plugins/azure/__init__.py,sha256=GuuhTVC-zSdyAf79a1wiERMq0Zts7fwVT7t9fAf234A,100
|
215
215
|
metaflow/plugins/azure/azure_credential.py,sha256=JmdGEbVzgxy8ucqnQDdTTI_atyMX9WSZUw3qYOo7RhE,2174
|
216
216
|
metaflow/plugins/azure/azure_exceptions.py,sha256=NnbwpUC23bc61HZjJmeXztY0tBNn_Y_VpIpDDuYWIZ0,433
|
@@ -222,9 +222,9 @@ metaflow/plugins/azure/includefile_support.py,sha256=2kBnjR-Rl1cSoZsrgvl3t4tf1qs
|
|
222
222
|
metaflow/plugins/cards/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
223
223
|
metaflow/plugins/cards/card_cli.py,sha256=LN0B_Bvb7qJxRyvzR2uvRctt5xrC4SqZo0rkQgExQKo,35040
|
224
224
|
metaflow/plugins/cards/card_client.py,sha256=30dFBoC3axc261GeV7QCIs_V1OHhRtS31S0wEWsjw90,9501
|
225
|
-
metaflow/plugins/cards/card_creator.py,sha256=
|
225
|
+
metaflow/plugins/cards/card_creator.py,sha256=vRz1EUFa4xQ1fUIWzqyACViC6D7KGFaq5XlLIEssXTI,7741
|
226
226
|
metaflow/plugins/cards/card_datastore.py,sha256=3K19wE0CZVvOpuYUytftIYYnHHn3pMZJE87FMD6OYlM,14244
|
227
|
-
metaflow/plugins/cards/card_decorator.py,sha256=
|
227
|
+
metaflow/plugins/cards/card_decorator.py,sha256=bEiHVrlvhbR51Y1qVlQ5WrYCtjZDl5IW9df2JqouBgg,10804
|
228
228
|
metaflow/plugins/cards/card_resolver.py,sha256=bjyujYpGUFbLJNwXNGHlHhL4f-gVdVKebl7XW1vWDtE,717
|
229
229
|
metaflow/plugins/cards/card_server.py,sha256=DHv0RcepaPULWbkDahiEMrU5A281Cfb0DvHLUYd8JsU,11772
|
230
230
|
metaflow/plugins/cards/component_serializer.py,sha256=Row7c_8_euJcF_I1lWHdgMRj7dvAb69O-jZTmxS9h8k,37223
|
@@ -298,26 +298,26 @@ metaflow/plugins/metadata_providers/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uz
|
|
298
298
|
metaflow/plugins/metadata_providers/local.py,sha256=9UAxe9caN6kU1lkSlIoJbRGgTqsMa62cBTnyMwhqiaA,22446
|
299
299
|
metaflow/plugins/metadata_providers/service.py,sha256=NKZfFMamx6upP6aFRJfXlfYIhySgFNzz6kbp1yPD7LA,20222
|
300
300
|
metaflow/plugins/pypi/__init__.py,sha256=0YFZpXvX7HCkyBFglatual7XGifdA1RwC3U4kcizyak,1037
|
301
|
-
metaflow/plugins/pypi/bootstrap.py,sha256=
|
302
|
-
metaflow/plugins/pypi/conda_decorator.py,sha256=
|
303
|
-
metaflow/plugins/pypi/conda_environment.py,sha256=
|
304
|
-
metaflow/plugins/pypi/micromamba.py,sha256=
|
305
|
-
metaflow/plugins/pypi/pip.py,sha256=
|
306
|
-
metaflow/plugins/pypi/pypi_decorator.py,sha256=
|
301
|
+
metaflow/plugins/pypi/bootstrap.py,sha256=aIMY7vmVt-EhNQQgppjnM8QKHsKvAdFoKVyRTDLyH1c,10238
|
302
|
+
metaflow/plugins/pypi/conda_decorator.py,sha256=piFcE4uGmWhhbGlxMK0GHd7BGEyqy6r9BFy8Mjoi80Q,15937
|
303
|
+
metaflow/plugins/pypi/conda_environment.py,sha256=BpeyenJXsZtHBqDShO-_oOrY4w9iGREqLJ0kaPu_ulA,22032
|
304
|
+
metaflow/plugins/pypi/micromamba.py,sha256=8rkEzBJLvMY6RD3fttHMrW_MT-GZz970yxnIb8wVVa4,15026
|
305
|
+
metaflow/plugins/pypi/pip.py,sha256=IVy6uR3ymL2pNoxNig-WKAnHRcH09a1JbHgMEOYLyoI,14012
|
306
|
+
metaflow/plugins/pypi/pypi_decorator.py,sha256=ybNgo-T5Z_0W2KNuED0pdjyI0qygZ4a1MXAzKqdHt_E,7250
|
307
307
|
metaflow/plugins/pypi/pypi_environment.py,sha256=FYMg8kF3lXqcLfRYWD83a9zpVjcoo_TARqMGZ763rRk,230
|
308
308
|
metaflow/plugins/pypi/utils.py,sha256=ds1Mnv_DaxGnLAYp7ozg_K6oyguGyNhvHfE-75Ia1YA,2836
|
309
309
|
metaflow/plugins/secrets/__init__.py,sha256=mhJaN2eMS_ZZVewAMR2E-JdP5i0t3v9e6Dcwd-WpruE,310
|
310
310
|
metaflow/plugins/secrets/inline_secrets_provider.py,sha256=EChmoBGA1i7qM3jtYwPpLZDBybXLergiDlN63E0u3x8,294
|
311
311
|
metaflow/plugins/secrets/secrets_decorator.py,sha256=s-sFzPWOjahhpr5fMj-ZEaHkDYAPTO0isYXGvaUwlG8,11273
|
312
312
|
metaflow/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
313
|
-
metaflow/runner/click_api.py,sha256=
|
314
|
-
metaflow/runner/deployer.py,sha256=
|
315
|
-
metaflow/runner/deployer_impl.py,sha256=
|
316
|
-
metaflow/runner/metaflow_runner.py,sha256=
|
317
|
-
metaflow/runner/nbdeploy.py,sha256=
|
318
|
-
metaflow/runner/nbrun.py,sha256=
|
319
|
-
metaflow/runner/subprocess_manager.py,sha256=
|
320
|
-
metaflow/runner/utils.py,sha256=
|
313
|
+
metaflow/runner/click_api.py,sha256=13CM3RsH3dJ6YJTQnNafLEZ_teTnYMyfoR2Cf5baVbM,21772
|
314
|
+
metaflow/runner/deployer.py,sha256=Yas_SZCss3kfJw3hLC8_IyzgiytUFGoEGHz-l-rBBKk,8980
|
315
|
+
metaflow/runner/deployer_impl.py,sha256=nzQJiJxjgZxewkkK5pHshfVeZOUUf5-FzS0pPJimktM,5930
|
316
|
+
metaflow/runner/metaflow_runner.py,sha256=GS-12UwxiIUByMoIMG3gAROxC2ShZEtS1dOSpWEaP8Y,15131
|
317
|
+
metaflow/runner/nbdeploy.py,sha256=Sp5w-6nCZwjHaRBHWxi8udya-RYnJOB76KNLjB4L7Gs,4166
|
318
|
+
metaflow/runner/nbrun.py,sha256=LhJu-Teoi7wTkNxg0kpNPVXFxH_9P4lvtp0ysMEIFJ8,7299
|
319
|
+
metaflow/runner/subprocess_manager.py,sha256=K6uZXnqdgeW0vHUAVwoolSpDSLp1EVHiBtyD7f_vwac,22050
|
320
|
+
metaflow/runner/utils.py,sha256=jC-Z5xzGEEa6Qc71U_5r1wHsS-qYV7-czv1BO-q2MSs,10213
|
321
321
|
metaflow/sidecar/__init__.py,sha256=1mmNpmQ5puZCpRmmYlCOeieZ4108Su9XQ4_EqF1FGOU,131
|
322
322
|
metaflow/sidecar/sidecar.py,sha256=EspKXvPPNiyRToaUZ51PS5TT_PzrBNAurn_wbFnmGr0,1334
|
323
323
|
metaflow/sidecar/sidecar_messages.py,sha256=zPsCoYgDIcDkkvdC9MEpJTJ3y6TSGm2JWkRc4vxjbFA,1071
|
@@ -356,11 +356,11 @@ metaflow/tutorials/08-autopilot/README.md,sha256=GnePFp_q76jPs991lMUqfIIh5zSorIe
|
|
356
356
|
metaflow/tutorials/08-autopilot/autopilot.ipynb,sha256=DQoJlILV7Mq9vfPBGW-QV_kNhWPjS5n6SJLqePjFYLY,3191
|
357
357
|
metaflow/user_configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
358
358
|
metaflow/user_configs/config_decorators.py,sha256=Tj0H88UT8Q6pylXxHXgiA6cqnNlw4d3mR7M8J9g3ZUg,20139
|
359
|
-
metaflow/user_configs/config_options.py,sha256=
|
360
|
-
metaflow/user_configs/config_parameters.py,sha256=
|
361
|
-
metaflow-2.
|
362
|
-
metaflow-2.
|
363
|
-
metaflow-2.
|
364
|
-
metaflow-2.
|
365
|
-
metaflow-2.
|
366
|
-
metaflow-2.
|
359
|
+
metaflow/user_configs/config_options.py,sha256=Knpiax_YGmYAdR3zKmaepN8puW1MyL9g6-eMGAkcylo,20942
|
360
|
+
metaflow/user_configs/config_parameters.py,sha256=yDiaajJGP-9W_tA_6hVuw8HDF8n5zJBccCjcrTGOYDE,13912
|
361
|
+
metaflow-2.13.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
|
362
|
+
metaflow-2.13.dist-info/METADATA,sha256=BIUZgy3qZMHJjWyxV0fBXluV1DM7WCLhg4YslOkHhIA,5902
|
363
|
+
metaflow-2.13.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
|
364
|
+
metaflow-2.13.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
|
365
|
+
metaflow-2.13.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
|
366
|
+
metaflow-2.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|