mirror of https://github.com/tiangolo/fastapi.git
🐛 Fix Dependant logic to account for callable class instances wrapped
This commit is contained in:
parent
dfe6ffec41
commit
09c871dac8
|
|
@ -99,9 +99,18 @@ class Dependant:
|
||||||
dunder_call = getattr(_impartial(self.call), "__call__", None) # noqa: B004
|
dunder_call = getattr(_impartial(self.call), "__call__", None) # noqa: B004
|
||||||
if dunder_call is None:
|
if dunder_call is None:
|
||||||
return False # pragma: no cover
|
return False # pragma: no cover
|
||||||
return inspect.isgeneratorfunction(
|
if inspect.isgeneratorfunction(
|
||||||
_impartial(dunder_call)
|
_impartial(dunder_call)
|
||||||
) or inspect.isgeneratorfunction(_unwrapped_call(dunder_call))
|
) or inspect.isgeneratorfunction(_unwrapped_call(dunder_call)):
|
||||||
|
return True
|
||||||
|
dunder_unwrapped_call = getattr(_unwrapped_call(self.call), "__call__", None) # noqa: B004
|
||||||
|
if dunder_unwrapped_call is None:
|
||||||
|
return False # pragma: no cover
|
||||||
|
if inspect.isgeneratorfunction(
|
||||||
|
_impartial(dunder_unwrapped_call)
|
||||||
|
) or inspect.isgeneratorfunction(_unwrapped_call(dunder_unwrapped_call)):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def is_async_gen_callable(self) -> bool:
|
def is_async_gen_callable(self) -> bool:
|
||||||
|
|
@ -114,9 +123,18 @@ class Dependant:
|
||||||
dunder_call = getattr(_impartial(self.call), "__call__", None) # noqa: B004
|
dunder_call = getattr(_impartial(self.call), "__call__", None) # noqa: B004
|
||||||
if dunder_call is None:
|
if dunder_call is None:
|
||||||
return False # pragma: no cover
|
return False # pragma: no cover
|
||||||
return inspect.isasyncgenfunction(
|
if inspect.isasyncgenfunction(
|
||||||
_impartial(dunder_call)
|
_impartial(dunder_call)
|
||||||
) or inspect.isasyncgenfunction(_unwrapped_call(dunder_call))
|
) or inspect.isasyncgenfunction(_unwrapped_call(dunder_call)):
|
||||||
|
return True
|
||||||
|
dunder_unwrapped_call = getattr(_unwrapped_call(self.call), "__call__", None) # noqa: B004
|
||||||
|
if dunder_unwrapped_call is None:
|
||||||
|
return False # pragma: no cover
|
||||||
|
if inspect.isasyncgenfunction(
|
||||||
|
_impartial(dunder_unwrapped_call)
|
||||||
|
) or inspect.isasyncgenfunction(_unwrapped_call(dunder_unwrapped_call)):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def is_coroutine_callable(self) -> bool:
|
def is_coroutine_callable(self) -> bool:
|
||||||
|
|
@ -137,6 +155,13 @@ class Dependant:
|
||||||
_unwrapped_call(dunder_call)
|
_unwrapped_call(dunder_call)
|
||||||
):
|
):
|
||||||
return True
|
return True
|
||||||
|
dunder_unwrapped_call = getattr(_unwrapped_call(self.call), "__call__", None) # noqa: B004
|
||||||
|
if dunder_unwrapped_call is None:
|
||||||
|
return False # pragma: no cover
|
||||||
|
if iscoroutinefunction(
|
||||||
|
_impartial(dunder_unwrapped_call)
|
||||||
|
) or iscoroutinefunction(_unwrapped_call(dunder_unwrapped_call)):
|
||||||
|
return True
|
||||||
# if inspect.isclass(self.call): False, covered by default return
|
# if inspect.isclass(self.call): False, covered by default return
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue