55import httpx
66
77_HTTP_METHOD_TOKEN_PATTERN = re .compile (r"^[!#$%&'*+\-.^_`|~0-9A-Z]+$" )
8+ _MAX_ERROR_MESSAGE_LENGTH = 2000
89
910
1011def _normalize_request_method (method : Any ) -> str :
@@ -31,6 +32,12 @@ def _normalize_request_url(url: Any) -> str:
3132 return normalized_url
3233
3334
35+ def _truncate_error_message (message : str ) -> str :
36+ if len (message ) <= _MAX_ERROR_MESSAGE_LENGTH :
37+ return message
38+ return f"{ message [:_MAX_ERROR_MESSAGE_LENGTH ]} ... (truncated)"
39+
40+
3441def _stringify_error_value (value : Any , * , _depth : int = 0 ) -> str :
3542 if _depth > 10 :
3643 return str (value )
@@ -71,8 +78,8 @@ def extract_error_message(response: httpx.Response, fallback_error: Exception) -
7178 def _fallback_message () -> str :
7279 response_text = response .text
7380 if isinstance (response_text , str ) and response_text .strip ():
74- return response_text
75- return str (fallback_error )
81+ return _truncate_error_message ( response_text )
82+ return _truncate_error_message ( str (fallback_error ) )
7683
7784 try :
7885 error_data : Any = response .json ()
@@ -95,7 +102,9 @@ def _fallback_message() -> str:
95102 else :
96103 extracted_message = _stringify_error_value (error_data )
97104
98- return extracted_message if extracted_message .strip () else _fallback_message ()
105+ if not extracted_message .strip ():
106+ return _fallback_message ()
107+ return _truncate_error_message (extracted_message )
99108
100109
101110def extract_request_error_context (error : httpx .RequestError ) -> tuple [str , str ]:
0 commit comments