Spaces:
Running
Running
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"] | |