From d25e225c05b577c38a13c440dfc72fcfb35c7010 Mon Sep 17 00:00:00 2001 From: jack1142 <6032823+jack1142@users.noreply.github.com> Date: Sun, 13 Sep 2020 17:01:31 +0200 Subject: [PATCH] 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 --- tornado/gen.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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. -- 2.47.2