metaflow 2.13__py2.py3-none-any.whl → 2.13.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.
Files changed (34) hide show
  1. metaflow/metadata_provider/heartbeat.py +23 -8
  2. metaflow/metaflow_config.py +2 -0
  3. metaflow/plugins/argo/argo_client.py +0 -2
  4. metaflow/plugins/argo/argo_workflows.py +86 -104
  5. metaflow/plugins/argo/argo_workflows_cli.py +0 -1
  6. metaflow/plugins/argo/argo_workflows_decorator.py +2 -4
  7. metaflow/plugins/argo/jobset_input_paths.py +0 -1
  8. metaflow/plugins/aws/aws_utils.py +6 -1
  9. metaflow/plugins/aws/batch/batch_client.py +1 -3
  10. metaflow/plugins/aws/batch/batch_decorator.py +11 -11
  11. metaflow/plugins/aws/step_functions/dynamo_db_client.py +0 -3
  12. metaflow/plugins/aws/step_functions/production_token.py +1 -1
  13. metaflow/plugins/aws/step_functions/step_functions.py +1 -1
  14. metaflow/plugins/aws/step_functions/step_functions_cli.py +0 -1
  15. metaflow/plugins/aws/step_functions/step_functions_decorator.py +0 -1
  16. metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py +0 -1
  17. metaflow/plugins/kubernetes/kube_utils.py +55 -1
  18. metaflow/plugins/kubernetes/kubernetes.py +33 -80
  19. metaflow/plugins/kubernetes/kubernetes_cli.py +22 -5
  20. metaflow/plugins/kubernetes/kubernetes_decorator.py +49 -2
  21. metaflow/plugins/kubernetes/kubernetes_job.py +3 -6
  22. metaflow/plugins/kubernetes/kubernetes_jobsets.py +22 -5
  23. metaflow/plugins/pypi/bootstrap.py +87 -54
  24. metaflow/plugins/pypi/conda_environment.py +7 -6
  25. metaflow/plugins/pypi/micromamba.py +35 -21
  26. metaflow/plugins/pypi/pip.py +2 -4
  27. metaflow/plugins/pypi/utils.py +4 -2
  28. metaflow/version.py +1 -1
  29. {metaflow-2.13.dist-info → metaflow-2.13.1.dist-info}/METADATA +2 -2
  30. {metaflow-2.13.dist-info → metaflow-2.13.1.dist-info}/RECORD +34 -34
  31. {metaflow-2.13.dist-info → metaflow-2.13.1.dist-info}/WHEEL +1 -1
  32. {metaflow-2.13.dist-info → metaflow-2.13.1.dist-info}/LICENSE +0 -0
  33. {metaflow-2.13.dist-info → metaflow-2.13.1.dist-info}/entry_points.txt +0 -0
  34. {metaflow-2.13.dist-info → metaflow-2.13.1.dist-info}/top_level.txt +0 -0
@@ -8,12 +8,14 @@ import subprocess
8
8
  import sys
9
9
  import tarfile
10
10
  import time
11
-
12
- import requests
13
-
11
+ from urllib.error import URLError
12
+ from urllib.request import urlopen
14
13
  from metaflow.metaflow_config import DATASTORE_LOCAL_DIR
15
14
  from metaflow.plugins import DATASTORES
15
+ from metaflow.plugins.pypi.utils import MICROMAMBA_MIRROR_URL, MICROMAMBA_URL
16
16
  from metaflow.util import which
17
+ from urllib.request import Request
18
+ import warnings
17
19
 
18
20
  from . import MAGIC_FILE, _datastore_packageroot
19
21
 
@@ -32,11 +34,6 @@ def timer(func):
32
34
 
33
35
 
34
36
  if __name__ == "__main__":
35
- if len(sys.argv) != 5:
36
- print("Usage: bootstrap.py <flow_name> <id> <datastore_type> <architecture>")
37
- sys.exit(1)
38
- _, flow_name, id_, datastore_type, architecture = sys.argv
39
-
40
37
  # TODO: Detect architecture on the fly when dealing with arm architectures.
41
38
  # ARCH=$(uname -m)
42
39
  # OS=$(uname)
@@ -61,30 +58,6 @@ if __name__ == "__main__":
61
58
  # fi
62
59
  # fi
63
60
 
