Skip to content

loop_scope default #1095

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

Open
oliver-sanders opened this issue Apr 15, 2025 · 1 comment
Open

loop_scope default #1095

oliver-sanders opened this issue Apr 15, 2025 · 1 comment
Milestone

Comments

@oliver-sanders
Copy link

(in relation to #706 and other related issues)

Can I get the fixture loop_scope to default to the fixture's scope?

Description

If I have a fixture that provides an async resource like so:

@pytest.fixture(scope='module')
async def my_async_fixture():
    yield my_async_resource()

I need to declare it with pytest_asyncio.fixture and define loop_scope to match the fixture scope (see 0.23 migration guide):

@pytest_asyncio.fixture(scope='module', loop_scope='module')
async def my_async_fixture():
    yield my_async_resource()

But the fixture scope is a safe and sensible default for the loop_scope in my work. Lesser scopes typically won't work because the point of the fixture is to manage an async resource (not just to run async code before/after the test). The point of higher scopes in general is to create resources that can be shared between tests, so we accept the isolation implications when we write them and are happy with loop_scope = scope as a default (we can always override it if we have a use case to).

This loop_scope parameter is easily omitted, and the pytest_asyncio.fixture decorator is less known to contributors making this pattern a bit of a pain point. Is there a way I can make the loop_scope default to the fixture scope so we can continue to use @pytest.fixture(scope=<scope>) as before?

Note, I can't use the asyncio_default_fixture_loop_scope because I have fixtures with session, module, class and function scopes.

Proposal

If this can't be done at present, would it make sense to provide a asyncio_default_fixture_loop_scope = scope option?

@seifertm
Copy link
Contributor

That's an interesting point!

We didn't consider an option to always match loop_scope to scope. Essentially, this is the behavior when asyncio_default_fixture_loop_scope is unset, but leaving it unset gives a deprecation warning.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants