redis-py icon indicating copy to clipboard operation
redis-py copied to clipboard

`@pytest.mark.asyncio(forbid_global_loop=True)` has been removed in pytest-asyncio-0.6.0

Open mgorny opened this issue 1 year ago • 3 comments

Version: redis-py 5.0.8, redis n/a

Platform: Gentoo Linux amd64, Python 3.12.4

Description:

The tests are using @pytest.mark.asyncio(forbid_global_loop=True), e.g.:

https://github.com/redis/redis-py/blob/fb74aa2806100f4026e290dab0cb7164262ff142/tests/test_asyncio/test_scripting.py#L31

However, this parameter has been removed in 0.6.0 (back in 2017), and pytest-asyncio 0.24.0 (currently alpha) actually errors when it is specified:

=============================================================== ERRORS ================================================================
________________________________________ ERROR collecting tests/test_asyncio/test_scripting.py ________________________________________
[…]
/usr/lib/python3.12/site-packages/pytest_asyncio/plugin.py:742: in pytest_generate_tests
    scope = _get_marked_loop_scope(marker)
        marker     = Mark(name='asyncio', args=(), kwargs={'forbid_global_loop': True})
        metafunc   = <_pytest.python.Metafunc object at 0x7f10dbfd8c80>
/usr/lib/python3.12/site-packages/pytest_asyncio/plugin.py:1010: in _get_marked_loop_scope
    raise ValueError("mark.asyncio accepts only a keyword argument 'scope'.")
E   ValueError: mark.asyncio accepts only a keyword argument 'scope'.
        asyncio_marker = Mark(name='asyncio', args=(), kwargs={'forbid_global_loop': True})

Note that htere are some other deprecation warnings too:

tests/test_asyncio/test_lock.py:107
  tests/test_asyncio/test_lock.py:107: PytestDeprecationWarning: test_blocking_timeout[single] is asynchronous and explicitly requests 
the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead.
    async def test_blocking_timeout(self, r, event_loop):

tests/test_asyncio/test_lock.py:107
  tests/test_asyncio/test_lock.py:107: PytestDeprecationWarning: test_blocking_timeout[pool] is asynchronous and explicitly requests th
e "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead.
    async def test_blocking_timeout(self, r, event_loop):

mgorny avatar Jul 31 '24 05:07 mgorny

Hi, how to reproduce this issue?

pravo23 avatar Jul 31 '24 08:07 pravo23

Ah, sorry for not making this clear. You can test against the prerelease using:

pip install pytest-asyncio==0.24.0a0

mgorny avatar Jul 31 '24 09:07 mgorny

Just adding that the reason for this misleading error is https://github.com/pytest-dev/pytest-asyncio/pull/886. It was probably silently ignored before.

MeggyCal avatar Oct 09 '24 12:10 MeggyCal

Fixed with PR #3542

petyaslavova avatar Mar 06 '25 09:03 petyaslavova