Spaces:
Runtime error
Runtime error
ChatBot-UI-With-API
/
venv
/lib
/python3.11
/site-packages
/urllib3
/contrib
/emscripten
/connection.py
| from __future__ import annotations | |
| import os | |
| import typing | |
| # use http.client.HTTPException for consistency with non-emscripten | |
| from http.client import HTTPException as HTTPException # noqa: F401 | |
| from http.client import ResponseNotReady | |
| from ..._base_connection import _TYPE_BODY | |
| from ...connection import HTTPConnection, ProxyConfig, port_by_scheme | |
| from ...exceptions import TimeoutError | |
| from ...response import BaseHTTPResponse | |
| from ...util.connection import _TYPE_SOCKET_OPTIONS | |
| from ...util.timeout import _DEFAULT_TIMEOUT, _TYPE_TIMEOUT | |
| from ...util.url import Url | |
| from .fetch import _RequestError, _TimeoutError, send_request, send_streaming_request | |
| from .request import EmscriptenRequest | |
| from .response import EmscriptenHttpResponseWrapper, EmscriptenResponse | |
| if typing.TYPE_CHECKING: | |
| from ..._base_connection import BaseHTTPConnection, BaseHTTPSConnection | |
| class EmscriptenHTTPConnection: | |
| default_port: typing.ClassVar[int] = port_by_scheme["http"] | |
| default_socket_options: typing.ClassVar[_TYPE_SOCKET_OPTIONS] | |
| timeout: None | (float) | |
| host: str | |
| port: int | |
| blocksize: int | |
| source_address: tuple[str, int] | None | |
| socket_options: _TYPE_SOCKET_OPTIONS | None | |
| proxy: Url | None | |
| proxy_config: ProxyConfig | None | |
| is_verified: bool = False | |
| proxy_is_verified: bool | None = None | |
| _response: EmscriptenResponse | None | |
| def __init__( | |
| self, | |
| host: str, | |
| port: int = 0, | |
| *, | |
| timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, | |
| source_address: tuple[str, int] | None = None, | |
| blocksize: int = 8192, | |
| socket_options: _TYPE_SOCKET_OPTIONS | None = None, | |
| proxy: Url | None = None, | |
| proxy_config: ProxyConfig | None = None, | |
| ) -> None: | |
| self.host = host | |
| self.port = port | |
| self.timeout = timeout if isinstance(timeout, float) else 0.0 | |
| self.scheme = "http" | |
| self._closed = True | |
| self._response = None | |
| # ignore these things because we don't | |
| # have control over that stuff | |
| self.proxy = None | |
| self.proxy_config = None | |
| self.blocksize = blocksize | |
| self.source_address = None | |
| self.socket_options = None | |
| self.is_verified = False | |
| def set_tunnel( | |
| self, | |
| host: str, | |
| port: int | None = 0, | |
| headers: typing.Mapping[str, str] | None = None, | |
| scheme: str = "http", | |
| ) -> None: | |
| pass | |
| def connect(self) -> None: | |
| pass | |
| def request( | |
| self, | |
| method: str, | |
| url: str, | |
| body: _TYPE_BODY | None = None, | |
| headers: typing.Mapping[str, str] | None = None, | |
| # We know *at least* botocore is depending on the order of the | |
| # first 3 parameters so to be safe we only mark the later ones | |
| # as keyword-only to ensure we have space to extend. | |
| *, | |
| chunked: bool = False, | |
| preload_content: bool = True, | |
| decode_content: bool = True, | |
| enforce_content_length: bool = True, | |
| ) -> None: | |
| self._closed = False | |
| if url.startswith("/"): | |
| # no scheme / host / port included, make a full url | |
| url = f"{self.scheme}://{self.host}:{self.port}" + url | |
| request = EmscriptenRequest( | |
| url=url, | |
| method=method, | |
| timeout=self.timeout if self.timeout else 0, | |
| decode_content=decode_content, | |
| ) | |
| request.set_body(body) | |
| if headers: | |
| for k, v in headers.items(): | |
| request.set_header(k, v) | |
| self._response = None | |
| try: | |
| if not preload_content: | |
| self._response = send_streaming_request(request) | |
| if self._response is None: | |
| self._response = send_request(request) | |
| except _TimeoutError as e: | |
| raise TimeoutError(e.message) from e | |
| except _RequestError as e: | |
| raise HTTPException(e.message) from e | |
| def getresponse(self) -> BaseHTTPResponse: | |
| if self._response is not None: | |
| return EmscriptenHttpResponseWrapper( | |
| internal_response=self._response, | |
| url=self._response.request.url, | |
| connection=self, | |
| ) | |
| else: | |
| raise ResponseNotReady() | |
| def close(self) -> None: | |
| self._closed = True | |
| self._response = None | |
| def is_closed(self) -> bool: | |
| """Whether the connection either is brand new or has been previously closed. | |
| If this property is True then both ``is_connected`` and ``has_connected_to_proxy`` | |
| properties must be False. | |
| """ | |
| return self._closed | |
| def is_connected(self) -> bool: | |
| """Whether the connection is actively connected to any origin (proxy or target)""" | |
| return True | |
| def has_connected_to_proxy(self) -> bool: | |
| """Whether the connection has successfully connected to its proxy. | |
| This returns False if no proxy is in use. Used to determine whether | |
| errors are coming from the proxy layer or from tunnelling to the target origin. | |
| """ | |
| return False | |
| class EmscriptenHTTPSConnection(EmscriptenHTTPConnection): | |
| default_port = port_by_scheme["https"] | |
| # all this is basically ignored, as browser handles https | |
| cert_reqs: int | str | None = None | |
| ca_certs: str | None = None | |
| ca_cert_dir: str | None = None | |
| ca_cert_data: None | str | bytes = None | |
| cert_file: str | None | |
| key_file: str | None | |
| key_password: str | None | |
| ssl_context: typing.Any | None | |
| ssl_version: int | str | None = None | |
| ssl_minimum_version: int | None = None | |
| ssl_maximum_version: int | None = None | |
| assert_hostname: None | str | typing.Literal[False] | |
| assert_fingerprint: str | None = None | |
| def __init__( | |
| self, | |
| host: str, | |
| port: int = 0, | |
| *, | |
| timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, | |
| source_address: tuple[str, int] | None = None, | |
| blocksize: int = 16384, | |
| socket_options: ( | |
| None | _TYPE_SOCKET_OPTIONS | |
| ) = HTTPConnection.default_socket_options, | |
| proxy: Url | None = None, | |
| proxy_config: ProxyConfig | None = None, | |
| cert_reqs: int | str | None = None, | |
| assert_hostname: None | str | typing.Literal[False] = None, | |
| assert_fingerprint: str | None = None, | |
| server_hostname: str | None = None, | |
| ssl_context: typing.Any | None = None, | |
| ca_certs: str | None = None, | |
| ca_cert_dir: str | None = None, | |
| ca_cert_data: None | str | bytes = None, | |
| ssl_minimum_version: int | None = None, | |
| ssl_maximum_version: int | None = None, | |
| ssl_version: int | str | None = None, # Deprecated | |
| cert_file: str | None = None, | |
| key_file: str | None = None, | |
| key_password: str | None = None, | |
| ) -> None: | |
| super().__init__( | |
| host, | |
| port=port, | |
| timeout=timeout, | |
| source_address=source_address, | |
| blocksize=blocksize, | |
| socket_options=socket_options, | |
| proxy=proxy, | |
| proxy_config=proxy_config, | |
| ) | |
| self.scheme = "https" | |
| self.key_file = key_file | |
| self.cert_file = cert_file | |
| self.key_password = key_password | |
| self.ssl_context = ssl_context | |
| self.server_hostname = server_hostname | |
| self.assert_hostname = assert_hostname | |
| self.assert_fingerprint = assert_fingerprint | |
| self.ssl_version = ssl_version | |
| self.ssl_minimum_version = ssl_minimum_version | |
| self.ssl_maximum_version = ssl_maximum_version | |
| self.ca_certs = ca_certs and os.path.expanduser(ca_certs) | |
| self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) | |
| self.ca_cert_data = ca_cert_data | |
| self.cert_reqs = None | |
| # The browser will automatically verify all requests. | |
| # We have no control over that setting. | |
| self.is_verified = True | |
| def set_cert( | |
| self, | |
| key_file: str | None = None, | |
| cert_file: str | None = None, | |
| cert_reqs: int | str | None = None, | |
| key_password: str | None = None, | |
| ca_certs: str | None = None, | |
| assert_hostname: None | str | typing.Literal[False] = None, | |
| assert_fingerprint: str | None = None, | |
| ca_cert_dir: str | None = None, | |
| ca_cert_data: None | str | bytes = None, | |
| ) -> None: | |
| pass | |
| # verify that this class implements BaseHTTP(s) connection correctly | |
| if typing.TYPE_CHECKING: | |
| _supports_http_protocol: BaseHTTPConnection = EmscriptenHTTPConnection("", 0) | |
| _supports_https_protocol: BaseHTTPSConnection = EmscriptenHTTPSConnection("", 0) | |