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

FIX: Function handler to return False #4706

Merged
merged 5 commits into from
May 23, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
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
70 changes: 70 additions & 0 deletions _unittest/test_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
"""Test utility functions of PyAEDT.
"""

import logging
from unittest.mock import MagicMock
from unittest.mock import patch

import pytest

from pyaedt import settings
from pyaedt.generic.general_methods import pyaedt_function_handler

SETTINGS_RELEASE_ON_EXCEPTION = settings.release_on_exception
SETTINGS_ENABLE_ERROR_HANDLER = settings.enable_error_handler


@pyaedt_function_handler(deprecated_arg="trigger_exception")
def foo(trigger_exception=True):
"""Some dummy function used for testing."""
if trigger_exception:
raise Exception("Dummy message.")
SMoraisAnsys marked this conversation as resolved.
Show resolved Hide resolved


@patch("pyaedt.generic.desktop_sessions._desktop_sessions")
def test_handler_release_on_exception(mock_sessions):
"""Test handler while activating/deactivating error handler."""
SMoraisAnsys marked this conversation as resolved.
Show resolved Hide resolved
mock_session = MagicMock()
mock_sessions.values.return_value = [mock_session]
settings.enable_error_handler = True
settings.release_on_exception = True

# Check that release desktop is called once
foo()
assert mock_session.release_desktop.assert_called_once

# Check that release desktop is not called
settings.release_on_exception = False
foo()
assert mock_session.release_desktop.assert_called

# Teardown
settings.enable_error_handler = SETTINGS_ENABLE_ERROR_HANDLER
settings.release_on_exception = SETTINGS_RELEASE_ON_EXCEPTION


def test_handler_enable_error_handler():
"""Test handler while activating/deactivating error handler."""
settings.enable_error_handler = True
assert foo() == False

settings.enable_error_handler = False
with pytest.raises(Exception):
foo()

# Teardown
settings.enable_error_handler = SETTINGS_ENABLE_ERROR_HANDLER


def test_handler_deprecation_log_warning(caplog):
"""Test handler deprecation argument mechanism."""
EXPECTED_ARGUMENT = "Argument `deprecated_arg` is deprecated for method `foo`; use `trigger_exception` instead."

with caplog.at_level(logging.WARNING, logger="Global"):
foo(deprecated_arg=False)
assert len(caplog.records) == 1
assert "WARNING" == caplog.records[0].levelname
assert EXPECTED_ARGUMENT == caplog.records[0].message

foo(trigger_exception=False)
assert len(caplog.records) == 1
8 changes: 4 additions & 4 deletions pyaedt/generic/general_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ def _check_types(arg):
return ""


def raise_exception(e):
def raise_exception_or_return_false(e):
if not settings.enable_error_handler:
if settings.release_on_exception:
from pyaedt.generic.desktop_sessions import _desktop_sessions
Expand Down Expand Up @@ -216,13 +216,13 @@ def wrapper(*args, **kwargs):
pyaedt_logger.error("")
if settings.enable_file_logs:
settings.error(message)
raise_exception(e)
return raise_exception_or_return_false(e)
except GrpcApiError as e:
_exception(sys.exc_info(), user_function, args, kwargs, "AEDT grpc API call Error")
raise_exception(e)
return raise_exception_or_return_false(e)
except BaseException as e:
_exception(sys.exc_info(), user_function, args, kwargs, str(sys.exc_info()[1]).capitalize())
raise_exception(e)
return raise_exception_or_return_false(e)

return wrapper

Expand Down
Loading