metaflow 2.12.34__py2.py3-none-any.whl → 2.12.35__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.
@@ -377,6 +377,8 @@ KUBERNETES_PORT = from_conf("KUBERNETES_PORT", None)
377
377
  KUBERNETES_CPU = from_conf("KUBERNETES_CPU", None)
378
378
  KUBERNETES_MEMORY = from_conf("KUBERNETES_MEMORY", None)
379
379
  KUBERNETES_DISK = from_conf("KUBERNETES_DISK", None)
380
+ # Default kubernetes QoS class
381
+ KUBERNETES_QOS = from_conf("KUBERNETES_QOS", "burstable")
380
382
 
381
383
  ARGO_WORKFLOWS_KUBERNETES_SECRETS = from_conf("ARGO_WORKFLOWS_KUBERNETES_SECRETS", "")
382
384
  ARGO_WORKFLOWS_ENV_VARS_TO_SKIP = from_conf("ARGO_WORKFLOWS_ENV_VARS_TO_SKIP", "")
@@ -46,6 +46,7 @@ from metaflow.parameters import (
46
46
  # TODO: Move chevron to _vendor
47
47
  from metaflow.plugins.cards.card_modules import chevron
48
48
  from metaflow.plugins.kubernetes.kubernetes import Kubernetes
49
+ from metaflow.plugins.kubernetes.kube_utils import qos_requests_and_limits
49
50
  from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
50
51
  from metaflow.util import compress_list, dict_to_cli_options, get_username
51
52
 
@@ -428,25 +429,25 @@ class Airflow(object):
428
429
  if k8s_deco.attributes["namespace"] is not None
429
430
  else "default"
430
431
  )
431
-
432
+ qos_requests, qos_limits = qos_requests_and_limits(
433
+ k8s_deco.attributes["qos"],
434
+ k8s_deco.attributes["cpu"],
435
+ k8s_deco.attributes["memory"],
436
+ k8s_deco.attributes["disk"],
437
+ )
432
438
  resources = dict(
433
- requests={
434
- "cpu": k8s_deco.attributes["cpu"],
435
- "memory": "%sM" % str(k8s_deco.attributes["memory"]),
436
- "ephemeral-storage": str(k8s_deco.attributes["disk"]),
437
- }
439
+ requests=qos_requests,
440
+ limits={
441
+ **qos_limits,
442
+ **{
443
+ "%s.com/gpu".lower()
444
+ % k8s_deco.attributes["gpu_vendor"]: str(k8s_deco.attributes["gpu"])
445
+ for k in [0]
446
+ # Don't set GPU limits if gpu isn't specified.
447
+ if k8s_deco.attributes["gpu"] is not None
448
+ },
449
+ },
438
450
  )
439
- if k8s_deco.attributes["gpu"] is not None:
440
- resources.update(
441
- dict(
442
- limits={
443
- "%s.com/gpu".lower()
444
- % k8s_deco.attributes["gpu_vendor"]: str(
445
- k8s_deco.attributes["gpu"]
446
- )
447
- }
448
- )
449
- )
450
451
 
