[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
3 changed files with 7 additions and 8 deletions
|
@ -865,7 +865,7 @@ class TestRequestsRequestHandler(TestRequestHandlerBase):
|
|||
'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,
|
||||
'3 bytes read, 5 more expected'
|
||||
),
|
||||
|
|
|
@ -142,18 +142,17 @@ class RequestsResponseAdapter(Response):
|
|||
except urllib3.exceptions.SSLError as 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:
|
||||
# http.client.IncompleteRead may be contained within ProtocolError
|
||||
# IncompleteRead is always contained within ProtocolError
|
||||
# See urllib3.response.HTTPResponse._error_catcher()
|
||||
ir_err = next(
|
||||
(err for err in (e.__context__, e.__cause__, *variadic(e.args))
|
||||
if isinstance(err, http.client.IncompleteRead)), 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
|
||||
|
||||
except urllib3.exceptions.HTTPError as e:
|
||||
|
|
|
@ -75,7 +75,7 @@ class HTTPError(RequestError):
|
|||
|
||||
|
||||
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.expected = expected
|
||||
msg = f'{partial} bytes read'
|
||||
|
|
Loading…
Reference in a new issue