metaflow 2.16.4__py2.py3-none-any.whl → 2.16.6__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +1,9 @@
1
1
  """Recognize image file formats based on their first few bytes."""
2
2
 
3
3
  from os import PathLike
4
- import warnings
5
4
 
6
5
  __all__ = ["what"]
7
6
 
8
-
9
- warnings._deprecated(__name__, remove=(3, 13))
10
-
11
-
12
7
  #-------------------------#
13
8
  # Recognize image headers #
14
9
  #-------------------------#
@@ -58,21 +58,38 @@ class ArgoClient(object):
58
58
  json.loads(e.body)["message"] if e.body is not None else e.reason
59
59
  )
60
60
 
61
- def get_workflow_templates(self):
61
+ def get_workflow_templates(self, page_size=100):
62
62
  client = self._client.get()
63
- try:
64
- return client.CustomObjectsApi().list_namespaced_custom_object(
65
- group=self._group,
66
- version=self._version,
67
- namespace=self._namespace,
68
- plural="workflowtemplates",
69
- )["items"]
70
- except client.rest.ApiException as e:
71
- if e.status == 404:
72
- return None
73
- raise ArgoClientException(
74
- json.loads(e.body)["message"] if e.body is not None else e.reason
75
- )
63
+ continue_token = None
64
+
65
+ while True:
66
+ try:
67
+ params = {"limit": page_size}
68
+ if continue_token:
69
+ params["_continue"] = continue_token
70
+
71
+ response = client.CustomObjectsApi().list_namespaced_custom_object(
72
+ group=self._group,
73
+ version=self._version,
74
+ namespace=self._namespace,
75
+ plural="workflowtemplates",
76
+ **params,
77
+ )
78
+
79
+ for item in response.get("items", []):
80
+ yield item
81
+
82
+ metadata = response.get("metadata", {})
83
+ continue_token = metadata.get("continue")
84
+
85
+ if not continue_token:
86
+ break
87
+ except client.rest.ApiException as e:
88
+ if e.status == 404:
89
+ return None
90
+ raise ArgoClientException(
91
+ json.loads(e.body)["message"] if e.body is not None else e.reason
92
+ )
76
93
 
77
94
  def register_workflow_template(self, name, workflow_template):
78
95
  # Unfortunately, Kubernetes client does not handle optimistic
@@ -207,23 +207,14 @@ class ArgoWorkflows(object):
207
207
  return name.replace(".", "-")
208
208
 
209
209
  @staticmethod
210
- def list_templates(flow_name, all=False):
210
+ def list_templates(flow_name, all=False, page_size=100):
211
211
  client = ArgoClient(namespace=KUBERNETES_NAMESPACE)
212
212
 
213
- templates = client.get_workflow_templates()
214
- if templates is None:
215
- return []
216
-
217
- template_names = [
218
- template["metadata"]["name"]
219
- for template in templates
220
- if all
221
- or flow_name
222
- == template["metadata"]
223
- .get("annotations", {})
224
- .get("metaflow/flow_name", None)
225
- ]
226
- return template_names
213
+ for template in client.get_workflow_templates(page_size=page_size):
214
+ if all or flow_name == template["metadata"].get("annotations", {}).get(
215
+ "metaflow/flow_name", None
216
+ ):
217
+ yield template["metadata"]["name"]
227
218
 
228
219
  @staticmethod
229
220
  def delete(name):
@@ -1011,8 +1011,7 @@ def terminate(obj, run_id, authorize=None):
1011
1011
  )
1012
1012
  @click.pass_obj
1013
1013
  def list_workflow_templates(obj, all=None):
1014
- templates = ArgoWorkflows.list_templates(obj.flow.name, all)
1015
- for template_name in templates:
1014
+ for template_name in ArgoWorkflows.list_templates(obj.flow.name, all):
1016
1015
  obj.echo_always(template_name)
1017
1016
 
1018
1017
 
@@ -203,6 +203,38 @@ class ArgoWorkflowsDeployedFlow(DeployedFlow):
203
203
 
204
204
  TYPE: ClassVar[Optional[str]] = "argo-workflows"
205
205
 
