mirror of https://github.com/yt-dlp/yt-dlp.git
[rh:requests] Handle both `bytes` and `int` for `IncompleteRead.partial` (Fix 8a8b54523a
) (#8348)
Authored by: bashonly, coletdjnz, Grub4K
This commit is contained in:
parent
8a8b54523a
commit
4e38e2ae9d
|
@ -865,7 +865,7 @@ class TestRequestsRequestHandler(TestRequestHandlerBase):
|
||||||
'3 bytes read, 4 more expected'
|
'3 bytes read, 4 more expected'
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
lambda: urllib3.exceptions.IncompleteRead(partial=3, expected=5),
|
lambda: urllib3.exceptions.ProtocolError('error', urllib3.exceptions.IncompleteRead(partial=3, expected=5)),
|
||||||
IncompleteRead,
|
IncompleteRead,
|
||||||
'3 bytes read, 5 more expected'
|
'3 bytes read, 5 more expected'
|
||||||
),
|
),
|
||||||
|
|
|
@ -142,18 +142,17 @@ class RequestsResponseAdapter(Response):
|
||||||
except urllib3.exceptions.SSLError as e:
|
except urllib3.exceptions.SSLError as e:
|
||||||
raise SSLError(cause=e) from e
|
raise SSLError(cause=e) from e
|
||||||
|
|
||||||
except urllib3.exceptions.IncompleteRead as e:
|
|
||||||
# urllib3 IncompleteRead.partial is always an integer
|
|
||||||
raise IncompleteRead(partial=e.partial, expected=e.expected) from e
|
|
||||||
|
|
||||||
except urllib3.exceptions.ProtocolError as e:
|
except urllib3.exceptions.ProtocolError as e:
|
||||||
# http.client.IncompleteRead may be contained within ProtocolError
|
# IncompleteRead is always contained within ProtocolError
|
||||||
# See urllib3.response.HTTPResponse._error_catcher()
|
# See urllib3.response.HTTPResponse._error_catcher()
|
||||||
ir_err = next(
|
ir_err = next(
|
||||||
(err for err in (e.__context__, e.__cause__, *variadic(e.args))
|
(err for err in (e.__context__, e.__cause__, *variadic(e.args))
|
||||||
if isinstance(err, http.client.IncompleteRead)), None)
|
if isinstance(err, http.client.IncompleteRead)), None)
|
||||||
if ir_err is not None:
|
if ir_err is not None:
|
||||||
raise IncompleteRead(partial=len(ir_err.partial), expected=ir_err.expected) from e
|
# `urllib3.exceptions.IncompleteRead` is subclass of `http.client.IncompleteRead`
|
||||||
|
# but uses an `int` for its `partial` property.
|
||||||
|
partial = ir_err.partial if isinstance(ir_err.partial, int) else len(ir_err.partial)
|
||||||
|
raise IncompleteRead(partial=partial, expected=ir_err.expected) from e
|
||||||
raise TransportError(cause=e) from e
|
raise TransportError(cause=e) from e
|
||||||
|
|
||||||
except urllib3.exceptions.HTTPError as e:
|
except urllib3.exceptions.HTTPError as e:
|
||||||
|
|
|
@ -75,7 +75,7 @@ class HTTPError(RequestError):
|
||||||
|
|
||||||
|
|
||||||
class IncompleteRead(TransportError):
|
class IncompleteRead(TransportError):
|
||||||
def __init__(self, partial: int, expected: int = None, **kwargs):
|
def __init__(self, partial: int, expected: int | None = None, **kwargs):
|
||||||
self.partial = partial
|
self.partial = partial
|
||||||
self.expected = expected
|
self.expected = expected
|
||||||
msg = f'{partial} bytes read'
|
msg = f'{partial} bytes read'
|
||||||
|
|
Loading…
Reference in New Issue