ob-metaflow 2.12.5.1__py2.py3-none-any.whl → 2.12.6.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.
Potentially problematic release.
This version of ob-metaflow might be problematic. Click here for more details.
- metaflow/metaflow_config.py +1 -0
- metaflow/plugins/argo/argo_workflows.py +17 -5
- metaflow/plugins/pypi/conda_decorator.py +8 -0
- metaflow/plugins/pypi/conda_environment.py +10 -5
- metaflow/plugins/pypi/pip.py +31 -3
- metaflow/plugins/pypi/pypi_decorator.py +8 -0
- metaflow/version.py +1 -1
- {ob_metaflow-2.12.5.1.dist-info → ob_metaflow-2.12.6.1.dist-info}/METADATA +2 -2
- {ob_metaflow-2.12.5.1.dist-info → ob_metaflow-2.12.6.1.dist-info}/RECORD +13 -13
- {ob_metaflow-2.12.5.1.dist-info → ob_metaflow-2.12.6.1.dist-info}/WHEEL +1 -1
- {ob_metaflow-2.12.5.1.dist-info → ob_metaflow-2.12.6.1.dist-info}/LICENSE +0 -0
- {ob_metaflow-2.12.5.1.dist-info → ob_metaflow-2.12.6.1.dist-info}/entry_points.txt +0 -0
- {ob_metaflow-2.12.5.1.dist-info → ob_metaflow-2.12.6.1.dist-info}/top_level.txt +0 -0
metaflow/metaflow_config.py
CHANGED
|
@@ -237,6 +237,7 @@ DEFAULT_RUNTIME_LIMIT = from_conf("DEFAULT_RUNTIME_LIMIT", 5 * 24 * 60 * 60)
|
|
|
237
237
|
# Organization customizations
|
|
238
238
|
###
|
|
239
239
|
UI_URL = from_conf("UI_URL")
|
|
240
|
+
PAGERDUTY_TEMPLATE_URL = from_conf("PAGERDUTY_TEMPLATE_URL")
|
|
240
241
|
|
|
241
242
|
# Contact information displayed when running the `metaflow` command.
|
|
242
243
|
# Value should be a dictionary where:
|
|
@@ -6,6 +6,7 @@ import shlex
|
|
|
6
6
|
import sys
|
|
7
7
|
from collections import defaultdict
|
|
8
8
|
from hashlib import sha1
|
|
9
|
+
from math import inf
|
|
9
10
|
|
|
10
11
|
from metaflow import JSONType, current
|
|
11
12
|
from metaflow.decorators import flow_decorators
|
|
@@ -45,6 +46,7 @@ from metaflow.metaflow_config import (
|
|
|
45
46
|
SERVICE_HEADERS,
|
|
46
47
|
SERVICE_INTERNAL_URL,
|
|
47
48
|
UI_URL,
|
|
49
|
+
PAGERDUTY_TEMPLATE_URL,
|
|
48
50
|
)
|
|
49
51
|
from metaflow.metaflow_config_funcs import config_values
|
|
50
52
|
from metaflow.mflog import BASH_SAVE_LOGS, bash_capture_logs, export_mflog_env_vars
|
|
@@ -60,7 +62,6 @@ from metaflow.util import (
|
|
|
60
62
|
to_camelcase,
|
|
61
63
|
to_unicode,
|
|
62
64
|
)
|
|
63
|
-
|
|
64
65
|
from .argo_client import ArgoClient
|
|
65
66
|
|
|
66
67
|
|
|
@@ -901,7 +902,9 @@ class ArgoWorkflows(object):
|
|
|
901
902
|
"argo-{{workflow.name}}/%s/{{tasks.%s.outputs.parameters.task-id}}"
|
|
902
903
|
% (n, self._sanitize(n))
|
|
903
904
|
for n in node.in_funcs
|
|
904
|
-
]
|
|
905
|
+
],
|
|
906
|
+
# NOTE: We set zlibmin to infinite because zlib compression for the Argo input-paths breaks template value substitution.
|
|
907
|
+
zlibmin=inf,
|
|
905
908
|
)
|
|
906
909
|
)
|
|
907
910
|
]
|
|
@@ -1796,10 +1799,18 @@ class ArgoWorkflows(object):
|
|
|
1796
1799
|
def _pager_duty_notification_links(self):
|
|
1797
1800
|
links = []
|
|
1798
1801
|
if UI_URL:
|
|
1802
|
+
if PAGERDUTY_TEMPLATE_URL:
|
|
1803
|
+
pdproject = ''
|
|
1804
|
+
pdbranch = ''
|
|
1805
|
+
if getattr(current, "project_name", None):
|
|
1806
|
+
pdproject = current.project_name
|
|
1807
|
+
pdbranch = current.branch_name
|
|
1808
|
+
href_val = PAGERDUTY_TEMPLATE_URL.format(pd_flow=self.flow.name, pd_namespace=KUBERNETES_NAMESPACE,pd_template=self.name,pd_project=pdproject, pd_branch=pdbranch)
|
|
1809
|
+
else:
|
|
1810
|
+
href_val = "%s/%s/%s"% (UI_URL.rstrip("/"), self.flow.name, "argo-{{workflow.name}}")
|
|
1799
1811
|
links.append(
|
|
1800
1812
|
{
|
|
1801
|
-
"href":
|
|
1802
|
-
% (UI_URL.rstrip("/"), self.flow.name, "argo-{{workflow.name}}"),
|
|
1813
|
+
"href": href_val,
|
|
1803
1814
|
"text": "Metaflow UI",
|
|
1804
1815
|
}
|
|
1805
1816
|
)
|
|
@@ -2155,7 +2166,8 @@ class ArgoWorkflows(object):
|
|
|
2155
2166
|
# everything within the body.
|
|
2156
2167
|
# NOTE: We need the conditional logic in order to successfully fall back to the default value
|
|
2157
2168
|
# when the event payload does not contain a key for a parameter.
|
|
2158
|
-
|
|
2169
|
+
# NOTE: Keys might contain dashes, so use the safer 'get' for fetching the value
|
|
2170
|
+
data_template='{{ if (hasKey $.Input.body.payload "%s") }}{{- (get $.Input.body.payload "%s" | toJson) -}}{{- else -}}{{ (fail "use-default-instead") }}{{- end -}}'
|
|
2159
2171
|
% (v, v),
|
|
2160
2172
|
# Unfortunately the sensor needs to
|
|
2161
2173
|
# record the default values for
|
|
@@ -100,6 +100,10 @@ class CondaStepDecorator(StepDecorator):
|
|
|
100
100
|
# --environment=pypi to --environment=conda
|
|
101
101
|
_supported_virtual_envs.extend(["pypi"])
|
|
102
102
|
|
|
103
|
+
# TODO: Hardcoded for now to support Docker environment.
|
|
104
|
+
# We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
|
|
105
|
+
_supported_virtual_envs.extend(["docker"])
|
|
106
|
+
|
|
103
107
|
# The --environment= requirement ensures that valid virtual environments are
|
|
104
108
|
# created for every step to execute it, greatly simplifying the @conda
|
|
105
109
|
# implementation.
|
|
@@ -340,6 +344,10 @@ class CondaFlowDecorator(FlowDecorator):
|
|
|
340
344
|
# --environment=pypi to --environment=conda
|
|
341
345
|
_supported_virtual_envs.extend(["pypi"])
|
|
342
346
|
|
|
347
|
+
# TODO: Hardcoded for now to support Docker environment.
|
|
348
|
+
# We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
|
|
349
|
+
_supported_virtual_envs.extend(["docker"])
|
|
350
|
+
|
|
343
351
|
# The --environment= requirement ensures that valid virtual environments are
|
|
344
352
|
# created for every step to execute it, greatly simplifying the @conda
|
|
345
353
|
# implementation.
|
|
@@ -65,7 +65,7 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
|
65
65
|
micromamba = Micromamba()
|
|
66
66
|
self.solvers = {"conda": micromamba, "pypi": Pip(micromamba)}
|
|
67
67
|
|
|
68
|
-
def init_environment(self, echo):
|
|
68
|
+
def init_environment(self, echo, only_steps=None):
|
|
69
69
|
# The implementation optimizes for latency to ensure as many operations can
|
|
70
70
|
# be turned into cheap no-ops as feasible. Otherwise, we focus on maintaining
|
|
71
71
|
# a balance between latency and maintainability of code without re-implementing
|
|
@@ -77,6 +77,8 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
|
77
77
|
def environments(type_):
|
|
78
78
|
seen = set()
|
|
79
79
|
for step in self.flow:
|
|
80
|
+
if only_steps and step.name not in only_steps:
|
|
81
|
+
continue
|
|
80
82
|
environment = self.get_environment(step)
|
|
81
83
|
if type_ in environment and environment["id_"] not in seen:
|
|
82
84
|
seen.add(environment["id_"])
|
|
@@ -286,10 +288,13 @@ class CondaEnvironment(MetaflowEnvironment):
|
|
|
286
288
|
# PyPI registries, the usage of environment variable `GOOGLE_APPLICATION_CREDENTIALS`
|
|
287
289
|
# demands that `keyrings.google-artifactregistry-auth` has to be installed
|
|
288
290
|
# and available in the underlying python environment.
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
291
|
+
|
|
292
|
+
# commenting this out per https://outerboundsco.slack.com/archives/C040K733FND/p1719262399355449
|
|
293
|
+
# this should be a temporary workaround. Need to find a better fix
|
|
294
|
+
# if os.getenv("GOOGLE_APPLICATION_CREDENTIALS"):
|
|
295
|
+
# environment["conda"]["packages"][
|
|
296
|
+
# "keyrings.google-artifactregistry-auth"
|
|
297
|
+
# ] = ">=1.1.1"
|
|
293
298
|
|
|
294
299
|
# Z combinator for a recursive lambda
|
|
295
300
|
deep_sort = (lambda f: f(f))(
|
metaflow/plugins/pypi/pip.py
CHANGED
|
@@ -9,7 +9,6 @@ from itertools import chain, product
|
|
|
9
9
|
from urllib.parse import unquote
|
|
10
10
|
|
|
11
11
|
from metaflow.exception import MetaflowException
|
|
12
|
-
from metaflow.util import which
|
|
13
12
|
|
|
14
13
|
from .micromamba import Micromamba
|
|
15
14
|
from .utils import pip_tags, wheel_tags
|
|
@@ -25,6 +24,23 @@ class PipException(MetaflowException):
|
|
|
25
24
|
super(PipException, self).__init__(msg)
|
|
26
25
|
|
|
27
26
|
|
|
27
|
+
class PipPackageNotFound(Exception):
|
|
28
|
+
"Wrapper for pip package resolve errors."
|
|
29
|
+
|
|
30
|
+
def __init__(self, error):
|
|
31
|
+
self.error = error
|
|
32
|
+
try:
|
|
33
|
+
# Parse the package spec from error message:
|
|
34
|
+
# ERROR: ERROR: Could not find a version that satisfies the requirement pkg==0.0.1 (from versions: none)
|
|
35
|
+
# ERROR: No matching distribution found for pkg==0.0.1
|
|
36
|
+
self.package_spec = re.search(
|
|
37
|
+
"ERROR: No matching distribution found for (.*)", self.error
|
|
38
|
+
)[1]
|
|
39
|
+
self.package_name = re.match("\w*", self.package_spec)[0]
|
|
40
|
+
except Exception:
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
|
|
28
44
|
METADATA_FILE = "{prefix}/.pip/metadata"
|
|
29
45
|
INSTALLATION_MARKER = "{prefix}/.pip/id"
|
|
30
46
|
|
|
@@ -81,7 +97,16 @@ class Pip(object):
|
|
|
81
97
|
cmd.append(f"{package}{version}")
|
|
82
98
|
else:
|
|
83
99
|
cmd.append(f"{package}=={version}")
|
|
84
|
-
|
|
100
|
+
try:
|
|
101
|
+
self._call(prefix, cmd)
|
|
102
|
+
except PipPackageNotFound as ex:
|
|
103
|
+
# pretty print package errors
|
|
104
|
+
raise PipException(
|
|
105
|
+
"Could not find a binary distribution for %s \n"
|
|
106
|
+
"for the platform %s\n\n"
|
|
107
|
+
"Note that ***@pypi*** does not currently support source distributions"
|
|
108
|
+
% (ex.package_spec, platform)
|
|
109
|
+
)
|
|
85
110
|
|
|
86
111
|
def _format(dl_info):
|
|
87
112
|
res = {k: v for k, v in dl_info.items() if k in ["url"]}
|
|
@@ -302,11 +327,14 @@ class Pip(object):
|
|
|
302
327
|
.strip()
|
|
303
328
|
)
|
|
304
329
|
except subprocess.CalledProcessError as e:
|
|
330
|
+
errors = e.stderr.decode()
|
|
331
|
+
if "No matching distribution" in errors:
|
|
332
|
+
raise PipPackageNotFound(errors)
|
|
305
333
|
raise PipException(
|
|
306
334
|
"command '{cmd}' returned error ({code}) {output}\n{stderr}".format(
|
|
307
335
|
cmd=" ".join(e.cmd),
|
|
308
336
|
code=e.returncode,
|
|
309
337
|
output=e.output.decode(),
|
|
310
|
-
stderr=
|
|
338
|
+
stderr=errors,
|
|
311
339
|
)
|
|
312
340
|
)
|
|
@@ -70,6 +70,10 @@ class PyPIStepDecorator(StepDecorator):
|
|
|
70
70
|
# --environment=pypi to --environment=conda
|
|
71
71
|
_supported_virtual_envs.extend(["pypi"])
|
|
72
72
|
|
|
73
|
+
# TODO: Hardcoded for now to support Docker environment.
|
|
74
|
+
# We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
|
|
75
|
+
_supported_virtual_envs.extend(["docker"])
|
|
76
|
+
|
|
73
77
|
# The --environment= requirement ensures that valid virtual environments are
|
|
74
78
|
# created for every step to execute it, greatly simplifying the @pypi
|
|
75
79
|
# implementation.
|
|
@@ -119,6 +123,10 @@ class PyPIFlowDecorator(FlowDecorator):
|
|
|
119
123
|
# --environment=pypi to --environment=conda
|
|
120
124
|
_supported_virtual_envs.extend(["pypi"])
|
|
121
125
|
|
|
126
|
+
# TODO: Hardcoded for now to support Docker environment.
|
|
127
|
+
# We should introduce a more robust mechanism for appending supported environments, for example from within extensions.
|
|
128
|
+
_supported_virtual_envs.extend(["docker"])
|
|
129
|
+
|
|
122
130
|
# The --environment= requirement ensures that valid virtual environments are
|
|
123
131
|
# created for every step to execute it, greatly simplifying the @conda
|
|
124
132
|
# implementation.
|
metaflow/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
metaflow_version = "2.12.
|
|
1
|
+
metaflow_version = "2.12.6.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ob-metaflow
|
|
3
|
-
Version: 2.12.
|
|
3
|
+
Version: 2.12.6.1
|
|
4
4
|
Summary: Metaflow: More Data Science, Less Engineering
|
|
5
5
|
Author: Netflix, Outerbounds & the Metaflow Community
|
|
6
6
|
Author-email: help@outerbounds.co
|
|
@@ -12,7 +12,7 @@ Requires-Dist: boto3
|
|
|
12
12
|
Requires-Dist: pylint
|
|
13
13
|
Requires-Dist: kubernetes
|
|
14
14
|
Provides-Extra: stubs
|
|
15
|
-
Requires-Dist: metaflow-stubs ==2.12.
|
|
15
|
+
Requires-Dist: metaflow-stubs ==2.12.6.1 ; extra == 'stubs'
|
|
16
16
|
|
|
17
17
|

