ob-metaflow 2.12.33.1__py2.py3-none-any.whl → 2.12.36.1__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.

Potentially problematic release.


This version of ob-metaflow might be problematic. Click here for more details.

Files changed (29) hide show
  1. metaflow/metaflow_config.py +2 -0
  2. metaflow/multicore_utils.py +31 -14
  3. metaflow/parameters.py +8 -2
  4. metaflow/plugins/airflow/airflow.py +18 -17
  5. metaflow/plugins/argo/argo_workflows.py +30 -17
  6. metaflow/plugins/argo/argo_workflows_deployer_objects.py +4 -8
  7. metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +4 -8
  8. metaflow/plugins/datatools/s3/s3.py +12 -4
  9. metaflow/plugins/events_decorator.py +253 -72
  10. metaflow/plugins/kubernetes/kube_utils.py +29 -0
  11. metaflow/plugins/kubernetes/kubernetes.py +4 -0
  12. metaflow/plugins/kubernetes/kubernetes_cli.py +8 -0
  13. metaflow/plugins/kubernetes/kubernetes_decorator.py +17 -0
  14. metaflow/plugins/kubernetes/kubernetes_job.py +19 -13
  15. metaflow/plugins/kubernetes/kubernetes_jobsets.py +19 -15
  16. metaflow/plugins/parallel_decorator.py +4 -1
  17. metaflow/runner/deployer_impl.py +4 -8
  18. metaflow/runner/metaflow_runner.py +33 -29
  19. metaflow/runner/subprocess_manager.py +58 -9
  20. metaflow/runner/utils.py +185 -43
  21. metaflow/runtime.py +88 -32
  22. metaflow/util.py +5 -0
  23. metaflow/version.py +1 -1
  24. {ob_metaflow-2.12.33.1.dist-info → ob_metaflow-2.12.36.1.dist-info}/METADATA +2 -2
  25. {ob_metaflow-2.12.33.1.dist-info → ob_metaflow-2.12.36.1.dist-info}/RECORD +29 -29
  26. {ob_metaflow-2.12.33.1.dist-info → ob_metaflow-2.12.36.1.dist-info}/LICENSE +0 -0
  27. {ob_metaflow-2.12.33.1.dist-info → ob_metaflow-2.12.36.1.dist-info}/WHEEL +0 -0
  28. {ob_metaflow-2.12.33.1.dist-info → ob_metaflow-2.12.36.1.dist-info}/entry_points.txt +0 -0
  29. {ob_metaflow-2.12.33.1.dist-info → ob_metaflow-2.12.36.1.dist-info}/top_level.txt +0 -0
metaflow/runtime.py CHANGED
@@ -9,6 +9,7 @@ from __future__ import print_function
9
9
  import os
10
10
  import sys
11
11
  import fcntl
12
+ import re
12
13
  import time
13
14
  import subprocess
14
15
  from datetime import datetime
@@ -49,7 +50,13 @@ PROGRESS_INTERVAL = 300 # s
49
50
  # The following is a list of the (data) artifacts used by the runtime while
50
51
  # executing a flow. These are prefetched during the resume operation by
51
52
  # leveraging the TaskDataStoreSet.
52
- PREFETCH_DATA_ARTIFACTS = ["_foreach_stack", "_task_ok", "_transition"]
53
+ PREFETCH_DATA_ARTIFACTS = [
54
+ "_foreach_stack",
55
+ "_task_ok",
56
+ "_transition",
57
+ "_control_mapper_tasks",
58
+ "_control_task_is_mapper_zero",
59
+ ]
53
60
  RESUME_POLL_SECONDS = 60
54
61
 
55
62
  # Runtime must use logsource=RUNTIME_LOG_SOURCE for all loglines that it
@@ -269,6 +276,8 @@ class NativeRuntime(object):
269
276
  step_name,
270
277
  task_id,
271
278
  pathspec_index,
279
+ cloned_task_pathspec_index,
280
+ finished_tuple,
272
281
  ubf_context,
273
282
  generate_task_obj,
274
283
  verbose=False,
@@ -281,8 +290,13 @@ class NativeRuntime(object):
281
290
  task.ubf_context = ubf_context
282
291
  new_task_id = task.task_id
283
292
  self._cloned_tasks.append(task)
284
- self._cloned_task_index.add(task.task_index)
285
-
293
+ self._cloned_task_index.add(cloned_task_pathspec_index)
294
+ task_pathspec = "{}/{}/{}".format(self._run_id, step_name, new_task_id)
295
+ else:
296
+ task_pathspec = "{}/{}/{}".format(self._run_id, step_name, new_task_id)
297
+ Task.clone_pathspec_mapping[task_pathspec] = "{}/{}/{}".format(
298
+ self._clone_run_id, step_name, task_id
299
+ )
286
300
  if verbose:
