metaflow 2.11.14__py2.py3-none-any.whl → 2.11.16__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.
Files changed (42) hide show
  1. metaflow/__init__.py +3 -0
  2. metaflow/cli.py +0 -120
  3. metaflow/clone_util.py +6 -0
  4. metaflow/datastore/datastore_set.py +1 -1
  5. metaflow/datastore/flow_datastore.py +32 -6
  6. metaflow/datastore/task_datastore.py +50 -0
  7. metaflow/extension_support/plugins.py +2 -0
  8. metaflow/metaflow_config.py +24 -0
  9. metaflow/metaflow_environment.py +2 -2
  10. metaflow/plugins/__init__.py +20 -0
  11. metaflow/plugins/airflow/airflow.py +7 -0
  12. metaflow/plugins/argo/argo_workflows.py +17 -0
  13. metaflow/plugins/aws/batch/batch_cli.py +6 -4
  14. metaflow/plugins/azure/__init__.py +3 -0
  15. metaflow/plugins/azure/azure_credential.py +53 -0
  16. metaflow/plugins/azure/azure_exceptions.py +1 -1
  17. metaflow/plugins/azure/azure_secret_manager_secrets_provider.py +240 -0
  18. metaflow/plugins/azure/azure_utils.py +2 -35
  19. metaflow/plugins/azure/blob_service_client_factory.py +4 -2
  20. metaflow/plugins/datastores/azure_storage.py +6 -6
  21. metaflow/plugins/datatools/s3/s3.py +9 -9
  22. metaflow/plugins/gcp/__init__.py +1 -0
  23. metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py +169 -0
  24. metaflow/plugins/gcp/gs_storage_client_factory.py +52 -1
  25. metaflow/plugins/kubernetes/kubernetes.py +85 -8
  26. metaflow/plugins/kubernetes/kubernetes_cli.py +24 -1
  27. metaflow/plugins/kubernetes/kubernetes_client.py +4 -1
  28. metaflow/plugins/kubernetes/kubernetes_decorator.py +49 -4
  29. metaflow/plugins/kubernetes/kubernetes_job.py +208 -201
  30. metaflow/plugins/kubernetes/kubernetes_jobsets.py +784 -0
  31. metaflow/plugins/logs_cli.py +358 -0
  32. metaflow/plugins/timeout_decorator.py +2 -1
  33. metaflow/task.py +1 -12
  34. metaflow/tuple_util.py +27 -0
  35. metaflow/util.py +0 -15
  36. metaflow/version.py +1 -1
  37. {metaflow-2.11.14.dist-info → metaflow-2.11.16.dist-info}/METADATA +2 -2
  38. {metaflow-2.11.14.dist-info → metaflow-2.11.16.dist-info}/RECORD +42 -36
  39. {metaflow-2.11.14.dist-info → metaflow-2.11.16.dist-info}/LICENSE +0 -0
  40. {metaflow-2.11.14.dist-info → metaflow-2.11.16.dist-info}/WHEEL +0 -0
  41. {metaflow-2.11.14.dist-info → metaflow-2.11.16.dist-info}/entry_points.txt +0 -0
  42. {metaflow-2.11.14.dist-info → metaflow-2.11.16.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,358 @@
1
+ from metaflow._vendor import click
2
+ from metaflow.cli import LOGGER_TIMESTAMP
3
+
4
+ from ..exception import CommandException
5
+ from ..datastore import TaskDataStoreSet, TaskDataStore
6
+
7
+
8
+ from ..mflog import mflog, LOG_SOURCES
9
+
10
+ # main motivation from https://github.com/pallets/click/issues/430
11
+ # in order to support a default command being called for a Click group.
12
+ #
13
+ # NOTE: We need this in order to not introduce breaking changes to existing CLI, as we wanted to
14
+ # nest both existing `logs` and the new `logs scrub` under a shared group, but `logs` already has
15
+ # a well defined behavior of showing the logs.
16
+ class CustomGroup(click.Group):
17
+ def __init__(self, name=None, commands=None, default_cmd=None, **attrs):
18
+ super(CustomGroup, self).__init__(name, commands, **attrs)
19
+ self.default_cmd = default_cmd
20
+
21
+ def get_command(self, ctx, cmd_name):
22
+ if cmd_name not in self.list_commands(ctx):
23
+ # input from the CLI does not match a command, so we pass that
24
+ # as the args to the default command instead.
25
+ ctx.passed_cmd = cmd_name
26
+ cmd_name = self.default_cmd
27
+ return super(CustomGroup, self).get_command(ctx, cmd_name)
28
+
29
+ def parse_args(self, ctx, args):
30
+ # We first try to parse args as is, to determine whether we need to fall back to the default commmand
31
+ # if any options are supplied, the parse will fail, as the group does not support the options.
32
+ # In this case we fallback to the default command, inserting that as the first arg and parsing again.
33
+ # copy args as trying to parse will destroy them.
34
+ original_args = list(args)
35
+ try:
36
+ super().parse_args(ctx, args)
37
+ args_parseable = True
38
+ except Exception:
39
+ args_parseable = False
40
+ if not args or not args_parseable:
41
+ original_args.insert(0, self.default_cmd)
42
+ return super().parse_args(ctx, original_args)
43
+
44
+ def resolve_command(self, ctx, args):
45
+ cmd_name, cmd_obj, args = super(CustomGroup, self).resolve_command(ctx, args)
46
+ passed_cmd = getattr(ctx, "passed_cmd", None)
47
+ if passed_cmd is not None:
48
+ args.insert(0, passed_cmd)
49
+
50
+ return cmd_name, cmd_obj, args
51
+
52
+ def format_commands(self, ctx, formatter):
53
+ formatter = CustomFormatter(self.default_cmd, formatter)
54
+ return super(CustomGroup, self).format_commands(ctx, formatter)
55
+
56
+
57
+ class CustomFormatter:
58
+ def __init__(self, default_cmd, original_formatter) -> None:
59
+ self.default_cmd = default_cmd
60
+ self.formatter = original_formatter
61
+
62
+ def __getattr__(self, name):
63
+ return getattr(self.formatter, name)
64
+
65
+ def write_dl(self, rows):
66
+ def _format(dup):
67
+ cmd, help = dup
68
+ if cmd == self.default_cmd:
69
+ cmd = cmd + " [Default]"
70
+ return (cmd, help)
71
+
72
+ rows = [_format(dup) for dup in rows]
73
+
74
+ return self.formatter.write_dl(rows)
75
+
76
+
77
+ @click.group()
78
+ def cli():
79
+ pass
80
+
81
+
82
+ @cli.group(cls=CustomGroup, help="Commands related to logs", default_cmd="show")
83
+ @click.pass_context
84
+ def logs(ctx):
85
+ # the logger is configured in cli.py
86
+ global echo
87
+ echo = ctx.obj.echo
88
+
89
+
90
+ @logs.command(
91
+ help="Show stdout/stderr produced by a task or all tasks in a step. "
92
+ "The format for input-path is either <run_id>/<step_name> or "
93
+ "<run_id>/<step_name>/<task_id>."
94
+ )
95
+ @click.argument("input-path")
96
+ @click.option(
97
+ "--stdout/--no-stdout",
98
+ default=False,
99
+ show_default=True,
100
+ help="Show stdout of the task.",
101
+ )
102
+ @click.option(
103
+ "--stderr/--no-stderr",
104
+ default=False,
105
+ show_default=True,
106
+ help="Show stderr of the task.",
107
+ )
108
+ @click.option(
109
+ "--both/--no-both",
110
+ default=True,
111
+ show_default=True,
112
+ help="Show both stdout and stderr of the task.",
113
+ )
114
+ @click.option(
115
+ "--timestamps/--no-timestamps",
116
+ default=False,
117
+ show_default=True,
118
+ help="Show timestamps.",
119
+ )
120
+ @click.option(
121
+ "--attempt",
122
+ default=None,
123
+ type=int,
124
+ show_default=False,
125
+ help="Attempt number of a task to show, defaults to the latest attempt.",
126
+ )
127
+ @click.pass_obj
128
+ def show(
129
+ obj, input_path, stdout=None, stderr=None, both=None, timestamps=False, attempt=None
130
+ ):
131
+ types = set()
132
+ if stdout:
133
+ types.add("stdout")
134
+ both = False
135
+ if stderr:
136
+ types.add("stderr")
137
+ both = False
138
+ if both:
139
+ types.update(("stdout", "stderr"))
140
+
141
+ streams = list(sorted(types, reverse=True))
142
+
143
+ # Pathspec can either be run_id/step_name or run_id/step_name/task_id.
144
+ parts = input_path.split("/")
145
+ if len(parts) == 2:
146
+ run_id, step_name = parts
147
+ task_id = None
148
+ elif len(parts) == 3:
149
+ run_id, step_name, task_id = parts
150
+ else:
151
+ raise CommandException(
152
+ "input_path should either be run_id/step_name "
153
+ "or run_id/step_name/task_id"
154
+ )
155
+
156
+ datastore_set = TaskDataStoreSet(
157
+ obj.flow_datastore, run_id, steps=[step_name], allow_not_done=True
158
+ )
159
+ if task_id:
160
+ ds_list = [
161
+ TaskDataStore(
162
+ obj.flow_datastore,
163
+ run_id=run_id,
164
+ step_name=step_name,
165
+ task_id=task_id,
166
+ mode="r",
167
+ allow_not_done=True,
168
+ )
169
+ ]
170
+ else:
171
+ ds_list = list(datastore_set) # get all tasks
172
+
173
+ if ds_list:
174
+
175
+ def echo_unicode(line, **kwargs):
176
+ click.secho(line.decode("UTF-8", errors="replace"), **kwargs)
177
+
178
+ # old style logs are non mflog-style logs
179
+ maybe_old_style = True
180
+ for ds in ds_list:
181
+ echo(
182
+ "Dumping logs of run_id=*{run_id}* "
183
+ "step=*{step}* task_id=*{task_id}*".format(
184
+ run_id=ds.run_id, step=ds.step_name, task_id=ds.task_id
185
+ ),
186
+ fg="magenta",
187
+ )
188
+
189
+ for stream in streams:
190
+ echo(stream, bold=True)
191
+ logs = ds.load_logs(LOG_SOURCES, stream, attempt_override=attempt)
192
+ if any(data for _, data in logs):
193
+ # attempt to read new, mflog-style logs
194
+ for line in mflog.merge_logs([blob for _, blob in logs]):
195
+ if timestamps:
196
+ ts = mflog.utc_to_local(line.utc_tstamp)
197
+ tstamp = ts.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
198
+ click.secho(tstamp + " ", fg=LOGGER_TIMESTAMP, nl=False)
199
+ echo_unicode(line.msg)
200
+ maybe_old_style = False
201
+ elif maybe_old_style:
202
+ # if they are not available, we may be looking at
203
+ # a legacy run (unless we have seen new-style data already
204
+ # for another stream). This return an empty string if
205
+ # nothing is found
206
+ log = ds.load_log_legacy(stream, attempt_override=attempt)
207
+ if log and timestamps:
208
+ raise CommandException(
209
+ "We can't show --timestamps for old runs. Sorry!"
210
+ )
211
+ echo_unicode(log, nl=False)
212
+ else:
213
+ raise CommandException(
214
+ "No Tasks found at the given path -- "
215
+ "either none exist or none have started yet"
216
+ )
217
+
218
+
219
+ @logs.command(
220
+ help="Scrub stdout/stderr produced by a task or all tasks in a step. "
221
+ "The format for input-path is either <run_id>/<step_name> or "
222
+ "<run_id>/<step_name>/<task_id>."
223
+ )
224
+ @click.argument("input-path")
225
+ @click.option(
226
+ "--stdout/--no-stdout",
227
+ default=False,
228
+ show_default=True,
229
+ help="Scrub stdout of the step or task.",
230
+ )
231
+ @click.option(
232
+ "--stderr/--no-stderr",
233
+ default=False,
234
+ show_default=True,
235
+ help="Scrub stderr of the step or task.",
236
+ )
237
+ @click.option(
238
+ "--both/--no-both",
239
+ default=True,
240
+ show_default=True,
241
+ help="Scrub both stdout and stderr of the step or task.",
242
+ )
243
+ @click.option(
244
+ "--attempt",
245
+ default=None,
246
+ type=int,
247
+ show_default=False,
248
+ help="Attempt number of a task to scrub, defaults to the latest attempt.",
249
+ )
250
+ @click.option(
251
+ "--latest/--all",
252
+ default=True,
253
+ show_default=False,
254
+ help="Scrub latest/all attempts of a step or task",
255
+ )
256
+ @click.option(
257
+ "--include-not-done",
258
+ default=False,
259
+ show_default=False,
260
+ is_flag=True,
261
+ help="Also scrub steps or tasks that are not done. Use this for tasks that did not finish correctly, and could not otherwise be scrubbed.",
262
+ )
263
+ @click.pass_obj
264
+ def scrub(
265
+ obj,
266
+ input_path,
267
+ stdout=None,
268
+ stderr=None,
269
+ both=None,
270
+ attempt=None,
271
+ latest=None,
272
+ include_not_done=None,
273
+ ):
274
+ types = set()
275
+ if stdout:
276
+ types.add("stdout")
277
+ both = False
278
+ if stderr:
279
+ types.add("stderr")
280
+ both = False
281
+ if both:
282
+ types.update(("stdout", "stderr"))
283
+
284
+ streams = list(sorted(types, reverse=True))
285
+
286
+ # Pathspec can either be run_id/step_name or run_id/step_name/task_id.
287
+ parts = input_path.split("/")
288
+ if len(parts) == 2:
289
+ run_id, step_name = parts
290
+ task_id = None
291
+ elif len(parts) == 3:
292
+ run_id, step_name, task_id = parts
293
+ else:
294
+ raise CommandException(
295
+ "input_path should either be run_id/step_name "
296
+ "or run_id/step_name/task_id"
297
+ )
298
+
299
+ if task_id:
300
+ if latest:
301
+ ds_list = obj.flow_datastore.get_task_datastores(
302
+ pathspecs=[input_path],
303
+ attempt=attempt,
304
+ mode="d",
305
+ allow_not_done=include_not_done,
306
+ )
307
+ else:
308
+ ds_list = obj.flow_datastore.get_task_datastores(
309
+ pathspecs=[input_path],
310
+ attempt=attempt,
311
+ mode="d",
312
+ allow_not_done=include_not_done,
313
+ include_prior=True,
314
+ )
315
+ else:
316
+ if latest:
317
+ ds_list = obj.flow_datastore.get_task_datastores(
318
+ run_id=run_id,
319
+ steps=[step_name],
320
+ attempt=attempt,
321
+ mode="d",
322
+ allow_not_done=include_not_done,
323
+ )
324
+ else:
325
+ ds_list = obj.flow_datastore.get_task_datastores(
326
+ run_id=run_id,
327
+ steps=[step_name],
328
+ attempt=attempt,
329
+ mode="d",
330
+ allow_not_done=include_not_done,
331
+ include_prior=True,
332
+ )
333
+
334
+ if ds_list:
335
+ for ds in ds_list:
336
+ failures = []
337
+ for stream in streams:
338
+ try:
339
+ ds.scrub_logs(LOG_SOURCES, stream)
340
+ except Exception:
341
+ failures.append(stream)
342
+ if failures:
343
+ obj.echo_always(
344
+ "Failed to scrub %s - attempt %s : *%s*"
345
+ % (ds.pathspec, ds.attempt, ",".join(failures))
346
+ )
347
+ else:
348
+ echo(
349
+ "Logs have been scrubbed for %s - attempt %s"
350
+ % (ds.pathspec, ds.attempt)
351
+ )
352
+
353
+ else:
354
+ raise CommandException(
355
+ "No Tasks found at the given path -- "
356
+ "either none exist or they have not finished yet.\n"
357
+ "If you know the task has finished, you can supply --include-not-done to force scrub it."
358
+ )
@@ -4,6 +4,7 @@ import traceback
4
4
  from metaflow.exception import MetaflowException
5
5
  from metaflow.decorators import StepDecorator
6
6
  from metaflow.unbounded_foreach import UBF_CONTROL
7
+ from metaflow.metaflow_config import DEFAULT_RUNTIME_LIMIT
7
8
 
8
9
 
9
10
  class TimeoutException(MetaflowException):
@@ -99,7 +100,7 @@ class TimeoutDecorator(StepDecorator):
99
100
 
100
101
 
101
102
  def get_run_time_limit_for_task(step_decos):
102
- run_time_limit = 5 * 24 * 60 * 60 # 5 days.
103
+ run_time_limit = DEFAULT_RUNTIME_LIMIT
103
104
  for deco in step_decos:
104
105
  if isinstance(deco, TimeoutDecorator):
105
106
  run_time_limit = deco.secs
metaflow/task.py CHANGED
@@ -23,18 +23,7 @@ from .util import all_equal, get_username, resolve_identity, unicode_type
23
23
  from .clone_util import clone_task_helper
24
24
  from .metaflow_current import current
25
25
  from metaflow.tracing import get_trace_id
26
- from metaflow.util import namedtuple_with_defaults
27
-
28
- foreach_frame_field_list = [
29
- ("step", str),
30
- ("var", str),
31
- ("num_splits", int),
32
- ("index", int),
33
- ("value", str),
34
- ]
35
- ForeachFrame = namedtuple_with_defaults(
36
- "ForeachFrame", foreach_frame_field_list, (None,) * (len(foreach_frame_field_list))
37
- )
26
+ from metaflow.tuple_util import ForeachFrame
38
27
 
39
28
  # Maximum number of characters of the foreach path that we store in the metadata.
40
29
  MAX_FOREACH_PATH_LENGTH = 256
metaflow/tuple_util.py ADDED
@@ -0,0 +1,27 @@
1
+ # Keep this file minimum dependency as this will be imported by metaflow at bootup.
2
+ def namedtuple_with_defaults(typename, field_descr, defaults=()):
3
+ from typing import NamedTuple
4
+
5
+ T = NamedTuple(typename, field_descr)
6
+ T.__new__.__defaults__ = tuple(defaults)
7
+
8
+ # Adding the following to ensure the named tuple can be (un)pickled correctly.
9
+ import __main__
10
+
11
+ setattr(__main__, T.__name__, T)
12
+ T.__module__ = "__main__"
13
+ return T
14
+
15
+
16
+ # Define the namedtuple with default here if they need to be accessible in client
17
+ # (and w/o a real flow).
18
+ foreach_frame_field_list = [
19
+ ("step", str),
20
+ ("var", str),
21
+ ("num_splits", int),
22
+ ("index", int),
23
+ ("value", str),
24
+ ]
25
+ ForeachFrame = namedtuple_with_defaults(
26
+ "ForeachFrame", foreach_frame_field_list, (None,) * (len(foreach_frame_field_list))
27
+ )
metaflow/util.py CHANGED
@@ -51,21 +51,6 @@ except NameError:
51
51
  from shlex import quote as _quote
52
52
 
53
53
 
54
- from typing import NamedTuple
55
-
56
-
57
- def namedtuple_with_defaults(typename, field_descr, defaults=()):
58
- T = NamedTuple(typename, field_descr)
59
- T.__new__.__defaults__ = tuple(defaults)
60
-
61
- # Adding the following to ensure the named tuple can be (un)pickled correctly.
62
- import __main__
63
-
64
- setattr(__main__, T.__name__, T)
65
- T.__module__ = "__main__"
66
- return T
67
-
68
-
69
54
  class TempDir(object):
70
55
  # Provide a temporary directory since Python 2.7 does not have it inbuilt
71
56
  def __enter__(self):
metaflow/version.py CHANGED
@@ -1 +1 @@
1
- metaflow_version = "2.11.14"
1
+ metaflow_version = "2.11.16"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.11.14
3
+ Version: 2.11.16
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.11.14 ; extra == 'stubs'
29
+ Requires-Dist: metaflow-stubs ==2.11.16 ; extra == 'stubs'
30
30
 
31
31
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
32
32
 
@@ -1,9 +1,9 @@
1
1
  metaflow/R.py,sha256=bNcXXpGOe5wquzTRGyU0KS9gJMz7HceKjXxammYPUE0,3841
2
- metaflow/__init__.py,sha256=c3JqZ9CTMPhz9Rxh6Jrk35pPTDjAQYQ48Ps26D-I_Bg,5659
2
+ metaflow/__init__.py,sha256=2QWfcQyYzHinGvCfuNNPpmZRQool_wLj4Vzc1mtX9WE,5754
3
3
  metaflow/cards.py,sha256=tP1_RrtmqdFh741pqE4t98S7SA0MtGRlGvRICRZF1Mg,426
4
- metaflow/cli.py,sha256=t8BpXpfr1UtjegySI6ydz6w7TaAyYmwZjbk6K2ZB-ns,35313
4
+ metaflow/cli.py,sha256=2igissDxlfN7f3Bfm0urjL7xtUJJE6jasEJir3OJfsw,31392
5
5
  metaflow/cli_args.py,sha256=lcgBGNTvfaiPxiUnejAe60Upt9swG6lRy1_3OqbU6MY,2616
6
- metaflow/clone_util.py,sha256=ar4jSZt2aTd4monBpkIQmcLcsOd0relAB42qTUGt2j8,1810
6
+ metaflow/clone_util.py,sha256=XfUX0vssu_hPlyZfhFl1AOnKkLqvt33Qp8xNrmdocGg,2057
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=n91bvWA4JJWHwZnI02-rFGBZsWWMtaABYlWYcOvHuRw,21391
@@ -15,10 +15,10 @@ metaflow/graph.py,sha256=ZPxyG8uwVMk5YYgX4pQEQaPZtZM5Wy-G4NtJK73IEuA,11818
15
15
  metaflow/includefile.py,sha256=yHczcZ_U0SrasxSNhZb3DIBzx8UZnrJCl3FzvpEQLOA,19753
16
16
  metaflow/integrations.py,sha256=LlsaoePRg03DjENnmLxZDYto3NwWc9z_PtU6nJxLldg,1480
17
17
  metaflow/lint.py,sha256=_kYAbAtsP7IG1Rd0FqNbo8I8Zs66_0WXbaZJFARO3dE,10394
18
- metaflow/metaflow_config.py,sha256=gPFjbtfhAiByGD91NyztyQ5AkuBR_vGcSOPc2hsXNp0,20268
18
+ metaflow/metaflow_config.py,sha256=WdLyxSwQy1XZUoJWrCMujz6OuzRqFSZZ31OP9b9mihc,21618
19
19
  metaflow/metaflow_config_funcs.py,sha256=pCaiQ2ez9wXixJI3ehmf3QiW9lUqFrZnBZx1my_0wIg,4874
20
20
  metaflow/metaflow_current.py,sha256=sCENPBiji3LcPbwgOG0ukGd_yEc5tST8EowES8DzRtA,7430
21
- metaflow/metaflow_environment.py,sha256=JdsmQsYp1SDQniQ0-q1mKRrmzSFfYuzrf6jLEHmyaiM,7352
21
+ metaflow/metaflow_environment.py,sha256=HJfhI3GrU-YbY7Etu9M-1q7EbwtEGFzCBhrUs45OLXY,7403
22
22
  metaflow/metaflow_profile.py,sha256=jKPEW-hmAQO-htSxb9hXaeloLacAh41A35rMZH6G8pA,418
23
23
  metaflow/metaflow_version.py,sha256=mPQ6g_3XjNdi0NrxDzwlW8ZH0nMyYpwqmJ04P7TIdP0,4774
24
24
  metaflow/monitor.py,sha256=T0NMaBPvXynlJAO_avKtk8OIIRMyEuMAyF8bIp79aZU,5323
@@ -30,11 +30,12 @@ metaflow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  metaflow/pylint_wrapper.py,sha256=zzBY9YaSUZOGH-ypDKAv2B_7XcoyMZj-zCoCrmYqNRc,2865
31
31
  metaflow/runtime.py,sha256=sGBkNMamV0bXBtZGCwvwQODrUrAGhln2rqadBVyKSvU,63961
32
32
  metaflow/tagging_util.py,sha256=ctyf0Q1gBi0RyZX6J0e9DQGNkNHblV_CITfy66axXB4,2346
33
- metaflow/task.py,sha256=ecGaULbK8kXPnyWzH1u6wtGclm0qeJm7K95amEL17sQ,25863
33
+ metaflow/task.py,sha256=tb5LNyx4u-yAQTM5MK1-wMw62dLfBeR9ojIZuYHeb0c,25592
34
+ metaflow/tuple_util.py,sha256=_G5YIEhuugwJ_f6rrZoelMFak3DqAR2tt_5CapS1XTY,830
34
35
  metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
35
- metaflow/util.py,sha256=RrjsvADLKxSqjL76CxKh_J4OJl840B9Ak3V-vXleGas,13429
36
+ metaflow/util.py,sha256=m5womQ7y-jXehuMyHPfByDbZ4HwTJxzs869cPOlMR8s,13057
36
37
  metaflow/vendor.py,sha256=LZgXrh7ZSDmD32D1T5jj3OKKpXIqqxKzdMAOc5V0SD4,5162
37
- metaflow/version.py,sha256=ROcaVY5k0dLOQGKMnQE_Ia8p7M0R8qdPj8wGobKN14A,29
38
+ metaflow/version.py,sha256=3ce4xuGeMO9uy2Wl_ijOVJrLOdw-emNhgeQNcOENpT8,29
38
39
  metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
39
40
  metaflow/_vendor/click/__init__.py,sha256=FkyGDQ-cbiQxP_lxgUspyFYS48f2S_pTcfKPz-d_RMo,2463
40
41
  metaflow/_vendor/click/_bashcomplete.py,sha256=9J98IHQYmCAr2Jup6TDshUr5FJEen-AoQCZR0K5nKxQ,12309
@@ -98,17 +99,17 @@ metaflow/cmd/develop/stub_generator.py,sha256=fmiWmr4tXBBvIZdWVEhKvZWtG4vjyIsfre
98
99
  metaflow/cmd/develop/stubs.py,sha256=hhf1giRNNlFGB5zSZdNA8tNvnJcmotXSiNN06N3_WyA,11742
99
100
  metaflow/datastore/__init__.py,sha256=VxP6ddJt3rwiCkpiSfAhyVkUCOe1pgZZsytVEJzFmSQ,155
100
101
  metaflow/datastore/content_addressed_store.py,sha256=dCVFAr4PltlmXNVVYt7UaBGJWe6fWuicCgb68XHqLrA,7643
101
- metaflow/datastore/datastore_set.py,sha256=sjwcxO6ZJgZ7ief_L-TTpjoRJYIlJnGGG_WSaDRij28,2368
102
+ metaflow/datastore/datastore_set.py,sha256=R5pwnxg1DD8kBY9vElvd2eMknrvwTyiSwvQs67_z9bc,2361
102
103
  metaflow/datastore/datastore_storage.py,sha256=7V43QuiWDQ_Q4oHw9y7Z7X9lYj3GI-LV1-xB3d2Tt5k,9038
103
104
  metaflow/datastore/exceptions.py,sha256=r7Ab5FvHIzyFh6kwiptA1lO5nLqWg0xRBoeYGefvapA,373
104
- metaflow/datastore/flow_datastore.py,sha256=ZG1fguspPxgFwKKJj4dHLgZl3ZdfZJDb19EWP2VlRJQ,9183
105
+ metaflow/datastore/flow_datastore.py,sha256=kbJcOLYnvPHgJfZ_WWkD9LJSX1PHI1K6f9oVUu08A9U,10235
105
106
  metaflow/datastore/inputs.py,sha256=i43dXr2xvgtsgKMO9allgCR18bk80GeayeQFyUTH36w,449
106
- metaflow/datastore/task_datastore.py,sha256=aqu68A2ezS2RschhxdX4O82ofML3J6UPwYWbgo-01G8,34312
107
+ metaflow/datastore/task_datastore.py,sha256=RWO-2p_vyJfTV9JtW2dIdt7IW7n_OD8ff43YJwetiW0,36169
107
108
  metaflow/extension_support/__init__.py,sha256=GK3P6YbIN4S7r3rbofzh4xaIJ6wsmDsE7iEMIlbXgMM,49334
108
109
  metaflow/extension_support/_empty_file.py,sha256=HENjnM4uAfeNygxMB_feCCWORFoSat9n_QwzSx2oXPw,109
109
110
  metaflow/extension_support/cmd.py,sha256=hk8iBUUINqvKCDxInKgWpum8ThiRZtHSJP7qBASHzl8,5711
110
111
  metaflow/extension_support/integrations.py,sha256=AWAh-AZ-vo9IxuAVEjGw3s8p_NMm2DKHYx10oC51gPU,5506
111
- metaflow/extension_support/plugins.py,sha256=jn5e9fmcwpukUlXeCCPtoCAXjECRuZzXIhvwuAKPOJ0,10683
112
+ metaflow/extension_support/plugins.py,sha256=1p7OIu_CFOqhnVEL-EwRaHxYbCSwrPNhmDtQ7TH3GHg,10775
112
113
  metaflow/metadata/__init__.py,sha256=FZNSnz26VB_m18DQG8mup6-Gfl7r1U6lRMljJBp3VAM,64
113
114
  metaflow/metadata/heartbeat.py,sha256=9XJs4SV4R4taxUSMOKmRChnJCQ5a5o0dzRZ1iICWr9Y,2423
114
115
  metaflow/metadata/metadata.py,sha256=oPm87-sQmyKWKfcFOsJOFXwo_clx9sCJ2YzdM32c6VQ,26061
@@ -118,12 +119,13 @@ metaflow/mflog/mflog.py,sha256=VebXxqitOtNAs7VJixnNfziO_i_urG7bsJ5JiB5IXgY,4370
118
119
  metaflow/mflog/save_logs.py,sha256=ZBAF4BMukw4FMAC7odpr9OI2BC_2petPtDX0ca6srC4,2352
119
120
  metaflow/mflog/save_logs_periodically.py,sha256=2Uvk9hi-zlCqXxOQoXmmjH1SCugfw6eG6w70WgfI-ho,1256
120
121
  metaflow/mflog/tee.py,sha256=wTER15qeHuiRpCkOqo-bd-r3Gj-EVlf3IvWRCA4beW4,887
121
- metaflow/plugins/__init__.py,sha256=GcQE1WmXqp1-lbQUpfzmyF7o-whI488f4YbAxb_Lz-U,6249
122
+ metaflow/plugins/__init__.py,sha256=rx4A1obvOM0AubZPXGOMsnYIsn90man8tYtzf5RxZjs,6881
122
123
  metaflow/plugins/catch_decorator.py,sha256=UOM2taN_OL2RPpuJhwEOA9ZALm0-hHD0XS2Hn2GUev0,4061
123
124
  metaflow/plugins/debug_logger.py,sha256=mcF5HYzJ0NQmqCMjyVUk3iAP-heroHRIiVWQC6Ha2-I,879
124
125
  metaflow/plugins/debug_monitor.py,sha256=Md5X_sDOSssN9pt2D8YcaIjTK5JaQD55UAYTcF6xYF0,1099
125
126
  metaflow/plugins/environment_decorator.py,sha256=6m9j2B77d-Ja_l_9CTJ__0O6aB2a8Qt_lAZu6UjAcUA,587
126
127
  metaflow/plugins/events_decorator.py,sha256=c2GcH6Mspbey3wBkjM5lqxaNByFOzYDQdllLpXzRNv8,18283
128
+ metaflow/plugins/logs_cli.py,sha256=7-LxLRy8X5s4KcoMSc183cbNIJnIcedf6oWPe13-hQs,11409
127
129
  metaflow/plugins/package_cli.py,sha256=-J6D4cupHfWSZ4GEFo2yy9Je9oL3owRWm5pEJwaiqd4,1649
128
130
  metaflow/plugins/parallel_decorator.py,sha256=yrwfqdTmvEyR3YdvJiPChVOK5vjYTibC09kDs7t6_kg,4444
129
131
  metaflow/plugins/project_decorator.py,sha256=eJOe0Ea7CbUCReEhR_XQvRkhV6jyRqDxM72oZI7EMCk,5336
@@ -132,9 +134,9 @@ metaflow/plugins/retry_decorator.py,sha256=tz_2Tq6GLg3vjDBZp0KKVTk3ADlCvqaWTSf7b
132
134
  metaflow/plugins/storage_executor.py,sha256=FqAgR0-L9MuqN8fRtTe4jjUfJL9lqt6fQkYaglAjRbk,6137
133
135
  metaflow/plugins/tag_cli.py,sha256=O_ZI4ILwGX3xKrLewUUF-zdJjCDi3JmsTb4ow87_RuY,17610
134
136
  metaflow/plugins/test_unbounded_foreach_decorator.py,sha256=cB_2OWb38eYfmbVck72ZwU0qgzi6hqJXZAxglpHU_qg,5216
135
- metaflow/plugins/timeout_decorator.py,sha256=GGlsnmT1F-5FDaN19pDWKhmcHaN1hstgtZRBipPPu3c,3595
137
+ metaflow/plugins/timeout_decorator.py,sha256=R-X8rKeMqd-xhfJFqskWb6ZpmZt2JB14U1BZJSRriwM,3648
136
138
  metaflow/plugins/airflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
- metaflow/plugins/airflow/airflow.py,sha256=ydSU7EN50DU9eIoSx6QaXlGZZy8zh3TKjytuiLWpiTw,31856
139
+ metaflow/plugins/airflow/airflow.py,sha256=U7jg1fSpGcuXhBCZ9xNh492h0MhBx3EV1WpWQh6RIaI,32147
138
140
  metaflow/plugins/airflow/airflow_cli.py,sha256=fUi6IsRMi6mvL6Twrszk7rZq7_4PmdYr9evJnBpXXPc,14440
139
141
  metaflow/plugins/airflow/airflow_decorator.py,sha256=H9-QnRP4x8tSomLmmpGeuVUI48-CxHR7tlvn_ceX1Zs,1772
140
142
  metaflow/plugins/airflow/airflow_utils.py,sha256=qd6lV2X4VpCO2sLsRc35JMOU4DVz_tQacrM_wWNkQug,28865
@@ -149,7 +151,7 @@ metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=JUKoGNoTCtrO9MNEneEC7ldRNwg
149
151
  metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
152
  metaflow/plugins/argo/argo_client.py,sha256=MKKhMCbWOPzf6z5zQQiyDRHHkAXcO7ipboDZDqAAvOk,15849
151
153
  metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
152
- metaflow/plugins/argo/argo_workflows.py,sha256=rnrxo20MCqMDNt0mnQJ5Dy-zA9Oo7vkbKTmADZuMbsg,129329
154
+ metaflow/plugins/argo/argo_workflows.py,sha256=6px2phfm19G9pz4zcaC4xYsdoxNC8SxdzZr1uyoMaV4,130187
153
155
  metaflow/plugins/argo/argo_workflows_cli.py,sha256=sZTpgfmc50eT3e0qIxpVqUgWhTcYlO1HM4gU6Oaya8g,33259
154
156
  metaflow/plugins/argo/argo_workflows_decorator.py,sha256=K5t4uIk2IXPdK7v7DEjj3buSB8ikLjLycKjbZUYeiaw,6781
155
157
  metaflow/plugins/argo/generate_input_paths.py,sha256=loYsI6RFX9LlFsHb7Fe-mzlTTtRdySoOu7sYDy-uXK0,881
@@ -158,7 +160,7 @@ metaflow/plugins/aws/aws_client.py,sha256=mO8UD6pxFaOnxDb3hTP3HB7Gqb_ZxoR-76LT68
158
160
  metaflow/plugins/aws/aws_utils.py,sha256=mSMBTUQ-CELhyPb6w3_Yq6_Hvd_6vbhAojYkrt2RNt8,6941
159
161
  metaflow/plugins/aws/batch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
162
  metaflow/plugins/aws/batch/batch.py,sha256=e9ssahWM18GnipPK2sqYB-ztx9w7Eoo7YtWyEtufYxs,17787
161
- metaflow/plugins/aws/batch/batch_cli.py,sha256=8j5s9RMZu0aJW76GY2lQkJT5tVDzamg9G_iu1AUpW8o,11632
163
+ metaflow/plugins/aws/batch/batch_cli.py,sha256=6PTbyajRgdy0XmjyJLBTdKdiOB84dcovQQ8sFXlJqko,11749
162
164
  metaflow/plugins/aws/batch/batch_client.py,sha256=s9ZHhxQPPoBQijLUgn6_16QOaD4-22U_44uJbp-yLkI,28565
163
165
  metaflow/plugins/aws/batch/batch_decorator.py,sha256=o2UH_E6k98ZpbWTvMooKv4V7nwpdHmh5SwCGzWubv0c,17313
164
166
  metaflow/plugins/aws/secrets_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -173,11 +175,13 @@ metaflow/plugins/aws/step_functions/step_functions.py,sha256=vXhtq9BSY9zmyG1Z0bj
173
175
  metaflow/plugins/aws/step_functions/step_functions_cli.py,sha256=KlH9jJL0VfsT0JqBhLwaWdYjaccU8UEArKAFnIJbSoU,24426
174
176
  metaflow/plugins/aws/step_functions/step_functions_client.py,sha256=DKpNwAIWElvWjFANs5Ku3rgzjxFoqAD6k-EF8Xhkg3Q,4754
175
177
  metaflow/plugins/aws/step_functions/step_functions_decorator.py,sha256=9hw_MX36RyFp6IowuAYaJzJg9UC5KCe1FNt1PcG7_J0,3791
176
- metaflow/plugins/azure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
- metaflow/plugins/azure/azure_exceptions.py,sha256=uvxE3E3nsbQq1dxCx1Yl9O54frbnMS5Elk8Z4qQ2Oh4,404
178
+ metaflow/plugins/azure/__init__.py,sha256=GuuhTVC-zSdyAf79a1wiERMq0Zts7fwVT7t9fAf234A,100
179
+ metaflow/plugins/azure/azure_credential.py,sha256=JmdGEbVzgxy8ucqnQDdTTI_atyMX9WSZUw3qYOo7RhE,2174
180
+ metaflow/plugins/azure/azure_exceptions.py,sha256=NnbwpUC23bc61HZjJmeXztY0tBNn_Y_VpIpDDuYWIZ0,433
181
+ metaflow/plugins/azure/azure_secret_manager_secrets_provider.py,sha256=GCPhzN9ldv1haD2W5swO2IxCDSqK57mRUNPyo2JwDAs,11107
178
182
  metaflow/plugins/azure/azure_tail.py,sha256=JAqV4mC42bMpR0O7m6X4cpFuh0peV1ufs_jJXrmicTc,3362
179
- metaflow/plugins/azure/azure_utils.py,sha256=efJnGl15s2HxxCtmLUsYDDsn1ek2tUl-5lruYzJJlfg,8437
180
- metaflow/plugins/azure/blob_service_client_factory.py,sha256=j1FJa06h6V-QcYIir9tcoEb23XcufcecyJQRsGhD2Qw,6489
183
+ metaflow/plugins/azure/azure_utils.py,sha256=j3kAxi2oC-fMpw8YegJvqsAwxi_m7jGPxCaeVwoBZJg,7100
184
+ metaflow/plugins/azure/blob_service_client_factory.py,sha256=MtyPftBxrXdXMxwhKgLepG6mtlb_2BhJLG_fvbO6D14,6527
181
185
  metaflow/plugins/azure/includefile_support.py,sha256=Wv3g3RlGtLbxAh3Reg0BDLWwqavYibQNCDWddlH7XCE,4706
182
186
  metaflow/plugins/cards/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
187
  metaflow/plugins/cards/card_cli.py,sha256=yHUk2iz8Ct63WizdmWp8TleySBkq6I57LWZn2ITqzXY,34713
@@ -206,14 +210,14 @@ metaflow/plugins/cards/card_modules/chevron/renderer.py,sha256=dm5ufR9-qnx94D9Bt
206
210
  metaflow/plugins/cards/card_modules/chevron/tokenizer.py,sha256=lQU9OELUE9a5Xu4snGhEV_YTT34iyUHVBuM1YO016Sw,7400
207
211
  metaflow/plugins/cards/card_viewer/viewer.html,sha256=qZJGzhZhQ1gugsknRP7zkAPPfUAtvemK1UKqXoGff5M,11593
208
212
  metaflow/plugins/datastores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
- metaflow/plugins/datastores/azure_storage.py,sha256=rWQ6odAqu3mwd9owoQwsV9k7n_fHnIJTrLqxkGI-ggw,16654
213
+ metaflow/plugins/datastores/azure_storage.py,sha256=QvIUQGOZF1oKeRJXbl3RsV1MnO3OMfLzheoo0UNWn7E,16670
210
214
  metaflow/plugins/datastores/gs_storage.py,sha256=ED1xfXNDiPkqma5PEui8HCv0b4ImHK_rlUMQJD9UNes,9622
211
215
  metaflow/plugins/datastores/local_storage.py,sha256=igrBDphhyu7EFIUj3BWcO7beiZbNnJLq--lF45UYSyI,4750
212
216
  metaflow/plugins/datastores/s3_storage.py,sha256=CZdNqaKtxDXQbEg2YHyphph3hWcLIE50puenm0WGVpk,5473
213
217
  metaflow/plugins/datatools/__init__.py,sha256=ge4L16OBQLy2J_MMvoHg3lMfdm-MluQgRWoyZ5GCRnk,1267
214
218
  metaflow/plugins/datatools/local.py,sha256=67hx3O_vInERlL0aJV0Sd-jUTd_2DOw4sJ4-IyEKNKM,4213
215
219
  metaflow/plugins/datatools/s3/__init__.py,sha256=14tr9fPjN3ULW5IOfKHeG7Uhjmgm7LMtQHfz1SFv-h8,248
216
- metaflow/plugins/datatools/s3/s3.py,sha256=7jxoDSn4hOM4xoqdwk-xcIfBkAt3RfM-ABXA5ZW0q10,66101
220
+ metaflow/plugins/datatools/s3/s3.py,sha256=FWhLAO9ZgvYeLxnjjCDAMsIOMLYcdO88mPOhQr3_Naw,66140
217
221
  metaflow/plugins/datatools/s3/s3op.py,sha256=ZQFSxlaQUt-Ko_kIXMbHOKJc8q4FPXogS3xI6xsDR7Y,43390
218
222
  metaflow/plugins/datatools/s3/s3tail.py,sha256=boQjQGQMI-bvTqcMP2y7uSlSYLcvWOy7J3ZUaF78NAA,2597
219
223
  metaflow/plugins/datatools/s3/s3util.py,sha256=FgRgaVmEq7-i2dV7q8XK5w5PfFt-xJjZa8WrK8IJfdI,3769
@@ -239,18 +243,20 @@ metaflow/plugins/env_escape/configurations/test_lib_impl/__init__.py,sha256=5uuX
239
243
  metaflow/plugins/env_escape/configurations/test_lib_impl/test_lib.py,sha256=Dxp5aCnJd3p6xxahQIPzAiV7Qp1J7EYfIl5xDFBEpZQ,3570
240
244
  metaflow/plugins/frameworks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
241
245
  metaflow/plugins/frameworks/pytorch.py,sha256=9MUecLwNt9p9N1HVUYfnJ_1nLgMU0Y14UNJZHZ2qCA4,1606
242
- metaflow/plugins/gcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
246
+ metaflow/plugins/gcp/__init__.py,sha256=bmoHLvLtawvFT9DSuWziToAttNRfbinOkrZZePWfOY0,55
247
+ metaflow/plugins/gcp/gcp_secret_manager_secrets_provider.py,sha256=4551ReVCIWFd1wugU6r4aQ-5ovLHp5kRtfT9YCt67FY,7258
243
248
  metaflow/plugins/gcp/gs_exceptions.py,sha256=NfqKmnPpNJ8nxA0CnPPjcO65SAQ2lhCrhM2dz5x9eCQ,184
244
- metaflow/plugins/gcp/gs_storage_client_factory.py,sha256=Xa87ELiSk2JO7m8-6feAiPXrbYXI0MEt7NsuOioVsXE,529
249
+ metaflow/plugins/gcp/gs_storage_client_factory.py,sha256=LIzc5bAzIOmaMhoXUtRkYaEJPEEy2suMv8uuNViC5Ug,2110
245
250
  metaflow/plugins/gcp/gs_tail.py,sha256=Jl_wvnzU7dub07A-DOAuP5FeccNIrPM-CeL1xKFs1nQ,3034
246
251
  metaflow/plugins/gcp/gs_utils.py,sha256=ZmIGFse1qYyvAVrwga23PQUzF6dXEDLLsZ2F-YRmvow,2030
247
252
  metaflow/plugins/gcp/includefile_support.py,sha256=vIDeR-MiJuUh-2S2pV7Z7FBkhIWwtHXaRrj76MWGRiY,3869
248
253
  metaflow/plugins/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
249
- metaflow/plugins/kubernetes/kubernetes.py,sha256=tbM9lfJcii1iAQ5C4bo8vUvwkBroNRVvgrytpcDQkpo,17490
250
- metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=cGY-BM5REcVKQCi4JSYSK6PvA9M5TK0ikG09Yfct0jA,9224
251
- metaflow/plugins/kubernetes/kubernetes_client.py,sha256=irATJpAob4jINkJw0zT_Xoa6JHRtYxx2IOeimlbzvPo,2373
252
- metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=OSEVkJRX4Q1E2-Z1AehA40M9ydMU4x3J_AXqmIZjkqA,22409
253
- metaflow/plugins/kubernetes/kubernetes_job.py,sha256=qDsvaOcwcaOOaqLePg0HN19LaeJNBEuik9b8ErF9lhg,32259
254
+ metaflow/plugins/kubernetes/kubernetes.py,sha256=RSlLyQV1ctqD7nobolsHezaRYV1pMYW3R-fyJw0nPIg,20152
255
+ metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=Sv4joxLI0JXo0gryxgM_Z4VTygOtZ0-bNzU8lmOSiFY,9896
256
+ metaflow/plugins/kubernetes/kubernetes_client.py,sha256=oUwgpAyGYtNa0vi3nt6lwMwps9kdCLc8ZD-QJHs716g,2472
257
+ metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=QK967jAxG7slzHyKy4NM_uTEZzQEAtanqOAr7kOs2d0,24269
258
+ metaflow/plugins/kubernetes/kubernetes_job.py,sha256=x8E4kB9SFCvSpdSkL0ILap7s4YpXnTniaDLtY3KHYKQ,31803
259
+ metaflow/plugins/kubernetes/kubernetes_jobsets.py,sha256=alYCAtphOSORfeG6jaXjY6-h1gDh6k7W3yvWLTLLCek,27192
254
260
  metaflow/plugins/metadata/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
255
261
  metaflow/plugins/metadata/local.py,sha256=YhLJC5zjVJrvQFIyQ92ZBByiUmhCC762RUX7ITX12O8,22428
256
262
  metaflow/plugins/metadata/service.py,sha256=ihq5F7KQZlxvYwzH_-jyP2aWN_I96i2vp92j_d697s8,20204
@@ -298,9 +304,9 @@ metaflow/tutorials/07-worldview/README.md,sha256=5vQTrFqulJ7rWN6r20dhot9lI2sVj9W
298
304
  metaflow/tutorials/07-worldview/worldview.ipynb,sha256=ztPZPI9BXxvW1QdS2Tfe7LBuVzvFvv0AToDnsDJhLdE,2237
299
305
  metaflow/tutorials/08-autopilot/README.md,sha256=GnePFp_q76jPs991lMUqfIIh5zSorIeWznyiUxzeUVE,1039
300
306
  metaflow/tutorials/08-autopilot/autopilot.ipynb,sha256=DQoJlILV7Mq9vfPBGW-QV_kNhWPjS5n6SJLqePjFYLY,3191
301
- metaflow-2.11.14.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
302
- metaflow-2.11.14.dist-info/METADATA,sha256=ijs1kKcUvZCvjPJ_W8ZMsSf2u0N7DjlCljMgdgQ18EY,5908
303
- metaflow-2.11.14.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
304
- metaflow-2.11.14.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
305
- metaflow-2.11.14.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
306
- metaflow-2.11.14.dist-info/RECORD,,
307
+ metaflow-2.11.16.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
308
+ metaflow-2.11.16.dist-info/METADATA,sha256=SZGPk_0-golIvX3WPQNy3jyK4K0drvhxze8OrCLWCog,5908
309
+ metaflow-2.11.16.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
310
+ metaflow-2.11.16.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
311
+ metaflow-2.11.16.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
312
+ metaflow-2.11.16.dist-info/RECORD,,