451
452
  annotations = {
452
453
  "metaflow/production_token": self.production_token,
@@ -53,6 +53,7 @@ from metaflow.metaflow_config import (
53
53
  from metaflow.metaflow_config_funcs import config_values
54
54
  from metaflow.mflog import BASH_SAVE_LOGS, bash_capture_logs, export_mflog_env_vars
55
55
  from metaflow.parameters import deploy_time_eval
56
+ from metaflow.plugins.kubernetes.kube_utils import qos_requests_and_limits
56
57
  from metaflow.plugins.kubernetes.kubernetes import (
57
58
  parse_kube_keyvalue_list,
58
59
  validate_kube_labels,
@@ -1842,6 +1843,13 @@ class ArgoWorkflows(object):
1842
1843
  if tmpfs_enabled and tmpfs_tempdir:
1843
1844
  env["METAFLOW_TEMPDIR"] = tmpfs_path
1844
1845
 
1846
+ qos_requests, qos_limits = qos_requests_and_limits(
1847
+ resources["qos"],
1848
+ resources["cpu"],
1849
+ resources["memory"],
1850
+ resources["disk"],
1851
+ )
1852
+
1845
1853
  # Create a ContainerTemplate for this node. Ideally, we would have
1846
1854
  # liked to inline this ContainerTemplate and avoid scanning the workflow
1847
1855
  # twice, but due to issues with variable substitution, we will have to
@@ -1905,6 +1913,7 @@ class ArgoWorkflows(object):
1905
1913
  persistent_volume_claims=resources["persistent_volume_claims"],
1906
1914
  shared_memory=shared_memory,
1907
1915
  port=port,
1916
+ qos=resources["qos"],
1908
1917
  )
1909
1918
 
1910
1919
  for k, v in env.items():
@@ -2090,17 +2099,17 @@ class ArgoWorkflows(object):
2090
2099
  image=resources["image"],
2091
2100
  image_pull_policy=resources["image_pull_policy"],
2092
2101
  resources=kubernetes_sdk.V1ResourceRequirements(
2093
- requests={
2094
- "cpu": str(resources["cpu"]),
2095
- "memory": "%sM" % str(resources["memory"]),
2096
- "ephemeral-storage": "%sM"
2097
- % str(resources["disk"]),
2098
- },
2102
+ requests=qos_requests,
2099
2103
  limits={
2100
- "%s.com/gpu".lower()
2101
- % resources["gpu_vendor"]: str(resources["gpu"])
2102
- for k in [0]
2103
- if resources["gpu"] is not None
2104
+ **qos_limits,
2105
+ **{
2106
+ "%s.com/gpu".lower()
2107
+ % resources["gpu_vendor"]: str(
2108
+ resources["gpu"]
2109
+ )
2110
+ for k in [0]
2111
+ if resources["gpu"] is not None
2112
+ },
2104
2113
  },
2105
2114
  ),
2106
2115
  # Configure secrets
@@ -2337,7 +2346,7 @@ class ArgoWorkflows(object):
2337
2346
  "memory": "500Mi",
2338
2347
  },
2339
2348
  ),
2340
- )
2349
+ ).to_dict()
2341
2350
  )
2342
2351
  ),
2343
2352
  Template("capture-error-hook-fn-preflight").steps(
@@ -2688,7 +2697,7 @@ class ArgoWorkflows(object):
2688
2697
  },
2689
2698
  ),
2690
2699
  )
2691
- )
2700
+ ).to_dict()
2692
2701
  )
2693
2702
  )
2694
2703
 
@@ -2858,7 +2867,7 @@ class ArgoWorkflows(object):
2858
2867
  "memory": "250Mi",
2859
2868
  },
2860
2869
  ),
2861
- )
2870
+ ).to_dict()
2862
2871
  )
2863
2872
  )
2864
2873
  .service_account_name(ARGO_EVENTS_SERVICE_ACCOUNT)
@@ -23,3 +23,32 @@ def parse_cli_options(flow_name, run_id, user, my_runs, echo):
23
23
  raise CommandException("A previous run id was not found. Specify --run-id.")
24
24
 
25
25
  return flow_name, run_id, user
26
+
27
+
28
+ def qos_requests_and_limits(qos: str, cpu: int, memory: int, storage: int):
29
+ "return resource requests and limits for the kubernetes pod based on the given QoS Class"
30
+ # case insensitive matching for QoS class
31
+ qos = qos.lower()
32
+ # Determine the requests and limits to define chosen QoS class
33
+ qos_limits = {}
34
+ qos_requests = {}
35
+ if qos == "guaranteed":
36
+ # Guaranteed - has both cpu/memory limits. requests not required, as these will be inferred.
37
+ qos_limits = {
38
+ "cpu": str(cpu),
39
+ "memory": "%sM" % str(memory),
40
+ "ephemeral-storage": "%sM" % str(storage),
41
+ }
42
+ # NOTE: Even though Kubernetes will produce matching requests for the specified limits, this happens late in the lifecycle.
43
+ # We specify them explicitly here to make some K8S tooling happy, in case they rely on .resources.requests being present at time of submitting the job.
44
+ qos_requests = qos_limits
45
+ else:
46
+ # Burstable - not Guaranteed, and has a memory/cpu limit or request
47
+ qos_requests = {
48
+ "cpu": str(cpu),
49
+ "memory": "%sM" % str(memory),
50
+ "ephemeral-storage": "%sM" % str(storage),
51
+ }
52
+ # TODO: Add support for BestEffort once there is a use case for it.
53
+ # BestEffort - no limit or requests for cpu/memory
54
+ return qos_requests, qos_limits
@@ -196,6 +196,7 @@ class Kubernetes(object):
196
196
  shared_memory=None,
197
197
  port=None,
198
198
  num_parallel=None,
199
+ qos=None,
199
200
  ):
