Skip to content

Commit

Permalink
add .mode_name to MethodActivationResult
Browse files Browse the repository at this point in the history
  • Loading branch information
fohrloop committed Apr 23, 2024
1 parent 709408b commit f6e287c
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 4 deletions.
5 changes: 5 additions & 0 deletions src/wakepy/core/activationresult.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
if typing.TYPE_CHECKING:
from typing import Optional

from .constants import ModeName


@dataclass
class ActivationResult:
Expand Down Expand Up @@ -216,6 +218,9 @@ class MethodActivationResult:
method_name: str
"""The name of the :class:`Method` this result is for."""

mode_name: ModeName | str
"""The name of the mode of the :class:`Method` this result is for."""

success: bool | None
"""Tells about the result of the activation:
Expand Down
4 changes: 3 additions & 1 deletion src/wakepy/core/method.py
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,9 @@ def activate_method(method: Method) -> Tuple[MethodActivationResult, Heartbeat |
if method.is_unnamed():
raise ValueError("Methods without a name may not be used to activate modes!")

result = MethodActivationResult(success=False, method_name=method.name)
result = MethodActivationResult(
success=False, method_name=method.name, mode_name=method.mode_name
)

if not get_platform_supported(method, platform=CURRENT_PLATFORM):
result.failure_stage = StageName.PLATFORM_SUPPORT
Expand Down
6 changes: 5 additions & 1 deletion src/wakepy/core/mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,11 @@ def _activate_one_of_methods(

# Add unused methods to the results
for method_cls in method_classes:
methodresults.append(MethodActivationResult(method_cls.name, success=None))
methodresults.append(
MethodActivationResult(
method_cls.name, mode_name=method_cls.mode_name, success=None
)
)

return methodresults, method, heartbeat

Expand Down
19 changes: 19 additions & 0 deletions tests/unit/test_core/test_activationresult.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@

fake_success_cls = get_method("WAKEPY_FAKE_SUCCESS")

TEST_MODE = "test-mode"


@pytest.fixture
def mr_platform_support_fail() -> MethodActivationResult:
return MethodActivationResult(
success=False,
failure_stage=StageName.PLATFORM_SUPPORT,
method_name="fail-platform",
mode_name=TEST_MODE,
failure_reason="Platform XYZ not supported!",
)

Expand All @@ -31,6 +34,7 @@ def mr_requirements_fail() -> MethodActivationResult:
success=False,
failure_stage=StageName.REQUIREMENTS,
method_name="fail-requirements",
mode_name=TEST_MODE,
failure_reason="Missing requirement: Some SW v.1.2.3",
)

Expand All @@ -40,6 +44,7 @@ def mr_success_result() -> MethodActivationResult:
return MethodActivationResult(
success=True,
method_name="a-successful-method",
mode_name=TEST_MODE,
)


Expand All @@ -48,6 +53,7 @@ def mr_unused_result() -> MethodActivationResult:
return MethodActivationResult(
success=None,
method_name="some-unused-method",
mode_name=TEST_MODE,
)


Expand All @@ -57,6 +63,7 @@ def mr_wakepy_fake_notinuse() -> MethodActivationResult:
success=False,
failure_stage=StageName.ACTIVATION,
method_name=fake_success_cls.name,
mode_name=TEST_MODE,
)


Expand All @@ -66,6 +73,7 @@ def mr_wakepy_fake_success() -> MethodActivationResult:
success=True,
failure_stage=StageName.ACTIVATION,
method_name=fake_success_cls.name,
mode_name=TEST_MODE,
)


Expand All @@ -92,16 +100,19 @@ def method_activation_results2_manysuccess(
MethodActivationResult(
success=True,
method_name="1st.successful.method",
mode_name=TEST_MODE,
),
# Fails in Requirement stage
mr_requirements_fail,
MethodActivationResult(
success=True,
method_name="2nd-successful-method",
mode_name=TEST_MODE,
),
MethodActivationResult(
success=True,
method_name="last-successful-method",
mode_name=TEST_MODE,
),
]

Expand All @@ -113,12 +124,14 @@ def method_activation_results3_fail() -> List[MethodActivationResult]:
success=False,
failure_stage=StageName.PLATFORM_SUPPORT,
method_name="fail-platform",
mode_name=TEST_MODE,
failure_reason="Platform XYZ not supported!",
),
MethodActivationResult(
success=False,
failure_stage=StageName.REQUIREMENTS,
method_name="fail-requirements",
mode_name=TEST_MODE,
failure_reason="Missing requirement: Some SW v.1.2.3",
),
]
Expand Down Expand Up @@ -371,6 +384,7 @@ class TestMethodActivationResult:
def a(self) -> MethodActivationResult:
return MethodActivationResult(
method_name="foo",
mode_name=TEST_MODE,
success=False,
failure_stage=StageName.REQUIREMENTS,
failure_reason="some-text",
Expand All @@ -380,6 +394,7 @@ def a(self) -> MethodActivationResult:
def b(self) -> MethodActivationResult:
return MethodActivationResult(
method_name="foo",
mode_name=TEST_MODE,
success=False,
failure_stage=StageName.REQUIREMENTS,
failure_reason="some-text",
Expand All @@ -396,6 +411,7 @@ def test_equality_check_similar(
def c_different_method_name(self) -> MethodActivationResult:
return MethodActivationResult(
method_name="bar",
mode_name=TEST_MODE,
success=False,
failure_stage=StageName.REQUIREMENTS,
failure_reason="some-text",
Expand All @@ -405,6 +421,7 @@ def c_different_method_name(self) -> MethodActivationResult:
def c_different_success(self) -> MethodActivationResult:
return MethodActivationResult(
method_name="foo",
mode_name=TEST_MODE,
success=True,
failure_stage=StageName.REQUIREMENTS,
failure_reason="some-text",
Expand All @@ -414,6 +431,7 @@ def c_different_success(self) -> MethodActivationResult:
def c_different_failure_stage(self) -> MethodActivationResult:
return MethodActivationResult(
method_name="foo",
mode_name=TEST_MODE,
success=False,
failure_stage=StageName.PLATFORM_SUPPORT,
failure_reason="some-text",
Expand All @@ -423,6 +441,7 @@ def c_different_failure_stage(self) -> MethodActivationResult:
def c_different_failure_reason(self) -> MethodActivationResult:
return MethodActivationResult(
method_name="foo",
mode_name=TEST_MODE,
success=False,
failure_stage=StageName.REQUIREMENTS,
failure_reason="some-other-text",
Expand Down
9 changes: 8 additions & 1 deletion tests/unit/test_core/test_method/test_activation.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,26 +384,29 @@ def caniuse(self):


@pytest.mark.parametrize(
"success, failure_stage, method_name, message, expected_string_representation",
"success, failure_stage, method_name, mode_name, message, expected_string_representation", # noqa: E501
[
(
False,
StageName.PLATFORM_SUPPORT,
"fail-platform",
"some-mode",
"Platform XYZ not supported!",
'(FAIL @PLATFORM_SUPPORT, fail-platform, "Platform XYZ not supported!")',
),
(
False,
StageName.REQUIREMENTS,
"other-fail-method",
"some-mode",
"Need SW X version >= 8.9!",
'(FAIL @REQUIREMENTS, other-fail-method, "Need SW X version >= 8.9!")',
),
(
True,
None,
"successfulMethod",
"some-mode",
"",
# Succesful methods do not print empty message
"(SUCCESS, successfulMethod)",
Expand All @@ -412,6 +415,7 @@ def caniuse(self):
None,
None,
"SomeMethod",
"some-mode",
"",
# Unused methods do not print empty message
"(UNUSED, SomeMethod)",
Expand All @@ -422,17 +426,20 @@ def test_method_activation_result(
success,
failure_stage,
method_name,
mode_name,
message,
expected_string_representation,
):
mur = MethodActivationResult(
success=success,
mode_name=mode_name,
failure_stage=failure_stage,
method_name=method_name,
failure_reason=message,
)
# These attributes are available
assert mur.method_name == method_name
assert mur.mode_name == mode_name
assert mur.success == success
assert mur.failure_stage == failure_stage
assert mur.failure_reason == message
Expand Down
9 changes: 8 additions & 1 deletion tests/unit/test_core/test_mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -412,10 +412,12 @@ def test_activate_function_success(self):
assert res == [
MethodActivationResult(
method_name=methodcls_success.name,
mode_name=methodcls_success.mode_name,
success=True,
),
MethodActivationResult(
method_name=methodcls_fail.name,
mode_name=methodcls_success.mode_name,
success=None,
),
]
Expand All @@ -435,7 +437,11 @@ def test_activate_function_success_with_heartbeat(self):
# The activation succeeded, and the method has heartbeat, so the
# hearbeat must be instance of Heartbeate
assert res == [
MethodActivationResult(methodcls_success_with_hb.name, success=True)
MethodActivationResult(
methodcls_success_with_hb.name,
methodcls_success_with_hb.mode_name,
success=True,
)
]
assert isinstance(active_method, methodcls_success_with_hb)
assert isinstance(heartbeat, Heartbeat)
Expand All @@ -450,6 +456,7 @@ def test_activate_function_failure(self):
assert res == [
MethodActivationResult(
methodcls_fail.name,
methodcls_fail.mode_name,
success=False,
failure_stage=StageName.ACTIVATION,
failure_reason=repr(exc),
Expand Down

0 comments on commit f6e287c

Please sign in to comment.