metaflow 2.18.6__py2.py3-none-any.whl → 2.18.8__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.
@@ -1385,6 +1385,9 @@ class S3(object):
1385
1385
  except OSError as e:
1386
1386
  if e.errno == errno.ENOSPC:
1387
1387
  raise MetaflowS3InsufficientDiskSpace(str(e))
1388
+ except MetaflowException as ex:
1389
+ # Re-raise Metaflow exceptions (including TimeoutException)
1390
+ raise
1388
1391
  except Exception as ex:
1389
1392
  error = str(ex)
1390
1393
  if tmp:
@@ -50,6 +50,7 @@ import metaflow.tracing as tracing
50
50
  from metaflow.metaflow_config import (
51
51
  S3_WORKER_COUNT,
52
52
  )
53
+ from metaflow.exception import MetaflowException
53
54
 
54
55
  DOWNLOAD_FILE_THRESHOLD = 2 * TransferConfig().multipart_threshold
55
56
  DOWNLOAD_MAX_CHUNK = 2 * 1024 * 1024 * 1024 - 1
@@ -287,6 +288,11 @@ def worker(result_file_name, queue, mode, s3config):
287
288
  result_file.write("%d %d\n" % (idx, -ERROR_TRANSIENT))
288
289
  result_file.flush()
289
290
  continue
291
+ except MetaflowException:
292
+ # Re-raise Metaflow exceptions (including TimeoutException)
293
+ tmp.close()
294
+ os.unlink(tmp.name)
295
+ raise
290
296
  except (SSLError, Exception) as e:
291
297
  tmp.close()
292
298
  os.unlink(tmp.name)
@@ -357,6 +363,9 @@ def worker(result_file_name, queue, mode, s3config):
357
363
  err = convert_to_client_error(e)
358
364
  handle_client_error(err, idx, result_file)
359
365
  continue
366
+ except MetaflowException:
367
+ # Re-raise Metaflow exceptions (including TimeoutException)
368
+ raise
360
369
  except (SSLError, Exception) as e:
361
370
  # assume anything else is transient
362
371
  result_file.write("%d %d\n" % (idx, -ERROR_TRANSIENT))
@@ -385,6 +394,10 @@ def convert_to_client_error(e):
385
394
 
386
395
 
387
396
  def handle_client_error(err, idx, result_file):
397
+ # Handle all MetaflowExceptions as fatal
398
+ if isinstance(err, MetaflowException):
399
+ raise err
400
+
388
401
  error_code = normalize_client_error(err)
389
402
  if error_code == 404:
390
403
  result_file.write("%d %d\n" % (idx, -ERROR_URL_NOT_FOUND))
@@ -60,6 +60,15 @@ class Pip(object):
60
60
  else:
61
61
  self.logger = lambda *args, **kwargs: None # No-op logger if not provided
62
62
 
63
+ def _get_resolved_python_version(self, prefix):
64
+ try:
65
+ result = self.micromamba._call(["list", "--prefix", prefix, "--json"])
66
+ for package in result:
67
+ if package.get("name") == "python":
68
+ return package["version"]
69
+ except Exception:
70
+ return None
71
+
63
72
  def solve(self, id_, packages, python, platform):
64
73
  prefix = self.micromamba.path_to_environment(id_)
65
74
  if prefix is None:
@@ -67,13 +76,19 @@ class Pip(object):
67
76
  msg += "for id {id}".format(id=id_)
68
77
  raise PipException(msg)
69
78
 
79
+ resolved_python = self._get_resolved_python_version(prefix)
80
+ if not resolved_python:
81
+ raise PipException(
82
+ "Could not determine Python version from conda environment"
83
+ )
84
+
70
85
  debug.conda_exec("Solving packages for PyPI environment %s" % id_)
71
86
  with tempfile.TemporaryDirectory() as tmp_dir:
72
87
  report = "{tmp_dir}/report.json".format(tmp_dir=tmp_dir)
73
88
  implementations, platforms, abis = zip(
74
89
  *[
75
90
  (tag.interpreter, tag.platform, tag.abi)
76
- for tag in pip_tags(python, platform)
91
+ for tag in pip_tags(resolved_python, platform)
77
92
  ]
78
93
  )
79
94
  custom_index_url, extra_index_urls = self.indices(prefix)
@@ -142,6 +157,13 @@ class Pip(object):
142
157
 
143
158
  def download(self, id_, packages, python, platform):
144
159
  prefix = self.micromamba.path_to_environment(id_)
