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