Skip to content

Commit dcd99e7

Browse files
committed
feat: Silenced deprecations in Python 3.14.
1 parent 8c0e9ff commit dcd99e7

File tree

6 files changed

+55
-15
lines changed

6 files changed

+55
-15
lines changed

changelog.d/1025.added.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Support for Python 3.14

docs/how-to-guides/multiple_loops_example.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import asyncio
2-
from asyncio import DefaultEventLoopPolicy
2+
import warnings
3+
4+
with warnings.catch_warnings():
5+
warnings.simplefilter("ignore", DeprecationWarning)
6+
from asyncio import DefaultEventLoopPolicy
37

48
import pytest
59

@@ -20,5 +24,6 @@ def event_loop_policy(request):
2024

2125

2226
@pytest.mark.asyncio
27+
@pytest.mark.filterwarnings("ignore::DeprecationWarning")
2328
async def test_uses_custom_event_loop_policy():
2429
assert isinstance(asyncio.get_event_loop_policy(), CustomEventLoopPolicy)

docs/reference/fixtures/event_loop_policy_example.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import asyncio
2+
import warnings
3+
4+
with warnings.catch_warnings():
5+
warnings.simplefilter("ignore", DeprecationWarning)
6+
from asyncio import DefaultEventLoopPolicy
27

38
import pytest
49

510

6-
class CustomEventLoopPolicy(asyncio.DefaultEventLoopPolicy):
11+
class CustomEventLoopPolicy(DefaultEventLoopPolicy):
712
pass
813

914

@@ -13,5 +18,6 @@ def event_loop_policy(request):
1318

1419

1520
@pytest.mark.asyncio(loop_scope="module")
21+
@pytest.mark.filterwarnings("ignore::DeprecationWarning")
1622
async def test_uses_custom_event_loop_policy():
1723
assert isinstance(asyncio.get_event_loop_policy(), CustomEventLoopPolicy)

docs/reference/fixtures/event_loop_policy_parametrized_example.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
import asyncio
2-
from asyncio import DefaultEventLoopPolicy
2+
import warnings
3+
4+
with warnings.catch_warnings():
5+
warnings.simplefilter("ignore", DeprecationWarning)
6+
from asyncio import DefaultEventLoopPolicy
37

48
import pytest
59

610

7-
class CustomEventLoopPolicy(asyncio.DefaultEventLoopPolicy):
11+
class CustomEventLoopPolicy(DefaultEventLoopPolicy):
812
pass
913

1014

@@ -19,5 +23,6 @@ def event_loop_policy(request):
1923

2024

2125
@pytest.mark.asyncio
26+
@pytest.mark.filterwarnings("ignore::DeprecationWarning")
2227
async def test_uses_custom_event_loop_policy():
2328
assert isinstance(asyncio.get_event_loop_policy(), DefaultEventLoopPolicy)

docs/reference/markers/class_scoped_loop_custom_policies_strict_mode_example.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
import asyncio
1+
import warnings
2+
3+
with warnings.catch_warnings():
4+
warnings.simplefilter("ignore", DeprecationWarning)
5+
from asyncio import DefaultEventLoopPolicy
26

37
import pytest
48

59

610
@pytest.fixture(
711
params=[
8-
asyncio.DefaultEventLoopPolicy(),
9-
asyncio.DefaultEventLoopPolicy(),
12+
DefaultEventLoopPolicy(),
13+
DefaultEventLoopPolicy(),
1014
]
1115
)
1216
def event_loop_policy(request):

pytest_asyncio/plugin.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import socket
1212
import sys
1313
import warnings
14-
from asyncio import AbstractEventLoopPolicy
14+
from asyncio import AbstractEventLoop, AbstractEventLoopPolicy
1515
from collections.abc import (
1616
AsyncIterator,
1717
Awaitable,
@@ -632,17 +632,17 @@ def pytest_pycollect_makeitem_convert_async_functions_to_subclass(
632632

633633
@contextlib.contextmanager
634634
def _temporary_event_loop_policy(policy: AbstractEventLoopPolicy) -> Iterator[None]:
635-
old_loop_policy = asyncio.get_event_loop_policy()
635+
old_loop_policy = _get_event_loop_policy()
636636
try:
637637
old_loop = _get_event_loop_no_warn()
638638
except RuntimeError:
639639
old_loop = None
640-
asyncio.set_event_loop_policy(policy)
640+
_set_event_loop_policy(policy)
641641
try:
642642
yield
643643
finally:
644-
asyncio.set_event_loop_policy(old_loop_policy)
645-
asyncio.set_event_loop(old_loop)
644+
_set_event_loop_policy(old_loop_policy)
645+
_set_event_loop(old_loop)
646646

647647

648648
@pytest.hookimpl(tryfirst=True)
@@ -671,6 +671,18 @@ def pytest_generate_tests(metafunc: Metafunc) -> None:
671671
]
672672

673673

674+
def _get_event_loop_policy() -> AbstractEventLoopPolicy:
675+
with warnings.catch_warnings():
676+
warnings.simplefilter("ignore", DeprecationWarning)
677+
return asyncio.get_event_loop_policy()
678+
679+
680+
def _set_event_loop_policy(policy: AbstractEventLoopPolicy) -> None:
681+
with warnings.catch_warnings():
682+
warnings.simplefilter("ignore", DeprecationWarning)
683+
asyncio.set_event_loop_policy(policy)
684+
685+
674686
def _get_event_loop_no_warn(
675687
policy: AbstractEventLoopPolicy | None = None,
676688
) -> asyncio.AbstractEventLoop:
@@ -682,6 +694,12 @@ def _get_event_loop_no_warn(
682694
return asyncio.get_event_loop()
683695

684696

697+
def _set_event_loop(loop: AbstractEventLoop | None) -> None:
698+
with warnings.catch_warnings():
699+
warnings.simplefilter("ignore", DeprecationWarning)
700+
asyncio.set_event_loop(loop)
701+
702+
685703
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
686704
def pytest_pyfunc_call(pyfuncitem: Function) -> object | None:
687705
"""
@@ -835,7 +853,7 @@ def _scoped_event_loop(
835853
_temporary_event_loop_policy(new_loop_policy),
836854
_provide_event_loop() as loop,
837855
):
838-
asyncio.set_event_loop(loop)
856+
_set_event_loop(loop)
839857
yield loop
840858

841859
return _scoped_event_loop
@@ -849,7 +867,8 @@ def _scoped_event_loop(
849867

850868
@contextlib.contextmanager
851869
def _provide_event_loop() -> Iterator[asyncio.AbstractEventLoop]:
852-
loop = asyncio.get_event_loop_policy().new_event_loop()
870+
policy = _get_event_loop_policy()
871+
loop = policy.new_event_loop()
853872
try:
854873
yield loop
855874
finally:
@@ -866,7 +885,7 @@ def _provide_event_loop() -> Iterator[asyncio.AbstractEventLoop]:
866885
@pytest.fixture(scope="session", autouse=True)
867886
def event_loop_policy() -> AbstractEventLoopPolicy:
868887
"""Return an instance of the policy used to create asyncio event loops."""
869-
return asyncio.get_event_loop_policy()
888+
return _get_event_loop_policy()
870889

871890

872891
def is_async_test(item: Item) -> bool:

0 commit comments

Comments
 (0)