From 993d6f09278fbb12060a0cc872e8430029da25ce Mon Sep 17 00:00:00 2001 From: Valay Dave Date: Mon, 20 Nov 2023 22:06:18 -0800 Subject: [PATCH] [card-core][MET-104] revert `MetaflowCard.render` signature to original - Introduced a `runtime_data` property that has access to the final data object when `render` is called. - Remove the usage of `inspect` --- metaflow/plugins/cards/card_cli.py | 37 +++++++++------------ metaflow/plugins/cards/card_modules/card.py | 6 ++-- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/metaflow/plugins/cards/card_cli.py b/metaflow/plugins/cards/card_cli.py index 9aee55fd9c..de52546a29 100644 --- a/metaflow/plugins/cards/card_cli.py +++ b/metaflow/plugins/cards/card_cli.py @@ -8,7 +8,6 @@ import json import uuid import signal -import inspect import random from contextlib import contextmanager from functools import wraps @@ -427,7 +426,7 @@ def update_card(mf_card, mode, task, data, timeout_value=None): """ def _reload_token(): - if data is None or "render_seq" not in data: + if "render_seq" not in data: return "never" if data["render_seq"] == "final": @@ -461,27 +460,21 @@ def _safe_call_function(func, *args, **kwargs): return None, False def _call(): - # check compatibility with old render()-method that doesn't accept the data arg - new_render = "data" in inspect.getfullargspec(mf_card.render).args if mode == "render": - if new_render: - output = _add_token_html(mf_card.render(task, data)) - return CardRenderInfo( - mode=mode, - is_implemented=True, - data=output, - timed_out=False, - timeout_stack_trace=None, - ) - else: - output = _add_token_html(mf_card.render(task)) - return CardRenderInfo( - mode=mode, - is_implemented=True, - data=output, - timed_out=False, - timeout_stack_trace=None, - ) + setattr( + mf_card.__class__, + "runtime_data", + property(fget=lambda _, data=data: data), + ) + output = _add_token_html(mf_card.render(task)) + return CardRenderInfo( + mode=mode, + is_implemented=True, + data=output, + timed_out=False, + timeout_stack_trace=None, + ) + elif mode == "render_runtime": # Since many cards created by metaflow users may not have implemented a # `render_time` / `refresh` methods, it can result in an exception and thereby diff --git a/metaflow/plugins/cards/card_modules/card.py b/metaflow/plugins/cards/card_modules/card.py index 75270866cb..52c4c0dd8b 100644 --- a/metaflow/plugins/cards/card_modules/card.py +++ b/metaflow/plugins/cards/card_modules/card.py @@ -63,6 +63,9 @@ class MetaflowCard(object): scope = "task" # can be task | run + # FIXME document runtime_data + runtime_data = None + def __init__(self, options={}, components=[], graph=None): pass @@ -74,8 +77,7 @@ def _get_mustache(self): except ImportError: return None - # FIXME document data - def render(self, task, data=None) -> str: + def render(self, task) -> str: """ Produce custom card contents in HTML.