diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-08-05 09:06:11 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-08-05 09:06:11 +0000 |
commit | fd5a06560caab95c71a2e2e805efa8d0f3a696a0 (patch) | |
tree | e1c600b8612bc4b301e2f51b875fcd835c5008cc /yt_dlp/networking | |
parent | Releasing progress-linux version 2024.05.27-1~progress7.99u1. (diff) | |
download | yt-dlp-fd5a06560caab95c71a2e2e805efa8d0f3a696a0.tar.xz yt-dlp-fd5a06560caab95c71a2e2e805efa8d0f3a696a0.zip |
Merging upstream version 2024.07.01.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'yt_dlp/networking')
-rw-r--r-- | yt_dlp/networking/__init__.py | 2 | ||||
-rw-r--r-- | yt_dlp/networking/_curlcffi.py | 2 | ||||
-rw-r--r-- | yt_dlp/networking/_helper.py | 4 | ||||
-rw-r--r-- | yt_dlp/networking/_requests.py | 33 | ||||
-rw-r--r-- | yt_dlp/networking/_urllib.py | 8 | ||||
-rw-r--r-- | yt_dlp/networking/_websockets.py | 8 | ||||
-rw-r--r-- | yt_dlp/networking/common.py | 28 | ||||
-rw-r--r-- | yt_dlp/networking/exceptions.py | 2 | ||||
-rw-r--r-- | yt_dlp/networking/impersonate.py | 6 |
9 files changed, 44 insertions, 49 deletions
diff --git a/yt_dlp/networking/__init__.py b/yt_dlp/networking/__init__.py index 356712c..1eaa0ee 100644 --- a/yt_dlp/networking/__init__.py +++ b/yt_dlp/networking/__init__.py @@ -30,7 +30,7 @@ except Exception as e: warnings.warn(f'Failed to import "websockets" request handler: {e}' + bug_reports_message()) try: - from . import _curlcffi # noqa: F401 + from . import _curlcffi except ImportError: pass except Exception as e: diff --git a/yt_dlp/networking/_curlcffi.py b/yt_dlp/networking/_curlcffi.py index f2df399..b1f0fb8 100644 --- a/yt_dlp/networking/_curlcffi.py +++ b/yt_dlp/networking/_curlcffi.py @@ -207,7 +207,7 @@ class CurlCFFIRH(ImpersonateRequestHandler, InstanceStoreMixin): impersonate=self._SUPPORTED_IMPERSONATE_TARGET_MAP.get( self._get_request_target(request)), interface=self.source_address, - stream=True + stream=True, ) except curl_cffi.requests.errors.RequestsError as e: if e.code == CurlECode.PEER_FAILED_VERIFICATION: diff --git a/yt_dlp/networking/_helper.py b/yt_dlp/networking/_helper.py index 8e678b2..fe3354e 100644 --- a/yt_dlp/networking/_helper.py +++ b/yt_dlp/networking/_helper.py @@ -235,7 +235,7 @@ def create_socks_proxy_socket(dest_addr, proxy_args, proxy_ip_addr, timeout, sou connect_proxy_args = proxy_args.copy() connect_proxy_args.update({'addr': sa[0], 'port': sa[1]}) sock.setproxy(**connect_proxy_args) - if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: # noqa: E721 + if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) @@ -251,7 +251,7 @@ def create_connection( timeout=socket._GLOBAL_DEFAULT_TIMEOUT, source_address=None, *, - _create_socket_func=_socket_connect + _create_socket_func=_socket_connect, ): # Work around socket.create_connection() which tries all addresses from getaddrinfo() including IPv6. # This filters the addresses based on the given source_address. diff --git a/yt_dlp/networking/_requests.py b/yt_dlp/networking/_requests.py index 6397a2c..86850c1 100644 --- a/yt_dlp/networking/_requests.py +++ b/yt_dlp/networking/_requests.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import contextlib import functools import http.client @@ -21,8 +23,8 @@ urllib3_version = tuple(int_or_none(x, default=0) for x in urllib3.__version__.s if urllib3_version < (1, 26, 17): raise ImportError('Only urllib3 >= 1.26.17 is supported') -if requests.__build__ < 0x023100: - raise ImportError('Only requests >= 2.31.0 is supported') +if requests.__build__ < 0x023202: + raise ImportError('Only requests >= 2.32.2 is supported') import requests.adapters import requests.utils @@ -58,13 +60,13 @@ from .exceptions import ( from ..socks import ProxyError as SocksProxyError SUPPORTED_ENCODINGS = [ - 'gzip', 'deflate' + 'gzip', 'deflate', ] if brotli is not None: SUPPORTED_ENCODINGS.append('br') -""" +''' Override urllib3's behavior to not convert lower-case percent-encoded characters to upper-case during url normalization process. @@ -79,7 +81,7 @@ is best to avoid it in requests too for compatability reasons. 1: https://tools.ietf.org/html/rfc3986#section-2.1 2: https://github.com/streamlink/streamlink/pull/4003 -""" +''' class Urllib3PercentREOverride: @@ -96,7 +98,7 @@ class Urllib3PercentREOverride: # urllib3 >= 1.25.8 uses subn: # https://github.com/urllib3/urllib3/commit/a2697e7c6b275f05879b60f593c5854a816489f0 -import urllib3.util.url # noqa: E305 +import urllib3.util.url if hasattr(urllib3.util.url, 'PERCENT_RE'): urllib3.util.url.PERCENT_RE = Urllib3PercentREOverride(urllib3.util.url.PERCENT_RE) @@ -105,7 +107,7 @@ elif hasattr(urllib3.util.url, '_PERCENT_RE'): # urllib3 >= 2.0.0 else: warnings.warn('Failed to patch PERCENT_RE in urllib3 (does the attribute exist?)' + bug_reports_message()) -""" +''' Workaround for issue in urllib.util.ssl_.py: ssl_wrap_context does not pass server_hostname to SSLContext.wrap_socket if server_hostname is an IP, however this is an issue because we set check_hostname to True in our SSLContext. @@ -114,7 +116,7 @@ Monkey-patching IS_SECURETRANSPORT forces ssl_wrap_context to pass server_hostna This has been fixed in urllib3 2.0+. See: https://github.com/urllib3/urllib3/issues/517 -""" +''' if urllib3_version < (2, 0, 0): with contextlib.suppress(Exception): @@ -135,7 +137,7 @@ class RequestsResponseAdapter(Response): self._requests_response = res - def read(self, amt: int = None): + def read(self, amt: int | None = None): try: # Interact with urllib3 response directly. return self.fp.read(amt, decode_content=True) @@ -182,14 +184,9 @@ class RequestsHTTPAdapter(requests.adapters.HTTPAdapter): return super().proxy_manager_for(proxy, **proxy_kwargs, **self._pm_args, **extra_kwargs) # Skip `requests` internal verification; we use our own SSLContext - # requests 2.31.0+ def cert_verify(*args, **kwargs): pass - # requests 2.31.0-2.32.1 - def _get_connection(self, request, *_, proxies=None, **__): - return self.get_connection(request.url, proxies) - # requests 2.32.2+: Reimplementation without `_urllib3_request_context` def get_connection_with_tls_context(self, request, verify, proxies=None, cert=None): url = urllib3.util.parse_url(request.url).url @@ -233,9 +230,7 @@ class Urllib3LoggingFilter(logging.Filter): def filter(self, record): # Ignore HTTP request messages since HTTPConnection prints those - if record.msg == '%s://%s:%s "%s %s %s" %s %s': - return False - return True + return record.msg != '%s://%s:%s "%s %s %s" %s %s' class Urllib3LoggingHandler(logging.Handler): @@ -334,7 +329,7 @@ class RequestsRH(RequestHandler, InstanceStoreMixin): timeout=self._calculate_timeout(request), proxies=self._get_proxies(request), allow_redirects=True, - stream=True + stream=True, ) except requests.exceptions.TooManyRedirects as e: @@ -416,7 +411,7 @@ class SocksProxyManager(urllib3.PoolManager): super().__init__(num_pools, headers, **connection_pool_kw) self.pool_classes_by_scheme = { 'http': SocksHTTPConnectionPool, - 'https': SocksHTTPSConnectionPool + 'https': SocksHTTPSConnectionPool, } diff --git a/yt_dlp/networking/_urllib.py b/yt_dlp/networking/_urllib.py index ff110dc..6299582 100644 --- a/yt_dlp/networking/_urllib.py +++ b/yt_dlp/networking/_urllib.py @@ -246,8 +246,8 @@ class ProxyHandler(urllib.request.BaseHandler): def __init__(self, proxies=None): self.proxies = proxies # Set default handlers - for type in ('http', 'https', 'ftp'): - setattr(self, '%s_open' % type, lambda r, meth=self.proxy_open: meth(r)) + for scheme in ('http', 'https', 'ftp'): + setattr(self, f'{scheme}_open', lambda r, meth=self.proxy_open: meth(r)) def proxy_open(self, req): proxy = select_proxy(req.get_full_url(), self.proxies) @@ -385,12 +385,12 @@ class UrllibRH(RequestHandler, InstanceStoreMixin): url=request.url, data=request.data, headers=dict(headers), - method=request.method + method=request.method, ) opener = self._get_instance( proxies=self._get_proxies(request), - cookiejar=self._get_cookiejar(request) + cookiejar=self._get_cookiejar(request), ) try: res = opener.open(urllib_req, timeout=self._calculate_timeout(request)) diff --git a/yt_dlp/networking/_websockets.py b/yt_dlp/networking/_websockets.py index 6e235b0..15db4fe 100644 --- a/yt_dlp/networking/_websockets.py +++ b/yt_dlp/networking/_websockets.py @@ -1,6 +1,7 @@ from __future__ import annotations import contextlib +import functools import io import logging import ssl @@ -22,7 +23,6 @@ from .exceptions import ( TransportError, ) from .websocket import WebSocketRequestHandler, WebSocketResponse -from ..compat import functools from ..dependencies import websockets from ..socks import ProxyError as SocksProxyError from ..utils import int_or_none @@ -137,7 +137,7 @@ class WebsocketsRH(WebSocketRequestHandler): wsuri = parse_uri(request.url) create_conn_kwargs = { 'source_address': (self.source_address, 0) if self.source_address else None, - 'timeout': timeout + 'timeout': timeout, } proxy = select_proxy(request.url, self._get_proxies(request)) try: @@ -147,12 +147,12 @@ class WebsocketsRH(WebSocketRequestHandler): address=(socks_proxy_options['addr'], socks_proxy_options['port']), _create_socket_func=functools.partial( create_socks_proxy_socket, (wsuri.host, wsuri.port), socks_proxy_options), - **create_conn_kwargs + **create_conn_kwargs, ) else: sock = create_connection( address=(wsuri.host, wsuri.port), - **create_conn_kwargs + **create_conn_kwargs, ) conn = websockets.sync.client.connect( sock=sock, diff --git a/yt_dlp/networking/common.py b/yt_dlp/networking/common.py index d473e16..a6db167 100644 --- a/yt_dlp/networking/common.py +++ b/yt_dlp/networking/common.py @@ -83,8 +83,8 @@ class RequestDirector: rh: sum(pref(rh, request) for pref in self.preferences) for rh in self.handlers.values() } - self._print_verbose('Handler preferences for this request: %s' % ', '.join( - f'{rh.RH_NAME}={pref}' for rh, pref in preferences.items())) + self._print_verbose('Handler preferences for this request: {}'.format(', '.join( + f'{rh.RH_NAME}={pref}' for rh, pref in preferences.items()))) return sorted(self.handlers.values(), key=preferences.get, reverse=True) def _print_verbose(self, msg): @@ -224,11 +224,11 @@ class RequestHandler(abc.ABC): headers: HTTPHeaderDict = None, cookiejar: YoutubeDLCookieJar = None, timeout: float | int | None = None, - proxies: dict = None, - source_address: str = None, + proxies: dict | None = None, + source_address: str | None = None, verbose: bool = False, prefer_system_certs: bool = False, - client_cert: dict[str, str | None] = None, + client_cert: dict[str, str | None] | None = None, verify: bool = True, legacy_ssl_support: bool = False, **_, @@ -341,7 +341,7 @@ class RequestHandler(abc.ABC): """Handle a request from start to finish. Redefine in subclasses.""" pass - def close(self): + def close(self): # noqa: B027 pass @classproperty @@ -378,11 +378,11 @@ class Request: self, url: str, data: RequestData = None, - headers: typing.Mapping = None, - proxies: dict = None, - query: dict = None, - method: str = None, - extensions: dict = None + headers: typing.Mapping | None = None, + proxies: dict | None = None, + query: dict | None = None, + method: str | None = None, + extensions: dict | None = None, ): self._headers = HTTPHeaderDict() @@ -508,8 +508,8 @@ class Response(io.IOBase): url: str, headers: Mapping[str, str], status: int = 200, - reason: str = None, - extensions: dict = None + reason: str | None = None, + extensions: dict | None = None, ): self.fp = fp @@ -527,7 +527,7 @@ class Response(io.IOBase): def readable(self): return self.fp.readable() - def read(self, amt: int = None) -> bytes: + def read(self, amt: int | None = None) -> bytes: # Expected errors raised here should be of type RequestError or subclasses. # Subclasses should redefine this method with more precise error handling. try: diff --git a/yt_dlp/networking/exceptions.py b/yt_dlp/networking/exceptions.py index 9037f18..daa9fb5 100644 --- a/yt_dlp/networking/exceptions.py +++ b/yt_dlp/networking/exceptions.py @@ -13,7 +13,7 @@ class RequestError(YoutubeDLError): self, msg: str | None = None, cause: Exception | str | None = None, - handler: RequestHandler = None + handler: RequestHandler = None, ): self.handler = handler self.cause = cause diff --git a/yt_dlp/networking/impersonate.py b/yt_dlp/networking/impersonate.py index ca66180..0626b3b 100644 --- a/yt_dlp/networking/impersonate.py +++ b/yt_dlp/networking/impersonate.py @@ -112,8 +112,8 @@ class ImpersonateRequestHandler(RequestHandler, ABC): return supported_target @classproperty - def supported_targets(self) -> tuple[ImpersonateTarget, ...]: - return tuple(self._SUPPORTED_IMPERSONATE_TARGET_MAP.keys()) + def supported_targets(cls) -> tuple[ImpersonateTarget, ...]: + return tuple(cls._SUPPORTED_IMPERSONATE_TARGET_MAP.keys()) def is_supported_target(self, target: ImpersonateTarget): assert isinstance(target, ImpersonateTarget) @@ -127,7 +127,7 @@ class ImpersonateRequestHandler(RequestHandler, ABC): headers = self._merge_headers(request.headers) if self._get_request_target(request) is not None: # remove all headers present in std_headers - # todo: change this to not depend on std_headers + # TODO: change this to not depend on std_headers for k, v in std_headers.items(): if headers.get(k) == v: headers.pop(k) |