200
201
  name = "js-%s" % str(uuid4())[:6]
201
202
  jobset = (
@@ -228,6 +229,7 @@ class Kubernetes(object):
228
229
  shared_memory=shared_memory,
229
230
  port=port,
230
231
  num_parallel=num_parallel,
232
+ qos=qos,
231
233
  )
232
234
  .environment_variable("METAFLOW_CODE_SHA", code_package_sha)
233
235
  .environment_variable("METAFLOW_CODE_URL", code_package_url)
@@ -488,6 +490,7 @@ class Kubernetes(object):
488
490
  shared_memory=None,
489
491
  port=None,
490
492
  name_pattern=None,
493
+ qos=None,
491
494
  ):
492
495
  if env is None:
493
496
  env = {}
@@ -528,6 +531,7 @@ class Kubernetes(object):
528
531
  persistent_volume_claims=persistent_volume_claims,
529
532
  shared_memory=shared_memory,
530
533
  port=port,
534
+ qos=qos,
531
535
  )
532
536
  .environment_variable("METAFLOW_CODE_SHA", code_package_sha)
533
537
  .environment_variable("METAFLOW_CODE_URL", code_package_url)
@@ -126,6 +126,12 @@ def kubernetes():
126
126
  type=int,
127
127
  help="Number of parallel nodes to run as a multi-node job.",
128
128
  )
129
+ @click.option(
130
+ "--qos",
131
+ default=None,
132
+ type=str,
133
+ help="Quality of Service class for the Kubernetes pod",
134
+ )
129
135
  @click.pass_context
130
136
  def step(
131
137
  ctx,
@@ -154,6 +160,7 @@ def step(
154
160
  shared_memory=None,
155
161
  port=None,
156
162
  num_parallel=None,
163
+ qos=None,
157
164
  **kwargs
158
165
  ):
159
166
  def echo(msg, stream="stderr", job_id=None, **kwargs):
@@ -294,6 +301,7 @@ def step(
294
301
  shared_memory=shared_memory,
295
302
  port=port,
296
303
  num_parallel=num_parallel,
304
+ qos=qos,
297
305
  )
298
306
  except Exception as e:
299
307
  traceback.print_exc(chain=False)
@@ -26,6 +26,7 @@ from metaflow.metaflow_config import (
26
26
  KUBERNETES_SERVICE_ACCOUNT,
27
27
  KUBERNETES_SHARED_MEMORY,
28
28
  KUBERNETES_TOLERATIONS,
29
+ KUBERNETES_QOS,
29
30
  )
30
31
  from metaflow.plugins.resources_decorator import ResourcesDecorator
31
32
  from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
@@ -41,6 +42,8 @@ except NameError:
41
42
  unicode = str
42
43
  basestring = str
43
44
 
45
+ SUPPORTED_KUBERNETES_QOS_CLASSES = ["Guaranteed", "Burstable"]
46
+
44
47
 
45
48
  class KubernetesDecorator(StepDecorator):
46
49
  """
@@ -109,6 +112,8 @@ class KubernetesDecorator(StepDecorator):
109
112
  hostname_resolution_timeout: int, default 10 * 60
110
113
  Timeout in seconds for the workers tasks in the gang scheduled cluster to resolve the hostname of control task.
111
114
  Only applicable when @parallel is used.
115
+ qos: str, default: Burstable
116
+ Quality of Service class to assign to the pod. Supported values are: Guaranteed, Burstable, BestEffort
112
117
  """
113
118
 
114
119
  name = "kubernetes"
@@ -136,6 +141,7 @@ class KubernetesDecorator(StepDecorator):
136
141
  "compute_pool": None,
137
142
  "executable": None,
138
143
  "hostname_resolution_timeout": 10 * 60,
144
+ "qos": KUBERNETES_QOS,
139
145
  }
140
146
  package_url = None
141
147
  package_sha = None
@@ -259,6 +265,17 @@ class KubernetesDecorator(StepDecorator):
259
265
  self.step = step
260
266
  self.flow_datastore = flow_datastore
261
267
 
268
+ if (
269
+ self.attributes["qos"] is not None
270
+ # case insensitive matching.
271
+ and self.attributes["qos"].lower()
272
+ not in [c.lower() for c in SUPPORTED_KUBERNETES_QOS_CLASSES]
273
+ ):
274
+ raise MetaflowException(
275
+ "*%s* is not a valid Kubernetes QoS class. Choose one of the following: %s"
276
+ % (self.attributes["qos"], ", ".join(SUPPORTED_KUBERNETES_QOS_CLASSES))
277
+ )
278
+
262
279
  if any([deco.name == "batch" for deco in decos]):