64
- prefix = os.path.join(os.getcwd(), architecture, id_)
65
- pkgs_dir = os.path.join(os.getcwd(), ".pkgs")
66
- conda_pkgs_dir = os.path.join(pkgs_dir, "conda")
67
- pypi_pkgs_dir = os.path.join(pkgs_dir, "pypi")
68
- manifest_dir = os.path.join(os.getcwd(), DATASTORE_LOCAL_DIR, flow_name)
69
-
70
- datastores = [d for d in DATASTORES if d.TYPE == datastore_type]
71
- if not datastores:
72
- print(f"No datastore found for type: {datastore_type}")
73
- sys.exit(1)
74
-
75
- storage = datastores[0](
76
- _datastore_packageroot(datastores[0], lambda *args, **kwargs: None)
77
- )
78
-
79
- # Move MAGIC_FILE inside local datastore.
80
- os.makedirs(manifest_dir, exist_ok=True)
81
- shutil.move(
82
- os.path.join(os.getcwd(), MAGIC_FILE),
83
- os.path.join(manifest_dir, MAGIC_FILE),
84
- )
85
- with open(os.path.join(manifest_dir, MAGIC_FILE)) as f:
86
- env = json.load(f)[id_][architecture]
87
-
88
61
  def run_cmd(cmd):
