Add support for inspect.iscoroutinefunction() in Coroutine provider (#830)

This commit is contained in:
ZipFile 2025-02-23 18:20:38 +02:00 committed by GitHub
parent 0d6fdb5b78
commit 23acf01c15
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 28 additions and 9 deletions

View File

@ -2,6 +2,7 @@
from __future__ import absolute_import
import asyncio
import copy
import errno
import functools
@ -27,17 +28,19 @@ except ImportError:
import __builtin__ as builtins
try:
import asyncio
from inspect import _is_coroutine_mark as _is_coroutine_marker
except ImportError:
asyncio = None
_is_coroutine_marker = None
else:
if sys.version_info >= (3, 5, 3):
import asyncio.coroutines
_is_coroutine_marker = asyncio.coroutines._is_coroutine
else:
try:
# Python >=3.12.0,<3.12.5
from inspect import _is_coroutine_marker
except ImportError:
_is_coroutine_marker = True
try:
from asyncio.coroutines import _is_coroutine
except ImportError:
_is_coroutine = True
try:
import ConfigParser as iniconfigparser
except ImportError:
@ -1475,7 +1478,8 @@ cdef class Coroutine(Callable):
some_coroutine.add_kwargs(keyword_argument1=3, keyword_argument=4)
"""
_is_coroutine = _is_coroutine_marker
_is_coroutine_marker = _is_coroutine_marker # Python >=3.12
_is_coroutine = _is_coroutine # Python <3.16
def set_provides(self, provides):
"""Set provider provides."""

View File

@ -1,4 +1,5 @@
"""Coroutine provider tests."""
import sys
from dependency_injector import providers, errors
from pytest import mark, raises
@ -208,3 +209,17 @@ def test_repr():
"<dependency_injector.providers."
"Coroutine({0}) at {1}>".format(repr(example), hex(id(provider)))
)
@mark.skipif(sys.version_info > (3, 15), reason="requires Python<3.16")
def test_asyncio_iscoroutinefunction() -> None:
from asyncio.coroutines import iscoroutinefunction
assert iscoroutinefunction(providers.Coroutine(example))
@mark.skipif(sys.version_info < (3, 12), reason="requires Python>=3.12")
def test_inspect_iscoroutinefunction() -> None:
from inspect import iscoroutinefunction
assert iscoroutinefunction(providers.Coroutine(example))