Bugfix iscoroutinefunction with Python3.7

See this Python bug https://bugs.python.org/issue33261. The
iscoroutinefunction doesn't recognise partially wrapped coroutine
functions as coroutine functions - which is problematic as the
coroutines will be called as if they are sync, which results in
un-awaited coroutines.
This commit is contained in:
pgjones 2021-04-11 09:10:54 +01:00
parent 5f03ad3004
commit 6d5ccdefe2

View file

@ -1,8 +1,9 @@
import functools
import inspect
import os
import sys
import weakref
from datetime import timedelta
from inspect import iscoroutinefunction
from itertools import chain
from threading import Lock
@ -56,6 +57,20 @@ from .wrappers import Request
from .wrappers import Response
if sys.version_info >= (3, 8):
iscoroutinefunction = inspect.iscoroutinefunction
else:
def iscoroutinefunction(func):
while inspect.ismethod(func):
func = func.__func__
while isinstance(func, functools.partial):
func = func.func
return inspect.iscoroutinefunction(func)
def _make_timedelta(value):
if value is None or isinstance(value, timedelta):
return value