206
+ @classmethod
207
+ def list_deployed_flows(cls, flow_name: Optional[str] = None):
208
+ """
209
+ List all deployed Argo Workflow templates.
210
+
211
+ Parameters
212
+ ----------
213
+ flow_name : str, optional, default None
214
+ If specified, only list deployed flows for this specific flow name.
215
+ If None, list all deployed flows.
216
+
217
+ Yields
218
+ ------
219
+ ArgoWorkflowsDeployedFlow
220
+ `ArgoWorkflowsDeployedFlow` objects representing deployed
221
+ workflow templates on Argo Workflows.
222
+ """
223
+ from metaflow.plugins.argo.argo_workflows import ArgoWorkflows
224
+
225
+ # When flow_name is None, use all=True to get all templates
226
+ # When flow_name is specified, use all=False to filter by flow_name
227
+ all_templates = flow_name is None
228
+ for template_name in ArgoWorkflows.list_templates(
229
+ flow_name=flow_name, all=all_templates
230
+ ):
231
+ try:
232
+ deployed_flow = cls.from_deployment(template_name)
233
+ yield deployed_flow
234
+ except Exception:
235
+ # Skip templates that can't be converted to DeployedFlow objects
236
+ continue
237
+
206
238
  @classmethod
207
239
  def from_deployment(cls, identifier: str, metadata: Optional[str] = None):
208
240
  """
@@ -56,6 +56,20 @@ class StepFunctionsDeployedFlow(DeployedFlow):
56
56
 
57
57
  TYPE: ClassVar[Optional[str]] = "step-functions"
58
58
 
59
+ @classmethod
60
+ def list_deployed_flows(cls, flow_name: Optional[str] = None):
61
+ """
62
+ This method is not currently implemented for Step Functions.
63
+
64
+ Raises
65
+ ------
66
+ NotImplementedError
67
+ This method is not implemented for Step Functions.
68
+ """
69
+ raise NotImplementedError(
70
+ "list_deployed_flows is not implemented for StepFunctions"
71
+ )
72
+
59
73
  @classmethod
60
74
  def from_deployment(cls, identifier: str, metadata: Optional[str] = None):
61
75
  """
@@ -96,7 +96,7 @@ class KubernetesDecorator(StepDecorator):
96
96
  the scheduled node should not have GPUs.
97
97
  gpu_vendor : str, default KUBERNETES_GPU_VENDOR
98
98
  The vendor of the GPUs to be used for this step.
99
- tolerations : List[str], default []
99
+ tolerations : List[Dict[str,str]], default []
100
100
  The default is extracted from METAFLOW_KUBERNETES_TOLERATIONS.
101
101
  Kubernetes tolerations to use when launching pod in Kubernetes.
102
102
  labels: Dict[str, str], default: METAFLOW_KUBERNETES_LABELS
@@ -13,7 +13,9 @@ def generate_fake_flow_file_contents(
13
13
  ):
14
14
  params_code = ""
15
15
  for _, param_details in param_info.items():
16
- param_python_var_name = param_details["python_var_name"]
16
+ param_python_var_name = param_details.get(
17
+ "python_var_name", param_details["name"]
18
+ )
17
19
  param_name = param_details["name"]
18
20
  param_type = param_details["type"]
19
21
  param_help = param_details["description"]
@@ -229,7 +231,7 @@ class DeployedFlowMeta(type):
229
231
  }
230
232
  )
231
233
 
