Skip to content

Commit 9f98e0e

Browse files
SMoraisAnsysMaxJPReyPipKat
authored
FIX: Function handler to return False (#4706)
Co-authored-by: Maxime Rey <[email protected]> Co-authored-by: Kathy Pippert <[email protected]>
1 parent f174240 commit 9f98e0e

File tree

2 files changed

+76
-4
lines changed

2 files changed

+76
-4
lines changed

_unittest/test_utils.py

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
"""Test utility functions of PyAEDT.
2+
"""
3+
4+
import logging
5+
from unittest.mock import MagicMock
6+
from unittest.mock import patch
7+
8+
import pytest
9+
10+
from pyaedt import settings
11+
from pyaedt.generic.general_methods import pyaedt_function_handler
12+
13+
SETTINGS_RELEASE_ON_EXCEPTION = settings.release_on_exception
14+
SETTINGS_ENABLE_ERROR_HANDLER = settings.enable_error_handler
15+
ERROR_MESSAGE = "Dummy message."
16+
17+
18+
@pyaedt_function_handler(deprecated_arg="trigger_exception")
19+
def foo(trigger_exception=True):
20+
"""Some dummy function used for testing."""
21+
if trigger_exception:
22+
raise Exception(ERROR_MESSAGE)
23+
24+
25+
@patch("pyaedt.generic.desktop_sessions._desktop_sessions")
26+
def test_handler_release_on_exception(mock_sessions):
27+
"""Test handler while activating or deactivating error handler."""
28+
mock_session = MagicMock()
29+
mock_sessions.values.return_value = [mock_session]
30+
settings.enable_error_handler = True
31+
settings.release_on_exception = True
32+
33+
# Check that release desktop is called once
34+
foo()
35+
assert mock_session.release_desktop.assert_called_once
36+
37+
# Check that release desktop is not called
38+
settings.release_on_exception = False
39+
foo()
40+
assert mock_session.release_desktop.assert_called
41+
42+
# Teardown
43+
settings.enable_error_handler = SETTINGS_ENABLE_ERROR_HANDLER
44+
settings.release_on_exception = SETTINGS_RELEASE_ON_EXCEPTION
45+
46+
47+
def test_handler_enable_error_handler():
48+
"""Test handler while activating/deactivating error handler."""
49+
settings.enable_error_handler = True
50+
assert foo() == False
51+
52+
settings.enable_error_handler = False
53+
with pytest.raises(Exception) as exec_info:
54+
foo()
55+
assert str(exec_info.value) == ERROR_MESSAGE
56+
57+
# Teardown
58+
settings.enable_error_handler = SETTINGS_ENABLE_ERROR_HANDLER
59+
60+
61+
def test_handler_deprecation_log_warning(caplog):
62+
"""Test handler deprecation argument mechanism."""
63+
EXPECTED_ARGUMENT = "Argument `deprecated_arg` is deprecated for method `foo`; use `trigger_exception` instead."
64+
65+
with caplog.at_level(logging.WARNING, logger="Global"):
66+
foo(deprecated_arg=False)
67+
assert len(caplog.records) == 1
68+
assert "WARNING" == caplog.records[0].levelname
69+
assert EXPECTED_ARGUMENT == caplog.records[0].message
70+
71+
foo(trigger_exception=False)
72+
assert len(caplog.records) == 1

pyaedt/generic/general_methods.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ def _check_types(arg):
181181
return ""
182182

183183

184-
def raise_exception(e):
184+
def raise_exception_or_return_false(e):
185185
if not settings.enable_error_handler:
186186
if settings.release_on_exception:
187187
from pyaedt.generic.desktop_sessions import _desktop_sessions
@@ -216,13 +216,13 @@ def wrapper(*args, **kwargs):
216216
pyaedt_logger.error("")
217217
if settings.enable_file_logs:
218218
settings.error(message)
219-
raise_exception(e)
219+
return raise_exception_or_return_false(e)
220220
except GrpcApiError as e:
221221
_exception(sys.exc_info(), user_function, args, kwargs, "AEDT grpc API call Error")
222-
raise_exception(e)
222+
return raise_exception_or_return_false(e)
223223
except BaseException as e:
224224
_exception(sys.exc_info(), user_function, args, kwargs, str(sys.exc_info()[1]).capitalize())
225-
raise_exception(e)
225+
return raise_exception_or_return_false(e)
226226

227227
return wrapper
228228

0 commit comments

Comments
 (0)