263
280
  raise MetaflowException(
264
281
  "Step *{step}* is marked for execution both on AWS Batch and "
@@ -15,6 +15,8 @@ from .kubernetes_jobsets import (
15
15
  KubernetesJobSet,
16
16
  ) # We need this import for Kubernetes Client.
17
17
 
18
+ from .kube_utils import qos_requests_and_limits
19
+
18
20
 
19
21
  class KubernetesJobException(MetaflowException):
20
22
  headline = "Kubernetes job error"
@@ -74,6 +76,13 @@ class KubernetesJob(object):
74
76
  if self._kwargs["shared_memory"]
75
77
  else None
76
78
  )
79
+ qos_requests, qos_limits = qos_requests_and_limits(
80
+ self._kwargs["qos"],
81
+ self._kwargs["cpu"],
82
+ self._kwargs["memory"],
83
+ self._kwargs["disk"],
84
+ )
85
+
77
86
  return client.V1JobSpec(
78
87
  # Retries are handled by Metaflow when it is responsible for
79
88
  # executing the flow. The responsibility is moved to Kubernetes
@@ -154,20 +163,18 @@ class KubernetesJob(object):
154
163
  image_pull_policy=self._kwargs["image_pull_policy"],
155
164
  name=self._kwargs["step_name"].replace("_", "-"),
156
165
  resources=client.V1ResourceRequirements(
157
- requests={
158
- "cpu": str(self._kwargs["cpu"]),
159
- "memory": "%sM" % str(self._kwargs["memory"]),
160
- "ephemeral-storage": "%sM"
161
- % str(self._kwargs["disk"]),
162
- },
166
+ requests=qos_requests,
163
167
  limits={
164
- "%s.com/gpu".lower()
165
- % self._kwargs["gpu_vendor"]: str(
166
- self._kwargs["gpu"]
167
- )
168
- for k in [0]
169
- # Don't set GPU limits if gpu isn't specified.
170
- if self._kwargs["gpu"] is not None
168
+ **qos_limits,
169
+ **{
170
+ "%s.com/gpu".lower()
171
+ % self._kwargs["gpu_vendor"]: str(
172
+ self._kwargs["gpu"]
173
+ )
174
+ for k in [0]
175
+ # Don't set GPU limits if gpu isn't specified.
176
+ if self._kwargs["gpu"] is not None
177
+ },
171
178
  },
172
179
  ),
173
180
  volume_mounts=(
@@ -9,6 +9,8 @@ from metaflow.metaflow_config import KUBERNETES_JOBSET_GROUP, KUBERNETES_JOBSET_
9
9
  from metaflow.tracing import inject_tracing_vars
10
10
  from metaflow.metaflow_config import KUBERNETES_SECRETS
11
11
 
12
+ from .kube_utils import qos_requests_and_limits
13
+
12
14
 
13
15
  class KubernetesJobsetException(MetaflowException):
14
16
  headline = "Kubernetes jobset error"
@@ -554,7 +556,12 @@ class JobSetSpec(object):
554
556
  if self._kwargs["shared_memory"]
555
557
  else None
556
558
  )
557
-
559
+ qos_requests, qos_limits = qos_requests_and_limits(
560
+ self._kwargs["qos"],
561
+ self._kwargs["cpu"],
562
+ self._kwargs["memory"],
563
+ self._kwargs["disk"],
564
+ )
558
565
  return dict(
559
566
  name=self.name,
560
567
  template=client.api_client.ApiClient().sanitize_for_serialization(
@@ -653,21 +660,18 @@ class JobSetSpec(object):
653
660
  "_", "-"
654
661
  ),
655
662
  resources=client.V1ResourceRequirements(
656
- requests={
657
- "cpu": str(self._kwargs["cpu"]),
658
- "memory": "%sM"
659
- % str(self._kwargs["memory"]),
660
- "ephemeral-storage": "%sM"
661
- % str(self._kwargs["disk"]),
662
- },
663
+ requests=qos_requests,
663
664
  limits={
664
- "%s.com/gpu".lower()
665
- % self._kwargs["gpu_vendor"]: str(
666
- self._kwargs["gpu"]
667
- )
668
- for k in [0]
669
- # Don't set GPU limits if gpu isn't specified.
670
- if self._kwargs["gpu"] is not None
665
+ **qos_limits,
666
+ **{
667
+ "%s.com/gpu".lower()
668
+ % self._kwargs["gpu_vendor"]: str(
669
+ self._kwargs["gpu"]
670
+ )
671
+ for k in [0]
672
+ # Don't set GPU limits if gpu isn't specified.
673
+ if self._kwargs["gpu"] is not None
674
+ },
671
675
  },
672
676
  ),
673
677
  volume_mounts=(
metaflow/version.py CHANGED
@@ -1 +1 @@
1
- metaflow_version = "2.12.34"
1
+ metaflow_version = "2.12.35"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.12.34
3
+ Version: 2.12.35
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,7 @@ License-File: LICENSE
26
26
  Requires-Dist: requests
27
27
  Requires-Dist: boto3
28
28
  Provides-Extra: stubs
29
- Requires-Dist: metaflow-stubs==2.12.34; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.12.35; 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
 
@@ -16,7 +16,7 @@ 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=gsE6LxvZUc68HXw3Uf7Olv8Oaq5AY17nwhKvF0oXF_8,22950
19
+ metaflow/metaflow_config.py,sha256=bA6myygTf5WAEhtPiCUPQIYKP136Ozieg7mTHLkTfps,23039
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
@@ -36,7 +36,7 @@ metaflow/tuple_util.py,sha256=_G5YIEhuugwJ_f6rrZoelMFak3DqAR2tt_5CapS1XTY,830
36
36
  metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
37
37
  metaflow/util.py,sha256=w7oylILPaNAjtM8MR8dfUazTVBArV_CKPpqGs4HnowM,13785
38
38
  metaflow/vendor.py,sha256=FchtA9tH22JM-eEtJ2c9FpUdMn8sSb1VHuQS56EcdZk,5139
39
- metaflow/version.py,sha256=1QFMy_kk8f34f8BuD9G4-ZA0vcxYQo1O9WhpDuY8MXQ,29
39
+ metaflow/version.py,sha256=J4Cf7W8RQ6F0yHrO6-soxYYG98uXw4CmIrYBE24ANew,29
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
@@ -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,7 +175,7 @@ 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=d-d_xvjUeb5t11kaHZ98yIrGAqYg__FhxNcQTY8LVoA,173881
178
+ metaflow/plugins/argo/argo_workflows.py,sha256=G1yu-bBGpOyoZKRlgKdJLxNueRCv25sPuDM_gbQkBJw,174184
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
@@ -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=_cq_4N8l40cP0kifYMDAL8Te0DnIKUhVCqee3covwdM,31642
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=FrIL2wRUzy4bJr6pNz3I-tNFH-OJWHJcrarJsBKRPLE,31728
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=Gq3lGKA8SPh3pHDbP_FCkUQPMRrIxvbcmw6Jly5PhEY,27846
289
- metaflow/plugins/kubernetes/kubernetes_job.py,sha256=Cfkee8LbXC17jSXWoeNdomQRvF_8YSeXNg1gvxm6E_M,31806
290
- metaflow/plugins/kubernetes/kubernetes_jobsets.py,sha256=iehUEKv2KogyJKnp5jejdGP8R-TtF2aX9Wx1WpjKLvM,42030
288
+ metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=wHwm5pQvhjI9Dcj6yBdKZGprFGrSEgd88-TZew6vgNs,28569
289
+ metaflow/plugins/kubernetes/kubernetes_job.py,sha256=CoDzG0eEcJezfMTmgYJ4Ea9G_o5INYm0w1DvjGwJT2A,31916
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
@@ -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
- metaflow-2.12.34.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
352
- metaflow-2.12.34.dist-info/METADATA,sha256=nyJPMX2oVYbAC9lY9KuNPMngDomft-j5DJoeHGAnJuY,5907
353
- metaflow-2.12.34.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
354
- metaflow-2.12.34.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
355
- metaflow-2.12.34.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
356
- metaflow-2.12.34.dist-info/RECORD,,
351
+ metaflow-2.12.35.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
352
+ metaflow-2.12.35.dist-info/METADATA,sha256=t40Gj0J0AZV3sCp3Nq5jyZK-qECWDzHUfTJB2mpGpDo,5907
353
+ metaflow-2.12.35.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
354
+ metaflow-2.12.35.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
355
+ metaflow-2.12.35.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
356
+ metaflow-2.12.35.dist-info/RECORD,,