33
33
from httpx import URL , Limits
34
34
from pydantic import PrivateAttr
35
35
36
- from . import _base_exceptions as exceptions
36
+ from . import _exceptions
37
37
from ._qs import Querystring
38
38
from ._types import (
39
39
NOT_GIVEN ,
64
64
construct_type ,
65
65
)
66
66
from ._streaming import Stream , AsyncStream
67
- from ._base_exceptions import (
67
+ from ._exceptions import (
68
68
APIStatusError ,
69
69
APITimeoutError ,
70
70
APIConnectionError ,
@@ -335,7 +335,6 @@ def __init__(
335
335
336
336
def _make_status_error_from_response (
337
337
self ,
338
- request : httpx .Request ,
339
338
response : httpx .Response ,
340
339
) -> APIStatusError :
341
340
err_text = response .text .strip ()
@@ -347,33 +346,16 @@ def _make_status_error_from_response(
347
346
except Exception :
348
347
err_msg = err_text or f"Error code: { response .status_code } "
349
348
350
- return self ._make_status_error (err_msg , body = body , request = request , response = response )
349
+ return self ._make_status_error (err_msg , body = body , response = response )
351
350
352
351
def _make_status_error (
353
352
self ,
354
353
err_msg : str ,
355
354
* ,
356
355
body : object ,
357
- request : httpx .Request ,
358
356
response : httpx .Response ,
359
- ) -> APIStatusError :
360
- if response .status_code == 400 :
361
- return exceptions .BadRequestError (err_msg , request = request , response = response , body = body )
362
- if response .status_code == 401 :
363
- return exceptions .AuthenticationError (err_msg , request = request , response = response , body = body )
364
- if response .status_code == 403 :
365
- return exceptions .PermissionDeniedError (err_msg , request = request , response = response , body = body )
366
- if response .status_code == 404 :
367
- return exceptions .NotFoundError (err_msg , request = request , response = response , body = body )
368
- if response .status_code == 409 :
369
- return exceptions .ConflictError (err_msg , request = request , response = response , body = body )
370
- if response .status_code == 422 :
371
- return exceptions .UnprocessableEntityError (err_msg , request = request , response = response , body = body )
372
- if response .status_code == 429 :
373
- return exceptions .RateLimitError (err_msg , request = request , response = response , body = body )
374
- if response .status_code >= 500 :
375
- return exceptions .InternalServerError (err_msg , request = request , response = response , body = body )
376
- return APIStatusError (err_msg , request = request , response = response , body = body )
357
+ ) -> _exceptions .APIStatusError :
358
+ raise NotImplementedError ()
377
359
378
360
def _remaining_retries (
379
361
self ,
@@ -532,10 +514,10 @@ def _process_response(
532
514
content_type , * _ = response .headers .get ("content-type" ).split (";" )
533
515
if content_type != "application/json" :
534
516
if self ._strict_response_validation :
535
- raise exceptions . APIResponseValidationError (
517
+ raise APIResponseValidationError (
536
518
response = response ,
537
- request = response .request ,
538
519
message = f"Expected Content-Type response header to be `application/json` but received `{ content_type } ` instead." ,
520
+ body = response .text ,
539
521
)
540
522
541
523
# If the API responds with content that isn't JSON then we just return
@@ -544,7 +526,11 @@ def _process_response(
544
526
return response .text # type: ignore
545
527
546
528
data = response .json ()
547
- return self ._process_response_data (data = data , cast_to = cast_to , response = response )
529
+
530
+ try :
531
+ return self ._process_response_data (data = data , cast_to = cast_to , response = response )
532
+ except pydantic .ValidationError as err :
533
+ raise APIResponseValidationError (response = response , body = data ) from err
548
534
549
535
def _process_response_data (
550
536
self ,
@@ -826,7 +812,7 @@ def _request(
826
812
# If the response is streamed then we need to explicitly read the response
827
813
# to completion before attempting to access the response text.
828
814
err .response .read ()
829
- raise self ._make_status_error_from_response (request , err .response ) from None
815
+ raise self ._make_status_error_from_response (err .response ) from None
830
816
except httpx .TimeoutException as err :
831
817
if retries > 0 :
832
818
return self ._retry_request (options , cast_to , retries , stream = stream , stream_cls = stream_cls )
@@ -845,12 +831,7 @@ def _request(
845
831
raise MissingStreamClassError ()
846
832
return stream_cls (cast_to = cast_to , response = response , client = self )
847
833
848
- try :
849
- rsp = self ._process_response (cast_to = cast_to , options = options , response = response )
850
- except pydantic .ValidationError as err :
851
- raise APIResponseValidationError (request = request , response = response ) from err
852
-
853
- return rsp
834
+ return self ._process_response (cast_to = cast_to , options = options , response = response )
854
835
855
836
def _retry_request (
856
837
self ,
@@ -1184,7 +1165,7 @@ async def _request(
1184
1165
# If the response is streamed then we need to explicitly read the response
1185
1166
# to completion before attempting to access the response text.
1186
1167
await err .response .aread ()
1187
- raise self ._make_status_error_from_response (request , err .response ) from None
1168
+ raise self ._make_status_error_from_response (err .response ) from None
1188
1169
except httpx .ConnectTimeout as err :
1189
1170
if retries > 0 :
1190
1171
return await self ._retry_request (options , cast_to , retries , stream = stream , stream_cls = stream_cls )
@@ -1213,12 +1194,7 @@ async def _request(
1213
1194
raise MissingStreamClassError ()
1214
1195
return stream_cls (cast_to = cast_to , response = response , client = self )
1215
1196
1216
- try :
1217
- rsp = self ._process_response (cast_to = cast_to , options = options , response = response )
1218
- except pydantic .ValidationError as err :
1219
- raise APIResponseValidationError (request = request , response = response ) from err
1220
-
1221
- return rsp
1197
+ return self ._process_response (cast_to = cast_to , options = options , response = response )
1222
1198
1223
1199
async def _retry_request (
1224
1200
self ,
0 commit comments