Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stacked @card v1.2 : Test cases for Multiple @cards #898

Merged
merged 105 commits into from
Jan 24, 2022
Merged
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
0ad884b
`card view`/`get` can also now show list as json
valayDave Jan 5, 2022
e829efe
changing `echo` to `print`
valayDave Jan 5, 2022
469dfa3
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 5, 2022
249da07
Multiple Cards Test Suite Mods (#27)
valayDave Jan 5, 2022
ea33004
Added test case for multiple cards
valayDave Jan 5, 2022
a6f467d
Added tests card, summary :
valayDave Jan 5, 2022
713a93e
fixed `DefaultEditableCardTest` test case
valayDave Jan 6, 2022
47fbc3f
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 6, 2022
67e19b0
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 6, 2022
21b570b
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 6, 2022
216bbb4
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 6, 2022
5c322a7
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 6, 2022
fe7cb20
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 7, 2022
1bf0126
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 7, 2022
1d50de8
ensure `test_pathspec_card` has no duplicates
valayDave Jan 7, 2022
630f3e6
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 7, 2022
b8a80f6
Merge branch 'master' into multiple-card-decorators
valayDave Jan 7, 2022
20f9e1a
Merge branch 'multiple-card-decorators' into multiple-card-decorators…
valayDave Jan 7, 2022
bcd5e0e
Merge branch 'multiple-card-decorators-custom-components-final-api-de…
valayDave Jan 7, 2022
bcddb92
Merge branch 'multiple-card-decorators-read-cli' into multiple-card-d…
valayDave Jan 7, 2022
3662239
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 7, 2022
285424f
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 7, 2022
2902fbb
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 8, 2022
57cea32
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 8, 2022
706adf6
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 8, 2022
daa73a4
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 8, 2022
d3d8dc8
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 8, 2022
8e99878
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 10, 2022
e4191c8
Merge branch 'multiple-card-decorators-custom-components-final-api-de…
valayDave Jan 10, 2022
8907d40
test case fix : `current.cards` to `current.card`
valayDave Jan 10, 2022
544dab5
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 10, 2022
6a3d28e
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 10, 2022
d5e5793
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 10, 2022
9c98a99
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 10, 2022
4838ea5
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 11, 2022
7b2948c
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 11, 2022
0cfa5be
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 12, 2022
393e21f
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 12, 2022
aedc79a
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 12, 2022
5382119
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 12, 2022
fa24d81
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 12, 2022
89237ff
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 13, 2022
5b05015
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 13, 2022
d42b053
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 14, 2022
1a5d322
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 14, 2022
7688a28
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 14, 2022
c88c48d
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 14, 2022
180f96c
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 17, 2022
9b90457
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 17, 2022
7b8a9b4
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 18, 2022
d6edaab
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 18, 2022
30b6d78
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 18, 2022
f6aeea1
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 18, 2022
afdb993
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 18, 2022
593442a
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 18, 2022
77241f1
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 19, 2022
ad4b0f4
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 20, 2022
97f4e4a
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 20, 2022
f125a6f
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 20, 2022
3aea368
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 20, 2022
fcf1fa6
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 20, 2022
f05781d
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 21, 2022
ce76652
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 21, 2022
aa032fb
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 21, 2022
85a6603
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 21, 2022
266b085
Merge branch 'multiple-card-decorators-graph-changes' into multiple-c…
valayDave Jan 21, 2022
c7a5049
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 21, 2022
7392a8f
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 21, 2022
d66292e
Merge branch 'multiple-card-decorators-namespace-packages' of github.…
valayDave Jan 21, 2022
24486a9
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 21, 2022
aec6847
Added Test case to support import of cards.
valayDave Jan 21, 2022
5a85106
Merge branch 'multiple-card-decorators-test-cases' into mfcards-s5-mu…
valayDave Jan 21, 2022
1b0f87b
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 21, 2022
fb75f66
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 22, 2022
6e0ba7f
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 22, 2022
9cf58aa
Merge branch 'multiple-card-decorators-graph-changes' into multiple-c…
valayDave Jan 22, 2022
ad9e0c6
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 22, 2022
88ad5f1
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 22, 2022
3df3907
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 22, 2022
3ce7abb
Merge branch 'multiple-card-decorators-graph-changes' into multiple-c…
valayDave Jan 22, 2022
761c6b3
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 22, 2022
03f43f9
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 22, 2022
48bb250
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 22, 2022
27cdf11
Merge branch 'multiple-card-decorators-graph-changes' into multiple-c…
valayDave Jan 22, 2022
3b7eadf
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 22, 2022
fb360e8
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 22, 2022
7385ddc
Merge branch 'multiple-card-decorators-graph-changes' into multiple-c…
valayDave Jan 22, 2022
116fa0b
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 22, 2022
b15e240
Merge branch 'multiple-card-decorators-custom-components-final-api-de…
valayDave Jan 23, 2022
85ec278
Added Env var to tests to avoid warnings added to cards.
valayDave Jan 23, 2022
6e8b2e0
Merge branch 'multiple-card-decorators-custom-components-actual-compo…
valayDave Jan 23, 2022
e506dee
Merge branch 'multiple-card-decorators-graph-changes' into multiple-c…
valayDave Jan 23, 2022
1a9845f
Merge branch 'multiple-card-decorators-namespace-packages' into multi…
valayDave Jan 23, 2022
78db8c2
Merge branch 'multiple-card-decorators-test-cases' into mfcards-s5-mu…
valayDave Jan 23, 2022
6338b78
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 23, 2022
21791d2
Added Test for card resume.
valayDave Jan 23, 2022
7b40504
Merge branch 'multiple-card-decorators-test-cases' into mfcards-s5-mu…
valayDave Jan 23, 2022
47e115a
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 24, 2022
bd35043
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 24, 2022
d6db30d
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 24, 2022
81118f9
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 24, 2022
8b930a6
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 24, 2022
1e07d7a
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 24, 2022
78358c3
Merge branch 'mfcards-s4-ns-packages' into mfcards-s5-multi-card-test…
valayDave Jan 24, 2022
ccf4f03
Stacked @card v1.2: Card Dev Docs (#899)
valayDave Jan 24, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion metaflow/plugins/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,16 +187,29 @@ def _merge_lists(base, overrides, attr):

# Cards
from .cards.card_modules.basic import DefaultCard, TaskSpecCard, ErrorCard, BlankCard
from .cards.card_modules.test_cards import TestErrorCard, TestTimeoutCard, TestMockCard
from .cards.card_modules.test_cards import (
TestErrorCard,
TestTimeoutCard,
TestMockCard,
TestPathSpecCard,
TestEditableCard,
TestEditableCard2,
TestNonEditableCard,
)
from .cards.card_modules import MF_EXTERNAL_CARDS

CARDS = [
DefaultCard,
TaskSpecCard,
ErrorCard,
BlankCard,
TestErrorCard,
TestTimeoutCard,
TestMockCard,
TestPathSpecCard,
TestEditableCard,
TestEditableCard2,
TestNonEditableCard,
BlankCard,
] + MF_EXTERNAL_CARDS
# Sidecars
Expand Down
3 changes: 3 additions & 0 deletions metaflow/plugins/cards/card_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ def __init__(
card_ds,
type,
path,
hash,
id=None,
html=None,
created_on=None,
Expand All @@ -51,6 +52,7 @@ def __init__(
self._card_id = id

# public attributes
self.hash = hash
self.type = type
self.from_resumed = from_resumed
self.origin_pathspec = origin_pathspec
Expand Down Expand Up @@ -131,6 +133,7 @@ def _get_card(self, index):
self._card_ds,
card_info.type,
path,
card_info.hash,
id=card_info.id,
html=None,
created_on=None,
Expand Down
63 changes: 63 additions & 0 deletions metaflow/plugins/cards/card_modules/test_cards.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,69 @@
from .card import MetaflowCard, MetaflowCardComponent


class TestStringComponent(MetaflowCardComponent):
def __init__(self, text):
self._text = text

def render(self):
return str(self._text)


class TestPathSpecCard(MetaflowCard):
type = "test_pathspec_card"

def render(self, task):
import random
import string

return "%s %s" % (
task.pathspec,
"".join(
random.choice(string.ascii_uppercase + string.digits) for _ in range(6)
),
)


class TestEditableCard(MetaflowCard):
type = "test_editable_card"

seperator = "$&#!!@*"

ALLOW_USER_COMPONENTS = True

def __init__(self, options={}, components=[], graph=None):
self._components = components

def render(self, task):
return self.seperator.join([str(comp) for comp in self._components])


class TestEditableCard2(MetaflowCard):
type = "test_editable_card_2"

seperator = "$&#!!@*"

ALLOW_USER_COMPONENTS = True

def __init__(self, options={}, components=[], graph=None):
self._components = components

def render(self, task):
return self.seperator.join([str(comp) for comp in self._components])


class TestNonEditableCard(MetaflowCard):
type = "test_non_editable_card"

seperator = "$&#!!@*"

def __init__(self, options={}, components=[], graph=None):
self._components = components

def render(self, task):
return self.seperator.join([str(comp) for comp in self._components])


class TestMockCard(MetaflowCard):
type = "test_mock_card"

Expand Down
3 changes: 3 additions & 0 deletions test/core/metaflow_test/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,9 @@ def assert_log(self, step, logtype, value, exact_match=True):
def get_card(self, step, task, card_type):
raise NotImplementedError()

def list_cards(self, step, task, card_type=None):
raise NotImplementedError()


def new_checker(flow):
from . import cli_check, metadata_check
Expand Down
49 changes: 46 additions & 3 deletions test/core/metaflow_test/cli_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,23 @@ def assert_log(self, step, logtype, value, exact_match=True):
)
return True

def assert_card(self, step, task, card_type, value, exact_match=True):
def assert_card(
self,
step,
task,
card_type,
value,
card_hash=None,
card_id=None,
exact_match=True,
):
from metaflow.plugins.cards.exception import CardNotPresentException

no_card_found_message = CardNotPresentException.headline
try:
card_data = self.get_card(step, task, card_type)
card_data = self.get_card(
step, task, card_type, card_hash=card_hash, card_id=card_id
)
except subprocess.CalledProcessError as e:
if no_card_found_message in e.output.decode("utf-8").strip():
card_data = None
Expand All @@ -131,7 +142,33 @@ def assert_card(self, step, task, card_type, value, exact_match=True):
)
return True

def get_card(self, step, task, card_type):
def list_cards(self, step, task, card_type=None):
from metaflow.plugins.cards.exception import CardNotPresentException

no_card_found_message = CardNotPresentException.headline
try:
card_data = self._list_cards(step, task=task, card_type=card_type)
card_data = json.loads(card_data)
except subprocess.CalledProcessError as e:
if no_card_found_message in e.output.decode("utf-8").strip():
card_data = None
else:
raise e
return card_data

def _list_cards(self, step, task=None, card_type=None):
pathspec = "%s/%s" % (self.run_id, step)
if task is not None:
pathspec = "%s/%s/%s" % (self.run_id, step, task)
cmd = ["--quiet", "card", "list", pathspec, "--as-json"]
if card_type is not None:
cmd.extend(["--type", card_type])

return self.run_cli(cmd, capture_output=True, pipe_error_to_output=True).decode(
"utf-8"
)

def get_card(self, step, task, card_type, card_hash=None, card_id=None):
cmd = [
"--quiet",
"card",
Expand All @@ -140,6 +177,12 @@ def get_card(self, step, task, card_type):
"--type",
card_type,
]

if card_hash is not None:
cmd.extend(["--hash", card_hash])
if card_id is not None:
cmd.extend(["--id", card_id])

return self.run_cli(cmd, capture_output=True, pipe_error_to_output=True).decode(
"utf-8"
)
Expand Down
51 changes: 43 additions & 8 deletions test/core/metaflow_test/metadata_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,21 +109,56 @@ def assert_log(self, step, logtype, value, exact_match=True):
% (step, logtype, repr(value), logtype, repr(log_value))
)

def assert_card(self, step, task, card_type, value, exact_match=True):
def list_cards(self, step, task, card_type=None):
from metaflow.plugins.cards.exception import CardNotPresentException

try:
card_iter = self.get_card(step, task, card_type)
except CardNotPresentException:
card_iter = None

if card_iter is None:
return
pathspec = self.run[step][task].pathspec
list_data = dict(pathspec=pathspec, cards=[])
if len(card_iter) > 0:
list_data["cards"] = [
dict(
hash=card.hash,
id=card.id,
type=card.type,
filename=card.path.split("/")[-1],
)
for card in card_iter
]
return list_data

def assert_card(
self,
step,
task,
card_type,
value,
card_hash=None,
card_id=None,
exact_match=True,
):
from metaflow.plugins.cards.exception import CardNotPresentException

try:
card_iter = self.get_card(step, task, card_type, card_id=card_id)
except CardNotPresentException:
card_iter = None
card_data = None
# FUTURE FIXME:
# We are checking the first card here.
# Not all possible present cards
# This should change in the future when we support many decorator.
# Since there are many cards possible for a taskspec, we check for hash to assert a single card.
# If the id argument is present then there will be a single cards anyways.
if card_iter is not None:
if len(card_iter) > 0:
card_data = card_iter[0].get()
if card_hash is None:
card_data = card_iter[0].get()
else:
card_filter = [c for c in card_iter if card_hash in c.hash]
card_data = None if len(card_filter) == 0 else card_filter[0].get()
if (exact_match and card_data != value) or (
not exact_match and value not in card_data
):
Expand All @@ -136,8 +171,8 @@ def assert_card(self, step, task, card_type, value, exact_match=True):
def get_log(self, step, logtype):
return "".join(getattr(task, logtype) for task in self.run[step])

def get_card(self, step, task, card_type):
def get_card(self, step, task, card_type, card_id=None):
from metaflow.cards import get_cards

iterator = get_cards(self.run[step][task], type=card_type)
iterator = get_cards(self.run[step][task], type=card_type, id=card_id)
return iterator
Loading