287
301
  self._logger(
288
302
  "Cloning task from {}/{}/{}/{} to {}/{}/{}/{}".format(
@@ -308,6 +322,8 @@ class NativeRuntime(object):
308
322
  self._metadata,
309
323
  origin_ds_set=self._origin_ds_set,
310
324
  )
325
+ self._finished[(step_name, finished_tuple)] = task_pathspec
326
+ self._is_cloned[task_pathspec] = True
311
327
  except Exception as e:
312
328
  self._logger(
313
329
  "Cloning {}/{}/{}/{} failed with error: {}".format(
@@ -323,7 +339,8 @@ class NativeRuntime(object):
323
339
 
324
340
  inputs = []
325
341
 
326
- ubf_mapper_tasks_to_clone = []
342
+ ubf_mapper_tasks_to_clone = set()
343
+ ubf_control_tasks = set()
327
344
  # We only clone ubf mapper tasks if the control task is complete.
328
345
  # Here we need to check which control tasks are complete, and then get the corresponding
329
346
  # mapper tasks.
@@ -331,13 +348,25 @@ class NativeRuntime(object):
331
348
  _, step_name, task_id = task_ds.pathspec.split("/")
332
349
  pathspec_index = task_ds.pathspec_index
333
350
  if task_ds["_task_ok"] and step_name != "_parameters":
334
- # Only control task can have _control_mapper_tasks. We then store the corresponding mapepr task pathspecs.
351
+ # Control task contains "_control_mapper_tasks" but, in the case of
352
+ # @parallel decorator, the control task is also a mapper task so we
353
+ # need to distinguish this using _control_task_is_mapper_zero
335
354
  control_mapper_tasks = (
336
355
  []
337
356
  if "_control_mapper_tasks" not in task_ds
338
357
  else task_ds["_control_mapper_tasks"]
339
358
  )
340
- ubf_mapper_tasks_to_clone.extend(control_mapper_tasks)
359
+ if control_mapper_tasks:
360
+ if task_ds.get("_control_task_is_mapper_zero", False):
361
+ # Strip out the control task of list of mapper tasks
362
+ ubf_control_tasks.add(control_mapper_tasks[0])
363
+ ubf_mapper_tasks_to_clone.update(control_mapper_tasks[1:])
364
+ else:
365
+ ubf_mapper_tasks_to_clone.update(control_mapper_tasks)
366
+ # Since we only add mapper tasks here, if we are not in the list
367
+ # we are a control task
368
+ if task_ds.pathspec not in ubf_mapper_tasks_to_clone:
369
+ ubf_control_tasks.add(task_ds.pathspec)
341
370
 
342
371
  for task_ds in self._origin_ds_set:
343
372
  _, step_name, task_id = task_ds.pathspec.split("/")
@@ -350,33 +379,54 @@ class NativeRuntime(object):
350
379
  ):
351
380
  # "_unbounded_foreach" is a special flag to indicate that the transition is an unbounded foreach.
352
381
  # Both parent and splitted children tasks will have this flag set. The splitted control/mapper tasks
353
- # have no "foreach_param" because UBF is always followed by a join step.
382
+ # are not foreach types because UBF is always followed by a join step.
354
383
  is_ubf_task = (
355
384
  "_unbounded_foreach" in task_ds and task_ds["_unbounded_foreach"]
356
- ) and (self._graph[step_name].foreach_param is None)
385
+ ) and (self._graph[step_name].type != "foreach")
357
386
 
358
- # Only the control task has "_control_mapper_tasks" artifact.
359
- is_ubf_control_task = (
360
- is_ubf_task
361
- and ("_control_mapper_tasks" in task_ds)
362
- and task_ds["_control_mapper_tasks"]
363
- )
364
- is_ubf_mapper_tasks = is_ubf_task and (not is_ubf_control_task)
365
- if is_ubf_mapper_tasks and (
387
+ is_ubf_control_task = task_ds.pathspec in ubf_control_tasks
388
+
389
+ is_ubf_mapper_task = is_ubf_task and (not is_ubf_control_task)
390
+
391
+ if is_ubf_mapper_task and (
366
392
  task_ds.pathspec not in ubf_mapper_tasks_to_clone
367
393
  ):
368
- # Skip copying UBF mapper tasks if control tasks is incomplete.
394
+ # Skip copying UBF mapper tasks if control task is incomplete.
369
395
  continue
370
396
 
371
397
  ubf_context = None
372
398
  if is_ubf_task:
373
- ubf_context = "ubf_test" if is_ubf_mapper_tasks else "ubf_control"
399
+ ubf_context = "ubf_test" if is_ubf_mapper_task else "ubf_control"
400
+
401
+ finished_tuple = tuple(
402
+ [s._replace(value=0) for s in task_ds.get("_foreach_stack", ())]
403
+ )
404
+ cloned_task_pathspec_index = pathspec_index.split("/")[1]
405
+ if task_ds.get("_control_task_is_mapper_zero", False):
406
+ # Replace None with index 0 for control task as it is part of the
407
+ # UBF (as a mapper as well)
408
+ finished_tuple = finished_tuple[:-1] + (
409
+ finished_tuple[-1]._replace(index=0),
410
+ )
411
+ # We need this reverse override though because when we check
412
+ # if a task has been cloned in _queue_push, the index will be None
413
+ # because the _control_task_is_mapper_zero is set in the control
414
+ # task *itself* and *not* in the one that is launching the UBF nest.
415
+ # This means that _translate_index will use None.
416
+ cloned_task_pathspec_index = re.sub(
417
+ r"(\[(?:\d+, ?)*)0\]",
418
+ lambda m: (m.group(1) or "[") + "None]",
419
+ cloned_task_pathspec_index,
420
+ )
421
+
374
422
  inputs.append(
375
423
  (
376
424
  step_name,
377
425
  task_id,
378
426
  pathspec_index,
379
- is_ubf_mapper_tasks,
427
+ cloned_task_pathspec_index,
428
+ finished_tuple,
429
+ is_ubf_mapper_task,
380
430
  ubf_context,
381
431
  )
382
432
  )
@@ -388,15 +438,19 @@ class NativeRuntime(object):
388
438
  step_name,
389
439
  task_id,
390
440
  pathspec_index,
441
+ cloned_task_pathspec_index,
442
+ finished_tuple,
391
443
  ubf_context=ubf_context,
392
- generate_task_obj=generate_task_obj and (not is_ubf_mapper_tasks),
444
+ generate_task_obj=generate_task_obj and (not is_ubf_mapper_task),
393
445
  verbose=verbose,
394
446
  )
395
447
  for (
396
448
  step_name,
397
449
  task_id,
398
450
  pathspec_index,
399
- is_ubf_mapper_tasks,
451
+ cloned_task_pathspec_index,
452
+ finished_tuple,
453
+ is_ubf_mapper_task,
400
454
  ubf_context,
401
455
  ) in inputs
402
456
  ]
