__init__.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from __future__ import annotations
  2. from importlib.metadata import version
  3. __all__ = [
  4. "inject_into_urllib3",
  5. "extract_from_urllib3",
  6. ]
  7. import typing
  8. orig_HTTPSConnection: typing.Any = None
  9. def inject_into_urllib3() -> None:
  10. # First check if h2 version is valid
  11. h2_version = version("h2")
  12. if not h2_version.startswith("4."):
  13. raise ImportError(
  14. "urllib3 v2 supports h2 version 4.x.x, currently "
  15. f"the 'h2' module is compiled with {h2_version!r}. "
  16. "See: https://github.com/urllib3/urllib3/issues/3290"
  17. )
  18. # Import here to avoid circular dependencies.
  19. from .. import connection as urllib3_connection
  20. from .. import util as urllib3_util
  21. from ..connectionpool import HTTPSConnectionPool
  22. from ..util import ssl_ as urllib3_util_ssl
  23. from .connection import HTTP2Connection
  24. global orig_HTTPSConnection
  25. orig_HTTPSConnection = urllib3_connection.HTTPSConnection
  26. HTTPSConnectionPool.ConnectionCls = HTTP2Connection
  27. urllib3_connection.HTTPSConnection = HTTP2Connection # type: ignore[misc]
  28. # TODO: Offer 'http/1.1' as well, but for testing purposes this is handy.
  29. urllib3_util.ALPN_PROTOCOLS = ["h2"]
  30. urllib3_util_ssl.ALPN_PROTOCOLS = ["h2"]
  31. def extract_from_urllib3() -> None:
  32. from .. import connection as urllib3_connection
  33. from .. import util as urllib3_util
  34. from ..connectionpool import HTTPSConnectionPool
  35. from ..util import ssl_ as urllib3_util_ssl
  36. HTTPSConnectionPool.ConnectionCls = orig_HTTPSConnection
  37. urllib3_connection.HTTPSConnection = orig_HTTPSConnection # type: ignore[misc]
  38. urllib3_util.ALPN_PROTOCOLS = ["http/1.1"]
  39. urllib3_util_ssl.ALPN_PROTOCOLS = ["http/1.1"]