160
+
161
+ resolved_python = self._get_resolved_python_version(prefix)
162
+ if not resolved_python:
163
+ raise PipException(
164
+ "Could not determine Python version from conda environment"
165
+ )
166
+
145
167
  metadata_file = METADATA_FILE.format(prefix=prefix)
146
168
  # download packages only if they haven't ever been downloaded before
147
169
  if os.path.isfile(metadata_file):
@@ -192,7 +214,11 @@ class Pip(object):
192
214
  if os.path.isfile(os.path.join(path, f)) and f.endswith(".whl")
193
215
  ]
194
216
  if (
195
- len(set(pip_tags(python, platform)).intersection(wheel_tags(wheel)))
217
+ len(
218
+ set(pip_tags(resolved_python, platform)).intersection(
219
+ wheel_tags(wheel)
220
+ )
221
+ )
196
222
  == 0
197
223
  ):
198
224
  raise PipException(
@@ -211,7 +237,7 @@ class Pip(object):
211
237
  implementations, platforms, abis = zip(
212
238
  *[
213
239
  (tag.interpreter, tag.platform, tag.abi)
214
- for tag in pip_tags(python, platform)
240
+ for tag in pip_tags(resolved_python, platform)
215
241
  ]
216
242
  )
217
243
 
metaflow/version.py CHANGED
@@ -1 +1 @@
1
- metaflow_version = "2.18.6"
1
+ metaflow_version = "2.18.8"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metaflow
3
- Version: 2.18.6
3
+ Version: 2.18.8
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.18.6; extra == "stubs"
29
+ Requires-Dist: metaflow-stubs==2.18.8; extra == "stubs"
30
30
  Dynamic: author
31
31
  Dynamic: author-email
32
32
  Dynamic: classifier
@@ -102,3 +102,4 @@ We'd love to hear from you. Join our community [Slack workspace](http://slack.ou
102
102
  ## Contributing
103
103
  We welcome contributions to Metaflow. Please see our [contribution guide](https://docs.metaflow.org/introduction/contributing-to-metaflow) for more details.
104
104
 
105
+
@@ -1,6 +1,6 @@
1
1
  metaflow/R.py,sha256=CqVfIatvmjciuICNnoyyNGrwE7Va9iXfLdFbQa52hwA,3958
2
2
  metaflow/__init__.py,sha256=8V_NsmWtat2FnIUp5GenscY0vz4egOkIlpNjqwtTJnY,6051
3
- metaflow/cards.py,sha256=IbRmredvmFEU0V6JL7DR8wCESwVmmZJubr6x24bo7U4,442
3
+ metaflow/cards.py,sha256=nAOf4FFnd4YUu39hIiH2CyyKKyku8n3ZfUNnQvNEFds,456
4
4
  metaflow/cli.py,sha256=uF1ACHw3aWCe6ypFP1SplMZWVA8dgtMYc2z6I4v5neA,22802
5
5
  metaflow/cli_args.py,sha256=hDsdWdRmfXYifVGq6b6FDfgoWxtIG2nr_lU6EBV0Pnk,3584
6
6
  metaflow/clone_util.py,sha256=LSuVbFpPUh92UW32DBcnZbL0FFw-4w3CLa0tpEbCkzk,2066
@@ -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=A82CGHfStZGDP5pQ5XzRjFkbN1ZC-vFmghXIrzMDDNg,5868
39
- metaflow/version.py,sha256=Pn7zOYZ6qYMTNx9fPEWG0JaDYLz3PooxX1CgtYpj3hA,28
39
+ metaflow/version.py,sha256=6DVZEAMJCoj9H_RVtqJZYzyq1k7d1mhq8BbqjcJiNoY,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
@@ -284,12 +284,12 @@ metaflow/plugins/cards/metadata.py,sha256=tACaw7_XNAICZ4A25celIbgxUF0CxHh7BBpFzK
284
284
  metaflow/plugins/cards/card_modules/__init__.py,sha256=WI2IAsFiKGyqPrHtO9S9-MbyVtUTgWJNL4xjJaBErRo,3437
285
285
  metaflow/plugins/cards/card_modules/base.html,sha256=Y208ZKIZqEWWUcoBFTLTdWKAG0C8xH5lmyCRSjaN2FY,21004
286
286
  metaflow/plugins/cards/card_modules/basic.py,sha256=b6aBg7800CjjkQb0J_TOd3JujVR10X2QoXYdwiXFbkE,25831
287
- metaflow/plugins/cards/card_modules/bundle.css,sha256=Ey_j7SHMYWFxUA0WOrz-hq1c-0KDolfGoIffay3yNsU,12144
287
+ metaflow/plugins/cards/card_modules/bundle.css,sha256=VHe87L_Neezo5FGaCEKeLsR_rC6N8O7Fk_OU85am3is,14566
288
288
  metaflow/plugins/cards/card_modules/card.py,sha256=6sbqP5mwf7QWvQvX2N_bC78H9ixuI5sQ8612Q5islys,4627
289
- metaflow/plugins/cards/card_modules/components.py,sha256=Y-Yo7UgSOyTB3zs-wDfUqUKl0PI_BzeY1QGcy2fqE2M,26752
289
+ metaflow/plugins/cards/card_modules/components.py,sha256=tlIwQEZIL0MzwtmcqociG1MgVq8QX-gLGk8Kxvyygg0,34946
290
290
  metaflow/plugins/cards/card_modules/convert_to_native_type.py,sha256=Vcjqn5rfC0kVMdhqDwsYEjknXTbkG_ppraQrQGaQY_E,16245
291
291
  metaflow/plugins/cards/card_modules/main.css,sha256=avu7BTB9qj0M8LvqNLUhikUFQhmAJhQQ7REcUgh9zMw,11725
292
- metaflow/plugins/cards/card_modules/main.js,sha256=mZkgYvl4mN_YlPZmGn7SqZAO8do_SbRjMFR8KmZUdJM,1045780
292
+ metaflow/plugins/cards/card_modules/main.js,sha256=m_8lgsLiAsZn89sNX9wozpTB0cwygdmph78VpMwCNoA,1047601
293
293
  metaflow/plugins/cards/card_modules/renderer_tools.py,sha256=uiTdKHWFInWgtfWArOUSQLnTwqVd4hAw49jfOfg8rGA,1642
294
294
  metaflow/plugins/cards/card_modules/test_cards.py,sha256=t2PZ3QnjCN_KUlDKxAt2FfK1BX2dp8rqK6TjtkCNyew,5876
295
295
  metaflow/plugins/cards/card_modules/chevron/__init__.py,sha256=SicpH_1eT76HUTA8aMuiGLRNKTqgYD1Qfutt2NdTL0E,156
@@ -306,8 +306,8 @@ metaflow/plugins/datastores/s3_storage.py,sha256=CZdNqaKtxDXQbEg2YHyphph3hWcLIE5
306
306
  metaflow/plugins/datatools/__init__.py,sha256=ge4L16OBQLy2J_MMvoHg3lMfdm-MluQgRWoyZ5GCRnk,1267
307
307
  metaflow/plugins/datatools/local.py,sha256=FJvMOBcjdyhSPHmdLocBSiIT0rmKkKBmsaclxH75x08,4233
308
308
  metaflow/plugins/datatools/s3/__init__.py,sha256=14tr9fPjN3ULW5IOfKHeG7Uhjmgm7LMtQHfz1SFv-h8,248
309
- metaflow/plugins/datatools/s3/s3.py,sha256=3xrWD6pXoVRpuAQHyLGVya79UIE0S8AqAqe2prg4yMw,67182
310
- metaflow/plugins/datatools/s3/s3op.py,sha256=nDFgc5m0ud-uK4D2_vyweGpGoMjESxu3TlX86zA1MdQ,47561
309
+ metaflow/plugins/datatools/s3/s3.py,sha256=b07QwYvfKvR1k0eZ_b5Hk4XQnQs3ORk6b0nvCwfZL8w,67324
310
+ metaflow/plugins/datatools/s3/s3op.py,sha256=3GOtIV08gmAo7XE6NNnsSUxTTRIsvgPJn7CC0U5E7XY,48129
311
311
  metaflow/plugins/datatools/s3/s3tail.py,sha256=boQjQGQMI-bvTqcMP2y7uSlSYLcvWOy7J3ZUaF78NAA,2597
312
312
  metaflow/plugins/datatools/s3/s3util.py,sha256=FgRgaVmEq7-i2dV7q8XK5w5PfFt-xJjZa8WrK8IJfdI,3769
313
313
  metaflow/plugins/env_escape/__init__.py,sha256=tGNUZnmPvk52eNs__VK443b3CZ7ogEFTT-s9_n_HF8Q,8837
@@ -361,7 +361,7 @@ metaflow/plugins/pypi/conda_decorator.py,sha256=fXG9EvImP4Eqle_Trhb3tQhs40xTc4cx
361
361
  metaflow/plugins/pypi/conda_environment.py,sha256=j6QaIWmP50K2veN6Sywa04S2hfByR1YMqy7OyZpwvYs,24925
362
362
  metaflow/plugins/pypi/micromamba.py,sha256=UltfY8NmLphfZ-AbpaMFIdxIeOXLdTYDrMrabvPrYVU,17352
363
363
  metaflow/plugins/pypi/parsers.py,sha256=gpOOG2Ph95wI73MWCAi7XjpK0gYhv5k5YIGBs73QPuE,8556
364
- metaflow/plugins/pypi/pip.py,sha256=WhPyA18RoVT40sqbZRJdCEij4euL9PZwLfm1SrAKqmU,14333
364
+ metaflow/plugins/pypi/pip.py,sha256=N5C3tjuWG2pr4VGZR8YgnRc0HwfRL7LZmOnxxA9ZmEc,15239
365
365
  metaflow/plugins/pypi/pypi_decorator.py,sha256=sBxmDH3WIWVfJDsSauiMy58fevOJuJeLSuS6MnIpw44,7312
366
366
  metaflow/plugins/pypi/pypi_environment.py,sha256=FYMg8kF3lXqcLfRYWD83a9zpVjcoo_TARqMGZ763rRk,230
367
367
  metaflow/plugins/pypi/utils.py,sha256=W8OhDrhz7YIE-2MSSN5Rj7AmESwsN5YDmdnro152J4w,3551
@@ -428,12 +428,12 @@ metaflow/user_decorators/mutable_flow.py,sha256=EywKTN3cnXPQF_s62wQaC4a4aH14j8oe
428
428
  metaflow/user_decorators/mutable_step.py,sha256=-BY0UDXf_RCAEnC5JlLzEXGdiw1KD9oSrSxS_SWaB9Y,16791
429
429
  metaflow/user_decorators/user_flow_decorator.py,sha256=2yDwZq9QGv9W-7kEuKwa8o4ZkTvuHJ5ESz7VVrGViAI,9890
430
430
  metaflow/user_decorators/user_step_decorator.py,sha256=4558NR8RJtN22OyTwCXO80bAMhMTaRGMoX12b1GMcPc,27232
431
- metaflow-2.18.6.data/data/share/metaflow/devtools/Makefile,sha256=TT4TCq8ALSfqYyGqDPocN5oPcZe2FqoCZxmGO1LmyCc,13760
432
- metaflow-2.18.6.data/data/share/metaflow/devtools/Tiltfile,sha256=Ty5p6AD3MwJAcAnOGv4yMz8fExAsnNQ11r8whK6uzzw,21381
433
- metaflow-2.18.6.data/data/share/metaflow/devtools/pick_services.sh,sha256=DCnrMXwtApfx3B4S-YiZESMyAFHbXa3VuNL0MxPLyiE,2196
434
- metaflow-2.18.6.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
435
- metaflow-2.18.6.dist-info/METADATA,sha256=JzuYlrkoFTlpyNqOTpGLHbAyaze0Z7zLRLQ-186L3No,6740
436
- metaflow-2.18.6.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
437
- metaflow-2.18.6.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
438
- metaflow-2.18.6.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
439
- metaflow-2.18.6.dist-info/RECORD,,
431
+ metaflow-2.18.8.data/data/share/metaflow/devtools/Makefile,sha256=TT4TCq8ALSfqYyGqDPocN5oPcZe2FqoCZxmGO1LmyCc,13760
432
+ metaflow-2.18.8.data/data/share/metaflow/devtools/Tiltfile,sha256=Ty5p6AD3MwJAcAnOGv4yMz8fExAsnNQ11r8whK6uzzw,21381
433
+ metaflow-2.18.8.data/data/share/metaflow/devtools/pick_services.sh,sha256=DCnrMXwtApfx3B4S-YiZESMyAFHbXa3VuNL0MxPLyiE,2196
434
+ metaflow-2.18.8.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
435
+ metaflow-2.18.8.dist-info/METADATA,sha256=JsBIPPxtus_253Xt7LBxnYOxHtmle6Y4jq5RsDs6lU8,6741
436
+ metaflow-2.18.8.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
437
+ metaflow-2.18.8.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
438
+ metaflow-2.18.8.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
439
+ metaflow-2.18.8.dist-info/RECORD,,