@@ -546,7 +600,6 @@ class NativeRuntime(object):
546
600
  # Given the current task information (task_index), the type of transition,
547
601
  # and the split index, return the new task index.
548
602
  def _translate_index(self, task, next_step, type, split_index=None):
549
- import re
550
603
 
551
604
  match = re.match(r"^(.+)\[(.*)\]$", task.task_index)
552
605
  if match:
@@ -640,15 +693,18 @@ class NativeRuntime(object):
640
693
  # If the control task is cloned, all mapper tasks should have been cloned
641
694
  # as well, so we no longer need to handle cloning of mapper tasks in runtime.
642
695
 
643
- # Update _finished since these tasks were successfully
644
- # run elsewhere so that join will be unblocked.
645
- _, foreach_stack = task.finished_id
646
- top = foreach_stack[-1]
647
- bottom = list(foreach_stack[:-1])
648
- for i in range(num_splits):
649
- s = tuple(bottom + [top._replace(index=i)])
650
- self._finished[(task.step, s)] = mapper_tasks[i]
651
- self._is_cloned[mapper_tasks[i]] = False
696
+ # Update _finished if we are not cloned. If we were cloned, we already
697
+ # updated _finished with the new tasks. Note that the *value* of mapper
698
+ # tasks is incorrect and contains the pathspec of the *cloned* run
699
+ # but we don't use it for anything. We could look to clean it up though
700
+ if not task.is_cloned:
701
+ _, foreach_stack = task.finished_id
702
+ top = foreach_stack[-1]
703
+ bottom = list(foreach_stack[:-1])
704
+ for i in range(num_splits):
705
+ s = tuple(bottom + [top._replace(index=i)])
706
+ self._finished[(task.step, s)] = mapper_tasks[i]
707
+ self._is_cloned[mapper_tasks[i]] = False
652
708
 
653
709
  # Find and check status of control task and retrieve its pathspec
654
710
  # for retrieving unbounded foreach cardinality.
