Closed
Description
With:
- Python 3.6.10
- mypy 0.770
- requests 2.23.0
- tenacity 6.2.0
the following code:
#!/usr/bin/env python3
from typing import (
Any,
Callable,
)
import requests
import tenacity
# Keep trying the request until we connect.
@tenacity.retry(retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError))
def retry_if_connection_error(func: Callable[..., requests.Response], *args: Any, **kwargs: Any) -> requests.Response:
return func(*args, **kwargs)
# Keep trying the request unless we connect.
@tenacity.retry(retry=tenacity.retry_unless_exception_type(requests.exceptions.ConnectionError))
def retry_unless_connection_error(func: Callable[..., requests.Response], *args: Any, **kwargs: Any) -> requests.Response:
return func(*args, **kwargs)
produces the following output:
$ mypy --strict scripts/dev_test_mypy_tenacity.py
scripts/dev_test_mypy_tenacity.py:12: error: Module has no attribute "retry_if_exception_type"; maybe "retry_if_exception", "retry_unless_exception_type", or "retry_if_exception_message"?
@tenacity.retry(retry=tenacity.retry_if_exception_type(requests.exceptions.ConnectionError))
^
scripts/dev_test_mypy_tenacity.py:17: error: Module has no attribute "retry_unless_exception_type"; maybe "retry_if_exception_type"?
@tenacity.retry(retry=tenacity.retry_unless_exception_type(requests.exceptions.ConnectionError))
^
Found 2 errors in 1 file (checked 1 source file)
Note that each error message suggests an alternative that the other error message insists does not exist.
Tenacity only just added the bare minimum of type hints (jd/tenacity#221), so I don't know if there's some conflict there, but even if that's the case, this seems like a bug in mypy.
Possibly related mypy issues: #8220, #8210, #7125, #7029, #6551, #4930