metaflow 2.15.10__py2.py3-none-any.whl → 2.15.12__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.
- metaflow/cmd/develop/stub_generator.py +8 -9
- metaflow/includefile.py +2 -2
- metaflow/metaflow_config.py +9 -1
- metaflow/plugins/argo/argo_workflows.py +2 -2
- metaflow/plugins/datastores/azure_storage.py +3 -1
- metaflow/plugins/datastores/gs_storage.py +6 -2
- metaflow/plugins/datatools/s3/s3op.py +5 -8
- metaflow/plugins/pypi/conda_environment.py +68 -10
- metaflow/plugins/pypi/micromamba.py +5 -0
- metaflow/plugins/pypi/pip.py +5 -0
- metaflow/version.py +1 -1
- {metaflow-2.15.10.dist-info → metaflow-2.15.12.dist-info}/METADATA +2 -2
- {metaflow-2.15.10.dist-info → metaflow-2.15.12.dist-info}/RECORD +20 -20
- {metaflow-2.15.10.dist-info → metaflow-2.15.12.dist-info}/WHEEL +1 -1
- {metaflow-2.15.10.data → metaflow-2.15.12.data}/data/share/metaflow/devtools/Makefile +0 -0
- {metaflow-2.15.10.data → metaflow-2.15.12.data}/data/share/metaflow/devtools/Tiltfile +0 -0
- {metaflow-2.15.10.data → metaflow-2.15.12.data}/data/share/metaflow/devtools/pick_services.sh +0 -0
- {metaflow-2.15.10.dist-info → metaflow-2.15.12.dist-info}/entry_points.txt +0 -0
- {metaflow-2.15.10.dist-info → metaflow-2.15.12.dist-info}/licenses/LICENSE +0 -0
- {metaflow-2.15.10.dist-info → metaflow-2.15.12.dist-info}/top_level.txt +0 -0
@@ -1191,22 +1191,21 @@ class StubGenerator:
|
|
1191
1191
|
+ "}"
|
1192
1192
|
)
|
1193
1193
|
elif isinstance(default_value, str):
|
1194
|
-
return
|
1194
|
+
return repr(default_value) # Use repr() for proper escaping
|
1195
|
+
elif isinstance(default_value, (int, float, bool)):
|
1196
|
+
return str(default_value)
|
1197
|
+
elif default_value is None:
|
1198
|
+
return "None"
|
1195
1199
|
else:
|
1196
|
-
return
|
1197
|
-
|
1198
|
-
elif str(default_value).startswith("<"):
|
1200
|
+
return "..." # For other built-in types not explicitly handled
|
1201
|
+
elif inspect.isclass(default_value) or inspect.isfunction(default_value):
|
1199
1202
|
if default_value.__module__ == "builtins":
|
1200
1203
|
return default_value.__name__
|
1201
1204
|
else:
|
1202
1205
|
self._typing_imports.add(default_value.__module__)
|
1203
1206
|
return ".".join([default_value.__module__, default_value.__name__])
|
1204
1207
|
else:
|
1205
|
-
return
|
1206
|
-
str(default_value)
|
1207
|
-
if not isinstance(default_value, str)
|
1208
|
-
else '"' + default_value + '"'
|
1209
|
-
)
|
1208
|
+
return "..." # For complex objects like class instances
|
1210
1209
|
|
1211
1210
|
buff = StringIO()
|
1212
1211
|
if sign is None and func is None:
|
metaflow/includefile.py
CHANGED
@@ -459,7 +459,7 @@ class UploaderV2:
|
|
459
459
|
@classmethod
|
460
460
|
def encode_url(cls, url_type, url, **kwargs):
|
461
461
|
return_value = {
|
462
|
-
"note": "Internal representation of IncludeFile
|
462
|
+
"note": "Internal representation of IncludeFile",
|
463
463
|
"type": cls.file_type,
|
464
464
|
"sub-type": url_type,
|
465
465
|
"url": url,
|
@@ -472,7 +472,7 @@ class UploaderV2:
|
|
472
472
|
r = UploaderV1.store(flow_name, path, is_text, encoding, handler, echo)
|
473
473
|
|
474
474
|
# In V2, we store size for faster access
|
475
|
-
r["note"] = "Internal representation of IncludeFile
|
475
|
+
r["note"] = "Internal representation of IncludeFile"
|
476
476
|
r["type"] = cls.file_type
|
477
477
|
r["sub-type"] = "uploaded"
|
478
478
|
r["size"] = os.stat(path).st_size
|
metaflow/metaflow_config.py
CHANGED
@@ -452,7 +452,15 @@ ESCAPE_HATCH_WARNING = from_conf("ESCAPE_HATCH_WARNING", True)
|
|
452
452
|
###
|
453
453
|
# Debug configuration
|
454
454
|
###
|
455
|
-
DEBUG_OPTIONS = [
|
455
|
+
DEBUG_OPTIONS = [
|
456
|
+
"subcommand",
|
457
|
+
"sidecar",
|
458
|
+
"s3client",
|
459
|
+
"tracing",
|
460
|
+
"stubgen",
|
461
|
+
"userconf",
|
462
|
+
"conda",
|
463
|
+
]
|
456
464
|
|
457
465
|
for typ in DEBUG_OPTIONS:
|
458
466
|
vars()["DEBUG_%s" % typ.upper()] = from_conf("DEBUG_%s" % typ.upper(), False)
|
@@ -2732,7 +2732,7 @@ class ArgoWorkflows(object):
|
|
2732
2732
|
"type": "section",
|
2733
2733
|
"text": {
|
2734
2734
|
"type": "mrkdwn",
|
2735
|
-
"text": "
|
2735
|
+
"text": "Environment details"
|
2736
2736
|
},
|
2737
2737
|
"fields": [
|
2738
2738
|
{
|
@@ -2750,7 +2750,7 @@ class ArgoWorkflows(object):
|
|
2750
2750
|
"type": "section",
|
2751
2751
|
"text": {
|
2752
2752
|
"type": "mrkdwn",
|
2753
|
-
"text": "
|
2753
|
+
"text": "Environment details"
|
2754
2754
|
}
|
2755
2755
|
}
|
2756
2756
|
|
@@ -353,7 +353,9 @@ class AzureStorage(DataStoreStorage):
|
|
353
353
|
byte_stream, metadata = byte_stream
|
354
354
|
tmp_filename = os.path.join(tmpdir, str(uuid.uuid4()))
|
355
355
|
with open(tmp_filename, "wb") as f:
|
356
|
-
|
356
|
+
# make sure to close the file handle after reading.
|
357
|
+
with byte_stream as bytes:
|
358
|
+
f.write(bytes.read())
|
357
359
|
# Fully finish writing the file, before submitting work. Careful with indentation.
|
358
360
|
|
359
361
|
futures.append(
|
@@ -119,7 +119,9 @@ class _GSRootClient(object):
|
|
119
119
|
blob.metadata = {"metaflow-user-attributes": json.dumps(metadata)}
|
120
120
|
from google.cloud.storage.retry import DEFAULT_RETRY
|
121
121
|
|
122
|
-
blob.upload_from_filename(
|
122
|
+
blob.upload_from_filename(
|
123
|
+
tmpfile, retry=DEFAULT_RETRY, timeout=(14400, 60)
|
124
|
+
) # generous timeout for massive uploads. Use the same values as for Azure (connection_timeout, read_timeout)
|
123
125
|
except Exception as e:
|
124
126
|
process_gs_exception(e)
|
125
127
|
|
@@ -225,7 +227,9 @@ class GSStorage(DataStoreStorage):
|
|
225
227
|
byte_stream, metadata = byte_stream
|
226
228
|
tmp_filename = os.path.join(tmpdir, str(uuid.uuid4()))
|
227
229
|
with open(tmp_filename, "wb") as f:
|
228
|
-
|
230
|
+
# make sure to close the file handle after reading.
|
231
|
+
with byte_stream as bytes:
|
232
|
+
f.write(bytes.read())
|
229
233
|
# Fully finish writing the file, before submitting work. Careful with indentation.
|
230
234
|
|
231
235
|
futures.append(
|
@@ -18,7 +18,6 @@ from itertools import starmap, chain, islice
|
|
18
18
|
|
19
19
|
from boto3.exceptions import RetriesExceededError, S3UploadFailedError
|
20
20
|
from boto3.s3.transfer import TransferConfig
|
21
|
-
from botocore.config import Config
|
22
21
|
from botocore.exceptions import ClientError, SSLError
|
23
22
|
|
24
23
|
try:
|
@@ -50,13 +49,11 @@ from metaflow.plugins.datatools.s3.s3util import (
|
|
50
49
|
import metaflow.tracing as tracing
|
51
50
|
from metaflow.metaflow_config import (
|
52
51
|
S3_WORKER_COUNT,
|
53
|
-
S3_CLIENT_RETRY_CONFIG,
|
54
52
|
)
|
55
53
|
|
56
54
|
DOWNLOAD_FILE_THRESHOLD = 2 * TransferConfig().multipart_threshold
|
57
55
|
DOWNLOAD_MAX_CHUNK = 2 * 1024 * 1024 * 1024 - 1
|
58
56
|
|
59
|
-
DEFAULT_S3_CLIENT_PARAMS = {"config": Config(retries=S3_CLIENT_RETRY_CONFIG)}
|
60
57
|
RANGE_MATCH = re.compile(r"bytes (?P<start>[0-9]+)-(?P<end>[0-9]+)/(?P<total>[0-9]+)")
|
61
58
|
|
62
59
|
# from botocore ClientError MSG_TEMPLATE:
|
@@ -132,7 +129,7 @@ def normalize_client_error(err):
|
|
132
129
|
try:
|
133
130
|
return int(error_code)
|
134
131
|
except ValueError:
|
135
|
-
if error_code in ("AccessDenied", "AllAccessDisabled"):
|
132
|
+
if error_code in ("AccessDenied", "AllAccessDisabled", "InvalidAccessKeyId"):
|
136
133
|
return 403
|
137
134
|
if error_code == "NoSuchKey":
|
138
135
|
return 404
|
@@ -830,7 +827,7 @@ def lst(
|
|
830
827
|
s3config = S3Config(
|
831
828
|
s3role,
|
832
829
|
json.loads(s3sessionvars) if s3sessionvars else None,
|
833
|
-
json.loads(s3clientparams) if s3clientparams else
|
830
|
+
json.loads(s3clientparams) if s3clientparams else None,
|
834
831
|
)
|
835
832
|
|
836
833
|
urllist = []
|
@@ -963,7 +960,7 @@ def put(
|
|
963
960
|
s3config = S3Config(
|
964
961
|
s3role,
|
965
962
|
json.loads(s3sessionvars) if s3sessionvars else None,
|
966
|
-
json.loads(s3clientparams) if s3clientparams else
|
963
|
+
json.loads(s3clientparams) if s3clientparams else None,
|
967
964
|
)
|
968
965
|
|
969
966
|
urls = list(starmap(_make_url, _files()))
|
@@ -1110,7 +1107,7 @@ def get(
|
|
1110
1107
|
s3config = S3Config(
|
1111
1108
|
s3role,
|
1112
1109
|
json.loads(s3sessionvars) if s3sessionvars else None,
|
1113
|
-
json.loads(s3clientparams) if s3clientparams else
|
1110
|
+
json.loads(s3clientparams) if s3clientparams else None,
|
1114
1111
|
)
|
1115
1112
|
|
1116
1113
|
# Construct a list of URL (prefix) objects
|
@@ -1259,7 +1256,7 @@ def info(
|
|
1259
1256
|
s3config = S3Config(
|
1260
1257
|
s3role,
|
1261
1258
|
json.loads(s3sessionvars) if s3sessionvars else None,
|
1262
|
-
json.loads(s3clientparams) if s3clientparams else
|
1259
|
+
json.loads(s3clientparams) if s3clientparams else None,
|
1263
1260
|
)
|
1264
1261
|
|
1265
1262
|
# Construct a list of URL (prefix) objects
|
@@ -13,6 +13,7 @@ from hashlib import sha256
|
|
13
13
|
from io import BufferedIOBase, BytesIO
|
14
14
|
from urllib.parse import unquote, urlparse
|
15
15
|
|
16
|
+
from metaflow.debug import debug
|
16
17
|
from metaflow.exception import MetaflowException
|
17
18
|
from metaflow.metaflow_config import get_pinned_conda_libs
|
18
19
|
from metaflow.metaflow_environment import MetaflowEnvironment
|
@@ -117,6 +118,11 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
117
118
|
)
|
118
119
|
|
119
120
|
def cache(storage, results, type_):
|
121
|
+
debug.conda_exec(
|
122
|
+
"Caching packages for %s environments %s"
|
123
|
+
% (type_, [result[0] for result in results])
|
124
|
+
)
|
125
|
+
|
120
126
|
def _path(url, local_path):
|
121
127
|
# Special handling for VCS packages
|
122
128
|
if url.startswith("git+"):
|
@@ -169,14 +175,25 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
169
175
|
)
|
170
176
|
for url, package in local_packages.items()
|
171
177
|
]
|
178
|
+
debug.conda_exec(
|
179
|
+
"Caching %s new packages to the datastore for %s environment %s"
|
180
|
+
% (
|
181
|
+
len(list_of_path_and_filehandle),
|
182
|
+
type_,
|
183
|
+
[result[0] for result in results],
|
184
|
+
)
|
185
|
+
)
|
172
186
|
storage.save_bytes(
|
173
187
|
list_of_path_and_filehandle,
|
174
188
|
len_hint=len(list_of_path_and_filehandle),
|
189
|
+
# overwrite=True,
|
175
190
|
)
|
176
191
|
for id_, packages, _, platform in results:
|
177
192
|
if id_ in dirty:
|
178
193
|
self.write_to_environment_manifest([id_, platform, type_], packages)
|
179
194
|
|
195
|
+
debug.conda_exec("Finished caching packages.")
|
196
|
+
|
180
197
|
storage = None
|
181
198
|
if self.datastore_type not in ["local"]:
|
182
199
|
# Initialize storage for caching if using a remote datastore
|
@@ -192,44 +209,85 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
192
209
|
# 6. Create and cache PyPI environments in parallel
|
193
210
|
with ThreadPoolExecutor() as executor:
|
194
211
|
# Start all conda solves in parallel
|
195
|
-
|
212
|
+
debug.conda_exec("Solving packages for Conda environments..")
|
213
|
+
conda_solve_futures = [
|
196
214
|
executor.submit(lambda x: solve(*x, "conda"), env)
|
197
215
|
for env in environments("conda")
|
198
216
|
]
|
217
|
+
conda_create_futures = []
|
199
218
|
|
200
219
|
pypi_envs = {env[0]: env for env in environments("pypi")}
|
201
|
-
|
220
|
+
pypi_solve_futures = []
|
221
|
+
pypi_create_futures = []
|
202
222
|
|
223
|
+
cache_futures = []
|
203
224
|
# Process conda results sequentially for downloads
|
204
|
-
for future in as_completed(
|
225
|
+
for future in as_completed(conda_solve_futures):
|
205
226
|
result = future.result()
|
206
227
|
# Sequential conda download
|
228
|
+
debug.conda_exec(
|
229
|
+
"Downloading packages for Conda environment %s" % result[0]
|
230
|
+
)
|
207
231
|
self.solvers["conda"].download(*result)
|
208
232
|
# Parallel conda create and cache
|
209
|
-
|
233
|
+
conda_create_future = executor.submit(
|
234
|
+
self.solvers["conda"].create, *result
|
235
|
+
)
|
210
236
|
if storage:
|
211
|
-
|
237
|
+
cache_futures.append(
|
238
|
+
executor.submit(cache, storage, [result], "conda")
|
239
|
+
)
|
212
240
|
|
213
241
|
# Queue PyPI solve to start after conda create
|
214
242
|
if result[0] in pypi_envs:
|
243
|
+
debug.conda_exec(
|
244
|
+
"Solving packages for PyPI environment %s" % result[0]
|
245
|
+
)
|
215
246
|
# solve pypi envs uniquely
|
216
247
|
pypi_env = pypi_envs.pop(result[0])
|
217
248
|
|
218
249
|
def pypi_solve(env):
|
219
|
-
|
250
|
+
conda_create_future.result() # Wait for conda create
|
220
251
|
return solve(*env, "pypi")
|
221
252
|
|
222
|
-
|
253
|
+
pypi_solve_futures.append(executor.submit(pypi_solve, pypi_env))
|
254
|
+
else:
|
255
|
+
# add conda create future to the generic list
|
256
|
+
conda_create_futures.append(conda_create_future)
|
223
257
|
|
224
258
|
# Process PyPI results sequentially for downloads
|
225
|
-
for solve_future in
|
259
|
+
for solve_future in as_completed(pypi_solve_futures):
|
226
260
|
result = solve_future.result()
|
227
261
|
# Sequential PyPI download
|
262
|
+
debug.conda_exec(
|
263
|
+
"Downloading packages for PyPI environment %s" % result[0]
|
264
|
+
)
|
228
265
|
self.solvers["pypi"].download(*result)
|
229
266
|
# Parallel PyPI create and cache
|
230
|
-
|
267
|
+
pypi_create_futures.append(
|
268
|
+
executor.submit(self.solvers["pypi"].create, *result)
|
269
|
+
)
|
231
270
|
if storage:
|
232
|
-
|
271
|
+
cache_futures.append(
|
272
|
+
executor.submit(cache, storage, [result], "pypi")
|
273
|
+
)
|
274
|
+
|
275
|
+
# Raise exceptions for conda create
|
276
|
+
debug.conda_exec("Checking results for Conda create..")
|
277
|
+
for future in as_completed(conda_create_futures):
|
278
|
+
future.result()
|
279
|
+
|
280
|
+
# Raise exceptions for pypi create
|
281
|
+
debug.conda_exec("Checking results for PyPI create..")
|
282
|
+
for future in as_completed(pypi_create_futures):
|
283
|
+
future.result()
|
284
|
+
|
285
|
+
# Raise exceptions for caching
|
286
|
+
debug.conda_exec("Checking results for caching..")
|
287
|
+
for future in as_completed(cache_futures):
|
288
|
+
# check for result in order to raise any exceptions.
|
289
|
+
future.result()
|
290
|
+
|
233
291
|
self.logger("Virtual environment(s) bootstrapped!")
|
234
292
|
|
235
293
|
def executable(self, step_name, default=None):
|
@@ -6,6 +6,7 @@ import subprocess
|
|
6
6
|
import tempfile
|
7
7
|
import time
|
8
8
|
|
9
|
+
from metaflow.debug import debug
|
9
10
|
from metaflow.exception import MetaflowException
|
10
11
|
from metaflow.util import which
|
11
12
|
|
@@ -71,6 +72,7 @@ class Micromamba(object):
|
|
71
72
|
|
72
73
|
# Install Micromamba on the fly.
|
73
74
|
# TODO: Make this optional at some point.
|
75
|
+
debug.conda_exec("No Micromamba binary found. Installing micromamba")
|
74
76
|
_install_micromamba(self._path_to_hidden_micromamba)
|
75
77
|
self._bin = which(
|
76
78
|
os.path.join(self._path_to_hidden_micromamba, "bin/micromamba")
|
@@ -98,6 +100,7 @@ class Micromamba(object):
|
|
98
100
|
# environment
|
99
101
|
# 4. Multiple solves can progress at the same time while relying on the same
|
100
102
|
# index
|
103
|
+
debug.conda_exec("Solving packages for conda environment %s" % id_)
|
101
104
|
with tempfile.TemporaryDirectory() as tmp_dir:
|
102
105
|
env = {
|
103
106
|
"MAMBA_ADD_PIP_AS_PYTHON_DEPENDENCY": "true",
|
@@ -158,6 +161,7 @@ class Micromamba(object):
|
|
158
161
|
if self.path_to_environment(id_, platform):
|
159
162
|
return
|
160
163
|
|
164
|
+
debug.conda_exec("Downloading packages for conda environment %s" % id_)
|
161
165
|
with tempfile.TemporaryDirectory() as tmp_dir:
|
162
166
|
env = {
|
163
167
|
"CONDA_SUBDIR": platform,
|
@@ -190,6 +194,7 @@ class Micromamba(object):
|
|
190
194
|
if platform != self.platform() or self.path_to_environment(id_, platform):
|
191
195
|
return
|
192
196
|
|
197
|
+
debug.conda_exec("Creating local Conda environment %s" % id_)
|
193
198
|
prefix = "{env_dirs}/{keyword}/{platform}/{id}".format(
|
194
199
|
env_dirs=self.info()["envs_dirs"][0],
|
195
200
|
platform=platform,
|
metaflow/plugins/pypi/pip.py
CHANGED
@@ -8,6 +8,7 @@ from concurrent.futures import ThreadPoolExecutor
|
|
8
8
|
from itertools import chain, product
|
9
9
|
from urllib.parse import unquote
|
10
10
|
|
11
|
+
from metaflow.debug import debug
|
11
12
|
from metaflow.exception import MetaflowException
|
12
13
|
|
13
14
|
from .micromamba import Micromamba
|
@@ -66,6 +67,7 @@ class Pip(object):
|
|
66
67
|
msg += "for id {id}".format(id=id_)
|
67
68
|
raise PipException(msg)
|
68
69
|
|
70
|
+
debug.conda_exec("Solving packages for PyPI environment %s" % id_)
|
69
71
|
with tempfile.TemporaryDirectory() as tmp_dir:
|
70
72
|
report = "{tmp_dir}/report.json".format(tmp_dir=tmp_dir)
|
71
73
|
implementations, platforms, abis = zip(
|
@@ -152,6 +154,7 @@ class Pip(object):
|
|
152
154
|
custom_index_url, extra_index_urls = self.indices(prefix)
|
153
155
|
|
154
156
|
# build wheels if needed
|
157
|
+
debug.conda_exec("Building wheels for PyPI environment %s if necessary" % id_)
|
155
158
|
with ThreadPoolExecutor() as executor:
|
156
159
|
|
157
160
|
def _build(key, package):
|
@@ -212,6 +215,7 @@ class Pip(object):
|
|
212
215
|
]
|
213
216
|
)
|
214
217
|
|
218
|
+
debug.conda_exec("Downloading packages for PyPI environment %s" % id_)
|
215
219
|
cmd = [
|
216
220
|
"download",
|
217
221
|
"--no-deps",
|
@@ -251,6 +255,7 @@ class Pip(object):
|
|
251
255
|
# Pip can't install packages if the underlying virtual environment doesn't
|
252
256
|
# share the same platform
|
253
257
|
if self.micromamba.platform() == platform:
|
258
|
+
debug.conda_exec("Installing packages for local PyPI environment %s" % id_)
|
254
259
|
cmd = [
|
255
260
|
"install",
|
256
261
|
"--no-compile",
|
metaflow/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
metaflow_version = "2.15.
|
1
|
+
metaflow_version = "2.15.12"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: metaflow
|
3
|
-
Version: 2.15.
|
3
|
+
Version: 2.15.12
|
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.15.
|
29
|
+
Requires-Dist: metaflow-stubs==2.15.12; extra == "stubs"
|
30
30
|
Dynamic: author
|
31
31
|
Dynamic: author-email
|
32
32
|
Dynamic: classifier
|
@@ -12,11 +12,11 @@ metaflow/events.py,sha256=ahjzkSbSnRCK9RZ-9vTfUviz_6gMvSO9DGkJ86X80-k,5300
|
|
12
12
|
metaflow/exception.py,sha256=_m9ZBJM0cooHRslDqfxCPQmkChqaTh6fGxp7HvISnYI,5161
|
13
13
|
metaflow/flowspec.py,sha256=GgbTeUBtG3AmZwIF-prRFMsZqFYGVysd5xBS9IPIPBs,35953
|
14
14
|
metaflow/graph.py,sha256=cdpnWr85aEj_rRn-7EjbndWjr_i8Dt3P7-oPUW0NNpI,12393
|
15
|
-
metaflow/includefile.py,sha256=
|
15
|
+
metaflow/includefile.py,sha256=RtISGl1V48qjkJBakUZ9yPpHV102h7pOIFiKP8PLHpc,20927
|
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=
|
19
|
+
metaflow/metaflow_config.py,sha256=Piw0awvuFarzl1DuTmOZ52-sNcLPV7g5UmsOO9BHnJE,23810
|
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=CWG90qpfz9iJ6hHhFlAmMVNALn2v_5eTVk3mFbQR4Pw,8379
|
@@ -37,7 +37,7 @@ metaflow/tuple_util.py,sha256=_G5YIEhuugwJ_f6rrZoelMFak3DqAR2tt_5CapS1XTY,830
|
|
37
37
|
metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
|
38
38
|
metaflow/util.py,sha256=mJBkV5tShIyCsLDeM1zygQGeciQVMrVPm_qI8Oi33G0,14656
|
39
39
|
metaflow/vendor.py,sha256=LZgXrh7ZSDmD32D1T5jj3OKKpXIqqxKzdMAOc5V0SD4,5162
|
40
|
-
metaflow/version.py,sha256=
|
40
|
+
metaflow/version.py,sha256=dD3j_x5O0hfjAQPJKDb9TeRB-4TB5uLRZjcMD1OL9-k,29
|
41
41
|
metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
|
42
42
|
metaflow/_vendor/typing_extensions.py,sha256=q9zxWa6p6CzF1zZvSkygSlklduHf_b3K7MCxGz7MJRc,134519
|
43
43
|
metaflow/_vendor/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
|
@@ -154,7 +154,7 @@ metaflow/cmd/tutorials_cmd.py,sha256=8FdlKkicTOhCIDKcBR5b0Oz6giDvS-EMY3o9skIrRqw
|
|
154
154
|
metaflow/cmd/util.py,sha256=jS_0rUjOnGGzPT65fzRLdGjrYAOOLA4jU2S0HJLV0oc,406
|
155
155
|
metaflow/cmd/code/__init__.py,sha256=VO4dNM9M9LHYy5nTgEiJvCV1RBl8lpDlYGJm6GIcaBA,7413
|
156
156
|
metaflow/cmd/develop/__init__.py,sha256=p1Sy8yU1MEKSrH5ttOWOZvNcI1qYu6J6jghdTHwPgOw,689
|
157
|
-
metaflow/cmd/develop/stub_generator.py,sha256=
|
157
|
+
metaflow/cmd/develop/stub_generator.py,sha256=gERNsibYL030xR0OjA60AkS3HotRCNa5N2n1QQpgqcE,65358
|
158
158
|
metaflow/cmd/develop/stubs.py,sha256=Q0ERQHGb0cC8P6eb0mQlE1RHUo8sCJ2zFvIW7rL6C_g,11889
|
159
159
|
metaflow/datastore/__init__.py,sha256=VxP6ddJt3rwiCkpiSfAhyVkUCOe1pgZZsytVEJzFmSQ,155
|
160
160
|
metaflow/datastore/content_addressed_store.py,sha256=6T7tNqL29kpmecyMLHF35RhoSBOb-OZcExnsB65AvnI,7641
|
@@ -210,7 +210,7 @@ metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=iDReG-7FKnumrtQg-HY6cCUAAqN
|
|
210
210
|
metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
211
211
|
metaflow/plugins/argo/argo_client.py,sha256=A1kI9rjVjCadDsBscZ2Wk8xRBI6GNgWV6SU7TyrdfrI,16530
|
212
212
|
metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
|
213
|
-
metaflow/plugins/argo/argo_workflows.py,sha256=
|
213
|
+
metaflow/plugins/argo/argo_workflows.py,sha256=oX-e4o_CxTQP5DJ7zMQwckcobXZJz6hPxLs3fsHSnm8,186544
|
214
214
|
metaflow/plugins/argo/argo_workflows_cli.py,sha256=X_GfJpc7jfP7DGuttl7U952767eBF6Ut45aWgoJzHVI,38375
|
215
215
|
metaflow/plugins/argo/argo_workflows_decorator.py,sha256=ogCSBmwsC2C3eusydrgjuAJd4qK18f1sI4jJwA4Fd-o,7800
|
216
216
|
metaflow/plugins/argo/argo_workflows_deployer.py,sha256=6kHxEnYXJwzNCM9swI8-0AckxtPWqwhZLerYkX8fxUM,4444
|
@@ -275,15 +275,15 @@ metaflow/plugins/cards/card_modules/chevron/renderer.py,sha256=dm5ufR9-qnx94D9Bt
|
|
275
275
|
metaflow/plugins/cards/card_modules/chevron/tokenizer.py,sha256=lQU9OELUE9a5Xu4snGhEV_YTT34iyUHVBuM1YO016Sw,7400
|
276
276
|
metaflow/plugins/cards/card_viewer/viewer.html,sha256=qZJGzhZhQ1gugsknRP7zkAPPfUAtvemK1UKqXoGff5M,11593
|
277
277
|
metaflow/plugins/datastores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
278
|
-
metaflow/plugins/datastores/azure_storage.py,sha256=
|
279
|
-
metaflow/plugins/datastores/gs_storage.py,sha256=
|
278
|
+
metaflow/plugins/datastores/azure_storage.py,sha256=GGzOxK8coHR9PQYmR39jn37D0s-XIJOVMuRKaJ3B8eo,16787
|
279
|
+
metaflow/plugins/datastores/gs_storage.py,sha256=8KV4SM7GPI21-86UjMATmSCbVzxDHlMWlRsQ-zQngTg,9899
|
280
280
|
metaflow/plugins/datastores/local_storage.py,sha256=igrBDphhyu7EFIUj3BWcO7beiZbNnJLq--lF45UYSyI,4750
|
281
281
|
metaflow/plugins/datastores/s3_storage.py,sha256=CZdNqaKtxDXQbEg2YHyphph3hWcLIE50puenm0WGVpk,5473
|
282
282
|
metaflow/plugins/datatools/__init__.py,sha256=ge4L16OBQLy2J_MMvoHg3lMfdm-MluQgRWoyZ5GCRnk,1267
|
283
283
|
metaflow/plugins/datatools/local.py,sha256=FJvMOBcjdyhSPHmdLocBSiIT0rmKkKBmsaclxH75x08,4233
|
284
284
|
metaflow/plugins/datatools/s3/__init__.py,sha256=14tr9fPjN3ULW5IOfKHeG7Uhjmgm7LMtQHfz1SFv-h8,248
|
285
285
|
metaflow/plugins/datatools/s3/s3.py,sha256=3xrWD6pXoVRpuAQHyLGVya79UIE0S8AqAqe2prg4yMw,67182
|
286
|
-
metaflow/plugins/datatools/s3/s3op.py,sha256=
|
286
|
+
metaflow/plugins/datatools/s3/s3op.py,sha256=9DAIlvK5kYVmgo3rL-XY_3k7CoLUXaWqduBza13Xqv8,47543
|
287
287
|
metaflow/plugins/datatools/s3/s3tail.py,sha256=boQjQGQMI-bvTqcMP2y7uSlSYLcvWOy7J3ZUaF78NAA,2597
|
288
288
|
metaflow/plugins/datatools/s3/s3util.py,sha256=FgRgaVmEq7-i2dV7q8XK5w5PfFt-xJjZa8WrK8IJfdI,3769
|
289
289
|
metaflow/plugins/env_escape/__init__.py,sha256=tGNUZnmPvk52eNs__VK443b3CZ7ogEFTT-s9_n_HF8Q,8837
|
@@ -331,10 +331,10 @@ metaflow/plugins/metadata_providers/service.py,sha256=9j0db_EOGFdb49YTgr9q4EWqVA
|
|
331
331
|
metaflow/plugins/pypi/__init__.py,sha256=0YFZpXvX7HCkyBFglatual7XGifdA1RwC3U4kcizyak,1037
|
332
332
|
metaflow/plugins/pypi/bootstrap.py,sha256=SNONquX6QnTbu7htmhaQeVeZ2ofaFaUCDScRIrTTERc,14718
|
333
333
|
metaflow/plugins/pypi/conda_decorator.py,sha256=N0HGiaS1mRsa6qT4eYzu2C3DHtas22QIXowW4vEl44M,15961
|
334
|
-
metaflow/plugins/pypi/conda_environment.py,sha256=
|
335
|
-
metaflow/plugins/pypi/micromamba.py,sha256=
|
334
|
+
metaflow/plugins/pypi/conda_environment.py,sha256=C7WolJm1dgBQofd6vOk8KCr3U754TyAr4bOpkhosxfM,24582
|
335
|
+
metaflow/plugins/pypi/micromamba.py,sha256=XAuZulI7O2Q_Zgtx28yjAqHco6tHiPQxoy_vsf1kWm8,16843
|
336
336
|
metaflow/plugins/pypi/parsers.py,sha256=gpOOG2Ph95wI73MWCAi7XjpK0gYhv5k5YIGBs73QPuE,8556
|
337
|
-
metaflow/plugins/pypi/pip.py,sha256=
|
337
|
+
metaflow/plugins/pypi/pip.py,sha256=WhPyA18RoVT40sqbZRJdCEij4euL9PZwLfm1SrAKqmU,14333
|
338
338
|
metaflow/plugins/pypi/pypi_decorator.py,sha256=ybNgo-T5Z_0W2KNuED0pdjyI0qygZ4a1MXAzKqdHt_E,7250
|
339
339
|
metaflow/plugins/pypi/pypi_environment.py,sha256=FYMg8kF3lXqcLfRYWD83a9zpVjcoo_TARqMGZ763rRk,230
|
340
340
|
metaflow/plugins/pypi/utils.py,sha256=W8OhDrhz7YIE-2MSSN5Rj7AmESwsN5YDmdnro152J4w,3551
|
@@ -393,12 +393,12 @@ metaflow/user_configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
393
393
|
metaflow/user_configs/config_decorators.py,sha256=qCKVAvd0NKgaCxQ2OThes5-DYHXq6A1HqURubYNeFdw,20481
|
394
394
|
metaflow/user_configs/config_options.py,sha256=m6jccSpzI4qUJ7vyYkYBIf8G3V0Caunxg_k7zg4Zlqg,21067
|
395
395
|
metaflow/user_configs/config_parameters.py,sha256=oeJGVKu1ao_YQX6Lg6P2FEv5k5-_F4sARLlVpTW9ezM,15502
|
396
|
-
metaflow-2.15.
|
397
|
-
metaflow-2.15.
|
398
|
-
metaflow-2.15.
|
399
|
-
metaflow-2.15.
|
400
|
-
metaflow-2.15.
|
401
|
-
metaflow-2.15.
|
402
|
-
metaflow-2.15.
|
403
|
-
metaflow-2.15.
|
404
|
-
metaflow-2.15.
|
396
|
+
metaflow-2.15.12.data/data/share/metaflow/devtools/Makefile,sha256=5n89OGIC_kE4wxtEI66VCucN-b-1w5bqvGeZYmeRGz8,13737
|
397
|
+
metaflow-2.15.12.data/data/share/metaflow/devtools/Tiltfile,sha256=P5_rn_F3xYLN1_cEAQ9mNeS22HG2rb8beKIz2RIK6fU,20634
|
398
|
+
metaflow-2.15.12.data/data/share/metaflow/devtools/pick_services.sh,sha256=DCnrMXwtApfx3B4S-YiZESMyAFHbXa3VuNL0MxPLyiE,2196
|
399
|
+
metaflow-2.15.12.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
|
400
|
+
metaflow-2.15.12.dist-info/METADATA,sha256=vsaYPYVJ9CZN2BmpaTIFgOd97tgHYpOwaVufYO-giZg,6742
|
401
|
+
metaflow-2.15.12.dist-info/WHEEL,sha256=_z0Kb-VmhLeNt2nZ-PsoQBjD25rP0tBwgAyRYD7oTKI,109
|
402
|
+
metaflow-2.15.12.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
|
403
|
+
metaflow-2.15.12.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
|
404
|
+
metaflow-2.15.12.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{metaflow-2.15.10.data → metaflow-2.15.12.data}/data/share/metaflow/devtools/pick_services.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|