ob-metaflow 2.15.6.1__py2.py3-none-any.whl → 2.15.7.2__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/plugins/argo/argo_workflows.py +66 -17
- metaflow/plugins/argo/argo_workflows_cli.py +11 -0
- metaflow/plugins/argo/argo_workflows_deployer_objects.py +7 -6
- metaflow/version.py +1 -1
- {ob_metaflow-2.15.6.1.data → ob_metaflow-2.15.7.2.data}/data/share/metaflow/devtools/Makefile +2 -2
- {ob_metaflow-2.15.6.1.dist-info → ob_metaflow-2.15.7.2.dist-info}/METADATA +4 -3
- {ob_metaflow-2.15.6.1.dist-info → ob_metaflow-2.15.7.2.dist-info}/RECORD +13 -13
- {ob_metaflow-2.15.6.1.dist-info → ob_metaflow-2.15.7.2.dist-info}/WHEEL +1 -1
- {ob_metaflow-2.15.6.1.data → ob_metaflow-2.15.7.2.data}/data/share/metaflow/devtools/Tiltfile +0 -0
- {ob_metaflow-2.15.6.1.data → ob_metaflow-2.15.7.2.data}/data/share/metaflow/devtools/pick_services.sh +0 -0
- {ob_metaflow-2.15.6.1.dist-info → ob_metaflow-2.15.7.2.dist-info}/entry_points.txt +0 -0
- {ob_metaflow-2.15.6.1.dist-info → ob_metaflow-2.15.7.2.dist-info/licenses}/LICENSE +0 -0
- {ob_metaflow-2.15.6.1.dist-info → ob_metaflow-2.15.7.2.dist-info}/top_level.txt +0 -0
|
@@ -7,6 +7,7 @@ import sys
|
|
|
7
7
|
from collections import defaultdict
|
|
8
8
|
from hashlib import sha1
|
|
9
9
|
from math import inf
|
|
10
|
+
from typing import List
|
|
10
11
|
|
|
11
12
|
from metaflow import JSONType, current
|
|
12
13
|
from metaflow.decorators import flow_decorators
|
|
@@ -111,6 +112,7 @@ class ArgoWorkflows(object):
|
|
|
111
112
|
notify_pager_duty_integration_key=None,
|
|
112
113
|
notify_incident_io_api_key=None,
|
|
113
114
|
incident_io_alert_source_config_id=None,
|
|
115
|
+
incident_io_metadata: List[str] = None,
|
|
114
116
|
enable_heartbeat_daemon=True,
|
|
115
117
|
enable_error_msg_capture=False,
|
|
116
118
|
):
|
|
@@ -162,6 +164,9 @@ class ArgoWorkflows(object):
|
|
|
162
164
|
self.notify_pager_duty_integration_key = notify_pager_duty_integration_key
|
|
163
165
|
self.notify_incident_io_api_key = notify_incident_io_api_key
|
|
164
166
|
self.incident_io_alert_source_config_id = incident_io_alert_source_config_id
|
|
167
|
+
self.incident_io_metadata = self.parse_incident_io_metadata(
|
|
168
|
+
incident_io_metadata
|
|
169
|
+
)
|
|
165
170
|
self.enable_heartbeat_daemon = enable_heartbeat_daemon
|
|
166
171
|
self.enable_error_msg_capture = enable_error_msg_capture
|
|
167
172
|
self.parameters = self._process_parameters()
|
|
@@ -288,6 +293,21 @@ class ArgoWorkflows(object):
|
|
|
288
293
|
|
|
289
294
|
return True
|
|
290
295
|
|
|
296
|
+
@staticmethod
|
|
297
|
+
def parse_incident_io_metadata(metadata: List[str] = None):
|
|
298
|
+
"parse key value pairs into a dict for incident.io metadata if given"
|
|
299
|
+
parsed_metadata = None
|
|
300
|
+
if metadata is not None:
|
|
301
|
+
parsed_metadata = {}
|
|
302
|
+
for kv in metadata:
|
|
303
|
+
key, value = kv.split("=", 1)
|
|
304
|
+
if key in parsed_metadata:
|
|
305
|
+
raise MetaflowException(
|
|
306
|
+
"Incident.io Metadata *%s* provided multiple times" % key
|
|
307
|
+
)
|
|
308
|
+
parsed_metadata[key] = value
|
|
309
|
+
return parsed_metadata
|
|
310
|
+
|
|
291
311
|
@classmethod
|
|
292
312
|
def trigger(cls, name, parameters=None):
|
|
293
313
|
if parameters is None:
|
|
@@ -525,6 +545,7 @@ class ArgoWorkflows(object):
|
|
|
525
545
|
default_value = json.dumps(default_value)
|
|
526
546
|
|
|
527
547
|
parameters[param.name] = dict(
|
|
548
|
+
python_var_name=var,
|
|
528
549
|
name=param.name,
|
|
529
550
|
value=default_value,
|
|
530
551
|
type=param_type,
|
|
@@ -839,7 +860,11 @@ class ArgoWorkflows(object):
|
|
|
839
860
|
Arguments().parameters(
|
|
840
861
|
[
|
|
841
862
|
Parameter(parameter["name"])
|
|
842
|
-
.value(
|
|
863
|
+
.value(
|
|
864
|
+
"'%s'" % parameter["value"]
|
|
865
|
+
if parameter["type"] == "JSON"
|
|
866
|
+
else parameter["value"]
|
|
867
|
+
)
|
|
843
868
|
.description(parameter.get("description"))
|
|
844
869
|
# TODO: Better handle IncludeFile in Argo Workflows UI.
|
|
845
870
|
for parameter in self.parameters.values()
|
|
@@ -1595,11 +1620,7 @@ class ArgoWorkflows(object):
|
|
|
1595
1620
|
# {{foo.bar['param_name']}}.
|
|
1596
1621
|
# https://argoproj.github.io/argo-events/tutorials/02-parameterization/
|
|
1597
1622
|
# http://masterminds.github.io/sprig/strings.html
|
|
1598
|
-
|
|
1599
|
-
"--%s='{{workflow.parameters.%s}}'"
|
|
1600
|
-
if parameter["type"] == "JSON"
|
|
1601
|
-
else "--%s={{workflow.parameters.%s}}"
|
|
1602
|
-
)
|
|
1623
|
+
"--%s={{workflow.parameters.%s}}"
|
|
1603
1624
|
% (parameter["name"], parameter["name"])
|
|
1604
1625
|
for parameter in self.parameters.values()
|
|
1605
1626
|
]
|
|
@@ -2574,9 +2595,12 @@ class ArgoWorkflows(object):
|
|
|
2574
2595
|
else None
|
|
2575
2596
|
),
|
|
2576
2597
|
"metadata": {
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2598
|
+
**(self.incident_io_metadata or {}),
|
|
2599
|
+
**{
|
|
2600
|
+
"run_status": "failed",
|
|
2601
|
+
"flow_name": self.flow.name,
|
|
2602
|
+
"run_id": "argo-{{workflow.name}}",
|
|
2603
|
+
},
|
|
2580
2604
|
},
|
|
2581
2605
|
}
|
|
2582
2606
|
)
|
|
@@ -2625,9 +2649,12 @@ class ArgoWorkflows(object):
|
|
|
2625
2649
|
else None
|
|
2626
2650
|
),
|
|
2627
2651
|
"metadata": {
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2652
|
+
**(self.incident_io_metadata or {}),
|
|
2653
|
+
**{
|
|
2654
|
+
"run_status": "succeeded",
|
|
2655
|
+
"flow_name": self.flow.name,
|
|
2656
|
+
"run_id": "argo-{{workflow.name}}",
|
|
2657
|
+
},
|
|
2631
2658
|
},
|
|
2632
2659
|
}
|
|
2633
2660
|
)
|
|
@@ -3197,15 +3224,37 @@ class ArgoWorkflows(object):
|
|
|
3197
3224
|
# NOTE: We need the conditional logic in order to successfully fall back to the default value
|
|
3198
3225
|
# when the event payload does not contain a key for a parameter.
|
|
3199
3226
|
# NOTE: Keys might contain dashes, so use the safer 'get' for fetching the value
|
|
3200
|
-
data_template='{{ if (hasKey $.Input.body.payload "%s") }}{{- (get $.Input.body.payload "%s"
|
|
3201
|
-
% (
|
|
3227
|
+
data_template='{{ if (hasKey $.Input.body.payload "%s") }}{{- (get $.Input.body.payload "%s" %s) -}}{{- else -}}{{ (fail "use-default-instead") }}{{- end -}}'
|
|
3228
|
+
% (
|
|
3229
|
+
v,
|
|
3230
|
+
v,
|
|
3231
|
+
(
|
|
3232
|
+
"| toRawJson | squote"
|
|
3233
|
+
if self.parameters[
|
|
3234
|
+
parameter_name
|
|
3235
|
+
]["type"]
|
|
3236
|
+
== "JSON"
|
|
3237
|
+
else "| toRawJson"
|
|
3238
|
+
),
|
|
3239
|
+
),
|
|
3202
3240
|
# Unfortunately the sensor needs to
|
|
3203
3241
|
# record the default values for
|
|
3204
3242
|
# the parameters - there doesn't seem
|
|
3205
3243
|
# to be any way for us to skip
|
|
3206
|
-
value=
|
|
3207
|
-
|
|
3208
|
-
|
|
3244
|
+
value=(
|
|
3245
|
+
json.dumps(
|
|
3246
|
+
self.parameters[parameter_name][
|
|
3247
|
+
"value"
|
|
3248
|
+
]
|
|
3249
|
+
)
|
|
3250
|
+
if self.parameters[parameter_name][
|
|
3251
|
+
"type"
|
|
3252
|
+
]
|
|
3253
|
+
== "JSON"
|
|
3254
|
+
else self.parameters[
|
|
3255
|
+
parameter_name
|
|
3256
|
+
]["value"]
|
|
3257
|
+
),
|
|
3209
3258
|
)
|
|
3210
3259
|
.dest(
|
|
3211
3260
|
# this undocumented (mis?)feature in
|
|
@@ -187,6 +187,13 @@ def argo_workflows(obj, name=None):
|
|
|
187
187
|
default=None,
|
|
188
188
|
help="Incident.io Alert source config ID. Example '01GW2G3V0S59R238FAHPDS1R66'",
|
|
189
189
|
)
|
|
190
|
+
@click.option(
|
|
191
|
+
"--incident-io-metadata",
|
|
192
|
+
default=None,
|
|
193
|
+
type=str,
|
|
194
|
+
multiple=True,
|
|
195
|
+
help="Incident.io Alert Custom Metadata field in the form of Key=Value",
|
|
196
|
+
)
|
|
190
197
|
@click.option(
|
|
191
198
|
"--enable-heartbeat-daemon/--no-enable-heartbeat-daemon",
|
|
192
199
|
default=False,
|
|
@@ -226,6 +233,7 @@ def create(
|
|
|
226
233
|
notify_pager_duty_integration_key=None,
|
|
227
234
|
notify_incident_io_api_key=None,
|
|
228
235
|
incident_io_alert_source_config_id=None,
|
|
236
|
+
incident_io_metadata=None,
|
|
229
237
|
enable_heartbeat_daemon=True,
|
|
230
238
|
deployer_attribute_file=None,
|
|
231
239
|
enable_error_msg_capture=False,
|
|
@@ -283,6 +291,7 @@ def create(
|
|
|
283
291
|
notify_pager_duty_integration_key,
|
|
284
292
|
notify_incident_io_api_key,
|
|
285
293
|
incident_io_alert_source_config_id,
|
|
294
|
+
incident_io_metadata,
|
|
286
295
|
enable_heartbeat_daemon,
|
|
287
296
|
enable_error_msg_capture,
|
|
288
297
|
)
|
|
@@ -459,6 +468,7 @@ def make_flow(
|
|
|
459
468
|
notify_pager_duty_integration_key,
|
|
460
469
|
notify_incident_io_api_key,
|
|
461
470
|
incident_io_alert_source_config_id,
|
|
471
|
+
incident_io_metadata,
|
|
462
472
|
enable_heartbeat_daemon,
|
|
463
473
|
enable_error_msg_capture,
|
|
464
474
|
):
|
|
@@ -538,6 +548,7 @@ def make_flow(
|
|
|
538
548
|
notify_pager_duty_integration_key=notify_pager_duty_integration_key,
|
|
539
549
|
notify_incident_io_api_key=notify_incident_io_api_key,
|
|
540
550
|
incident_io_alert_source_config_id=incident_io_alert_source_config_id,
|
|
551
|
+
incident_io_metadata=incident_io_metadata,
|
|
541
552
|
enable_heartbeat_daemon=enable_heartbeat_daemon,
|
|
542
553
|
enable_error_msg_capture=enable_error_msg_capture,
|
|
543
554
|
)
|
|
@@ -19,6 +19,7 @@ def generate_fake_flow_file_contents(
|
|
|
19
19
|
):
|
|
20
20
|
params_code = ""
|
|
21
21
|
for _, param_details in param_info.items():
|
|
22
|
+
param_python_var_name = param_details["python_var_name"]
|
|
22
23
|
param_name = param_details["name"]
|
|
23
24
|
param_type = param_details["type"]
|
|
24
25
|
param_help = param_details["description"]
|
|
@@ -26,21 +27,21 @@ def generate_fake_flow_file_contents(
|
|
|
26
27
|
|
|
27
28
|
if param_type == "JSON":
|
|
28
29
|
params_code += (
|
|
29
|
-
f" {
|
|
30
|
-
f"type=JSONType, help='{param_help}', required={param_required})\n"
|
|
30
|
+
f" {param_python_var_name} = Parameter('{param_name}', "
|
|
31
|
+
f"type=JSONType, help='''{param_help}''', required={param_required})\n"
|
|
31
32
|
)
|
|
32
33
|
elif param_type == "FilePath":
|
|
33
34
|
is_text = param_details.get("is_text", True)
|
|
34
35
|
encoding = param_details.get("encoding", "utf-8")
|
|
35
36
|
params_code += (
|
|
36
|
-
f" {
|
|
37
|
-
f"is_text={is_text}, encoding='{encoding}', help='{param_help}', "
|
|
37
|
+
f" {param_python_var_name} = IncludeFile('{param_name}', "
|
|
38
|
+
f"is_text={is_text}, encoding='{encoding}', help='''{param_help}''', "
|
|
38
39
|
f"required={param_required})\n"
|
|
39
40
|
)
|
|
40
41
|
else:
|
|
41
42
|
params_code += (
|
|
42
|
-
f" {
|
|
43
|
-
f"type={param_type}, help='{param_help}', required={param_required})\n"
|
|
43
|
+
f" {param_python_var_name} = Parameter('{param_name}', "
|
|
44
|
+
f"type={param_type}, help='''{param_help}''', required={param_required})\n"
|
|
44
45
|
)
|
|
45
46
|
|
|
46
47
|
project_decorator = f"@project(name='{project_name}')\n" if project_name else ""
|
metaflow/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
metaflow_version = "2.15.
|
|
1
|
+
metaflow_version = "2.15.7.2"
|
{ob_metaflow-2.15.6.1.data → ob_metaflow-2.15.7.2.data}/data/share/metaflow/devtools/Makefile
RENAMED
|
@@ -75,7 +75,7 @@ check-docker:
|
|
|
75
75
|
@if [ "$(shell uname)" = "Darwin" ]; then \
|
|
76
76
|
open -a Docker || (echo "❌ Please start Docker Desktop" && exit 1); \
|
|
77
77
|
else \
|
|
78
|
-
|
|
78
|
+
docker info >/dev/null 2>&1 || (echo "❌ Docker daemon is not running." && exit 1); \
|
|
79
79
|
fi
|
|
80
80
|
@echo "✅ Docker is running"
|
|
81
81
|
|
|
@@ -339,4 +339,4 @@ ui: setup-tilt
|
|
|
339
339
|
|
|
340
340
|
.PHONY: install-helm setup-minikube setup-tilt teardown-minikube tunnel up down check-docker install-curl install-gum install-brew up down dashboard shell ui all-up help
|
|
341
341
|
|
|
342
|
-
.DEFAULT_GOAL := help
|
|
342
|
+
.DEFAULT_GOAL := help
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: ob-metaflow
|
|
3
|
-
Version: 2.15.
|
|
3
|
+
Version: 2.15.7.2
|
|
4
4
|
Summary: Metaflow: More AI and ML, Less Engineering
|
|
5
5
|
Author: Netflix, Outerbounds & the Metaflow Community
|
|
6
6
|
Author-email: help@outerbounds.co
|
|
@@ -12,12 +12,13 @@ Requires-Dist: boto3
|
|
|
12
12
|
Requires-Dist: pylint
|
|
13
13
|
Requires-Dist: kubernetes
|
|
14
14
|
Provides-Extra: stubs
|
|
15
|
-
Requires-Dist: metaflow-stubs==2.15.
|
|
15
|
+
Requires-Dist: metaflow-stubs==2.15.7.2; extra == "stubs"
|
|
16
16
|
Dynamic: author
|
|
17
17
|
Dynamic: author-email
|
|
18
18
|
Dynamic: description
|
|
19
19
|
Dynamic: description-content-type
|
|
20
20
|
Dynamic: license
|
|
21
|
+
Dynamic: license-file
|
|
21
22
|
Dynamic: provides-extra
|
|
22
23
|
Dynamic: requires-dist
|
|
23
24
|
Dynamic: summary
|
|
@@ -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=mJBkV5tShIyCsLDeM1zygQGeciQVMrVPm_qI8Oi33G0,14656
|
|
38
38
|
metaflow/vendor.py,sha256=LZgXrh7ZSDmD32D1T5jj3OKKpXIqqxKzdMAOc5V0SD4,5162
|
|
39
|
-
metaflow/version.py,sha256=
|
|
39
|
+
metaflow/version.py,sha256=lWXJZJA8alH7muroqa5HrAzopiFhE1Yhvcll4mVQb6U,30
|
|
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
|
|
@@ -209,11 +209,11 @@ metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=iDReG-7FKnumrtQg-HY6cCUAAqN
|
|
|
209
209
|
metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
210
210
|
metaflow/plugins/argo/argo_client.py,sha256=A1kI9rjVjCadDsBscZ2Wk8xRBI6GNgWV6SU7TyrdfrI,16530
|
|
211
211
|
metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
|
|
212
|
-
metaflow/plugins/argo/argo_workflows.py,sha256=
|
|
213
|
-
metaflow/plugins/argo/argo_workflows_cli.py,sha256=
|
|
212
|
+
metaflow/plugins/argo/argo_workflows.py,sha256=jc08uT7dSliuUrc9WRu6iJc9CpRENme1j78uZ2Os6LQ,187945
|
|
213
|
+
metaflow/plugins/argo/argo_workflows_cli.py,sha256=Ka-ea4x19E6DrYgGm5ZwormxEbTGdun8fyHl-mh0tfc,38265
|
|
214
214
|
metaflow/plugins/argo/argo_workflows_decorator.py,sha256=ogCSBmwsC2C3eusydrgjuAJd4qK18f1sI4jJwA4Fd-o,7800
|
|
215
215
|
metaflow/plugins/argo/argo_workflows_deployer.py,sha256=6kHxEnYXJwzNCM9swI8-0AckxtPWqwhZLerYkX8fxUM,4444
|
|
216
|
-
metaflow/plugins/argo/argo_workflows_deployer_objects.py,sha256=
|
|
216
|
+
metaflow/plugins/argo/argo_workflows_deployer_objects.py,sha256=lRRHUcpiyJZFltthxZoIp7aJWwy7pcdhaRm0etKN9es,14182
|
|
217
217
|
metaflow/plugins/argo/capture_error.py,sha256=Ys9dscGrTpW-ZCirLBU0gD9qBM0BjxyxGlUMKcwewQc,1852
|
|
218
218
|
metaflow/plugins/argo/generate_input_paths.py,sha256=loYsI6RFX9LlFsHb7Fe-mzlTTtRdySoOu7sYDy-uXK0,881
|
|
219
219
|
metaflow/plugins/argo/jobset_input_paths.py,sha256=-h0E_e0w6FMiBUod9Rf_XOSCtZv_C0exacw4q1SfIfg,501
|
|
@@ -389,12 +389,12 @@ metaflow/user_configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
389
389
|
metaflow/user_configs/config_decorators.py,sha256=qCKVAvd0NKgaCxQ2OThes5-DYHXq6A1HqURubYNeFdw,20481
|
|
390
390
|
metaflow/user_configs/config_options.py,sha256=m6jccSpzI4qUJ7vyYkYBIf8G3V0Caunxg_k7zg4Zlqg,21067
|
|
391
391
|
metaflow/user_configs/config_parameters.py,sha256=oeJGVKu1ao_YQX6Lg6P2FEv5k5-_F4sARLlVpTW9ezM,15502
|
|
392
|
-
ob_metaflow-2.15.
|
|
393
|
-
ob_metaflow-2.15.
|
|
394
|
-
ob_metaflow-2.15.
|
|
395
|
-
ob_metaflow-2.15.
|
|
396
|
-
ob_metaflow-2.15.
|
|
397
|
-
ob_metaflow-2.15.
|
|
398
|
-
ob_metaflow-2.15.
|
|
399
|
-
ob_metaflow-2.15.
|
|
400
|
-
ob_metaflow-2.15.
|
|
392
|
+
ob_metaflow-2.15.7.2.data/data/share/metaflow/devtools/Makefile,sha256=kZJDrvY2qRfqkue3mBecZutaGs35zsZR_vNu8WOBcto,13632
|
|
393
|
+
ob_metaflow-2.15.7.2.data/data/share/metaflow/devtools/Tiltfile,sha256=P5_rn_F3xYLN1_cEAQ9mNeS22HG2rb8beKIz2RIK6fU,20634
|
|
394
|
+
ob_metaflow-2.15.7.2.data/data/share/metaflow/devtools/pick_services.sh,sha256=DCnrMXwtApfx3B4S-YiZESMyAFHbXa3VuNL0MxPLyiE,2196
|
|
395
|
+
ob_metaflow-2.15.7.2.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
|
|
396
|
+
ob_metaflow-2.15.7.2.dist-info/METADATA,sha256=Z8Py18x-ulyAd9q44G4I6lAOR17XpafYHY43fVvDFq4,5935
|
|
397
|
+
ob_metaflow-2.15.7.2.dist-info/WHEEL,sha256=MAQBAzGbXNI3bUmkDsiV_duv8i-gcdnLzw7cfUFwqhU,109
|
|
398
|
+
ob_metaflow-2.15.7.2.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
|
|
399
|
+
ob_metaflow-2.15.7.2.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
|
|
400
|
+
ob_metaflow-2.15.7.2.dist-info/RECORD,,
|
{ob_metaflow-2.15.6.1.data → ob_metaflow-2.15.7.2.data}/data/share/metaflow/devtools/Tiltfile
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|