Skip to content

Commit

Permalink
[networking] Rewrite architecture (yt-dlp#2861)
Browse files Browse the repository at this point in the history
New networking interface consists of a `RequestDirector` that directs
each `Request` to appropriate `RequestHandler` and returns the
`Response` or raises `RequestError`. The handlers define adapters to
transform its internal Request/Response/Errors to our interfaces.

User-facing changes:
- Fix issues with per request proxies on redirects for urllib
- Support for `ALL_PROXY` environment variable for proxy setting
- Support for `socks5h` proxy
   - Closes yt-dlp#6325, ytdl-org/youtube-dl#22618, ytdl-org/youtube-dl#28093
- Raise error when using `https` proxy instead of silently converting it to `http`

Authored by: coletdjnz
  • Loading branch information
coletdjnz authored and pukkandan committed Jul 15, 2023
1 parent c365dba commit 227bf1a
Show file tree
Hide file tree
Showing 16 changed files with 2,593 additions and 481 deletions.
9 changes: 3 additions & 6 deletions test/test_download.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@

import collections
import hashlib
import http.client
import json
import socket
import urllib.error

from test.helper import (
assertGreaterEqual,
Expand All @@ -29,6 +26,7 @@

import yt_dlp.YoutubeDL # isort: split
from yt_dlp.extractor import get_info_extractor
from yt_dlp.networking.exceptions import HTTPError, TransportError
from yt_dlp.utils import (
DownloadError,
ExtractorError,
Expand Down Expand Up @@ -162,8 +160,7 @@ def try_rm_tcs_files(tcs=None):
force_generic_extractor=params.get('force_generic_extractor', False))
except (DownloadError, ExtractorError) as err:
# Check if the exception is not a network related one
if (err.exc_info[0] not in (urllib.error.URLError, socket.timeout, UnavailableVideoError, http.client.BadStatusLine)
or (err.exc_info[0] == urllib.error.HTTPError and err.exc_info[1].code == 503)):
if not isinstance(err.exc_info[1], (TransportError, UnavailableVideoError)) or (isinstance(err.exc_info[1], HTTPError) and err.exc_info[1].code == 503):
err.msg = f'{getattr(err, "msg", err)} ({tname})'
raise

Expand Down Expand Up @@ -249,7 +246,7 @@ def try_rm_tcs_files(tcs=None):
# extractor returns full results even with extract_flat
res_tcs = [{'info_dict': e} for e in res_dict['entries']]
try_rm_tcs_files(res_tcs)

ydl.close()
return test_template


Expand Down
Loading

0 comments on commit 227bf1a

Please sign in to comment.