ob-metaflow 2.18.12.1__py2.py3-none-any.whl → 2.18.13.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/graph.py CHANGED
@@ -94,7 +94,7 @@ class DAGNode(object):
94
94
  case_key = None
95
95
 
96
96
  # handle string literals
97
- if isinstance(key, ast.Str):
97
+ if hasattr(ast, "Str") and isinstance(key, ast.Str):
98
98
  case_key = key.s
99
99
  elif isinstance(key, ast.Constant):
100
100
  case_key = key.value
@@ -171,7 +171,7 @@ class DAGNode(object):
171
171
  # Get condition parameter
172
172
  for keyword in tail.value.keywords:
173
173
  if keyword.arg == "condition":
174
- if isinstance(keyword.value, ast.Str):
174
+ if hasattr(ast, "Str") and isinstance(keyword.value, ast.Str):
175
175
  condition_name = keyword.value.s
176
176
  elif isinstance(keyword.value, ast.Constant) and isinstance(
177
177
  keyword.value.value, str
@@ -618,7 +618,16 @@ class ArgoWorkflows(object):
618
618
  # the JSON equivalent of None to please argo-workflows. Unfortunately it
619
619
  # has the side effect of casting the parameter value to string null during
620
620
  # execution - which needs to be fixed imminently.
621
- if not is_required or default_value is not None:
621
+ if default_value is None:
622
+ default_value = json.dumps(None)
623
+ elif param_type == "JSON":
624
+ if not isinstance(default_value, str):
625
+ # once to serialize the default value if needed.
626
+ default_value = json.dumps(default_value)
627
+ # adds outer quotes to param
628
+ default_value = json.dumps(default_value)
629
+ else:
630
+ # Make argo sensors happy
622
631
  default_value = json.dumps(default_value)
623
632
 
624
633
  parameters[param.name] = dict(
@@ -950,11 +959,7 @@ class ArgoWorkflows(object):
950
959
  Arguments().parameters(
951
960
  [
952
961
  Parameter(parameter["name"])
953
- .value(
954
- "'%s'" % parameter["value"]
955
- if parameter["type"] == "JSON"
956
- else parameter["value"]
957
- )
962
+ .value(parameter["value"])
958
963
  .description(parameter.get("description"))
959
964
  # TODO: Better handle IncludeFile in Argo Workflows UI.
960
965
  for parameter in self.parameters.values()
@@ -2063,7 +2068,7 @@ class ArgoWorkflows(object):
2063
2068
  # {{foo.bar['param_name']}}.
2064
2069
  # https://argoproj.github.io/argo-events/tutorials/02-parameterization/
2065
2070
  # http://masterminds.github.io/sprig/strings.html
2066
- "--%s={{workflow.parameters.%s}}"
2071
+ "--%s=\\\"$(python -m metaflow.plugins.argo.param_val {{=toBase64(workflow.parameters['%s'])}})\\\""
2067
2072
  % (parameter["name"], parameter["name"])
2068
2073
  for parameter in self.parameters.values()
2069
2074
  ]
@@ -3893,37 +3898,27 @@ class ArgoWorkflows(object):
3893
3898
  # NOTE: We need the conditional logic in order to successfully fall back to the default value
3894
3899
  # when the event payload does not contain a key for a parameter.
3895
3900
  # NOTE: Keys might contain dashes, so use the safer 'get' for fetching the value
3896
- data_template='{{ if (hasKey $.Input.body.payload "%s") }}{{- (get $.Input.body.payload "%s" %s) -}}{{- else -}}{{ (fail "use-default-instead") }}{{- end -}}'
3901
+ data_template='{{ if (hasKey $.Input.body.payload "%s") }}%s{{- else -}}{{ (fail "use-default-instead") }}{{- end -}}'
3897
3902
  % (
3898
- v,
3899
3903
  v,
3900
3904
  (
3901
- "| toRawJson | squote"
3905
+ '{{- $pv:=(get $.Input.body.payload "%s") -}}{{ if kindIs "string" $pv }}{{- $pv | toRawJson -}}{{- else -}}{{ $pv | toRawJson | toRawJson }}{{- end -}}'
3906
+ % v
3902
3907
  if self.parameters[
3903
3908
  parameter_name
3904
3909
  ]["type"]
3905
3910
  == "JSON"
3906
- else "| toRawJson"
3911
+ else '{{- (get $.Input.body.payload "%s" | toRawJson) -}}'
3912
+ % v
3907
3913
  ),
3908
3914
  ),
3909
3915
  # Unfortunately the sensor needs to
3910
3916
  # record the default values for
3911
3917
  # the parameters - there doesn't seem
3912
3918
  # to be any way for us to skip
3913
- value=(
3914
- json.dumps(
3915
- self.parameters[parameter_name][
3916
- "value"
3917
- ]
3918
- )
3919
- if self.parameters[parameter_name][
3920
- "type"
3921
- ]
3922
- == "JSON"
3923
- else self.parameters[
3924
- parameter_name
3925
- ]["value"]
3926
- ),
3919
+ value=self.parameters[parameter_name][
3920
+ "value"
3921
+ ],
3927
3922
  )
3928
3923
  .dest(
3929
3924
  # this undocumented (mis?)feature in
@@ -0,0 +1,19 @@
1
+ import sys
2
+ import base64
3
+ import json
4
+
5
+
6
+ def parse_parameter_value(base64_value):
7
+ val = base64.b64decode(base64_value).decode("utf-8")
8
+
9
+ try:
10
+ return json.loads(val)
11
+ except json.decoder.JSONDecodeError:
12
+ # fallback to using the original value.
13
+ return val
14
+
15
+
16
+ if __name__ == "__main__":
17
+ base64_val = sys.argv[1]
18
+
19
+ print(parse_parameter_value(base64_val))
@@ -1,7 +1,3 @@
1
- """
2
-
3
- """
4
-
5
1
  from collections import namedtuple
6
2
  from io import BytesIO
7
3
  import os
@@ -67,20 +63,18 @@ class CardDatastore(object):
67
63
  result = CARD_LOCALROOT
68
64
  if result is None:
69
65
  current_path = os.getcwd()
70
- check_dir = os.path.join(current_path, DATASTORE_LOCAL_DIR, CARD_SUFFIX)
66
+ check_dir = os.path.join(current_path, DATASTORE_LOCAL_DIR)
71
67
  check_dir = os.path.realpath(check_dir)
72
68
  orig_path = check_dir
73
69
  while not os.path.isdir(check_dir):
74
70
  new_path = os.path.dirname(current_path)
75
71
  if new_path == current_path:
76
- break # We are no longer making upward progress
72
+ # No longer making upward progress so we
73
+ # return the top level path
74
+ return os.path.join(orig_path, CARD_SUFFIX)
77
75
  current_path = new_path
78
- check_dir = os.path.join(
79
- current_path, DATASTORE_LOCAL_DIR, CARD_SUFFIX
80
- )
81
- result = orig_path
82
-
83
- return result
76
+ check_dir = os.path.join(current_path, DATASTORE_LOCAL_DIR)
77
+ return os.path.join(check_dir, CARD_SUFFIX)
84
78
  else:
85
79
  # Let's make it obvious we need to update this block for each new datastore backend...
86
80
  raise NotImplementedError(
@@ -351,8 +351,10 @@ class MetaflowAPI(object):
351
351
  class_dict = {
352
352
  "__module__": "metaflow",
353
353
  "_API_NAME": flow_file,
354
- "_internal_getattr": functools.partial(
355
- _lazy_load_command, cli_collection, "_compute_flow_parameters"
354
+ "_internal_getattr": staticmethod(
355
+ functools.partial(
356
+ _lazy_load_command, cli_collection, "_compute_flow_parameters"
357
+ )
356
358
  ),
357
359
  "__getattr__": getattr_wrapper,
358
360
  }
metaflow/version.py CHANGED
@@ -1 +1 @@
1
- metaflow_version = "2.18.12.1"
1
+ metaflow_version = "2.18.13.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ob-metaflow
3
- Version: 2.18.12.1
3
+ Version: 2.18.13.1
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,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.18.12.1; extra == "stubs"
15
+ Requires-Dist: metaflow-stubs==2.18.13.1; extra == "stubs"
16
16
  Dynamic: author
17
17
  Dynamic: author-email
18
18
  Dynamic: description
@@ -11,7 +11,7 @@ metaflow/event_logger.py,sha256=joTVRqZPL87nvah4ZOwtqWX8NeraM_CXKXXGVpKGD8o,780
11
11
  metaflow/events.py,sha256=ahjzkSbSnRCK9RZ-9vTfUviz_6gMvSO9DGkJ86X80-k,5300
12
12
  metaflow/exception.py,sha256=_m9ZBJM0cooHRslDqfxCPQmkChqaTh6fGxp7HvISnYI,5161
13
13
  metaflow/flowspec.py,sha256=9wsO2_QoO_VHKusKdpslfbwQREOwf0fAzF-DSEA0iZ8,41968
14
- metaflow/graph.py,sha256=UOeClj-JeORRlZWOQMI1CirkrCpTvVWvRcSwODCajMg,19263
14
+ metaflow/graph.py,sha256=b7-5hStqurdTO0RFVEhtUcwrPh2Xt3gTZkAE_B2LSOM,19311
15
15
  metaflow/includefile.py,sha256=NXERo_halboBCjvnS5iCjnBMyCMlQMnT2mRe6kxl2xU,21978
16
16
  metaflow/integrations.py,sha256=LlsaoePRg03DjENnmLxZDYto3NwWc9z_PtU6nJxLldg,1480
17
17
  metaflow/lint.py,sha256=A2NdUq_MnQal_RUCMC8ZOSR0VYZGyi2mSgwPQB0UzQo,15343
@@ -36,7 +36,7 @@ metaflow/tuple_util.py,sha256=_G5YIEhuugwJ_f6rrZoelMFak3DqAR2tt_5CapS1XTY,830
36
36
  metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
37
37
  metaflow/util.py,sha256=g2SOU_CRzJLgDM_UGF9QDMANMAIHAsDRXE6S76_YzsY,14594
38
38
  metaflow/vendor.py,sha256=A82CGHfStZGDP5pQ5XzRjFkbN1ZC-vFmghXIrzMDDNg,5868
39
- metaflow/version.py,sha256=2cKUjtrRRpnQJ7RqQB3xlCbx6UQR9dWT4YXy_FuSYaA,31
39
+ metaflow/version.py,sha256=s3ABLD1zukBFPoqGfMPJvxqaM8i_0l3ufzjOAyt7X6g,31
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
@@ -231,7 +231,7 @@ metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=iDReG-7FKnumrtQg-HY6cCUAAqN
231
231
  metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
232
232
  metaflow/plugins/argo/argo_client.py,sha256=oT4ZrCyE7CYEbqNN0SfoZfSHd5fYW9XtuOrQEiUd1co,17230
233
233
  metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
234
- metaflow/plugins/argo/argo_workflows.py,sha256=IPwbjWF7o2FGyIPI9I2mn-7G8VhEoAje79Kx0I4rygE,219817
234
+ metaflow/plugins/argo/argo_workflows.py,sha256=Y6gR8d0t5tz8DvNOEDHtZ_wu8ZNO3kjUA2Kk-U5X86c,219587
235
235
  metaflow/plugins/argo/argo_workflows_cli.py,sha256=GRDsiE8QT9HEdeAUODtyyGiqePhShSkwJJ8tiPQwwiI,52992
236
236
  metaflow/plugins/argo/argo_workflows_decorator.py,sha256=CLSjPqFTGucZ2_dSQGAYkoWWUZBQ9TCBXul4rxhDj3w,8282
237
237
  metaflow/plugins/argo/argo_workflows_deployer.py,sha256=6kHxEnYXJwzNCM9swI8-0AckxtPWqwhZLerYkX8fxUM,4444
@@ -241,6 +241,7 @@ metaflow/plugins/argo/conditional_input_paths.py,sha256=Vtca74XbhnqAXgJJXKasLEa2
241
241
  metaflow/plugins/argo/exit_hooks.py,sha256=nh8IEkzAtQnbKVnh3N9CVnVKZB39Bjm3e0LFrACsLz8,6109
242
242
  metaflow/plugins/argo/generate_input_paths.py,sha256=loYsI6RFX9LlFsHb7Fe-mzlTTtRdySoOu7sYDy-uXK0,881
243
243
  metaflow/plugins/argo/jobset_input_paths.py,sha256=-h0E_e0w6FMiBUod9Rf_XOSCtZv_C0exacw4q1SfIfg,501
244
+ metaflow/plugins/argo/param_val.py,sha256=qfMsXyT6bjfUz0eqNpbitFcps2G5XwJqOAoGLt4Jpxw,390
244
245
  metaflow/plugins/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
245
246
  metaflow/plugins/aws/aws_client.py,sha256=BTiLMXa1agjja-N73oWinaOZHs-lGPbfKJG8CqdRgaU,4287
246
247
  metaflow/plugins/aws/aws_utils.py,sha256=1RVMpmVECda2ztTGlG6oJ3LXbuot1uRnHgTL9DMlGjM,9319
@@ -275,7 +276,7 @@ metaflow/plugins/cards/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
275
276
  metaflow/plugins/cards/card_cli.py,sha256=h-ib-SXjJjAm-jSQC4pEmVcsM4M3lljSjOkZBxvAvRo,35763
276
277
  metaflow/plugins/cards/card_client.py,sha256=30dFBoC3axc261GeV7QCIs_V1OHhRtS31S0wEWsjw90,9501
277
278
  metaflow/plugins/cards/card_creator.py,sha256=Da4LOkRY3IJNcGQn1V6zlSdgVjgiFm6XMcsKOe_6v70,8784
278
- metaflow/plugins/cards/card_datastore.py,sha256=bPLjBFWNlAgIjONAb0IjYXMmp9vMYlh3EYhRjAlDA0U,12714
279
+ metaflow/plugins/cards/card_datastore.py,sha256=rSiOZWNcFMGywFAU5CVb5h0WrAw74X-qzT3exFpR7yA,12741
279
280
  metaflow/plugins/cards/card_decorator.py,sha256=lu_m95tZRIkPp1wMlcT80aZRCbjuFapyuPXuelFCMAc,14073
280
281
  metaflow/plugins/cards/card_resolver.py,sha256=bjyujYpGUFbLJNwXNGHlHhL4f-gVdVKebl7XW1vWDtE,717
281
282
  metaflow/plugins/cards/card_server.py,sha256=DHv0RcepaPULWbkDahiEMrU5A281Cfb0DvHLUYd8JsU,11772
@@ -377,7 +378,7 @@ metaflow/plugins/uv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
377
378
  metaflow/plugins/uv/bootstrap.py,sha256=1UmNnnR7I1YcOtjdAmhuiU23-vj7NimUk3C9QillBaE,4380
378
379
  metaflow/plugins/uv/uv_environment.py,sha256=AYZICrBEq3Bv-taXktJwu9DhKFxNooPFwlcH379EYMs,2719
379
380
  metaflow/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
380
- metaflow/runner/click_api.py,sha256=7DVM8XuiFPpIm4vs5VUp17faEU05ixbkMwyhtJ54FWo,24478
381
+ metaflow/runner/click_api.py,sha256=WmhbrjS0H2gz-AZDEDe5Jrkctf9SvV4XrfgIBPW7nUI,24530
381
382
  metaflow/runner/deployer.py,sha256=OAAMG_l3Q1ClcY_603VZnhclVkfFe3Rf8bFRodC3poc,17138
382
383
  metaflow/runner/deployer_impl.py,sha256=q-IvwnNKPRUTpOkfzrZNrkIsjp-L-Ju75dtXmfDUqbI,7299
383
384
  metaflow/runner/metaflow_runner.py,sha256=uo3BzcAfZ67VT_f-TPe5ZHiWHn6uuojWusOMGksvX14,18178
@@ -430,12 +431,12 @@ metaflow/user_decorators/mutable_flow.py,sha256=EywKTN3cnXPQF_s62wQaC4a4aH14j8oe
430
431
  metaflow/user_decorators/mutable_step.py,sha256=-BY0UDXf_RCAEnC5JlLzEXGdiw1KD9oSrSxS_SWaB9Y,16791
431
432
  metaflow/user_decorators/user_flow_decorator.py,sha256=2yDwZq9QGv9W-7kEuKwa8o4ZkTvuHJ5ESz7VVrGViAI,9890
432
433
  metaflow/user_decorators/user_step_decorator.py,sha256=4558NR8RJtN22OyTwCXO80bAMhMTaRGMoX12b1GMcPc,27232
433
- ob_metaflow-2.18.12.1.data/data/share/metaflow/devtools/Makefile,sha256=TT4TCq8ALSfqYyGqDPocN5oPcZe2FqoCZxmGO1LmyCc,13760
434
- ob_metaflow-2.18.12.1.data/data/share/metaflow/devtools/Tiltfile,sha256=b6l_fjDO0wtxOkO85lFvuf3HDa6wnzHhhBG8yv1kQqk,23949
435
- ob_metaflow-2.18.12.1.data/data/share/metaflow/devtools/pick_services.sh,sha256=PGjQeDIigFHeoQ0asmYNdYDPIOdeYy1UYvkw2wdN4zg,2209
436
- ob_metaflow-2.18.12.1.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
437
- ob_metaflow-2.18.12.1.dist-info/METADATA,sha256=Va43toHvnfceP9no30Aqz30oy7jKKvt4GAVBgnJq3DM,5938
438
- ob_metaflow-2.18.12.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
439
- ob_metaflow-2.18.12.1.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
440
- ob_metaflow-2.18.12.1.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
441
- ob_metaflow-2.18.12.1.dist-info/RECORD,,
434
+ ob_metaflow-2.18.13.1.data/data/share/metaflow/devtools/Makefile,sha256=TT4TCq8ALSfqYyGqDPocN5oPcZe2FqoCZxmGO1LmyCc,13760
435
+ ob_metaflow-2.18.13.1.data/data/share/metaflow/devtools/Tiltfile,sha256=b6l_fjDO0wtxOkO85lFvuf3HDa6wnzHhhBG8yv1kQqk,23949
436
+ ob_metaflow-2.18.13.1.data/data/share/metaflow/devtools/pick_services.sh,sha256=PGjQeDIigFHeoQ0asmYNdYDPIOdeYy1UYvkw2wdN4zg,2209
437
+ ob_metaflow-2.18.13.1.dist-info/licenses/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
438
+ ob_metaflow-2.18.13.1.dist-info/METADATA,sha256=PivM7g25LYaUPA1rQxEqEoi6PudrI6zV1nV14nNtyXs,5938
439
+ ob_metaflow-2.18.13.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
440
+ ob_metaflow-2.18.13.1.dist-info/entry_points.txt,sha256=RvEq8VFlgGe_FfqGOZi0D7ze1hLD0pAtXeNyGfzc_Yc,103
441
+ ob_metaflow-2.18.13.1.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
442
+ ob_metaflow-2.18.13.1.dist-info/RECORD,,