From: jack1142 <6032823+jack1142@users.noreply.github.com> Date: Sun, 13 Sep 2020 15:01:31 +0000 (+0200) Subject: Allow non-yielding functions in `tornado.gen.coroutine`'s type hint (#2909) X-Git-Tag: v6.1.0b1~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d25e225c05b577c38a13c440dfc72fcfb35c7010;p=thirdparty%2Ftornado.git Allow non-yielding functions in `tornado.gen.coroutine`'s type hint (#2909) `@gen.coroutine` deco allows non-yielding functions, so I reflected that in the type hint. Requires usage of `@typing.overload` due to python/mypy#9435 --- diff --git a/tornado/gen.py b/tornado/gen.py index c58884cc9..4e0cab22d 100644 --- a/tornado/gen.py +++ b/tornado/gen.py @@ -91,7 +91,7 @@ from tornado.log import app_log from tornado.util import TimeoutError import typing -from typing import Union, Any, Callable, List, Type, Tuple, Awaitable, Dict +from typing import Union, Any, Callable, List, Type, Tuple, Awaitable, Dict, overload if typing.TYPE_CHECKING: from typing import Sequence, Deque, Optional, Set, Iterable # noqa: F401 @@ -153,8 +153,20 @@ def _create_future() -> Future: return future +@overload def coroutine( func: Callable[..., "Generator[Any, Any, _T]"] +) -> Callable[..., "Future[_T]"]: + ... + + +@overload +def coroutine(func: Callable[..., _T]) -> Callable[..., "Future[_T]"]: + ... + + +def coroutine( + func: Union[Callable[..., "Generator[Any, Any, _T]"], Callable[..., _T]] ) -> Callable[..., "Future[_T]"]: """Decorator for asynchronous generators.