diff --git a/my/core/common.py b/my/core/common.py index 0c7571e..64e7b23 100644 --- a/my/core/common.py +++ b/my/core/common.py @@ -314,14 +314,21 @@ def _warn_iterable(it, f=None): return _warn_iterator(it, f=f) +# ok, this seems to work... +# https://github.com/python/mypy/issues/1927#issue-167100413 +FL = TypeVar('FL', bound=Callable[..., List]) +FI = TypeVar('FI', bound=Callable[..., Iterable]) + @overload -def warn_if_empty(f: Callable[[], List[X]] ) -> Callable[[], List[X]] : ... +def warn_if_empty(f: FL) -> FL: ... @overload -def warn_if_empty(f: Callable[[], Iterable[X]]) -> Callable[[], Iterable[X]]: ... +def warn_if_empty(f: FI) -> FI: ... + + def warn_if_empty(f): from functools import wraps @wraps(f) def wrapped(*args, **kwargs): res = f(*args, **kwargs) return _warn_iterable(res, f=f) - return wrapped + return wrapped # type: ignore diff --git a/tests/misc.py b/tests/misc.py index e503eb6..8930851 100644 --- a/tests/misc.py +++ b/tests/misc.py @@ -60,7 +60,7 @@ def test_warn_if_empty() -> None: yield 'aba' @warn_if_empty - def empty() -> List[str]: + def empty() -> List[int]: return [] # should be rejected by mypy!