Open bersbersbers opened 4 months ago
Here's what looks like one more example of the same issue, out in the wild:
test.py
:
from typeguard import install_import_hook
with install_import_hook(('A', 'urllib3',)):
import A
A.py
:
from urllib3.poolmanager import PoolManager
PoolManager().connection_from_url('https://google.com')
print("OK")
$ python3 A.py
OK
$ python3 test.py
/usr/lib/python3/dist-packages/urllib3/poolmanager.py:147: TypeHintWarning: Cannot resolve forward reference 'ssl.TLSVersion | None'
return key_class(**context)
/usr/lib/python3/dist-packages/urllib3/poolmanager.py:147: TypeHintWarning: Cannot resolve forward reference 'ssl.SSLContext | None'
return key_class(**context)
/usr/lib/python3/dist-packages/urllib3/poolmanager.py:330: TypeHintWarning: Cannot resolve forward reference 'ssl.TLSVersion | None'
def connection_from_pool_key(
/usr/lib/python3/dist-packages/urllib3/poolmanager.py:330: TypeHintWarning: Cannot resolve forward reference 'ssl.SSLContext | None'
def connection_from_pool_key(
Traceback (most recent call last):
File "/.../test.py", line 3, in <module>
import A
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "/home/.../.local/lib/python3.12/site-packages/typeguard/_importhook.py", line 98, in exec_module
super().exec_module(module)
File "/.../A.py", line 3, in <module>
PoolManager().connection_from_url('https://google.com')
File "/usr/lib/python3/dist-packages/urllib3/poolmanager.py", line 370, in connection_from_url
return self.connection_from_host(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/urllib3/poolmanager.py", line 303, in connection_from_host
return self.connection_from_context(request_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/urllib3/poolmanager.py", line 328, in connection_from_context
return self.connection_from_pool_key(pool_key, request_context=request_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/urllib3/poolmanager.py", line 351, in connection_from_pool_key
pool = self._new_pool(scheme, host, port, request_context=request_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/urllib3/poolmanager.py", line 265, in _new_pool
return pool_cls(host, port, **request_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1001, in __init__
ssl_minimum_version: ssl.TLSVersion | None = None,
^^^
NameError: name 'ssl' is not defined. Did you forget to import 'ssl'?
$ python --version
Python 3.12.3
$ pip list | grep typeguard
typeguard 4.3.0
$ pip list | grep urllib3
urllib3 2.0.7
Things to check first
[X] I have searched the existing issues and didn't find my bug already reported there
[X] I have checked that my bug is still present in the latest release
Typeguard version
4.2.1
Python version
3.12.3
What happened?
typechecked
code tries to use a class that is hidden behindTYPE_CHECKING
and should not be required at runtime.How can we reproduce the bug?
bug.py
python bug.py && mypy bug.py && pyright bug.py
Now add the
@typechecked
decorator, and runpython bug.py
again:One workaround is to add
bug2.py
:and modify
bug.py
toBut that feels kind of unnecessary, I think.