ob-metaflow 2.9.10.1__py2.py3-none-any.whl → 2.10.2.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.

Potentially problematic release.


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

Files changed (57) hide show
  1. metaflow/_vendor/packaging/__init__.py +15 -0
  2. metaflow/_vendor/packaging/_elffile.py +108 -0
  3. metaflow/_vendor/packaging/_manylinux.py +238 -0
  4. metaflow/_vendor/packaging/_musllinux.py +80 -0
  5. metaflow/_vendor/packaging/_parser.py +328 -0
  6. metaflow/_vendor/packaging/_structures.py +61 -0
  7. metaflow/_vendor/packaging/_tokenizer.py +188 -0
  8. metaflow/_vendor/packaging/markers.py +245 -0
  9. metaflow/_vendor/packaging/requirements.py +95 -0
  10. metaflow/_vendor/packaging/specifiers.py +1005 -0
  11. metaflow/_vendor/packaging/tags.py +546 -0
  12. metaflow/_vendor/packaging/utils.py +141 -0
  13. metaflow/_vendor/packaging/version.py +563 -0
  14. metaflow/_vendor/v3_7/__init__.py +1 -0
  15. metaflow/_vendor/v3_7/zipp.py +329 -0
  16. metaflow/metaflow_config.py +2 -1
  17. metaflow/metaflow_environment.py +3 -1
  18. metaflow/mflog/mflog.py +7 -1
  19. metaflow/multicore_utils.py +12 -2
  20. metaflow/plugins/__init__.py +8 -3
  21. metaflow/plugins/airflow/airflow.py +13 -0
  22. metaflow/plugins/argo/argo_client.py +16 -0
  23. metaflow/plugins/argo/argo_events.py +7 -1
  24. metaflow/plugins/argo/argo_workflows.py +62 -0
  25. metaflow/plugins/argo/argo_workflows_cli.py +15 -0
  26. metaflow/plugins/aws/batch/batch.py +10 -0
  27. metaflow/plugins/aws/batch/batch_cli.py +1 -2
  28. metaflow/plugins/aws/batch/batch_decorator.py +2 -9
  29. metaflow/plugins/datatools/s3/s3.py +4 -0
  30. metaflow/plugins/env_escape/client.py +24 -3
  31. metaflow/plugins/env_escape/stub.py +2 -8
  32. metaflow/plugins/kubernetes/kubernetes.py +13 -0
  33. metaflow/plugins/kubernetes/kubernetes_cli.py +1 -2
  34. metaflow/plugins/kubernetes/kubernetes_decorator.py +9 -2
  35. metaflow/plugins/pypi/__init__.py +29 -0
  36. metaflow/plugins/pypi/bootstrap.py +131 -0
  37. metaflow/plugins/pypi/conda_decorator.py +335 -0
  38. metaflow/plugins/pypi/conda_environment.py +414 -0
  39. metaflow/plugins/pypi/micromamba.py +294 -0
  40. metaflow/plugins/pypi/pip.py +205 -0
  41. metaflow/plugins/pypi/pypi_decorator.py +130 -0
  42. metaflow/plugins/pypi/pypi_environment.py +7 -0
  43. metaflow/plugins/pypi/utils.py +75 -0
  44. metaflow/task.py +0 -3
  45. metaflow/vendor.py +1 -0
  46. {ob_metaflow-2.9.10.1.dist-info → ob_metaflow-2.10.2.6.dist-info}/METADATA +1 -1
  47. {ob_metaflow-2.9.10.1.dist-info → ob_metaflow-2.10.2.6.dist-info}/RECORD +51 -33
  48. {ob_metaflow-2.9.10.1.dist-info → ob_metaflow-2.10.2.6.dist-info}/WHEEL +1 -1
  49. metaflow/plugins/conda/__init__.py +0 -90
  50. metaflow/plugins/conda/batch_bootstrap.py +0 -104
  51. metaflow/plugins/conda/conda.py +0 -247
  52. metaflow/plugins/conda/conda_environment.py +0 -136
  53. metaflow/plugins/conda/conda_flow_decorator.py +0 -35
  54. metaflow/plugins/conda/conda_step_decorator.py +0 -416
  55. {ob_metaflow-2.9.10.1.dist-info → ob_metaflow-2.10.2.6.dist-info}/LICENSE +0 -0
  56. {ob_metaflow-2.9.10.1.dist-info → ob_metaflow-2.10.2.6.dist-info}/entry_points.txt +0 -0
  57. {ob_metaflow-2.9.10.1.dist-info → ob_metaflow-2.10.2.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,75 @@
1
+ import platform
2
+ import sys
3
+
4
+ if sys.version_info < (3, 6):
5
+
6
+ class Tags:
7
+ __getattr__ = lambda self, name: (_ for _ in ()).throw(
8
+ Exception("packaging.tags is not avaliable for Python < 3.6")
9
+ )
10
+
11
+ tags = Tags()
12
+ else:
13
+ from metaflow._vendor.packaging import tags
14
+
15
+ from metaflow.exception import MetaflowException
16
+
17
+
18
+ def conda_platform():
19
+ # Returns the conda platform for the Python interpreter
20
+ _32_bit_interpreter = sys.maxsize <= 2**32
21
+ if platform.system() == "Linux":
22
+ if _32_bit_interpreter:
23
+ return "linux-32"
24
+ else:
25
+ return "linux-64"
26
+ elif platform.system() == "Darwin":
27
+ if platform.machine() == "arm64":
28
+ return "osx-arm64"
29
+ elif _32_bit_interpreter:
30
+ return "osx-32"
31
+ else:
32
+ return "osx-64"
33
+
34
+
35
+ def pip_tags(python_version, mamba_platform):
36
+ # Returns a list of pip tags containing (implementation, platforms, abis) tuples
37
+ # assuming a CPython implementation for Python interpreter.
38
+
39
+ # Inspired by https://github.com/pypa/pip/blob/0442875a68f19b0118b0b88c747bdaf6b24853ba/src/pip/_internal/utils/compatibility_tags.py
40
+ py_version = tuple(map(int, python_version.split(".")[:2]))
41
+ if mamba_platform == "linux-64":
42
+ platforms = [
43
+ "manylinux%s_x86_64" % s
44
+ for s in (
45
+ "1",
46
+ "2010",
47
+ "2014",
48
+ "_2_17",
49
+ "_2_18",
50
+ "_2_19",
51
+ "_2_20",
52
+ "_2_21",
53
+ "_2_23",
54
+ "_2_24",
55
+ "_2_25",
56
+ "_2_26",
57
+ "_2_27",
58
+ )
59
+ ]
60
+ platforms.append("linux_x86_64")
61
+ elif mamba_platform == "osx-64":
62
+ platforms = tags.mac_platforms(arch="x86_64")
63
+ elif mamba_platform == "osx-arm64":
64
+ platforms = tags.mac_platforms(arch="arm64")
65
+ else:
66
+ raise MetaflowException("Unsupported platform: %s" % mamba_platform)
67
+
68
+ interpreter = "cp%s" % ("".join(map(str, py_version)))
69
+
70
+ abis = tags._cpython_abis(py_version)
71
+
72
+ supported = []
73
+ supported.extend(tags.cpython_tags(py_version, abis, platforms))
74
+ supported.extend(tags.compatible_tags(py_version, interpreter, platforms))
75
+ return supported
metaflow/task.py CHANGED
@@ -53,9 +53,6 @@ class MetaflowTask(object):
53
53
  self.ubf_context = ubf_context
54
54
 
55
55
  def _exec_step_function(self, step_function, input_obj=None):
56
- self.environment.validate_environment(
57
- self.console_logger, self.flow_datastore.TYPE
58
- )
59
56
  if input_obj is None:
60
57
  step_function()
61
58
  else:
metaflow/vendor.py CHANGED
@@ -13,6 +13,7 @@ WHITELIST = {
13
13
  "vendor_any.txt",
14
14
  "vendor_v3_5.txt",
15
15
  "vendor_v3_6.txt",
16
+ "vendor_v3_7.txt",
16
17
  "pip.LICENSE",
17
18
  }
18
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow
3
- Version: 2.9.10.1
3
+ Version: 2.10.2.6
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Netflix, Outerbounds & the Metaflow Community
6
6
  Author-email: help@outerbounds.co
@@ -15,13 +15,13 @@ metaflow/graph.py,sha256=ZPxyG8uwVMk5YYgX4pQEQaPZtZM5Wy-G4NtJK73IEuA,11818
15
15
  metaflow/includefile.py,sha256=BVQLYTLZN7m3ibFnsTU70dPj9YskxZeQb1FosV3k4-o,19721
16
16
  metaflow/integrations.py,sha256=LlsaoePRg03DjENnmLxZDYto3NwWc9z_PtU6nJxLldg,1480
17
17
  metaflow/lint.py,sha256=_kYAbAtsP7IG1Rd0FqNbo8I8Zs66_0WXbaZJFARO3dE,10394
18
- metaflow/metaflow_config.py,sha256=awgVLkQ3IZHdBH5Oyq9gRVYI3WYj_w-UVgRRp2bhuS4,19044
18
+ metaflow/metaflow_config.py,sha256=DGm4e0elTrNJuusKsMGy2HHOknEGty1kPkvDuwf0Dfk,19124
19
19
  metaflow/metaflow_config_funcs.py,sha256=pCaiQ2ez9wXixJI3ehmf3QiW9lUqFrZnBZx1my_0wIg,4874
20
- metaflow/metaflow_environment.py,sha256=2nzo9gyixcH74djRZm3ifDzO_xEKSaA1dOfsVOXSFoo,7279
20
+ metaflow/metaflow_environment.py,sha256=JdsmQsYp1SDQniQ0-q1mKRrmzSFfYuzrf6jLEHmyaiM,7352
21
21
  metaflow/metaflow_profile.py,sha256=jKPEW-hmAQO-htSxb9hXaeloLacAh41A35rMZH6G8pA,418
22
22
  metaflow/metaflow_version.py,sha256=mPQ6g_3XjNdi0NrxDzwlW8ZH0nMyYpwqmJ04P7TIdP0,4774
23
23
  metaflow/monitor.py,sha256=T0NMaBPvXynlJAO_avKtk8OIIRMyEuMAyF8bIp79aZU,5323
24
- metaflow/multicore_utils.py,sha256=6FFB1lbP54JIlFbu0e3j2ReOo_hQ9Q-vsb4PTaDWEf8,2741
24
+ metaflow/multicore_utils.py,sha256=wyJtMI4QyQsepRq9P_t_lRoOV-MLzZwnr0LXmR4VtbY,3015
25
25
  metaflow/package.py,sha256=vX86iJ2xXWcGrOmABEfgOHuNBMqCBAu7ukjg-e0PZf8,7319
26
26
  metaflow/parameters.py,sha256=d_op5psX6yAx-2demD-lffW8HJyiWu_Ft2HgvxuBUWw,13765
27
27
  metaflow/procpoll.py,sha256=22ppTUyaTYVn1UUG4RNG1LnCKBwRbaTmhYiYN_7OVN8,2861
@@ -29,14 +29,14 @@ metaflow/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  metaflow/pylint_wrapper.py,sha256=zzBY9YaSUZOGH-ypDKAv2B_7XcoyMZj-zCoCrmYqNRc,2865
30
30
  metaflow/runtime.py,sha256=QheT9uV2pBPROrFHo06HaFx-fCqaaQcMEK8_kef--pw,55864
31
31
  metaflow/tagging_util.py,sha256=ctyf0Q1gBi0RyZX6J0e9DQGNkNHblV_CITfy66axXB4,2346
32
- metaflow/task.py,sha256=1VURgRg6vU6igblBbgnaidyX_85CJ-KNoG46U028viI,25393
32
+ metaflow/task.py,sha256=summMHj2oQ37_Izp3c78FzS67jJkoKjtgLzYJUVXcs8,25278
33
33
  metaflow/tracing.py,sha256=I2WYpSVuU9N42WQtR0ELcSzch45QLhBHdXGWLLrG53E,1199
34
34
  metaflow/tracing_noop.py,sha256=q6hkFXDpLebtScj6rZhIAdWfMFxd1JAtErtYLTWWzgc,731
35
35
  metaflow/tracing_otel.py,sha256=pBkWgeN9JcqhInCWdutdAKNKJbLnsFf3YNlYcYI5NM4,5383
36
36
  metaflow/tracing_propagator.py,sha256=fdX2txx9RB1dFA9lZmzzAnoQZ_mInQPgVWJhAXUN6uc,2534
37
37
  metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
38
38
  metaflow/util.py,sha256=PFBFprn7W8I8gbA05JtcQfNV21m9xgRFr7EXfzBu95U,13077
39
- metaflow/vendor.py,sha256=FchtA9tH22JM-eEtJ2c9FpUdMn8sSb1VHuQS56EcdZk,5139
39
+ metaflow/vendor.py,sha256=LZgXrh7ZSDmD32D1T5jj3OKKpXIqqxKzdMAOc5V0SD4,5162
40
40
  metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
41
41
  metaflow/_vendor/click/__init__.py,sha256=FkyGDQ-cbiQxP_lxgUspyFYS48f2S_pTcfKPz-d_RMo,2463
42
42
  metaflow/_vendor/click/_bashcomplete.py,sha256=9J98IHQYmCAr2Jup6TDshUr5FJEen-AoQCZR0K5nKxQ,12309
@@ -55,6 +55,19 @@ metaflow/_vendor/click/termui.py,sha256=G7QBEKIepRIGLvNdGwBTYiEtSImRxvTO_AglVpyH
55
55
  metaflow/_vendor/click/testing.py,sha256=EUEsDUqNXFgCLhZ0ZFOROpaVDA5I_rijwnNPE6qICgA,12854
56
56
  metaflow/_vendor/click/types.py,sha256=wuubik4VqgqAw5dvbYFkDt-zSAx97y9TQXuXcVaRyQA,25045
57
57
  metaflow/_vendor/click/utils.py,sha256=4VEcJ7iEHwjnFuzEuRtkT99o5VG3zqSD7Q2CVzv13WU,15940
58
+ metaflow/_vendor/packaging/__init__.py,sha256=7BlJ_DcIt1zv01UQcZLozidczzNcivKj66zIBkRL3R4,501
59
+ metaflow/_vendor/packaging/_elffile.py,sha256=hbmK8OD6Z7fY6hwinHEUcD1by7czkGiNYu7ShnFEk2k,3266
60
+ metaflow/_vendor/packaging/_manylinux.py,sha256=uZ821PBqQrokhUbwe7E0UodEraMHqzoSgTvfJ8MIl30,8813
61
+ metaflow/_vendor/packaging/_musllinux.py,sha256=mvPk7FNjjILKRLIdMxR7IvJ1uggLgCszo-L9rjfpi0M,2524
62
+ metaflow/_vendor/packaging/_parser.py,sha256=jjFjSqNf7W2-Ta6YUkywK0P4d2i0Bz_MqLOfl7O1Tkw,9399
63
+ metaflow/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
64
+ metaflow/_vendor/packaging/_tokenizer.py,sha256=czGibL-4oPofx1pCSt_hrozNbHlOPrqGv6m-0d-iTdo,5148
65
+ metaflow/_vendor/packaging/markers.py,sha256=HDPXE0_MPBSwsw_9upez8t8mdrqUGrgiOG_qyQy-W30,8161
66
+ metaflow/_vendor/packaging/requirements.py,sha256=4nOKheaBbVEQXTGSqaOGTy1Tkg7J_sEno3u8jxC-baw,3264
67
+ metaflow/_vendor/packaging/specifiers.py,sha256=ofkLIqBoWDsGauqvGFhbaMMMUmmwQLsXjv38z9_Be88,39080
68
+ metaflow/_vendor/packaging/tags.py,sha256=fOKnZVfiU3oc9CPSzjJUsMk5VTfgOfpNhWobUH0sAlg,18065
69
+ metaflow/_vendor/packaging/utils.py,sha256=es0cCezKspzriQ-3V88h3yJzxz028euV2sUwM61kE-o,4355
70
+ metaflow/_vendor/packaging/version.py,sha256=0zkwY8_t0OX8lvLTaIGdc9g2WvqdEKpmGxrS1DvgmS4,16312
58
71
  metaflow/_vendor/v3_5/__init__.py,sha256=98e_aAZvsdPvFOT7hg_UM6i7DGHOLEdaeFiGVZLMRqA,12
59
72
  metaflow/_vendor/v3_5/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
60
73
  metaflow/_vendor/v3_5/importlib_metadata/__init__.py,sha256=sTmHo2wUteZGoRUkgDAhqUob8PIGzFxZ3BgdP4rFC3Q,19617
@@ -70,6 +83,8 @@ metaflow/_vendor/v3_6/importlib_metadata/_functools.py,sha256=PsY2-4rrKX4RVeRC1o
70
83
  metaflow/_vendor/v3_6/importlib_metadata/_itertools.py,sha256=cvr_2v8BRbxcIl5x5ldfqdHjhI8Yi8s8yk50G_nm6jQ,2068
71
84
  metaflow/_vendor/v3_6/importlib_metadata/_meta.py,sha256=_F48Hu_jFxkfKWz5wcYS8vO23qEygbVdF9r-6qh-hjE,1154
72
85
  metaflow/_vendor/v3_6/importlib_metadata/_text.py,sha256=HCsFksZpJLeTP3NEk_ngrAeXVRRtTrtyh9eOABoRP4A,2166
86
+ metaflow/_vendor/v3_7/__init__.py,sha256=98e_aAZvsdPvFOT7hg_UM6i7DGHOLEdaeFiGVZLMRqA,12
87
+ metaflow/_vendor/v3_7/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
73
88
  metaflow/client/__init__.py,sha256=1GtQB4Y_CBkzaxg32L1syNQSlfj762wmLrfrDxGi1b8,226
74
89
  metaflow/client/core.py,sha256=MpJABOUiXSl5AFxu3gOMSPUnt0JAEg7xhMBGI13RUtg,69283
75
90
  metaflow/client/filecache.py,sha256=QdD1sW6w4Nnza-ioz4I1fEZI843X33AFIV3eSxq-cuU,14868
@@ -96,11 +111,11 @@ metaflow/metadata/heartbeat.py,sha256=9XJs4SV4R4taxUSMOKmRChnJCQ5a5o0dzRZ1iICWr9
96
111
  metaflow/metadata/metadata.py,sha256=oPm87-sQmyKWKfcFOsJOFXwo_clx9sCJ2YzdM32c6VQ,26061
97
112
  metaflow/metadata/util.py,sha256=gGJLnTMOcVwHH5o278YT1qYoqSj-5IjRpbv2F-lUNAE,1257
98
113
  metaflow/mflog/__init__.py,sha256=9iMMn2xYB0oaDXXcInxa9AdDqeVBeiJeB3klnqGkyL0,5983
99
- metaflow/mflog/mflog.py,sha256=z8o3vcn9hCcrLcEU63wPj19Qtg_9xi61Uv_f3xZcdro,4257
114
+ metaflow/mflog/mflog.py,sha256=VebXxqitOtNAs7VJixnNfziO_i_urG7bsJ5JiB5IXgY,4370
100
115
  metaflow/mflog/save_logs.py,sha256=ZBAF4BMukw4FMAC7odpr9OI2BC_2petPtDX0ca6srC4,2352
101
116
  metaflow/mflog/save_logs_periodically.py,sha256=2Uvk9hi-zlCqXxOQoXmmjH1SCugfw6eG6w70WgfI-ho,1256
102
117
  metaflow/mflog/tee.py,sha256=wTER15qeHuiRpCkOqo-bd-r3Gj-EVlf3IvWRCA4beW4,887
103
- metaflow/plugins/__init__.py,sha256=KsnXHu0XM_YNaW8nRGUdPfoEQ3B2W9Ga4Lb54oTwxBk,5980
118
+ metaflow/plugins/__init__.py,sha256=NYyziiqHIAxOZYaQkjzeB54TMO1g2Ysf8vhC34pYWwU,6147
104
119
  metaflow/plugins/catch_decorator.py,sha256=wAqyYZPQcVU1KA0cTq2Jb1doaoG3z10G9SHtt2YmrJY,4050
105
120
  metaflow/plugins/debug_logger.py,sha256=mcF5HYzJ0NQmqCMjyVUk3iAP-heroHRIiVWQC6Ha2-I,879
106
121
  metaflow/plugins/debug_monitor.py,sha256=Md5X_sDOSssN9pt2D8YcaIjTK5JaQD55UAYTcF6xYF0,1099
@@ -116,7 +131,7 @@ metaflow/plugins/tag_cli.py,sha256=xXlhv6Y9kU0BHvNWntQ9QoG6swBVww-FzrpeFt_m_98,1
116
131
  metaflow/plugins/test_unbounded_foreach_decorator.py,sha256=cB_2OWb38eYfmbVck72ZwU0qgzi6hqJXZAxglpHU_qg,5216
117
132
  metaflow/plugins/timeout_decorator.py,sha256=9aAMualSW1AzUV--tmkGR5rxQ_dBZIWtCKXbQ1_Pt9A,3598
118
133
  metaflow/plugins/airflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
- metaflow/plugins/airflow/airflow.py,sha256=kvV5YT1NkWOdXt8DQ3vBGyhRNf2C5c6ciyvD32s8RqA,31445
134
+ metaflow/plugins/airflow/airflow.py,sha256=ydSU7EN50DU9eIoSx6QaXlGZZy8zh3TKjytuiLWpiTw,31856
120
135
  metaflow/plugins/airflow/airflow_cli.py,sha256=QiJqkvBDoCKKbNCe90tTIbaLP3Vxqdzxh5EoAJDpskY,14439
121
136
  metaflow/plugins/airflow/airflow_decorator.py,sha256=H9-QnRP4x8tSomLmmpGeuVUI48-CxHR7tlvn_ceX1Zs,1772
122
137
  metaflow/plugins/airflow/airflow_utils.py,sha256=qd6lV2X4VpCO2sLsRc35JMOU4DVz_tQacrM_wWNkQug,28865
@@ -129,20 +144,20 @@ metaflow/plugins/airflow/sensors/base_sensor.py,sha256=lgbd9JjfDBjDRT8-oEnPnFNst
129
144
  metaflow/plugins/airflow/sensors/external_task_sensor.py,sha256=GAWfc2GJqSSAKOJyHSdMea1-tu1cLgEWlRIfe3fti3Y,6048
130
145
  metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=zym4mUm_f_gBsvHHVqGtX_OOxRjM3WG217gaT-XDBnk,3274
131
146
  metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
- metaflow/plugins/argo/argo_client.py,sha256=xEKUjkqaYfLQ0KWmeA0owuMhmwJU9SGoGrwUATbP3CM,15266
133
- metaflow/plugins/argo/argo_events.py,sha256=qayNX6ytOUx0NGQ3H1dwImV1Cko8g6bvECVybEGUu04,5832
134
- metaflow/plugins/argo/argo_workflows.py,sha256=XAfIyfG0X-wzzURmk95hhytiDu_Zkrv-AoTPTWNDmbo,114023
135
- metaflow/plugins/argo/argo_workflows_cli.py,sha256=edHmmKlaFNFH0yi0YLdnncCJaVAb5DaQAk2Gim1MJrI,31914
147
+ metaflow/plugins/argo/argo_client.py,sha256=lkVfUuH4rT1ONBvPRWZwQoMDUphHitFxCYWdXRU3zZY,15855
148
+ metaflow/plugins/argo/argo_events.py,sha256=Pt5L7DhxxWMES81JS8kCh4Al4w7k-uKeH99FChBPp1o,6002
149
+ metaflow/plugins/argo/argo_workflows.py,sha256=tr00xdYl_TTT8J0E1q3SnNpREAClyz7ZJIcTjhyRKlw,116131
150
+ metaflow/plugins/argo/argo_workflows_cli.py,sha256=oXCSU6TdkF-ptQTXux_W2KAwL-LMJjpMvoxLG9Et0o8,32350
136
151
  metaflow/plugins/argo/argo_workflows_decorator.py,sha256=CfKVoHCOsCCQMghhPE30xw15gacwp3hR23HCo9ZZFVg,6580
137
152
  metaflow/plugins/argo/process_input_paths.py,sha256=4SiUoxbnTX4rCt0RSLcxG5jysbyd8oU-5JT0UOgy-vk,555
138
153
  metaflow/plugins/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
154
  metaflow/plugins/aws/aws_client.py,sha256=mO8UD6pxFaOnxDb3hTP3HB7Gqb_ZxoR-76LT683WHvI,4036
140
155
  metaflow/plugins/aws/aws_utils.py,sha256=0bb4Hm7RxWbwMYpK-6D4ac-YFnvDanUjMDSjw1ikP40,6946
141
156
  metaflow/plugins/aws/batch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
- metaflow/plugins/aws/batch/batch.py,sha256=FD_0BiJRPoZFqD6dtJje-wWAkpDQFqnfHaCzstjBIq8,16677
143
- metaflow/plugins/aws/batch/batch_cli.py,sha256=jprzV_wdb0GcwxVNpDxKAfHfeYJlB1D5BrRDosqlQQo,10758
157
+ metaflow/plugins/aws/batch/batch.py,sha256=7E49swzpO97Mk3MQmFfFQT2oAsjt0uIXNWBvZp684lw,17047
158
+ metaflow/plugins/aws/batch/batch_cli.py,sha256=T0fCyi87vtcmaGM16FSjeNI-lLa9IVlm7xErG3GeWrA,10735
144
159
  metaflow/plugins/aws/batch/batch_client.py,sha256=3BWktFmpVgvI5wF7PSGxd8qTGPn3eyPhcWL916aIDGo,23956
145
- metaflow/plugins/aws/batch/batch_decorator.py,sha256=3uQojlfgbfWHQtrYi56FIJPKCuVwTaouV8b5ZaJzBUc,16170
160
+ metaflow/plugins/aws/batch/batch_decorator.py,sha256=cR-5PV9lLhqdxKKFBeGJZaiHFF-b6aop_XW9j4CwPmo,15626
146
161
  metaflow/plugins/aws/secrets_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
147
162
  metaflow/plugins/aws/secrets_manager/aws_secrets_manager_secrets_provider.py,sha256=JtFUVu00Cg0FzAizgrPLXmrMqsT7YeQMkQlgeivUxcE,7986
148
163
  metaflow/plugins/aws/step_functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -184,12 +199,6 @@ metaflow/plugins/cards/card_modules/chevron/main.py,sha256=FKpDW4PS2dYshgkm6yIxr
184
199
  metaflow/plugins/cards/card_modules/chevron/metadata.py,sha256=gQDpB9KezW9Mcv-n9K2Pt1akjiPGG1zYB5YPdQ0FlNc,19
185
200
  metaflow/plugins/cards/card_modules/chevron/renderer.py,sha256=dm5ufR9-qnx94D9BtV7q_64oqYUpwdCRgBTcjBRkZyM,13938
186
201
  metaflow/plugins/cards/card_modules/chevron/tokenizer.py,sha256=lQU9OELUE9a5Xu4snGhEV_YTT34iyUHVBuM1YO016Sw,7400
187
- metaflow/plugins/conda/__init__.py,sha256=Zamj1DqbZDhkXnq9jhmEGVWK18s1Js8e5jA4eyhL4k8,2839
188
- metaflow/plugins/conda/batch_bootstrap.py,sha256=_7aQ-YAHlABC6aloRS5m17p7WIv_qJdWmZP7UQCFdd8,4693
189
- metaflow/plugins/conda/conda.py,sha256=-CNTWjxmcbLoqbrwY8AJHwbQjuxvd-NSjChnZ95_pFc,8804
190
- metaflow/plugins/conda/conda_environment.py,sha256=KaLhyuKq0Doiz1DlTsckS7mJe_13aQkCVTMxMllmJac,5032
191
- metaflow/plugins/conda/conda_flow_decorator.py,sha256=A9kU9DayjNT3df7T415mlFocZ5lVnJkhpNyzMZv8-UU,1189
192
- metaflow/plugins/conda/conda_step_decorator.py,sha256=sf5Hx3PIabAaTBfYlSetWoOI526yiAVYIsZFt6uXzfg,15719
193
202
  metaflow/plugins/datastores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
194
203
  metaflow/plugins/datastores/azure_storage.py,sha256=lsQ6G-nz1j0_O3sRipqMpu-A-hJzg5LhaGpCH-Sbtgg,16317
195
204
  metaflow/plugins/datastores/gs_storage.py,sha256=1dzkQPi6y5xNeZbmdCeh9ef5NK1yweTs3AJYcBwd63k,9705
@@ -198,19 +207,19 @@ metaflow/plugins/datastores/s3_storage.py,sha256=W3PIDbDyk67ecDfRf10mQeRGgaRq4zc
198
207
  metaflow/plugins/datatools/__init__.py,sha256=ge4L16OBQLy2J_MMvoHg3lMfdm-MluQgRWoyZ5GCRnk,1267
199
208
  metaflow/plugins/datatools/local.py,sha256=67hx3O_vInERlL0aJV0Sd-jUTd_2DOw4sJ4-IyEKNKM,4213
200
209
  metaflow/plugins/datatools/s3/__init__.py,sha256=14tr9fPjN3ULW5IOfKHeG7Uhjmgm7LMtQHfz1SFv-h8,248
201
- metaflow/plugins/datatools/s3/s3.py,sha256=IawimApVJ3OvYZX9EmLyh1BgDJv-_SAVQePrBD29N-c,65350
210
+ metaflow/plugins/datatools/s3/s3.py,sha256=r6evzNxwt4VuWadVhhUuCpnWLxc8lB9kS0upxr-CVeQ,65542
202
211
  metaflow/plugins/datatools/s3/s3op.py,sha256=sLtofwPB1U99IR1ATFvKmUDgUh8-YPWAsKyANdTEekw,43358
203
212
  metaflow/plugins/datatools/s3/s3tail.py,sha256=boQjQGQMI-bvTqcMP2y7uSlSYLcvWOy7J3ZUaF78NAA,2597
204
213
  metaflow/plugins/datatools/s3/s3util.py,sha256=FgRgaVmEq7-i2dV7q8XK5w5PfFt-xJjZa8WrK8IJfdI,3769
205
214
  metaflow/plugins/env_escape/__init__.py,sha256=8NhVmk_OncuzVIT_TdwDcZeunfcjlI8iGfi6cgPO_xQ,8771
206
- metaflow/plugins/env_escape/client.py,sha256=3eVmQTrqzTs8XDJrUs77573aqsywt1PtAcUrXP0tAoI,17615
215
+ metaflow/plugins/env_escape/client.py,sha256=K4de-oNuTsIbt6gI2jBk6ao2uKlEWwHgOLSxWQMsgig,18663
207
216
  metaflow/plugins/env_escape/client_modules.py,sha256=dhVEQ07q_pK2w7esSAr1w5cpBxe8G6dbYVb5iQGp2b0,10727
208
217
  metaflow/plugins/env_escape/consts.py,sha256=2he2wmaS-maEXwtsFdUnu-V712F6yYsfaIrAh0jFZ7A,978
209
218
  metaflow/plugins/env_escape/data_transferer.py,sha256=wm1Aqf0rTWaq8JgqpiRN0g3N3hX7YAMuhCLRrbOP_9E,12696
210
219
  metaflow/plugins/env_escape/exception_transferer.py,sha256=DNaOxzcP6ob0hMXR0Jcl1Hnm9KOD0PcAPnSgjskGU74,8745
211
220
  metaflow/plugins/env_escape/override_decorators.py,sha256=U_rKfyW60nhnr3Y-48MtCOifuNhN9Bl3CmVUeP0xSGQ,3556
212
221
  metaflow/plugins/env_escape/server.py,sha256=HP-KXH4uFJAugzPkS9CVPaOUuDbGVqNV91yCfrcagcA,19282
213
- metaflow/plugins/env_escape/stub.py,sha256=K7eXwWv7-YAxMmioRD635swBbN2sAs0YAvoNW5HFHTg,11038
222
+ metaflow/plugins/env_escape/stub.py,sha256=RjJkVH0VWy-1LvWfUKDJZ6hPjPZIPsBIp4yeBgT7OJQ,10851
214
223
  metaflow/plugins/env_escape/utils.py,sha256=q91oeiBFVjiTYcLvZ1TNJaSUZxDL89_N5lreu5FUqoA,810
215
224
  metaflow/plugins/env_escape/communication/__init__.py,sha256=Ff5AB88gOAvBzN2pp_2YNiD0PhUIt2SFE8nyOAKnxXg,38
216
225
  metaflow/plugins/env_escape/communication/bytestream.py,sha256=weQBm-c6yPlGv1TAmQbYanqvQ0IRDh7x_6hZPvWh_Uw,1866
@@ -232,14 +241,23 @@ metaflow/plugins/gcp/gs_tail.py,sha256=Jl_wvnzU7dub07A-DOAuP5FeccNIrPM-CeL1xKFs1
232
241
  metaflow/plugins/gcp/gs_utils.py,sha256=YgtzUn9A0DlYRWR75h533RVYZsqR7eEZPRRR8QSFZik,2023
233
242
  metaflow/plugins/gcp/includefile_support.py,sha256=vIDeR-MiJuUh-2S2pV7Z7FBkhIWwtHXaRrj76MWGRiY,3869
234
243
  metaflow/plugins/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
235
- metaflow/plugins/kubernetes/kubernetes.py,sha256=gz_M92aot0UkYiQl-WTyPn2Cfuy5eoe2_KfbW5Fax2I,16772
236
- metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=T71AjdoM5KNKvTtkd--ygl_9zooQKFrpkesKGuHQqCk,8961
244
+ metaflow/plugins/kubernetes/kubernetes.py,sha256=h6C3OOiNC1LjjaM52RdpFhkQmjGFIQ5JWuC-DTv7F04,17301
245
+ metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=Y8XNVTumxGkYLs_pFE04w8X0zCEvCSNaIBQx21zETC8,8942
237
246
  metaflow/plugins/kubernetes/kubernetes_client.py,sha256=dV3TEGQMBbljmv6Gs1EKfmHTorKt21lhSiYsNx0To08,1901
238
- metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=ig2KkmsqZoSqIsddHKe_CGQF5G2T-Il1momOqn8X3TA,20776
247
+ metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=HTDM5Z-04nQK75vFXFLdW1a4dWSEHEJerKqKc65khMA,21184
239
248
  metaflow/plugins/kubernetes/kubernetes_job.py,sha256=XF8_dXhoEyCys-aIZliCdnnwmkXfXQudFJNAp7NM9Oc,30723
240
249
  metaflow/plugins/metadata/__init__.py,sha256=q5OifpVipqhZuyrXBp9YIJN_jUov14_CNMveim9L8Rs,86
241
250
  metaflow/plugins/metadata/local.py,sha256=YhLJC5zjVJrvQFIyQ92ZBByiUmhCC762RUX7ITX12O8,22428
242
251
  metaflow/plugins/metadata/service.py,sha256=GLZETGlTEx0FJJ8P-ExYGFligKpEOuypR0u5vMCT_cA,20202
252
+ metaflow/plugins/pypi/__init__.py,sha256=0YFZpXvX7HCkyBFglatual7XGifdA1RwC3U4kcizyak,1037
253
+ metaflow/plugins/pypi/bootstrap.py,sha256=qFaGEuWsF66wa4ddIjuT-UMOblXBcdeexWayPkZT834,4791
254
+ metaflow/plugins/pypi/conda_decorator.py,sha256=z8PNmVBJJ_eeNMY6qEHfAlJ8dichFtE0KxZxuuJXddo,13533
255
+ metaflow/plugins/pypi/conda_environment.py,sha256=J57EOfDo_2LCm_KZniPdt42BynzyeJnLGuEfDrHBCM0,16217
256
+ metaflow/plugins/pypi/micromamba.py,sha256=EPcEWgfbOMxajYSiV2gb4z4p-M5D_XWE3L0xZl8n7lI,11890
257
+ metaflow/plugins/pypi/pip.py,sha256=k75dl45dauJ0ofAdIaJVZzboHpiuMAWgleM5hEsXBl4,7924
258
+ metaflow/plugins/pypi/pypi_decorator.py,sha256=3I9Byc0ZH9R36g0KELRbqFkocCujbgmju7iljYaYSTM,5413
259
+ metaflow/plugins/pypi/pypi_environment.py,sha256=FYMg8kF3lXqcLfRYWD83a9zpVjcoo_TARqMGZ763rRk,230
260
+ metaflow/plugins/pypi/utils.py,sha256=dYr9Flsa2cMnuMl4IL-Zhm7tiUoK4SmgiZ5qjR6LSag,2303
243
261
  metaflow/plugins/secrets/__init__.py,sha256=mhJaN2eMS_ZZVewAMR2E-JdP5i0t3v9e6Dcwd-WpruE,310
244
262
  metaflow/plugins/secrets/inline_secrets_provider.py,sha256=EChmoBGA1i7qM3jtYwPpLZDBybXLergiDlN63E0u3x8,294
245
263
  metaflow/plugins/secrets/secrets_decorator.py,sha256=Y41XCOEGt7asxx6FEOBdKMqYFlU_jcA5u7erHN8DqJM,10514
@@ -271,9 +289,9 @@ metaflow/tutorials/07-worldview/README.md,sha256=5vQTrFqulJ7rWN6r20dhot9lI2sVj9W
271
289
  metaflow/tutorials/07-worldview/worldview.ipynb,sha256=ztPZPI9BXxvW1QdS2Tfe7LBuVzvFvv0AToDnsDJhLdE,2237
272
290
  metaflow/tutorials/08-autopilot/README.md,sha256=GnePFp_q76jPs991lMUqfIIh5zSorIeWznyiUxzeUVE,1039
273
291
  metaflow/tutorials/08-autopilot/autopilot.ipynb,sha256=DQoJlILV7Mq9vfPBGW-QV_kNhWPjS5n6SJLqePjFYLY,3191
274
- ob_metaflow-2.9.10.1.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
275
- ob_metaflow-2.9.10.1.dist-info/METADATA,sha256=L5j3aT0hboKtfnlRp1uWZqtAwQOAqqQLtjN_IQp5CnM,5061
276
- ob_metaflow-2.9.10.1.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
277
- ob_metaflow-2.9.10.1.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
278
- ob_metaflow-2.9.10.1.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
279
- ob_metaflow-2.9.10.1.dist-info/RECORD,,
292
+ ob_metaflow-2.10.2.6.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
293
+ ob_metaflow-2.10.2.6.dist-info/METADATA,sha256=wG48Bi6r3Exgd1JZcPs3N79aZSu6FjjuajiQfAMBQ0k,5061
294
+ ob_metaflow-2.10.2.6.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
295
+ ob_metaflow-2.10.2.6.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
296
+ ob_metaflow-2.10.2.6.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
297
+ ob_metaflow-2.10.2.6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.40.0)
2
+ Generator: bdist_wheel (0.41.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
@@ -1,90 +0,0 @@
1
- import errno
2
- import os
3
- import json
4
- import fcntl
5
-
6
- from metaflow.exception import MetaflowException, MetaflowInternalError
7
- from metaflow.metaflow_config import (
8
- CONDA_PACKAGE_S3ROOT,
9
- DATASTORE_SYSROOT_S3,
10
- CONDA_PACKAGE_AZUREROOT,
11
- CONDA_PACKAGE_GSROOT,
12
- DATASTORE_SYSROOT_AZURE,
13
- DATASTORE_SYSROOT_GS,
14
- )
15
-
16
- CONDA_MAGIC_FILE = "conda.dependencies"
17
-
18
-
19
- def get_conda_manifest_path(ds_root, flow_name):
20
- return os.path.join(ds_root, flow_name, CONDA_MAGIC_FILE)
21
-
22
-
23
- def read_conda_manifest(ds_root, flow_name):
24
- path = get_conda_manifest_path(ds_root, flow_name)
25
- if os.path.exists(path) and os.path.getsize(path) > 0:
26
- with open(path) as f:
27
- return json.load(f)
28
- else:
29
- return {}
30
-
31
-
32
- def write_to_conda_manifest(ds_root, flow_name, key, value):
33
- path = get_conda_manifest_path(ds_root, flow_name)
34
- try:
35
- os.makedirs(os.path.dirname(path))
36
- except OSError as x:
37
- if x.errno != errno.EEXIST:
38
- raise
39
- with os.fdopen(os.open(path, os.O_RDWR | os.O_CREAT), "r+") as f:
40
- try:
41
- fcntl.flock(f, fcntl.LOCK_EX)
42
- data = {}
43
- if os.path.getsize(path) > 0:
44
- f.seek(0)
45
- data = json.load(f)
46
- data[key] = value
47
- f.seek(0)
48
- json.dump(data, f)
49
- f.truncate()
50
- except IOError as e:
51
- if e.errno != errno.EAGAIN:
52
- raise
53
- finally:
54
- fcntl.flock(f, fcntl.LOCK_UN)
55
-
56
-
57
- def get_conda_package_root(datastore_type):
58
- # Yes, code duplication. But easier to read this way, at N=2
59
- if datastore_type == "s3":
60
- if CONDA_PACKAGE_S3ROOT is None:
61
- if DATASTORE_SYSROOT_S3 is None:
62
- raise MetaflowException(
63
- msg="METAFLOW_DATASTORE_SYSROOT_S3 must be set!"
64
- )
65
- return "%s/conda" % DATASTORE_SYSROOT_S3
66
- else:
67
- return CONDA_PACKAGE_S3ROOT
68
- elif datastore_type == "azure":
69
- if CONDA_PACKAGE_AZUREROOT is None:
70
- if DATASTORE_SYSROOT_AZURE is None:
71
- raise MetaflowException(
72
- msg="METAFLOW_DATASTORE_SYSROOT_AZURE must be set!"
73
- )
74
- return "%s/conda" % DATASTORE_SYSROOT_AZURE
75
- else:
76
- return CONDA_PACKAGE_AZUREROOT
77
- elif datastore_type == "gs":
78
- if CONDA_PACKAGE_GSROOT is None:
79
- if DATASTORE_SYSROOT_GS is None:
80
- raise MetaflowException(
81
- msg="METAFLOW_DATASTORE_SYSROOT_GS must be set!"
82
- )
83
- return "%s/conda" % DATASTORE_SYSROOT_GS
84
- else:
85
- return CONDA_PACKAGE_GSROOT
86
- else:
87
- raise MetaflowInternalError(
88
- msg="Unsupported storage backend '%s' for working with Conda"
89
- % (datastore_type,)
90
- )
@@ -1,104 +0,0 @@
1
- import json
2
- import os
3
- import shutil
4
- import sys
5
-
6
- from metaflow.exception import MetaflowException
7
- from metaflow.metaflow_config import DATASTORE_LOCAL_DIR
8
-
9
- from ..env_escape import generate_trampolines, ENV_ESCAPE_PY
10
-
11
- from . import CONDA_MAGIC_FILE, get_conda_package_root
12
-
13
-
14
- def bootstrap_environment(flow_name, env_id, datastore_type):
15
- setup_conda_manifest(flow_name)
16
- packages = download_conda_packages(flow_name, env_id, datastore_type)
17
- install_conda_environment(env_id, packages)
18
-
19
-
20
- def setup_conda_manifest(flow_name):
21
- manifest_folder = os.path.join(os.getcwd(), DATASTORE_LOCAL_DIR, flow_name)
22
- if not os.path.exists(manifest_folder):
23
- os.makedirs(manifest_folder)
24
- shutil.move(
25
- os.path.join(os.getcwd(), CONDA_MAGIC_FILE),
26
- os.path.join(manifest_folder, CONDA_MAGIC_FILE),
27
- )
28
-
29
-
30
- def download_conda_packages(flow_name, env_id, datastore_type):
31
- pkgs_folder = os.path.join(os.getcwd(), "pkgs")
32
- if not os.path.exists(pkgs_folder):
33
- os.makedirs(pkgs_folder)
34
- # NOTE: if two runs use the same DATASTORE_LOCAL_DIR but different cloud based
35
- # datastore roots (e.g. a different DATASTORE_SYSROOT_AZURE), then this breaks.
36
- # This shared local manifest CONDA_MAGIC_FILE will say that cache_urls exist,
37
- # but those URLs will not actually point to any real objects in the datastore
38
- # for the second run.
39
- manifest_folder = os.path.join(os.getcwd(), DATASTORE_LOCAL_DIR, flow_name)
40
- with open(os.path.join(manifest_folder, CONDA_MAGIC_FILE)) as f:
41
- env = json.load(f)[env_id]
42
-
43
- # git commit fbd6c9d8a819fad647958c9fa869153ab37bc0ca introduced support for
44
- # Microsoft Azure and made a minor tweak to how conda packages are uploaded. As
45
- # a result, the URL stored by Metaflow no longer includes the datastore root (
46
- # which arguably helps with portability of datastore). To ensure backwards
47
- # compatibility, we add this small check here that checks for the prefix of
48
- # the URLs before downloading them appropriately. Of course, a change can be
49
- # made to allow the datastore to consume full URLs as well instead of this
50
- # change, but given that change's far-reaching consequences, we introduce this
51
- # workaround.
52
- # https://github.com/Netflix/metaflow/commit/fbd6c9d8a819fad647958c9fa869153ab37bc0ca#diff-1ecbb40de8aba5b41e149987de4aa797a47f4498e5e4e3f63a53d4283dcdf941R198
53
- if env["cache_urls"][0].startswith("s3://"):
54
- from metaflow.plugins.datatools import S3
55
-
56
- with S3() as s3:
57
- for pkg in s3.get_many(env["cache_urls"]):
58
- shutil.move(
59
- pkg.path, os.path.join(pkgs_folder, os.path.basename(pkg.key))
60
- )
61
- else:
62
- # Import DATASTORES dynamically... otherwise, circular import
63
- from metaflow.plugins import DATASTORES
64
-
65
- storage_impl = [d for d in DATASTORES if d.TYPE == datastore_type]
66
- if len(storage_impl) == 0:
67
- raise MetaflowException(
68
- msg="Downloading conda packages from %s datastore is not yet implemented!"
69
- % datastore_type
70
- )
71
- conda_package_root = get_conda_package_root(datastore_type)
72
- storage = storage_impl[0](conda_package_root)
73
- with storage.load_bytes(env["cache_urls"]) as load_result:
74
- for key, tmpfile, _ in load_result:
75
- shutil.move(
76
- tmpfile, os.path.join(pkgs_folder, os.path.basename(key))
77
- )
78
-
79
- return env["order"]
80
-
81
-
82
- def install_conda_environment(env_id, packages):
83
- args = [
84
- "if ! type conda >/dev/null 2>&1; \
85
- then wget --no-check-certificate https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh -O Miniforge3.sh >/dev/null 2>&1; \
86
- bash ./Miniforge3.sh -b >/dev/null 2>&1; export PATH=$PATH:$HOME/miniforge3/bin; fi",
87
- "cd {0}".format(os.path.join(os.getcwd(), "pkgs")),
88
- "conda create --yes --no-default-packages -p {0} --no-deps {1} >/dev/null 2>&1".format(
89
- os.path.join(os.getcwd(), env_id), " ".join(packages)
90
- ),
91
- "cd {0}".format(os.getcwd()),
92
- ]
93
- if ENV_ESCAPE_PY is not None:
94
- cwd = os.getcwd()
95
- generate_trampolines(cwd)
96
- # print("Environment escape will use %s as the interpreter" % ENV_ESCAPE_PY)
97
- else:
98
- pass
99
- # print("Could not find a environment escape interpreter")
100
- os.system(" && ".join(args))
101
-
102
-
103
- if __name__ == "__main__":
104
- bootstrap_environment(sys.argv[1], sys.argv[2], sys.argv[3])