-
-
Notifications
You must be signed in to change notification settings - Fork 18.4k
TST: return pytest MarkDecorator from td.skip_if_no #26735
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
Changes from 2 commits
85b8c63
8fe9f69
ce49853
c982e19
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -99,36 +99,40 @@ def _skip_if_no_scipy(): | |
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why wouldn’t you make this MarkDecorator) |
||
def skip_if_no(package, min_version=None): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can you add annotations (return value in particular) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
done |
||
""" | ||
Generic function to help skip test functions when required packages are not | ||
Generic function to help skip tests when required packages are not | ||
present on the testing system. | ||
|
||
Intended for use as a decorator, this function will wrap the decorated | ||
function with a pytest ``skip_if`` mark. During a pytest test suite | ||
execution, that mark will attempt to import the specified ``package`` and | ||
optionally ensure it meets the ``min_version``. If the import and version | ||
check are unsuccessful, then the decorated function will be skipped. | ||
This function returns a pytest mark with a skip condition that will be | ||
evaluated during test collection. An attempt will be made to import the | ||
specified ``package`` and optionally ensure it meets the ``min_version`` | ||
|
||
The mark can be used as either a decorator for a test function or to be | ||
applied to parameters in pytest.mark.parametrize calls or parametrized | ||
fixtures. | ||
|
||
If the import and version check are unsuccessful, then the test function | ||
(or test case when used in conjunction with parametrization) will be | ||
skipped. | ||
|
||
Parameters | ||
---------- | ||
package: str | ||
The name of the package required by the decorated function | ||
The name of the required package. | ||
min_version: str or None, default None | ||
Optional minimum version of the package required by the decorated | ||
function | ||
Optional minimum version of the package. | ||
|
||
Returns | ||
------- | ||
decorated_func: function | ||
The decorated function wrapped within a pytest ``skip_if`` mark | ||
_pytest.mark.structures.MarkDecorator | ||
a pytest.mark.skipif to use as either a test decorator or a | ||
parametrization mark. | ||
""" | ||
def decorated_func(func): | ||
msg = "Could not import '{}'".format(package) | ||
if min_version: | ||
msg += " satisfying a min_version of {}".format(min_version) | ||
return pytest.mark.skipif( | ||
not safe_import(package, min_version=min_version), reason=msg | ||
)(func) | ||
return decorated_func | ||
msg = "Could not import '{}'".format(package) | ||
if min_version: | ||
msg += " satisfying a min_version of {}".format(min_version) | ||
return pytest.mark.skipif( | ||
not safe_import(package, min_version=min_version), reason=msg | ||
) | ||
|
||
|
||
skip_if_no_mpl = pytest.mark.skipif(_skip_if_no_mpl(), | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There are some of these in test_excel as well. Not sure if you meant to do all in this PR or not but if so worth a double check of other modules
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
left them intentionally to avoid conflicts with your PRs.
have checked other modules, no other use of safe_import except one case of a test decorator where I think skip_if_no could be used directly. (change that in this PR?)
pandas/pandas/tests/io/test_gcs.py
Lines 67 to 69 in ee6b131
and test_safe_import.