@@ -1080,7 +1136,7 @@ class Task(object):
1080
1136
  # To avoid the edge case where the resume leader is selected but has not
1081
1137
  # yet written the _resume_leader metadata, we will wait for a few seconds.
1082
1138
  # We will wait for resume leader for at most 3 times.
1083
- for resume_leader_wait_retry in range(3):
1139
+ for _ in range(3):
1084
1140
  if ds.has_metadata("_resume_leader", add_attempt=False):
1085
1141
  resume_leader = ds.load_metadata(
1086
1142
  ["_resume_leader"], add_attempt=False
metaflow/util.py CHANGED
@@ -436,12 +436,17 @@ def to_pod(value):
436
436
  Value to convert to POD format. The value can be a string, number, list,
437
437
  dictionary, or a nested structure of these types.
438
438
  """
439
+ # Prevent circular imports
440
+ from metaflow.parameters import DeployTimeField
441
+
439
442
  if isinstance(value, (str, int, float)):
440
443
  return value
441
444
  if isinstance(value, dict):
442
445
  return {to_pod(k): to_pod(v) for k, v in value.items()}
443
446
  if isinstance(value, (list, set, tuple)):
444
447
  return [to_pod(v) for v in value]
448
+ if isinstance(value, DeployTimeField):
449
+ return value.print_representation
445
450
  return str(value)
446
451
 
447
452
 
metaflow/version.py CHANGED
@@ -1 +1 @@
1
- metaflow_version = "2.12.33.1"
1
+ metaflow_version = "2.12.36.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow
3
- Version: 2.12.33.1
3
+ Version: 2.12.36.1
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Netflix, Outerbounds & the Metaflow Community
6
6
  Author-email: help@outerbounds.co
@@ -12,7 +12,7 @@ Requires-Dist: boto3
12
12
  Requires-Dist: pylint
13
13
  Requires-Dist: kubernetes
14
14
  Provides-Extra: stubs
15
- Requires-Dist: metaflow-stubs==2.12.33.1; extra == "stubs"
15
+ Requires-Dist: metaflow-stubs==2.12.36.1; extra == "stubs"
16
16
 
17
17
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
18
18
 
@@ -16,27 +16,27 @@ metaflow/includefile.py,sha256=rDJnxF0U7vD3cz9hhPkKlW_KS3ToaXnlOjhjNZ__Rx4,19628
16
16
  metaflow/info_file.py,sha256=wtf2_F0M6dgiUu74AFImM8lfy5RrUw5Yj7Rgs2swKRY,686
17
17
  metaflow/integrations.py,sha256=LlsaoePRg03DjENnmLxZDYto3NwWc9z_PtU6nJxLldg,1480
18
18
  metaflow/lint.py,sha256=5rj1MlpluxyPTSINjtMoJ7viotyNzfjtBJSAihlAwMU,10870
19
- metaflow/metaflow_config.py,sha256=4TE6jFEmrdadV9O7DzRop4vrk9gHWvhtxsNbJCf7Kvk,23115
19
+ metaflow/metaflow_config.py,sha256=w2OqkoaQHqZFdfRGhA03Lzq8hs7SUV0rKGaJ5Zw6PkI,23204
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
23
23
  metaflow/metaflow_profile.py,sha256=jKPEW-hmAQO-htSxb9hXaeloLacAh41A35rMZH6G8pA,418
24
24
  metaflow/metaflow_version.py,sha256=duhIzfKZtcxMVMs2uiBqBvUarSHJqyWDwMhaBOQd_g0,7491
25
25
  metaflow/monitor.py,sha256=T0NMaBPvXynlJAO_avKtk8OIIRMyEuMAyF8bIp79aZU,5323
26
- metaflow/multicore_utils.py,sha256=vdTNgczVLODifscUbbveJbuSDOl3Y9pAxhr7sqYiNf4,4760
26
+ metaflow/multicore_utils.py,sha256=yEo5T6Gemn4_vl8b6IOz7fsTUYtEyqa3AaKZgJY96Wc,4974
27
27
  metaflow/package.py,sha256=QutDP6WzjwGk1UCKXqBfXa9F10Q--FlRr0J7fwlple0,7399
28
- metaflow/parameters.py,sha256=U5G8CGbUurLmrj-YOlt18komEZ2eyFI_F1ymkAKYI-Y,15741
28
+ metaflow/parameters.py,sha256=pzjG0ssuVHPyYQqWE86dS3yYChEqbT90rOUcRD4wNog,16079
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
32
- metaflow/runtime.py,sha256=RXA8-YOeGnBl7IJtoMIl4T1zEOmvFsTKv5rBxnnnDEY,68884
32
+ metaflow/runtime.py,sha256=wWoJILHG2JGEPnQqNI07vHT6bfJuu-pxcu5kH07787M,71841
33
33
  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=olAvJK3y1it_k99MhLulTaAJo7OFVt5rnrD-ulIFLCU,13616
37
+ metaflow/util.py,sha256=w7oylILPaNAjtM8MR8dfUazTVBArV_CKPpqGs4HnowM,13785
38
38
  metaflow/vendor.py,sha256=FchtA9tH22JM-eEtJ2c9FpUdMn8sSb1VHuQS56EcdZk,5139
39
- metaflow/version.py,sha256=f8YWqGzFG6sgRhtzzclBhQGZQRmV10tPnWiQ9OnGwaY,31
39
+ metaflow/version.py,sha256=zPNDPEQGDah9lxgR5rkWIcQKgd9IzGLkNXaG_MiHxIg,31
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
@@ -148,10 +148,10 @@ metaflow/plugins/catch_decorator.py,sha256=UOM2taN_OL2RPpuJhwEOA9ZALm0-hHD0XS2Hn
148
148
  metaflow/plugins/debug_logger.py,sha256=mcF5HYzJ0NQmqCMjyVUk3iAP-heroHRIiVWQC6Ha2-I,879
149
149
  metaflow/plugins/debug_monitor.py,sha256=Md5X_sDOSssN9pt2D8YcaIjTK5JaQD55UAYTcF6xYF0,1099
150
150
  metaflow/plugins/environment_decorator.py,sha256=6m9j2B77d-Ja_l_9CTJ__0O6aB2a8Qt_lAZu6UjAcUA,587
151
- metaflow/plugins/events_decorator.py,sha256=c2GcH6Mspbey3wBkjM5lqxaNByFOzYDQdllLpXzRNv8,18283
151
+ metaflow/plugins/events_decorator.py,sha256=8YSapp_sT3UzNrb6cYBJ19-wmX_CKow6OOJN8kNVnpg,26456
152
152
  metaflow/plugins/logs_cli.py,sha256=77W5UNagU2mOKSMMvrQxQmBLRzvmjK-c8dWxd-Ygbqs,11410
153
153
  metaflow/plugins/package_cli.py,sha256=-J6D4cupHfWSZ4GEFo2yy9Je9oL3owRWm5pEJwaiqd4,1649
154
- metaflow/plugins/parallel_decorator.py,sha256=GIjZZVTqkvtnMuGE8RNtObX6CAJavZTxttqRujGmnGs,8973
154
+ metaflow/plugins/parallel_decorator.py,sha256=GR6LKIW7_S7AoU50Ar2_0nndVtO2epdn3LuthE0vKMQ,9127
155
155
  metaflow/plugins/project_decorator.py,sha256=eJOe0Ea7CbUCReEhR_XQvRkhV6jyRqDxM72oZI7EMCk,5336
156
156
  metaflow/plugins/resources_decorator.py,sha256=AtoOwg4mHYHYthg-CAfbfam-QiT0ViuDLDoukoDvF6Q,1347
157
157
  metaflow/plugins/retry_decorator.py,sha256=tz_2Tq6GLg3vjDBZp0KKVTk3ADlCvqaWTSf7blmFdUw,1548
@@ -160,7 +160,7 @@ metaflow/plugins/tag_cli.py,sha256=10039-0DUF0cmhudoDNrRGLWq8tCGQJ7tBsQAGAmkBQ,1
160
160
  metaflow/plugins/test_unbounded_foreach_decorator.py,sha256=33p5aCWnyk9MT5DmXcm4Q_Qnwfd4y4xvVTEfeqs4by0,5957
161
161
  metaflow/plugins/timeout_decorator.py,sha256=R-X8rKeMqd-xhfJFqskWb6ZpmZt2JB14U1BZJSRriwM,3648
162
162
  metaflow/plugins/airflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
- metaflow/plugins/airflow/airflow.py,sha256=V9a96L5Cb1Yg5CvcbX6WDa7J8lQh5AjIvnVQod20_7k,32160
163
+ metaflow/plugins/airflow/airflow.py,sha256=GDaKLdzzySttJfhl_OiYjkK_ubIaRKR4YgcLaKRCQLk,32293
164
164
  metaflow/plugins/airflow/airflow_cli.py,sha256=2JzrGUY9mPNyXRO6fJbgdtiOZXsEUv4Fn2MSPcoPszU,14692
165
165
  metaflow/plugins/airflow/airflow_decorator.py,sha256=IWT6M9gga8t65FR4Wi7pIZvOupk3hE75B5NRg9tMEps,1781
166
166
  metaflow/plugins/airflow/airflow_utils.py,sha256=dvRllfQeOWfDUseFnOocIGaL3gRI_A7cEHnC1w01vfk,28905
@@ -175,11 +175,11 @@ metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=iDReG-7FKnumrtQg-HY6cCUAAqN
175
175
  metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
176
  metaflow/plugins/argo/argo_client.py,sha256=Z_A1TO9yw4Y-a8VAlwrFS0BwunWzXpbtik-j_xjcuHE,16303
177
177
  metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
178
- metaflow/plugins/argo/argo_workflows.py,sha256=NMKKMR8iY7-xEcwo-wv1KdmZVL5CuItNq8su2J7Gfds,175307
178
+ metaflow/plugins/argo/argo_workflows.py,sha256=642SMU4VUJBJTdrbIfqUldRsHtIsPBbBjx2JSjLSKJo,175822
179
179
  metaflow/plugins/argo/argo_workflows_cli.py,sha256=NdLwzfBcTsR72qLycZBesR4Pwv48o3Z_v6OfYrZuVEY,36721
180
180
  metaflow/plugins/argo/argo_workflows_decorator.py,sha256=QdM1rK9gM-lDhyZldK8WqvFqJDvfJ7i3JPR5Uzaq2as,7887
181
181
  metaflow/plugins/argo/argo_workflows_deployer.py,sha256=6kHxEnYXJwzNCM9swI8-0AckxtPWqwhZLerYkX8fxUM,4444
182
- metaflow/plugins/argo/argo_workflows_deployer_objects.py,sha256=jOlvn7dp2Qa_Y1lsOY_sta7i78qQVirunzgIH0O4w2E,12414
182
+ metaflow/plugins/argo/argo_workflows_deployer_objects.py,sha256=GJ1Jsm5KHYaBbJjKRz82Cwhi_PN1XnMiSmL1C0LNLYQ,12318
183
183
  metaflow/plugins/argo/capture_error.py,sha256=Ys9dscGrTpW-ZCirLBU0gD9qBM0BjxyxGlUMKcwewQc,1852
184
184
  metaflow/plugins/argo/generate_input_paths.py,sha256=loYsI6RFX9LlFsHb7Fe-mzlTTtRdySoOu7sYDy-uXK0,881
185
185
  metaflow/plugins/argo/jobset_input_paths.py,sha256=_JhZWngA6p9Q_O2fx3pdzKI0WE-HPRHz_zFvY2pHPTQ,525
@@ -204,7 +204,7 @@ metaflow/plugins/aws/step_functions/step_functions_cli.py,sha256=Ar9ed2nlZ_M0J3H
204
204
  metaflow/plugins/aws/step_functions/step_functions_client.py,sha256=DKpNwAIWElvWjFANs5Ku3rgzjxFoqAD6k-EF8Xhkg3Q,4754
205
205
  metaflow/plugins/aws/step_functions/step_functions_decorator.py,sha256=LoZC5BuQLqyFtfE-sGla26l2xXlCKN9aSvIlzPKV134,3800
206
206
  metaflow/plugins/aws/step_functions/step_functions_deployer.py,sha256=JKYtDhKivtXUWPklprZFzkqezh14loGDmk8mNk6QtpI,3714
207
- metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py,sha256=6frhj4JkJxH04Wocg-053ppD3xmDjd_3wIwSVfjeMrw,7315
207
+ metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py,sha256=EbBd0m1GL5E7hIP2sBFgyRXo2XTf6qMZdxLA8VjXGX8,7219
208
208
  metaflow/plugins/azure/__init__.py,sha256=GuuhTVC-zSdyAf79a1wiERMq0Zts7fwVT7t9fAf234A,100
209
209
  metaflow/plugins/azure/azure_credential.py,sha256=JmdGEbVzgxy8ucqnQDdTTI_atyMX9WSZUw3qYOo7RhE,2174
210
210
  metaflow/plugins/azure/azure_exceptions.py,sha256=NnbwpUC23bc61HZjJmeXztY0tBNn_Y_VpIpDDuYWIZ0,433
@@ -247,7 +247,7 @@ metaflow/plugins/datastores/s3_storage.py,sha256=CZdNqaKtxDXQbEg2YHyphph3hWcLIE5
247
247
  metaflow/plugins/datatools/__init__.py,sha256=ge4L16OBQLy2J_MMvoHg3lMfdm-MluQgRWoyZ5GCRnk,1267
248
248
  metaflow/plugins/datatools/local.py,sha256=FJvMOBcjdyhSPHmdLocBSiIT0rmKkKBmsaclxH75x08,4233
249
249
  metaflow/plugins/datatools/s3/__init__.py,sha256=14tr9fPjN3ULW5IOfKHeG7Uhjmgm7LMtQHfz1SFv-h8,248
250
- metaflow/plugins/datatools/s3/s3.py,sha256=-gkOKx4Ed-0u7eL2rOdbik98PJPltxDgfVPml0J9Ym4,66157
250
+ metaflow/plugins/datatools/s3/s3.py,sha256=dSUEf3v_BVyvYXlehWy04xcBtNDhKKR5Gnn7oXwagaw,67037
251
251
  metaflow/plugins/datatools/s3/s3op.py,sha256=h7l-OLQz4RLpyzsB-k903BYCDF9CM2_O9jLl-FQyMis,43454
252
252
  metaflow/plugins/datatools/s3/s3tail.py,sha256=boQjQGQMI-bvTqcMP2y7uSlSYLcvWOy7J3ZUaF78NAA,2597
253
253
  metaflow/plugins/datatools/s3/s3util.py,sha256=FgRgaVmEq7-i2dV7q8XK5w5PfFt-xJjZa8WrK8IJfdI,3769
@@ -281,13 +281,13 @@ metaflow/plugins/gcp/gs_tail.py,sha256=qz0QZKT-5LvL8qgZZK2yyMOwuEnx1YOz-pTSAUmwv
281
281
  metaflow/plugins/gcp/gs_utils.py,sha256=ZmIGFse1qYyvAVrwga23PQUzF6dXEDLLsZ2F-YRmvow,2030
282
282
  metaflow/plugins/gcp/includefile_support.py,sha256=OQO0IVWv4ObboL0VqEZwcDOyj9ORLdur66JToxQ84vU,3887
283
283
  metaflow/plugins/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
284
- metaflow/plugins/kubernetes/kube_utils.py,sha256=fYDlvqi8jYPsWijDwT6Z2qhQswyFqv7tiwtic_I80Vg,749
285
- metaflow/plugins/kubernetes/kubernetes.py,sha256=tPHgwrnBJ46xTx644ekzz0KdBc9PzQDU36NupThewmU,32445
286
- metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=TAYOKTQegYxex5piasLc53kNQPLzxuO8FzHXxkdjPjY,13472
284
+ metaflow/plugins/kubernetes/kube_utils.py,sha256=CbJRMn-sQyGqG-hKMBBjA6xmw15_DyQmhU8TxNyWqcQ,2124
285
+ metaflow/plugins/kubernetes/kubernetes.py,sha256=u2PVVGoZxr5yQRqEEHp-lFUSWq3a0aF4z0ATift9Ayk,32531
286
+ metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=tvxwgBojuiezIUdum95t9fHzDs50q-a-gkPyIApWnCY,13633
287
287
  metaflow/plugins/kubernetes/kubernetes_client.py,sha256=tuvXP-QKpdeSmzVolB2R_TaacOr5DIb0j642eKcjsiM,6491
288
- metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=HnOwkkEhGu_kZU-G2VOm6HX8OuVWUJqBW48PWUujTBM,28686
289
- metaflow/plugins/kubernetes/kubernetes_job.py,sha256=E2Aa-IItwYErlwAbPgwdqJI_l6axBQ-IzKY__psW-nE,32865
290
- metaflow/plugins/kubernetes/kubernetes_jobsets.py,sha256=iehUEKv2KogyJKnp5jejdGP8R-TtF2aX9Wx1WpjKLvM,42030
288
+ metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=nDBUg8fWEGYsu7jOa9geIkdnXcRNonw39mreMnfiDTI,29409
289
+ metaflow/plugins/kubernetes/kubernetes_job.py,sha256=gF0PJknbQTixaUmDX0_C__jCj3p8ey8dFrVstFTTTbw,32974
290
+ metaflow/plugins/kubernetes/kubernetes_jobsets.py,sha256=0SGOfStlh6orXVpF3s6Mu26OFR36eh4dj-sFYwg3HaA,42066
291
291
  metaflow/plugins/metadata_providers/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
292
292
  metaflow/plugins/metadata_providers/local.py,sha256=9UAxe9caN6kU1lkSlIoJbRGgTqsMa62cBTnyMwhqiaA,22446
293
293
  metaflow/plugins/metadata_providers/service.py,sha256=NKZfFMamx6upP6aFRJfXlfYIhySgFNzz6kbp1yPD7LA,20222
@@ -306,12 +306,12 @@ metaflow/plugins/secrets/secrets_decorator.py,sha256=s-sFzPWOjahhpr5fMj-ZEaHkDYA
306
306
  metaflow/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
307
307
  metaflow/runner/click_api.py,sha256=r7StpxnKkTwzs7_NG-estHVcztE-ey7wM6QSdYu6UCY,13943
308
308
  metaflow/runner/deployer.py,sha256=goCCDq9mRJIrH5-9HU6E6J55pYoju--CtM1zADTzHvY,8967
309
- metaflow/runner/deployer_impl.py,sha256=gJK30oujnRKw23jAXG5h3JLLkEUBB3GdgKmJHZxq8Mk,5736
310
- metaflow/runner/metaflow_runner.py,sha256=qq6EF9lFcX5dn93P5S8v-SDddhpFWfjrbGMAEHncNYc,14592
309
+ metaflow/runner/deployer_impl.py,sha256=QjMoTM1IviRK-dZ7WB3vGExpaScOCESlHxSR9ZoAkgA,5625
310
+ metaflow/runner/metaflow_runner.py,sha256=PrAEJhWqjbGuu4IsnxCSLLf8o4AqqRpeTM7rCMbOAvg,14827
311
311
  metaflow/runner/nbdeploy.py,sha256=UYo3Yfw1wlBFnUHjs_RngnWcWj9CDdMYaMqt9wZx0rk,4035
312
312
  metaflow/runner/nbrun.py,sha256=otWTsCkrVSdxlaxXNrRc9oyjdgQR8mHHhL8NAO0B5iE,7286
313
- metaflow/runner/subprocess_manager.py,sha256=jC_PIYIeAp_G__lf6WHZF3Lxzpp-WAQleMrRZq9j7nc,20467
314
- metaflow/runner/utils.py,sha256=WnEoJ4KJTOWzhAevH5atUcOBLMJE5wWq27E_4nWTqzQ,5035
313
+ metaflow/runner/subprocess_manager.py,sha256=lUD59T663Ar4ZcsUOk8VehaV1pRIg-QoWT_s_dFOVGI,21953
314
+ metaflow/runner/utils.py,sha256=JTWBFxQ2dru-dL2tI-8dIIVvQn_S3asGU9Ma6eeN7rc,8818
315
315
  metaflow/sidecar/__init__.py,sha256=1mmNpmQ5puZCpRmmYlCOeieZ4108Su9XQ4_EqF1FGOU,131
316
316
  metaflow/sidecar/sidecar.py,sha256=EspKXvPPNiyRToaUZ51PS5TT_PzrBNAurn_wbFnmGr0,1334
317
317
  metaflow/sidecar/sidecar_messages.py,sha256=zPsCoYgDIcDkkvdC9MEpJTJ3y6TSGm2JWkRc4vxjbFA,1071
@@ -348,9 +348,9 @@ metaflow/tutorials/07-worldview/README.md,sha256=5vQTrFqulJ7rWN6r20dhot9lI2sVj9W
348
348
  metaflow/tutorials/07-worldview/worldview.ipynb,sha256=ztPZPI9BXxvW1QdS2Tfe7LBuVzvFvv0AToDnsDJhLdE,2237
349
349
  metaflow/tutorials/08-autopilot/README.md,sha256=GnePFp_q76jPs991lMUqfIIh5zSorIeWznyiUxzeUVE,1039
350
350
  metaflow/tutorials/08-autopilot/autopilot.ipynb,sha256=DQoJlILV7Mq9vfPBGW-QV_kNhWPjS5n6SJLqePjFYLY,3191
351
- ob_metaflow-2.12.33.1.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
352
- ob_metaflow-2.12.33.1.dist-info/METADATA,sha256=aDU2qSUBzMJYyxQArvUi0BR09HWnuxZU_hchSpL-Luo,5143
353
- ob_metaflow-2.12.33.1.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
354
- ob_metaflow-2.12.33.1.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
355
- ob_metaflow-2.12.33.1.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
356
- ob_metaflow-2.12.33.1.dist-info/RECORD,,
351
+ ob_metaflow-2.12.36.1.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
352
+ ob_metaflow-2.12.36.1.dist-info/METADATA,sha256=qxAOBxQ9Ry_5r0vkDbFkZse6STT45vewoR8pu5p1Jbg,5143
353
+ ob_metaflow-2.12.36.1.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
354
+ ob_metaflow-2.12.36.1.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
355
+ ob_metaflow-2.12.36.1.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
356
+ ob_metaflow-2.12.36.1.dist-info/RECORD,,