Skip to content

Commit

Permalink
Merge pull request #7117 from bluetech/deprecate-fillfuncargs-v2
Browse files Browse the repository at this point in the history
fixtures: deprecate pytest._fillfuncargs function
  • Loading branch information
bluetech committed Apr 24, 2020
2 parents cbca9f1 + 289e6c1 commit 9828cfa
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 6 deletions.
6 changes: 6 additions & 0 deletions changelog/7097.deprecation.rst
@@ -0,0 +1,6 @@
The ``pytest._fillfuncargs`` function is now deprecated. This function was kept
for backward compatibility with an older plugin.

It's functionality is not meant to be used directly, but if you must replace
it, use `function._request._fillfixtures()` instead, though note this is not
a public API and may break in the future.
13 changes: 13 additions & 0 deletions doc/en/deprecations.rst
Expand Up @@ -20,6 +20,19 @@ Below is a complete list of all pytest features which are considered deprecated.
:ref:`standard warning filters <warnings>`.


The ``pytest._fillfuncargs`` function
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. deprecated:: 5.5

This function was kept for backward compatibility with an older plugin.

It's functionality is not meant to be used directly, but if you must replace
it, use `function._request._fillfixtures()` instead, though note this is not
a public API and may break in the future.



``--no-print-logs`` command-line option
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
5 changes: 5 additions & 0 deletions src/_pytest/deprecated.py
Expand Up @@ -25,6 +25,11 @@
"since pytest 2.3 - use the newer attribute instead."
)

FILLFUNCARGS = PytestDeprecationWarning(
"The `_fillfuncargs` function is deprecated, use "
"function._request._fillfixtures() instead if you cannot avoid reaching into internals."
)

RESULT_LOG = PytestDeprecationWarning(
"--result-log is deprecated, please try the new pytest-reportlog plugin.\n"
"See https://docs.pytest.org/en/latest/deprecations.html#result-log-result-log for more information."
Expand Down
2 changes: 2 additions & 0 deletions src/_pytest/fixtures.py
Expand Up @@ -28,6 +28,7 @@
from _pytest.compat import NOTSET
from _pytest.compat import safe_getattr
from _pytest.compat import TYPE_CHECKING
from _pytest.deprecated import FILLFUNCARGS
from _pytest.deprecated import FIXTURE_POSITIONAL_ARGUMENTS
from _pytest.deprecated import FUNCARGNAMES
from _pytest.mark import ParameterSet
Expand Down Expand Up @@ -276,6 +277,7 @@ def reorder_items_atscope(items, argkeys_cache, items_by_argkey, scopenum):

def fillfixtures(function):
""" fill missing funcargs for a test function. """
warnings.warn(FILLFUNCARGS, stacklevel=2)
try:
request = function._request
except AttributeError:
Expand Down
2 changes: 1 addition & 1 deletion src/_pytest/python.py
Expand Up @@ -1535,7 +1535,7 @@ def setup(self) -> None:
if isinstance(self.parent, Instance):
self.parent.newinstance()
self.obj = self._getobj()
fixtures.fillfixtures(self)
self._request._fillfixtures()

def _prunetraceback(self, excinfo: ExceptionInfo) -> None:
if hasattr(self, "_obj") and not self.config.getoption("fulltrace", False):
Expand Down
9 changes: 9 additions & 0 deletions testing/deprecated_test.py
@@ -1,4 +1,5 @@
import inspect
from unittest import mock

import pytest
from _pytest import deprecated
Expand Down Expand Up @@ -146,3 +147,11 @@ def test_foo():
)

assert_no_print_logs(testdir, ())


def test__fillfuncargs_is_deprecated() -> None:
with pytest.warns(
pytest.PytestDeprecationWarning,
match="The `_fillfuncargs` function is deprecated",
):
pytest._fillfuncargs(mock.Mock())
6 changes: 3 additions & 3 deletions testing/python/fixtures.py
Expand Up @@ -110,7 +110,7 @@ def test_detect_recursive_dependency_error(self, testdir):
def test_funcarg_basic(self, testdir):
testdir.copy_example()
item = testdir.getitem(Path("test_funcarg_basic.py"))
fixtures.fillfixtures(item)
item._request._fillfixtures()
del item.funcargs["request"]
assert len(get_public_names(item.funcargs)) == 2
assert item.funcargs["some"] == "test_func"
Expand Down Expand Up @@ -664,7 +664,7 @@ def test_func(something): pass
assert val2 == 2
val2 = req.getfixturevalue("other") # see about caching
assert val2 == 2
pytest._fillfuncargs(item)
item._request._fillfixtures()
assert item.funcargs["something"] == 1
assert len(get_public_names(item.funcargs)) == 2
assert "request" in item.funcargs
Expand All @@ -681,7 +681,7 @@ def test_func(something): pass
"""
)
item.session._setupstate.prepare(item)
pytest._fillfuncargs(item)
item._request._fillfixtures()
# successively check finalization calls
teardownlist = item.getparent(pytest.Module).obj.teardownlist
ss = item.session._setupstate
Expand Down
4 changes: 2 additions & 2 deletions testing/python/integration.py
Expand Up @@ -4,7 +4,7 @@


class TestOEJSKITSpecials:
def test_funcarg_non_pycollectobj(self, testdir): # rough jstests usage
def test_funcarg_non_pycollectobj(self, testdir, recwarn): # rough jstests usage
testdir.makeconftest(
"""
import pytest
Expand Down Expand Up @@ -34,7 +34,7 @@ class MyClass(object):
pytest._fillfuncargs(clscol)
assert clscol.funcargs["arg1"] == 42

def test_autouse_fixture(self, testdir): # rough jstests usage
def test_autouse_fixture(self, testdir, recwarn): # rough jstests usage
testdir.makeconftest(
"""
import pytest
Expand Down

0 comments on commit 9828cfa

Please sign in to comment.