54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
|
from __future__ import annotations
|
||
|
|
||
|
from importlib.metadata import version
|
||
|
|
||
|
__all__ = [
|
||
|
"inject_into_urllib3",
|
||
|
"extract_from_urllib3",
|
||
|
]
|
||
|
|
||
|
import typing
|
||
|
|
||
|
orig_HTTPSConnection: typing.Any = None
|
||
|
|
||
|
|
||
|
def inject_into_urllib3() -> None:
|
||
|
# First check if h2 version is valid
|
||
|
h2_version = version("h2")
|
||
|
if not h2_version.startswith("4."):
|
||
|
raise ImportError(
|
||
|
"urllib3 v2 supports h2 version 4.x.x, currently "
|
||
|
f"the 'h2' module is compiled with {h2_version!r}. "
|
||
|
"See: https://github.com/urllib3/urllib3/issues/3290"
|
||
|
)
|
||
|
|
||
|
# Import here to avoid circular dependencies.
|
||
|
from .. import connection as urllib3_connection
|
||
|
from .. import util as urllib3_util
|
||
|
from ..connectionpool import HTTPSConnectionPool
|
||
|
from ..util import ssl_ as urllib3_util_ssl
|
||
|
from .connection import HTTP2Connection
|
||
|
|
||
|
global orig_HTTPSConnection
|
||
|
orig_HTTPSConnection = urllib3_connection.HTTPSConnection
|
||
|
|
||
|
HTTPSConnectionPool.ConnectionCls = HTTP2Connection
|
||
|
urllib3_connection.HTTPSConnection = HTTP2Connection # type: ignore[misc]
|
||
|
|
||
|
# TODO: Offer 'http/1.1' as well, but for testing purposes this is handy.
|
||
|
urllib3_util.ALPN_PROTOCOLS = ["h2"]
|
||
|
urllib3_util_ssl.ALPN_PROTOCOLS = ["h2"]
|
||
|
|
||
|
|
||
|
def extract_from_urllib3() -> None:
|
||
|
from .. import connection as urllib3_connection
|
||
|
from .. import util as urllib3_util
|
||
|
from ..connectionpool import HTTPSConnectionPool
|
||
|
from ..util import ssl_ as urllib3_util_ssl
|
||
|
|
||
|
HTTPSConnectionPool.ConnectionCls = orig_HTTPSConnection
|
||
|
urllib3_connection.HTTPSConnection = orig_HTTPSConnection # type: ignore[misc]
|
||
|
|
||
|
urllib3_util.ALPN_PROTOCOLS = ["http/1.1"]
|
||
|
urllib3_util_ssl.ALPN_PROTOCOLS = ["http/1.1"]
|