89
62
  result = subprocess.run(
90
63
  cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
@@ -107,29 +80,55 @@ if __name__ == "__main__":
107
80
  return micromamba_path
108
81
 
109
82
  # Download and extract in one go
110
- # TODO: Serve from cloudflare
111
- url = f"https://micro.mamba.pm/api/micromamba/{architecture}/2.0.4"
83
+ url = MICROMAMBA_URL.format(platform=architecture, version="2.0.4")
84
+ mirror_url = MICROMAMBA_MIRROR_URL.format(
85
+ platform=architecture, version="2.0.4"
86
+ )
112
87
 
113
88
  # Prepare directory once
114
89
  os.makedirs(os.path.dirname(micromamba_path), exist_ok=True)
115
90
 
116
- # Stream and process directly to file
117
- with requests.get(url, stream=True, timeout=30) as response:
118
- if response.status_code != 200:
119
- raise Exception(
120
- f"Failed to download micromamba: HTTP {response.status_code}"
121
- )
122
-
123
- decompressor = bz2.BZ2Decompressor()
124
-
125
- # Process in memory without temporary files
126
- tar_content = decompressor.decompress(response.raw.read())
91
+ # Download and decompress in one go
92
+ def _download_and_extract(url):
93
+ headers = {
94
+ "Accept-Encoding": "gzip, deflate, br",
95
+ "Connection": "keep-alive",
96
+ "User-Agent": "python-urllib",
97
+ }
127
98
 
128
- with tarfile.open(fileobj=io.BytesIO(tar_content), mode="r:") as tar:
129
- member = tar.getmember("bin/micromamba")
130
- # Extract directly to final location
131
- with open(micromamba_path, "wb") as f:
132
- f.write(tar.extractfile(member).read())
99
+ max_retries = 3
100
+ for attempt in range(max_retries):
101
+ try:
102
+ req = Request(url, headers=headers)
103
+
104
+ with urlopen(req) as response:
105
+ decompressor = bz2.BZ2Decompressor()
106
+ with warnings.catch_warnings():
107
+ warnings.filterwarnings(
108
+ "ignore", category=DeprecationWarning
109
+ )
110
+ with tarfile.open(
111
+ fileobj=io.BytesIO(
112
+ decompressor.decompress(response.read())
113
+ ),
114
+ mode="r:",
115
+ ) as tar:
116
+ member = tar.getmember("bin/micromamba")
117
+ tar.extract(member, micromamba_dir)
118
+ break
119
+ except (URLError, IOError) as e:
120
+ if attempt == max_retries - 1:
121
+ raise Exception(
122
+ f"Failed to download micromamba after {max_retries} attempts: {e}"
123
+ )
124
+ time.sleep(2**attempt)
125
+
126
+ try:
127
+ # first try from mirror
128
+ _download_and_extract(mirror_url)
129
+ except Exception:
130
+ # download from mirror failed, try official source before failing.
131
+ _download_and_extract(url)
133
132
 
134
133
  # Set executable permission
135
134
  os.chmod(micromamba_path, 0o755)
@@ -140,7 +139,6 @@ if __name__ == "__main__":
140
139
 
141
140
  @timer
142
141
  def download_conda_packages(storage, packages, dest_dir):
143
-
144
142
  def process_conda_package(args):
145
143
  # Ensure that conda packages go into architecture specific folders.
146
144
  # The path looks like REPO/CHANNEL/CONDA_SUBDIR/PACKAGE. We trick
@@ -169,7 +167,6 @@ if __name__ == "__main__":
169
167
 
170
168
  @timer
171
169
  def download_pypi_packages(storage, packages, dest_dir):
172
-
173
170
  def process_pypi_package(args):
174
171
  key, tmpfile, dest_dir = args
175
172
  dest = os.path.join(dest_dir, os.path.basename(key))
@@ -208,7 +205,6 @@ if __name__ == "__main__":
208
205
 
209
206
  @timer
210
207
  def install_pypi_packages(prefix, pypi_pkgs_dir):
211
-
212
208
  cmd = f"""set -e;
213
209
  export PATH=$PATH:$(pwd)/micromamba;
214
210
  export CONDA_PKGS_DIRS=$(pwd)/micromamba/pkgs;
@@ -272,4 +268,41 @@ if __name__ == "__main__":
272
268
  # wait for conda environment to be created
273
269
  futures["conda_env"].result()
274
270
 
275
- setup_environment(architecture, storage, env, prefix, conda_pkgs_dir, pypi_pkgs_dir)
271
+ if len(sys.argv) != 5:
272
+ print("Usage: bootstrap.py <flow_name> <id> <datastore_type> <architecture>")
273
+ sys.exit(1)
274
+
275
+ try:
276
+ _, flow_name, id_, datastore_type, architecture = sys.argv
277
+
278
+ prefix = os.path.join(os.getcwd(), architecture, id_)
279
+ pkgs_dir = os.path.join(os.getcwd(), ".pkgs")
280
+ conda_pkgs_dir = os.path.join(pkgs_dir, "conda")
281
+ pypi_pkgs_dir = os.path.join(pkgs_dir, "pypi")
282
+ manifest_dir = os.path.join(os.getcwd(), DATASTORE_LOCAL_DIR, flow_name)
283
+
284
+ datastores = [d for d in DATASTORES if d.TYPE == datastore_type]
285
+ if not datastores:
286
+ print(f"No datastore found for type: {datastore_type}")
287
+ sys.exit(1)
288
+
289
+ storage = datastores[0](
290
+ _datastore_packageroot(datastores[0], lambda *args, **kwargs: None)
291
+ )
292
+
293
+ # Move MAGIC_FILE inside local datastore.
294
+ os.makedirs(manifest_dir, exist_ok=True)
295
+ shutil.move(
296
+ os.path.join(os.getcwd(), MAGIC_FILE),
297
+ os.path.join(manifest_dir, MAGIC_FILE),
298
+ )
299
+ with open(os.path.join(manifest_dir, MAGIC_FILE)) as f:
300
+ env = json.load(f)[id_][architecture]
301
+
302
+ setup_environment(
303
+ architecture, storage, env, prefix, conda_pkgs_dir, pypi_pkgs_dir
304
+ )
305
+
306
+ except Exception as e:
307
+ print(f"Error: {str(e)}", file=sys.stderr)
308
+ sys.exit(1)
@@ -7,20 +7,15 @@ import json
7
7
  import os
8
8
  import tarfile
9
9
  import threading
10
- import time
11
10
  from concurrent.futures import ThreadPoolExecutor, as_completed
12
11
  from functools import wraps
13
12
  from hashlib import sha256
14
13
  from io import BufferedIOBase, BytesIO
15
- from itertools import chain
16
14
  from urllib.parse import unquote, urlparse
17
15
 
18
- import requests
19
-
20
16
  from metaflow.exception import MetaflowException
21
17
  from metaflow.metaflow_config import get_pinned_conda_libs
22
18
  from metaflow.metaflow_environment import MetaflowEnvironment
23
- from metaflow.metaflow_profile import profile
24
19
 
25
20
  from . import MAGIC_FILE, _datastore_packageroot
26
21
  from .utils import conda_platform
@@ -498,6 +493,7 @@ class LazyOpen(BufferedIOBase):
498
493
  self._file = None
499
494
  self._buffer = None
500
495
  self._position = 0
496
+ self.requests = None
501
497
 
502
498
  def _ensure_file(self):
503
499
  if not self._file:
@@ -514,8 +510,13 @@ class LazyOpen(BufferedIOBase):
514
510
  raise ValueError("Both filename and url are missing")
515
511
 
516
512
  def _download_to_buffer(self):
513
+ if self.requests is None:
514
+ # TODO: Remove dependency on requests
515
+ import requests
516
+
517
+ self.requests = requests
517
518
  # TODO: Stream it in chunks?
518
- response = requests.get(self.url, stream=True)
519
+ response = self.requests.get(self.url, stream=True)
519
520
  response.raise_for_status()
520
521
  return response.content
521
522
 
@@ -8,7 +8,7 @@ import time
8
8
  from metaflow.exception import MetaflowException
9
9
  from metaflow.util import which
10
10
 
11
- from .utils import conda_platform
11
+ from .utils import MICROMAMBA_MIRROR_URL, MICROMAMBA_URL, conda_platform
12
12
 
13
13
 
14
14
  class MicromambaException(MetaflowException):
@@ -323,7 +323,7 @@ class Micromamba(object):
323
323
  stderr="\n".join(err),
324
324
  )
325
325
  )
326
- except (TypeError, ValueError) as ve:
326
+ except (TypeError, ValueError):
327
327
  pass
328
328
  raise MicromambaException(
329
329
  msg.format(
@@ -339,23 +339,37 @@ def _install_micromamba(installation_location):
339
339
  # Unfortunately no 32bit binaries are available for micromamba, which ideally
340
340
  # shouldn't be much of a problem in today's world.
341
341
  platform = conda_platform()
342
- try:
343
- subprocess.Popen(f"mkdir -p {installation_location}", shell=True).wait()
344
- # https://mamba.readthedocs.io/en/latest/micromamba-installation.html#manual-installation
345
- # requires bzip2
346
- result = subprocess.Popen(
347
- f"curl -Ls https://micro.mamba.pm/api/micromamba/{platform}/1.5.7 | tar -xvj -C {installation_location} bin/micromamba",
348
- shell=True,
349
- stderr=subprocess.PIPE,
350
- stdout=subprocess.PIPE,
351
- )
352
- _, err = result.communicate()
353
- if result.returncode != 0:
354
- raise MicromambaException(
355
- f"Micromamba installation '{result.args}' failed:\n{err.decode()}"
356
- )
342
+ url = MICROMAMBA_URL.format(platform=platform, version="1.5.7")
343
+ mirror_url = MICROMAMBA_MIRROR_URL.format(platform=platform, version="1.5.7")
344
+ os.makedirs(installation_location, exist_ok=True)
357
345
 
358
- except subprocess.CalledProcessError as e:
359
- raise MicromambaException(
360
- "Micromamba installation failed:\n{}".format(e.stderr.decode())
361
- )
346
+ def _download_and_extract(url):
347
+ max_retries = 3
348
+ for attempt in range(max_retries):
349
+ try:
350
+ # https://mamba.readthedocs.io/en/latest/micromamba-installation.html#manual-installation
351
+ # requires bzip2
352
+ result = subprocess.Popen(
353
+ f"curl -Ls {url} | tar -xvj -C {installation_location} bin/micromamba",
354
+ shell=True,
355
+ stderr=subprocess.PIPE,
356
+ stdout=subprocess.PIPE,
357
+ )
358
+ _, err = result.communicate()
359
+ if result.returncode != 0:
360
+ raise MicromambaException(
361
+ f"Micromamba installation '{result.args}' failed:\n{err.decode()}"
362
+ )
363
+ except subprocess.CalledProcessError as e:
364
+ if attempt == max_retries - 1:
365
+ raise MicromambaException(
366
+ "Micromamba installation failed:\n{}".format(e.stderr.decode())
367
+ )
368
+ time.sleep(2**attempt)
369
+
370
+ try:
371
+ # prioritize downloading from mirror
372
+ _download_and_extract(mirror_url)
373
+ except Exception:
374
+ # download from official source as a fallback
375
+ _download_and_extract(url)
@@ -4,7 +4,6 @@ import re
4
4
  import shutil
5
5
  import subprocess
6
6
  import tempfile
7
- import time
8
7
  from concurrent.futures import ThreadPoolExecutor
9
8
  from itertools import chain, product
10
9
  from urllib.parse import unquote
@@ -107,9 +106,8 @@ class Pip(object):
107
106
  except PipPackageNotFound as ex:
108
107
  # pretty print package errors
109
108
  raise PipException(
110
- "Could not find a binary distribution for %s \n"
111
- "for the platform %s\n\n"
112
- "Note that ***@pypi*** does not currently support source distributions"
109
+ "Unable to find a binary distribution compatible with %s for %s.\n\n"
110
+ "Note: ***@pypi*** does not currently support source distributions"
113
111
  % (ex.package_spec, platform)
114
112
  )
115
113
 
@@ -1,4 +1,3 @@
1
- import os
2
1
  import platform
3
2
  import sys
4
3
 
@@ -17,10 +16,13 @@ else:
17
16
  from metaflow._vendor.packaging import tags
18
17
  from metaflow._vendor.packaging.utils import parse_wheel_filename
19
18
 
20
- from urllib.parse import unquote, urlparse
19
+ from urllib.parse import unquote
21
20
 
22
21
  from metaflow.exception import MetaflowException
23
22
 
23
+ MICROMAMBA_URL = "https://micro.mamba.pm/api/micromamba/{platform}/{version}"
24
+ MICROMAMBA_MIRROR_URL = "https://micromamba.outerbounds.sh/{platform}/{version}.tar.bz2"
25
+
24
26
 
25
27
  def conda_platform():
26
28
  # Returns the conda platform for the Python interpreter
metaflow/version.py CHANGED
@@ -1 +1 @@
1
- metaflow_version = "2.13"
1
+ metaflow_version = "2.13.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.13
3
+ Version: 2.13.1
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.13; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.13.1; 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=kWKDSlzVcRVNGG9PV5eB3o2ynrzqhVsfaLtkqjshn7Q,20948
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=x4p6tnRzYqNNniCGXyrUW0WuYfTUgnaOMRivxvnxask,11661
19
- metaflow/metaflow_config.py,sha256=AAhrK6f6CTm2ek8ZQJBLPmmkYzY_giBXPmso3i7fzSI,23266
19
+ metaflow/metaflow_config.py,sha256=erZeQ2v7sRufbcAVhT1EEFIt4p1TqRqvaVHot9Mz4CE,23373
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=hKjHl6NYJkKBSU2tzdVbddfOX1zWK73T4GCO42A0XB4,14666
38
38
  metaflow/vendor.py,sha256=FchtA9tH22JM-eEtJ2c9FpUdMn8sSb1VHuQS56EcdZk,5139
39
- metaflow/version.py,sha256=BaRwavZkdhCd56-Zxg8AtAsFnVpBuCJItv_SPS2apM4,26
39
+ metaflow/version.py,sha256=-WYqXIqtitaLCU4E6qut6c9z10BnV1o-zeTM3vpABxg,28
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
@@ -141,7 +141,7 @@ metaflow/extension_support/cmd.py,sha256=hk8iBUUINqvKCDxInKgWpum8ThiRZtHSJP7qBAS
141
141
  metaflow/extension_support/integrations.py,sha256=AWAh-AZ-vo9IxuAVEjGw3s8p_NMm2DKHYx10oC51gPU,5506
142
142
  metaflow/extension_support/plugins.py,sha256=4JbcXOWosSBqXlj1VINI5rSJGSnKx2_u3lN4KQxH-hs,11227
143
143
  metaflow/metadata_provider/__init__.py,sha256=FZNSnz26VB_m18DQG8mup6-Gfl7r1U6lRMljJBp3VAM,64
144
- metaflow/metadata_provider/heartbeat.py,sha256=9XJs4SV4R4taxUSMOKmRChnJCQ5a5o0dzRZ1iICWr9Y,2423
144
+ metaflow/metadata_provider/heartbeat.py,sha256=VFGDuO8LryraqsxGVORt6HtyqDUzIYNY50W3DbvR4js,3102
145
145
  metaflow/metadata_provider/metadata.py,sha256=4tmySlgQaoV-p9bHig7BjsEsqFRZWEOuwSLpODuKxjA,26169
146
146
  metaflow/metadata_provider/util.py,sha256=lYoQKbqoTM1iZChgyVWN-gX-HyM9tt9bXEMJexY9XmM,1723
147
147
  metaflow/mflog/__init__.py,sha256=9iMMn2xYB0oaDXXcInxa9AdDqeVBeiJeB3klnqGkyL0,5983
@@ -179,38 +179,38 @@ metaflow/plugins/airflow/sensors/base_sensor.py,sha256=s-OQBfPWZ_T3wn96Ua59CCEj1
179
179
  metaflow/plugins/airflow/sensors/external_task_sensor.py,sha256=zhYlrZnXT20KW8-fVk0fCNtTyNiKJB5PMVASacu30r0,6034
180
180
  metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=iDReG-7FKnumrtQg-HY6cCUAAqNA90nARrjjjEEk_x4,3275
181
181
  metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
- metaflow/plugins/argo/argo_client.py,sha256=Z_A1TO9yw4Y-a8VAlwrFS0BwunWzXpbtik-j_xjcuHE,16303
182
+ metaflow/plugins/argo/argo_client.py,sha256=PS_cYGnPw9h4X7TP_plObDH3clMw4reOsBLkkGPTd0Y,16282
183
183
  metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
184
- metaflow/plugins/argo/argo_workflows.py,sha256=lPPPKlHgz2cKYHM8mdq8Aywoi6vYytyCzxd5PrsWGFE,175733
185
- metaflow/plugins/argo/argo_workflows_cli.py,sha256=k8rDbHMXF-A0CxxEnVMvk_9OYobPIyjF-PHBGYfH8b4,36752
186
- metaflow/plugins/argo/argo_workflows_decorator.py,sha256=QdM1rK9gM-lDhyZldK8WqvFqJDvfJ7i3JPR5Uzaq2as,7887
184
+ metaflow/plugins/argo/argo_workflows.py,sha256=14f1w_vlO4F_WFR1_e-9TDlwKHCUDlP22EsSvG5qMQA,174919
185
+ metaflow/plugins/argo/argo_workflows_cli.py,sha256=11_8l4IrtkwviKsijInTZPt7YK5TZzClREnw_Cf4D5o,36706
186
+ metaflow/plugins/argo/argo_workflows_decorator.py,sha256=ogCSBmwsC2C3eusydrgjuAJd4qK18f1sI4jJwA4Fd-o,7800
187
187
  metaflow/plugins/argo/argo_workflows_deployer.py,sha256=6kHxEnYXJwzNCM9swI8-0AckxtPWqwhZLerYkX8fxUM,4444
188
188
  metaflow/plugins/argo/argo_workflows_deployer_objects.py,sha256=bs0E8WJGQYXuwi6u0OiwTn_jkfeKb5DywCmuJHeRl8I,13949
189
189
  metaflow/plugins/argo/capture_error.py,sha256=Ys9dscGrTpW-ZCirLBU0gD9qBM0BjxyxGlUMKcwewQc,1852
190
190
  metaflow/plugins/argo/generate_input_paths.py,sha256=loYsI6RFX9LlFsHb7Fe-mzlTTtRdySoOu7sYDy-uXK0,881
191
- metaflow/plugins/argo/jobset_input_paths.py,sha256=_JhZWngA6p9Q_O2fx3pdzKI0WE-HPRHz_zFvY2pHPTQ,525
191
+ metaflow/plugins/argo/jobset_input_paths.py,sha256=-h0E_e0w6FMiBUod9Rf_XOSCtZv_C0exacw4q1SfIfg,501
192
192
  metaflow/plugins/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
193
  metaflow/plugins/aws/aws_client.py,sha256=mO8UD6pxFaOnxDb3hTP3HB7Gqb_ZxoR-76LT683WHvI,4036
194
- metaflow/plugins/aws/aws_utils.py,sha256=dk92IRZ2QTF3PicBOtZMMOmS_FIncFqZPeL9EbCtXak,7310
194
+ metaflow/plugins/aws/aws_utils.py,sha256=kNd61C54Y3WxrL7KSjoKydRjBQ1p3exc9QXux-jZyDE,7510
195
195
  metaflow/plugins/aws/batch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
196
  metaflow/plugins/aws/batch/batch.py,sha256=e9ssahWM18GnipPK2sqYB-ztx9w7Eoo7YtWyEtufYxs,17787
197
197
  metaflow/plugins/aws/batch/batch_cli.py,sha256=gVQMWBLeuqO3U3PhVJSHLwa-CNHsmW0Cvmv-K0C-DoA,11758
198
- metaflow/plugins/aws/batch/batch_client.py,sha256=ddlGG0Vk1mkO7tcvJjDvNAVsVLOlqddF7MA1kKfHSqM,28830
199
- metaflow/plugins/aws/batch/batch_decorator.py,sha256=1MAhri-A_CYN2op0LPZikWL30m5h0w05XA8PXqb-Gk8,17561
198
+ metaflow/plugins/aws/batch/batch_client.py,sha256=J50RMEXeEXFe5RqNUM1HN22BuDQFYFVQ4FSMOK55VWY,28798
199
+ metaflow/plugins/aws/batch/batch_decorator.py,sha256=zRq0jF-FlzZsvv-ZKCsmSzUFIaflb1dLmEtkoPStNA4,17525
200
200
  metaflow/plugins/aws/secrets_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
201
  metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py,sha256=bBrGw4gRcKX9SLD8iKqPm_S_Zw5Y6F8AjxP6jPbkPpI,8136
202
202
  metaflow/plugins/aws/step_functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
203
- metaflow/plugins/aws/step_functions/dynamo_db_client.py,sha256=c1nFZc9v_dLTD3iD-75I6wrlM6oM7YmxpFPTRo8Tra0,2327
203
+ metaflow/plugins/aws/step_functions/dynamo_db_client.py,sha256=nxnf35SiHcTS3aCm_4uAm9olCCPkWdauXgKBdVzZHrA,2300
204
204
  metaflow/plugins/aws/step_functions/event_bridge_client.py,sha256=U9-tqKdih4KR-ZDRhFc-jHmYIcHgpS4swfgtTxNMB94,2690
205
- metaflow/plugins/aws/step_functions/production_token.py,sha256=_o4emv3rozYZoWpaj1Y6UfKhTMlYpQc7GDDDBfZ2G7s,1898
205
+ metaflow/plugins/aws/step_functions/production_token.py,sha256=rREx9djJzKYDiGhPCZ919pSpfrBCYuhSL5WlwnAojNM,1890
206
206
  metaflow/plugins/aws/step_functions/schedule_decorator.py,sha256=Ab1rW8O_no4HNZm4__iBmFDCDW0Z8-TgK4lnxHHA6HI,1940
207
207
  metaflow/plugins/aws/step_functions/set_batch_environment.py,sha256=ibiGWFHDjKcLfprH3OsX-g2M9lUsh6J-bp7v2cdLhD4,1294
208
- metaflow/plugins/aws/step_functions/step_functions.py,sha256=ZQ1qKLieQ99lWm6RI0zagEW8eOKKxGBiGwnBgFJS1DQ,53146
209
- metaflow/plugins/aws/step_functions/step_functions_cli.py,sha256=4RsVtkw_3FO9Y2HrOcffTKnzSBG5sh3IWX-F6vDZM3Y,26107
208
+ metaflow/plugins/aws/step_functions/step_functions.py,sha256=PSgNrT6CeKXi4dMjSnPSXv7FjAHikHo5DC55ZMLm6fw,53141
209
+ metaflow/plugins/aws/step_functions/step_functions_cli.py,sha256=VixVaowCRoUIY9u8qaP4X1YQyAcEL4F3bjIDdJ4NiT0,26061
210
210
  metaflow/plugins/aws/step_functions/step_functions_client.py,sha256=DKpNwAIWElvWjFANs5Ku3rgzjxFoqAD6k-EF8Xhkg3Q,4754
211
- metaflow/plugins/aws/step_functions/step_functions_decorator.py,sha256=LoZC5BuQLqyFtfE-sGla26l2xXlCKN9aSvIlzPKV134,3800
211
+ metaflow/plugins/aws/step_functions/step_functions_decorator.py,sha256=jzDHYmgU_XvLffZDazR_1viow_1qQFblx9UKyjtoM_0,3788
212
212
  metaflow/plugins/aws/step_functions/step_functions_deployer.py,sha256=JKYtDhKivtXUWPklprZFzkqezh14loGDmk8mNk6QtpI,3714
213
- metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py,sha256=-ElC48q739UJk4qGEYj6H7p8nZ4xsm1iJwh5B7kEsFE,7319
213
+ metaflow/plugins/aws/step_functions/step_functions_deployer_objects.py,sha256=zDWmrOeCEL2_uBbmdmXbVpHVTjswwjEL_rOux6MAcRI,7303
214
214
  metaflow/plugins/azure/__init__.py,sha256=GuuhTVC-zSdyAf79a1wiERMq0Zts7fwVT7t9fAf234A,100
215
215
  metaflow/plugins/azure/azure_credential.py,sha256=JmdGEbVzgxy8ucqnQDdTTI_atyMX9WSZUw3qYOo7RhE,2174
216
216
  metaflow/plugins/azure/azure_exceptions.py,sha256=NnbwpUC23bc61HZjJmeXztY0tBNn_Y_VpIpDDuYWIZ0,433
@@ -287,25 +287,25 @@ metaflow/plugins/gcp/gs_tail.py,sha256=qz0QZKT-5LvL8qgZZK2yyMOwuEnx1YOz-pTSAUmwv
287
287
  metaflow/plugins/gcp/gs_utils.py,sha256=ZmIGFse1qYyvAVrwga23PQUzF6dXEDLLsZ2F-YRmvow,2030
288
288
  metaflow/plugins/gcp/includefile_support.py,sha256=OQO0IVWv4ObboL0VqEZwcDOyj9ORLdur66JToxQ84vU,3887
289
289
  metaflow/plugins/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
290
- metaflow/plugins/kubernetes/kube_utils.py,sha256=CbJRMn-sQyGqG-hKMBBjA6xmw15_DyQmhU8TxNyWqcQ,2124
291
- metaflow/plugins/kubernetes/kubernetes.py,sha256=FrIL2wRUzy4bJr6pNz3I-tNFH-OJWHJcrarJsBKRPLE,31728
292
- metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=LbkhQRw6Wi262QHD_iH1NAk8uIiXT6jUBQIQpqvB2w4,13633
290
+ metaflow/plugins/kubernetes/kube_utils.py,sha256=jdFMGbEmIow-oli26v31W9CmbZXigx06b3D_xIobpk0,4140
291
+ metaflow/plugins/kubernetes/kubernetes.py,sha256=7yaa1TL3TcC-Js6_kAi0HGFLbXesMw3WiKWPlN9yIxo,30028
292
+ metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=A6hI6KZ6sadPAOAyGhjwITMfnabr6voBXLRlDDxylcg,13874
293
293
  metaflow/plugins/kubernetes/kubernetes_client.py,sha256=tuvXP-QKpdeSmzVolB2R_TaacOr5DIb0j642eKcjsiM,6491
294
- metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=wuPsh7ENZGngGFkYc2gKwX3aLGrhT8zQk-m-Xn9lrLo,28488
295
- metaflow/plugins/kubernetes/kubernetes_job.py,sha256=CoDzG0eEcJezfMTmgYJ4Ea9G_o5INYm0w1DvjGwJT2A,31916
296
- metaflow/plugins/kubernetes/kubernetes_jobsets.py,sha256=0SGOfStlh6orXVpF3s6Mu26OFR36eh4dj-sFYwg3HaA,42066
294
+ metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=5NfrCZaGf2a2oQK4CeJExcizbojynCnEXzXqSN5Hoz0,30500
295
+ metaflow/plugins/kubernetes/kubernetes_job.py,sha256=pO9ExyAVCDoAoWFn9oFcos2aa0MQk4_D61O-T4E10E8,31826
296
+ metaflow/plugins/kubernetes/kubernetes_jobsets.py,sha256=9kU43eE5IvIa7y-POzBdxnJOazWsedKhwQ51Tu1HN_A,42471
297
297
  metaflow/plugins/metadata_providers/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
298
298
  metaflow/plugins/metadata_providers/local.py,sha256=9UAxe9caN6kU1lkSlIoJbRGgTqsMa62cBTnyMwhqiaA,22446
299
299
  metaflow/plugins/metadata_providers/service.py,sha256=NKZfFMamx6upP6aFRJfXlfYIhySgFNzz6kbp1yPD7LA,20222
300
300
  metaflow/plugins/pypi/__init__.py,sha256=0YFZpXvX7HCkyBFglatual7XGifdA1RwC3U4kcizyak,1037
301
- metaflow/plugins/pypi/bootstrap.py,sha256=aIMY7vmVt-EhNQQgppjnM8QKHsKvAdFoKVyRTDLyH1c,10238
301
+ metaflow/plugins/pypi/bootstrap.py,sha256=x7PwFjuRNOwehVmpi5W7-JlTKHZHjwRhz6nImYlMkqo,11678
302
302
  metaflow/plugins/pypi/conda_decorator.py,sha256=piFcE4uGmWhhbGlxMK0GHd7BGEyqy6r9BFy8Mjoi80Q,15937
303
- metaflow/plugins/pypi/conda_environment.py,sha256=BpeyenJXsZtHBqDShO-_oOrY4w9iGREqLJ0kaPu_ulA,22032
304
- metaflow/plugins/pypi/micromamba.py,sha256=8rkEzBJLvMY6RD3fttHMrW_MT-GZz970yxnIb8wVVa4,15026
305
- metaflow/plugins/pypi/pip.py,sha256=IVy6uR3ymL2pNoxNig-WKAnHRcH09a1JbHgMEOYLyoI,14012
303
+ metaflow/plugins/pypi/conda_environment.py,sha256=d5BAiY_aJJdlJ5h3N5nGSDmVoOY-8BVKqEbA5nrCpCY,22113
304
+ metaflow/plugins/pypi/micromamba.py,sha256=XbVM7q6EtLwuTyB5aXzSfxd4aFOl7QNrdVRzwKX6MSE,15686
305
+ metaflow/plugins/pypi/pip.py,sha256=H0cIy8odpZ-JTn4SwF0b74tuC3uRU7X8TdAQJ2kODG8,13971
306
306
  metaflow/plugins/pypi/pypi_decorator.py,sha256=ybNgo-T5Z_0W2KNuED0pdjyI0qygZ4a1MXAzKqdHt_E,7250
307
307
  metaflow/plugins/pypi/pypi_environment.py,sha256=FYMg8kF3lXqcLfRYWD83a9zpVjcoo_TARqMGZ763rRk,230
308
- metaflow/plugins/pypi/utils.py,sha256=ds1Mnv_DaxGnLAYp7ozg_K6oyguGyNhvHfE-75Ia1YA,2836
308
+ metaflow/plugins/pypi/utils.py,sha256=855aSATi-qPhFs5OFV5dl03RDNDr5tUrPebloygrWnU,2984
309
309
  metaflow/plugins/secrets/__init__.py,sha256=mhJaN2eMS_ZZVewAMR2E-JdP5i0t3v9e6Dcwd-WpruE,310
310
310
  metaflow/plugins/secrets/inline_secrets_provider.py,sha256=EChmoBGA1i7qM3jtYwPpLZDBybXLergiDlN63E0u3x8,294
311
311
  metaflow/plugins/secrets/secrets_decorator.py,sha256=s-sFzPWOjahhpr5fMj-ZEaHkDYAPTO0isYXGvaUwlG8,11273
@@ -358,9 +358,9 @@ metaflow/user_configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
358
358
  metaflow/user_configs/config_decorators.py,sha256=Tj0H88UT8Q6pylXxHXgiA6cqnNlw4d3mR7M8J9g3ZUg,20139
359
359
  metaflow/user_configs/config_options.py,sha256=Knpiax_YGmYAdR3zKmaepN8puW1MyL9g6-eMGAkcylo,20942
360
360
  metaflow/user_configs/config_parameters.py,sha256=yDiaajJGP-9W_tA_6hVuw8HDF8n5zJBccCjcrTGOYDE,13912
361
- metaflow-2.13.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
362
- metaflow-2.13.dist-info/METADATA,sha256=BIUZgy3qZMHJjWyxV0fBXluV1DM7WCLhg4YslOkHhIA,5902
363
- metaflow-2.13.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
364
- metaflow-2.13.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
365
- metaflow-2.13.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
366
- metaflow-2.13.dist-info/RECORD,,
361
+ metaflow-2.13.1.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
362
+ metaflow-2.13.1.dist-info/METADATA,sha256=dPPzZLYrVeW5jiCDUQUcagEZLiKaOAG-7CnT8_mJDZs,5906
363
+ metaflow-2.13.1.dist-info/WHEEL,sha256=M1ikteR9eetPNvm1LyQ3rpXxNYuGd90oakQO1a-ohSk,109
364
+ metaflow-2.13.1.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
365
+ metaflow-2.13.1.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
366
+ metaflow-2.13.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.7.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any