232
- def _default_injected_method():
234
+ def _from_deployment_injected_method():
233
235
  def f(
234
236
  cls,
235
237
  identifier: str,
@@ -271,7 +273,7 @@ class DeployedFlowMeta(type):
271
273
  f.__name__ = "from_deployment"
272
274
  return f
273
275
 
274
- def _per_type_injected_method(method_name, impl):
276
+ def _per_type_from_deployment_injected_method(method_name, impl):
275
277
  def f(
276
278
  cls,
277
279
  identifier: str,
@@ -286,14 +288,88 @@ class DeployedFlowMeta(type):
286
288
  f.__name__ = method_name
287
289
  return f
288
290
 
289
- setattr(cls, "from_deployment", classmethod(_default_injected_method()))
291
+ def _list_deployed_flows_injected_method():
292
+ def f(
293
+ cls,
294
+ flow_name: Optional[str] = None,
295
+ impl: str = DEFAULT_FROM_DEPLOYMENT_IMPL.replace("-", "_"),
296
+ ):
297
+ """
298
+ List all deployed flows for the specified implementation.
299
+
300
+ Parameters
301
+ ----------
302
+ flow_name : str, optional, default None
303
+ If specified, only list deployed flows for this specific flow name.
304
+ If None, list all deployed flows.
305
+ impl : str, optional, default given by METAFLOW_DEFAULT_FROM_DEPLOYMENT_IMPL
306
+ The default implementation to use if not specified
307
+
308
+ Yields
309
+ ------
310
+ DeployedFlow
311
+ `DeployedFlow` objects representing deployed flows.
312
+ """
313
+ if impl in allowed_providers:
314
+ return (
315
+ allowed_providers[impl]
316
+ .deployed_flow_type()
317
+ .list_deployed_flows(flow_name)
318
+ )
319
+ else:
320
+ raise ValueError(
321
+ f"No deployer '{impl}' exists; valid deployers are: "
322
+ f"{list(allowed_providers.keys())}"
323
+ )
324
+
325
+ f.__name__ = "list_deployed_flows"
326
+ return f
327
+
328
+ def _per_type_list_deployed_flows_injected_method(method_name, impl):
329
+ def f(
330
+ cls,
331
+ flow_name: Optional[str] = None,
332
+ ):
333
+ return (
334
+ allowed_providers[impl]
335
+ .deployed_flow_type()
336
+ .list_deployed_flows(flow_name)
337
+ )
338
+
339
+ f.__name__ = method_name
340
+ return f
341
+
342
+ setattr(
343
+ cls, "from_deployment", classmethod(_from_deployment_injected_method())
344
+ )
345
+ setattr(
346
+ cls,
347
+ "list_deployed_flows",
348
+ classmethod(_list_deployed_flows_injected_method()),
349
+ )
290
350
 
291
351
  for impl in allowed_providers:
292
- method_name = f"from_{impl}"
352
+ from_deployment_method_name = f"from_{impl}"
353
+ list_deployed_flows_method_name = f"list_{impl}"
354
+
293
355
  setattr(
294
356
  cls,
295
- method_name,
296
- classmethod(_per_type_injected_method(method_name, impl)),
357
+ from_deployment_method_name,
358
+ classmethod(
359
+ _per_type_from_deployment_injected_method(
360
+ from_deployment_method_name, impl
361
+ )
362
+ ),
363
+ )
364
+
365
+ setattr(
366
+ cls,
367
+ list_deployed_flows_method_name,
368
+ classmethod(
369
+ _per_type_list_deployed_flows_injected_method(
370
+ list_deployed_flows_method_name, impl
371
+ )
372
+ ),
297
373
  )
298
374
 
299
375
  return cls
@@ -347,8 +347,10 @@ class MutableFlow:
347
347
  "Mutable flow adding flow decorator '%s'" % deco_type
348
348
  )
349
349
 
350
+ # self._flow_cls._flow_decorators is a dictionary of form :
351
+ # <deco_name> : [deco_instance, deco_instance, ...]
350
352
  existing_deco = [
351
- d for d in self._flow_cls._flow_decorators if d.name == flow_deco.name
353
+ d for d in self._flow_cls._flow_decorators if d == flow_deco.name
352
354
  ]
353
355
 
354
356
  if flow_deco.allow_multiple or not existing_deco:
metaflow/version.py CHANGED
@@ -1 +1 @@
1
- metaflow_version = "2.16.4"
1
+ metaflow_version = "2.16.6"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metaflow
3
- Version: 2.16.4
3
+ Version: 2.16.6
4
4
  Summary: Metaflow: More AI and ML, 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.16.4; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.16.6; extra == "stubs"
30
30
  Dynamic: author
31
31
  Dynamic: author-email
32
32
  Dynamic: classifier
@@ -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=g2SOU_CRzJLgDM_UGF9QDMANMAIHAsDRXE6S76_YzsY,14594
38
38
  metaflow/vendor.py,sha256=EDZokNMrx1PU07jNMiWFMFtC7TL03pMXZ1kKn13k-2g,5139
39
- metaflow/version.py,sha256=NFr0Wd4LGSixi-HrEB8QHWJDlapS4Jvjl4Pha-yHS-o,28
39
+ metaflow/version.py,sha256=bnghoDuVQ29sZxUiWQ3cnB49OrmcsXhe1RyXpZ9x0Es,28
40
40
  metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
41
41
  metaflow/_vendor/typing_extensions.py,sha256=q9zxWa6p6CzF1zZvSkygSlklduHf_b3K7MCxGz7MJRc,134519
42
42
  metaflow/_vendor/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
@@ -57,7 +57,7 @@ metaflow/_vendor/click/termui.py,sha256=G7QBEKIepRIGLvNdGwBTYiEtSImRxvTO_AglVpyH
57
57
  metaflow/_vendor/click/testing.py,sha256=EUEsDUqNXFgCLhZ0ZFOROpaVDA5I_rijwnNPE6qICgA,12854
58
58
  metaflow/_vendor/click/types.py,sha256=wuubik4VqgqAw5dvbYFkDt-zSAx97y9TQXuXcVaRyQA,25045
59
59
  metaflow/_vendor/click/utils.py,sha256=4VEcJ7iEHwjnFuzEuRtkT99o5VG3zqSD7Q2CVzv13WU,15940
60
- metaflow/_vendor/imghdr/__init__.py,sha256=wbtS6ggW20xfNCBlWrSkdvs4KXCRQekfGla5xv4obVY,4398
60
+ metaflow/_vendor/imghdr/__init__.py,sha256=s4fE82lm6KaADg6_Xwl6xLeyW9NZDaIEbVoVFsg_kKI,4332
61
61
  metaflow/_vendor/importlib_metadata/__init__.py,sha256=dH_kBRM61VLiIV0zuU5macqk3XYY-ljq_9gt8ZcJDMI,30525
62
62
  metaflow/_vendor/importlib_metadata/_adapters.py,sha256=B6fCi5-8mLVDFUZj3krI5nAo-mKp1dH_qIavyIyFrJs,1862
63
63
  metaflow/_vendor/importlib_metadata/_collections.py,sha256=CJ0OTCHIjWA0ZIVS4voORAsn2R4R2cQBEtPsZEJpASY,743
@@ -211,13 +211,13 @@ metaflow/plugins/airflow/sensors/base_sensor.py,sha256=s-OQBfPWZ_T3wn96Ua59CCEj1
211
211
  metaflow/plugins/airflow/sensors/external_task_sensor.py,sha256=zhYlrZnXT20KW8-fVk0fCNtTyNiKJB5PMVASacu30r0,6034
212
212
  metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=iDReG-7FKnumrtQg-HY6cCUAAqNA90nARrjjjEEk_x4,3275
213
213
  metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
- metaflow/plugins/argo/argo_client.py,sha256=A1kI9rjVjCadDsBscZ2Wk8xRBI6GNgWV6SU7TyrdfrI,16530
214
+ metaflow/plugins/argo/argo_client.py,sha256=jLz0FjCTBvFLZt-8lZcMQhDcInhgEcGdPrU2Gvh67zA,17080
215
215
  metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
216
- metaflow/plugins/argo/argo_workflows.py,sha256=H4P3dQ1bNTPehRGyPV4dW5xF5Hg0w320FM7LPiyMqq4,187641
217
- metaflow/plugins/argo/argo_workflows_cli.py,sha256=pfqYH0nqkgmkDcz3EPIz5yR_PSdd3CfLb92wzplS8fY,38810
216
+ metaflow/plugins/argo/argo_workflows.py,sha256=v_3aXPi4Ya_IaisjlYFReluE4zaN3HDI6S_V7MR6iK4,187513
217
+ metaflow/plugins/argo/argo_workflows_cli.py,sha256=Le_GgvLVE1MhxQeOv-k5xp4L51tzQ6ZIq3_P-YEphIk,38784
218
218
  metaflow/plugins/argo/argo_workflows_decorator.py,sha256=ogCSBmwsC2C3eusydrgjuAJd4qK18f1sI4jJwA4Fd-o,7800
219
219
  metaflow/plugins/argo/argo_workflows_deployer.py,sha256=6kHxEnYXJwzNCM9swI8-0AckxtPWqwhZLerYkX8fxUM,4444
220
- metaflow/plugins/argo/argo_workflows_deployer_objects.py,sha256=7OiapcIM_r-aBkuIobhofgLC5NRJHC-p9bvBmxvhqoM,12500
220
+ metaflow/plugins/argo/argo_workflows_deployer_objects.py,sha256=1qiY69jB2yq0ryIH2SKzFHgUXRYvr0VTXd9TDQWG-s0,13693
221
221
  metaflow/plugins/argo/capture_error.py,sha256=Ys9dscGrTpW-ZCirLBU0gD9qBM0BjxyxGlUMKcwewQc,1852
222
222
  metaflow/plugins/argo/exit_hooks.py,sha256=nh8IEkzAtQnbKVnh3N9CVnVKZB39Bjm3e0LFrACsLz8,6109
223
223
  metaflow/plugins/argo/generate_input_paths.py,sha256=loYsI6RFX9LlFsHb7Fe-mzlTTtRdySoOu7sYDy-uXK0,881
@@ -243,7 +243,7 @@ metaflow/plugins/aws/step_functions/step_functions_cli.py,sha256=tLIfDwgdcfBjkjm
243
243
  metaflow/plugins/aws/step_functions/step_functions_client.py,sha256=DKpNwAIWElvWjFANs5Ku3rgzjxFoqAD6k-EF8Xhkg3Q,4754
244
244
  metaflow/plugins/aws/step_functions/step_functions_decorator.py,sha256=jzDHYmgU_XvLffZDazR_1viow_1qQFblx9UKyjtoM_0,3788
245
245
  metaflow/plugins/aws/step_functions/step_functions_deployer.py,sha256=JKYtDhKivtXUWPklprZFzkqezh14loGDmk8mNk6QtpI,3714
246
- metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py,sha256=zDWmrOeCEL2_uBbmdmXbVpHVTjswwjEL_rOux6MAcRI,7303
246
+ metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py,sha256=KWIPpE4ebOYyyXlRVtJF6XMnYcyjMFTxdzJWbP0m5PA,7719
247
247
  metaflow/plugins/azure/__init__.py,sha256=GuuhTVC-zSdyAf79a1wiERMq0Zts7fwVT7t9fAf234A,100
248
248
  metaflow/plugins/azure/azure_credential.py,sha256=JmdGEbVzgxy8ucqnQDdTTI_atyMX9WSZUw3qYOo7RhE,2174
249
249
  metaflow/plugins/azure/azure_exceptions.py,sha256=NnbwpUC23bc61HZjJmeXztY0tBNn_Y_VpIpDDuYWIZ0,433
@@ -328,7 +328,7 @@ metaflow/plugins/kubernetes/kube_utils.py,sha256=jdFMGbEmIow-oli26v31W9CmbZXigx0
328
328
  metaflow/plugins/kubernetes/kubernetes.py,sha256=2nwRfw2GZ_ESJslQEgGoBP7NodINhKnTWCoxJOn8MME,30412
329
329
  metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=qtWTQqp8i-hTKAA0RcJ_qeOuD8TieN3B5vuyYdnvEP4,14425
330
330
  metaflow/plugins/kubernetes/kubernetes_client.py,sha256=tuvXP-QKpdeSmzVolB2R_TaacOr5DIb0j642eKcjsiM,6491
331
- metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=j5yoLJGowqXiOf4SCaus3qpOUQAyrFo9U3TRXxvoh6o,32428
331
+ metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=X5KD0_Hd6DB332uzOWootgmniu3OkLX5ImQ5fnyVUSU,32438
332
332
  metaflow/plugins/kubernetes/kubernetes_job.py,sha256=0QyEyi6XusHq5M7RqPY4ypQXrsQac-eG2O14b7inPOo,32277
333
333
  metaflow/plugins/kubernetes/kubernetes_jobsets.py,sha256=ZZU5vsBe67NmGuxgXw6clf7kKRST7867AW6_t3fCD5g,43065
334
334
  metaflow/plugins/kubernetes/spot_metadata_cli.py,sha256=an0nWCxgflmqIPBCBrlb4m3DereDFFJBLt-KKhqcHc8,1670
@@ -357,7 +357,7 @@ metaflow/plugins/uv/bootstrap.py,sha256=awFHAiZANkAlvHWCm3G1UbhVxEjJB8buoZoBa5Gi
357
357
  metaflow/plugins/uv/uv_environment.py,sha256=AYZICrBEq3Bv-taXktJwu9DhKFxNooPFwlcH379EYMs,2719
358
358
  metaflow/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
359
359
  metaflow/runner/click_api.py,sha256=DSxa5A0C_IHNug7fZlLpD_N99F_skDcAjTRx5YRMylY,23756
360
- metaflow/runner/deployer.py,sha256=U-hwf4gVzwUlXgnkfTW3y1daGXvo5eP4HTQZwb-vS0g,11058
360
+ metaflow/runner/deployer.py,sha256=JwclsNiqnr0RsrA7-8a1-3Z23A4BDz4SNJubqDPxUuU,13955
361
361
  metaflow/runner/deployer_impl.py,sha256=zTING0_fwP44JcGo69DuNrVut5KqdBVzYOM7MYTZgIY,7049
362
362
  metaflow/runner/metaflow_runner.py,sha256=uo3BzcAfZ67VT_f-TPe5ZHiWHn6uuojWusOMGksvX14,18178
363
363
  metaflow/runner/nbdeploy.py,sha256=Sp5w-6nCZwjHaRBHWxi8udya-RYnJOB76KNLjB4L7Gs,4166
@@ -405,16 +405,16 @@ metaflow/user_configs/config_options.py,sha256=d3hKA6WRPe21PdTl7sBnxIp5sE6zBpRtg
405
405
  metaflow/user_configs/config_parameters.py,sha256=Loa5wu3vIs0SLyGhbOo8b88nWgCuZ09k24EqC_lI7n4,20890
406
406
  metaflow/user_decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
407
407
  metaflow/user_decorators/common.py,sha256=0u9NRLQ95TfJCjWVEOGT4MJ9WoQgAMBM9kJ2gJGlVjk,5362
408
- metaflow/user_decorators/mutable_flow.py,sha256=y2FCTQVjTTeiptsztD26jdkU_LY_Z_kzMjTkDajo2rc,19303
408
+ metaflow/user_decorators/mutable_flow.py,sha256=icF7XFCS5FdlW3OEL68ZbQOtTPhLsUycKcFKVOeK_vU,19435
409
409
  metaflow/user_decorators/mutable_step.py,sha256=-BY0UDXf_RCAEnC5JlLzEXGdiw1KD9oSrSxS_SWaB9Y,16791
410
410
  metaflow/user_decorators/user_flow_decorator.py,sha256=2yDwZq9QGv9W-7kEuKwa8o4ZkTvuHJ5ESz7VVrGViAI,9890
411
411
  metaflow/user_decorators/user_step_decorator.py,sha256=JYNGXONWCpzwn-_bF5WiAkof4Ii9tRS4xdK8ojSxG6M,26007
412
- metaflow-2.16.4.data/data/share/metaflow/devtools/Makefile,sha256=5n89OGIC_kE4wxtEI66VCucN-b-1w5bqvGeZYmeRGz8,13737
413
- metaflow-2.16.4.data/data/share/metaflow/devtools/Tiltfile,sha256=I55XTG4RBnrMfDcYRtREXqqS8T9bF8agkZq0DlvdFLk,21404
414
- metaflow-2.16.4.data/data/share/metaflow/devtools/pick_services.sh,sha256=DCnrMXwtApfx3B4S-YiZESMyAFHbXa3VuNL0MxPLyiE,2196
415
- metaflow-2.16.4.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
416
- metaflow-2.16.4.dist-info/METADATA,sha256=k0GuNwscngh6rlBMHbZizq9bCBFTAwuBQ-JMHIxJRcg,6740
417
- metaflow-2.16.4.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
418
- metaflow-2.16.4.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
419
- metaflow-2.16.4.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
420
- metaflow-2.16.4.dist-info/RECORD,,
412
+ metaflow-2.16.6.data/data/share/metaflow/devtools/Makefile,sha256=5n89OGIC_kE4wxtEI66VCucN-b-1w5bqvGeZYmeRGz8,13737
413
+ metaflow-2.16.6.data/data/share/metaflow/devtools/Tiltfile,sha256=I55XTG4RBnrMfDcYRtREXqqS8T9bF8agkZq0DlvdFLk,21404
414
+ metaflow-2.16.6.data/data/share/metaflow/devtools/pick_services.sh,sha256=DCnrMXwtApfx3B4S-YiZESMyAFHbXa3VuNL0MxPLyiE,2196
415
+ metaflow-2.16.6.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
416
+ metaflow-2.16.6.dist-info/METADATA,sha256=PvOkGMdg8fuZugwveU_UfTmjye1EImqwpnfwP1ZcKFY,6740
417
+ metaflow-2.16.6.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
418
+ metaflow-2.16.6.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
419
+ metaflow-2.16.6.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
420
+ metaflow-2.16.6.dist-info/RECORD,,