|
|
18
18
|
|
|
@@ -15,7 +15,7 @@ metaflow/graph.py,sha256=ZPxyG8uwVMk5YYgX4pQEQaPZtZM5Wy-G4NtJK73IEuA,11818
|
|
|
15
15
|
metaflow/includefile.py,sha256=yHczcZ_U0SrasxSNhZb3DIBzx8UZnrJCl3FzvpEQLOA,19753
|
|
16
16
|
metaflow/integrations.py,sha256=LlsaoePRg03DjENnmLxZDYto3NwWc9z_PtU6nJxLldg,1480
|
|
17
17
|
metaflow/lint.py,sha256=_kYAbAtsP7IG1Rd0FqNbo8I8Zs66_0WXbaZJFARO3dE,10394
|
|
18
|
-
metaflow/metaflow_config.py,sha256=
|
|
18
|
+
metaflow/metaflow_config.py,sha256=2lCcN96hN8Vq6oalxBu9ekUWqUXmZXQOswP69Rljyj4,22568
|
|
19
19
|
metaflow/metaflow_config_funcs.py,sha256=pCaiQ2ez9wXixJI3ehmf3QiW9lUqFrZnBZx1my_0wIg,4874
|
|
20
20
|
metaflow/metaflow_current.py,sha256=sCENPBiji3LcPbwgOG0ukGd_yEc5tST8EowES8DzRtA,7430
|
|
21
21
|
metaflow/metaflow_environment.py,sha256=HJfhI3GrU-YbY7Etu9M-1q7EbwtEGFzCBhrUs45OLXY,7403
|
|
@@ -35,7 +35,7 @@ metaflow/tuple_util.py,sha256=_G5YIEhuugwJ_f6rrZoelMFak3DqAR2tt_5CapS1XTY,830
|
|
|
35
35
|
metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
|
|
36
36
|
metaflow/util.py,sha256=m5womQ7y-jXehuMyHPfByDbZ4HwTJxzs869cPOlMR8s,13057
|
|
37
37
|
metaflow/vendor.py,sha256=FchtA9tH22JM-eEtJ2c9FpUdMn8sSb1VHuQS56EcdZk,5139
|
|
38
|
-
metaflow/version.py,sha256=
|
|
38
|
+
metaflow/version.py,sha256=CfSlVQL5YZOGLEALNy7UrVy__xZYN6dZfwqsRrDx-WM,30
|
|
39
39
|
metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
|
|
40
40
|
metaflow/_vendor/typing_extensions.py,sha256=0nUs5p1A_UrZigrAVBoOEM6TxU37zzPDUtiij1ZwpNc,110417
|
|
41
41
|
metaflow/_vendor/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
|
|
@@ -174,7 +174,7 @@ metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=iDReG-7FKnumrtQg-HY6cCUAAqN
|
|
|
174
174
|
metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
175
175
|
metaflow/plugins/argo/argo_client.py,sha256=MKKhMCbWOPzf6z5zQQiyDRHHkAXcO7ipboDZDqAAvOk,15849
|
|
176
176
|
metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
|
|
177
|
-
metaflow/plugins/argo/argo_workflows.py,sha256=
|
|
177
|
+
metaflow/plugins/argo/argo_workflows.py,sha256=p7GEKwdqJtZWyaioLAbWPnkBG925ii0Kv8G2Xf4i5sE,131266
|
|
178
178
|
metaflow/plugins/argo/argo_workflows_cli.py,sha256=sZTpgfmc50eT3e0qIxpVqUgWhTcYlO1HM4gU6Oaya8g,33259
|
|
179
179
|
metaflow/plugins/argo/argo_workflows_decorator.py,sha256=K5t4uIk2IXPdK7v7DEjj3buSB8ikLjLycKjbZUYeiaw,6781
|
|
180
180
|
metaflow/plugins/argo/generate_input_paths.py,sha256=loYsI6RFX9LlFsHb7Fe-mzlTTtRdySoOu7sYDy-uXK0,881
|
|
@@ -285,11 +285,11 @@ metaflow/plugins/metadata/local.py,sha256=YhLJC5zjVJrvQFIyQ92ZBByiUmhCC762RUX7IT
|
|
|
285
285
|
metaflow/plugins/metadata/service.py,sha256=ihq5F7KQZlxvYwzH_-jyP2aWN_I96i2vp92j_d697s8,20204
|
|
286
286
|
metaflow/plugins/pypi/__init__.py,sha256=0YFZpXvX7HCkyBFglatual7XGifdA1RwC3U4kcizyak,1037
|
|
287
287
|
metaflow/plugins/pypi/bootstrap.py,sha256=Hik3PZ_RQC8T6hEf-NE2Xr_jq2ZIUkpgUtJlx-rqJgU,5107
|
|
288
|
-
metaflow/plugins/pypi/conda_decorator.py,sha256
|
|
289
|
-
metaflow/plugins/pypi/conda_environment.py,sha256=
|
|
288
|
+
metaflow/plugins/pypi/conda_decorator.py,sha256=phrUvVC5QrfNwPqIByrXsnpRDg1SNVsfpl1wbAVrykI,14679
|
|
289
|
+
metaflow/plugins/pypi/conda_environment.py,sha256=wvAaOOfBeR1LPvbKJmHzXHs7fblMoaVC-0uxCd2B-cM,19548
|
|
290
290
|
metaflow/plugins/pypi/micromamba.py,sha256=wlVN2fm4WXFh3jVNtpDfu4XEz6VJKbmFNp0QvqlMIuI,12179
|
|
291
|
-
metaflow/plugins/pypi/pip.py,sha256=
|
|
292
|
-
metaflow/plugins/pypi/pypi_decorator.py,sha256=
|
|
291
|
+
metaflow/plugins/pypi/pip.py,sha256=uYPEHYV1_PtY4QA3NqUcVSPBAlRucGeY9tuyz7sB7aY,13641
|
|
292
|
+
metaflow/plugins/pypi/pypi_decorator.py,sha256=Plmm4fhLECW-sj1QSFI84Gva7qqqwlJsqJ8laCRKIzw,6073
|
|
293
293
|
metaflow/plugins/pypi/pypi_environment.py,sha256=FYMg8kF3lXqcLfRYWD83a9zpVjcoo_TARqMGZ763rRk,230
|
|
294
294
|
metaflow/plugins/pypi/utils.py,sha256=ds1Mnv_DaxGnLAYp7ozg_K6oyguGyNhvHfE-75Ia1YA,2836
|
|
295
295
|
metaflow/plugins/secrets/__init__.py,sha256=mhJaN2eMS_ZZVewAMR2E-JdP5i0t3v9e6Dcwd-WpruE,310
|
|
@@ -332,9 +332,9 @@ metaflow/tutorials/07-worldview/README.md,sha256=5vQTrFqulJ7rWN6r20dhot9lI2sVj9W
|
|
|
332
332
|
metaflow/tutorials/07-worldview/worldview.ipynb,sha256=ztPZPI9BXxvW1QdS2Tfe7LBuVzvFvv0AToDnsDJhLdE,2237
|
|
333
333
|
metaflow/tutorials/08-autopilot/README.md,sha256=GnePFp_q76jPs991lMUqfIIh5zSorIeWznyiUxzeUVE,1039
|
|
334
334
|
metaflow/tutorials/08-autopilot/autopilot.ipynb,sha256=DQoJlILV7Mq9vfPBGW-QV_kNhWPjS5n6SJLqePjFYLY,3191
|
|
335
|
-
ob_metaflow-2.12.
|
|
336
|
-
ob_metaflow-2.12.
|
|
337
|
-
ob_metaflow-2.12.
|
|
338
|
-
ob_metaflow-2.12.
|
|
339
|
-
ob_metaflow-2.12.
|
|
340
|
-
ob_metaflow-2.12.
|
|
335
|
+
ob_metaflow-2.12.6.1.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
|
|
336
|
+
ob_metaflow-2.12.6.1.dist-info/METADATA,sha256=Ce_SKp9yQS2l0zIEPFWuqAemKuz2cuRzK4BIxeqwl-w,5143
|
|
337
|
+
ob_metaflow-2.12.6.1.dist-info/WHEEL,sha256=0XQbNV6JE5ziJsWjIU8TRRv0N6SohNonLWgP86g5fiI,109
|
|
338
|
+
ob_metaflow-2.12.6.1.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
|
|
339
|
+
ob_metaflow-2.12.6.1.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
|
|
340
|
+
ob_metaflow-2.12.6.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|