Beta: Fix HTTPXClient retries #1209
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes issue reported by @tsalpekaar21 in #327 (comment) where requests that should have been non-retryable were retried, and the wrong exception classes were being produced.
Details
The fix is to stop calling
.raise_for_status. The.raise_for_statusmethod causes HTTPX to produce its own exceptions for non-2xx statuses -- but this isn't actually desired. The way that the other HTTP clients in_http_client.pywork is thatHTTPClient._handle_request_erroris responsible only for handling exceptions in cases where the HTTP request actually isn't able to complete. Completed requests with error status codes should be returned from.requestso that.should_retrycan run, andAPIRequestor.interpret_responseis responsible for converting this to an appropriate exception.