@@ -304,6 +304,18 @@ def __str__(self) -> str:
304304 return self ._BrokenString ("broken\t fallback\n value" )
305305
306306
307+ class _StringifiesToStringSubclass :
308+ class _StringSubclass (str ):
309+ pass
310+
311+ def __str__ (self ) -> str :
312+ return self ._StringSubclass ("subclass fallback value" )
313+
314+
315+ class _MessageStringSubclass (str ):
316+ pass
317+
318+
307319def test_extract_request_error_context_uses_unknown_when_request_unset ():
308320 method , url = extract_request_error_context (httpx .RequestError ("network down" ))
309321
@@ -972,31 +984,31 @@ def test_extract_error_message_sanitizes_control_characters_in_fallback_error_te
972984 assert message == "bad?fallback?text"
973985
974986
975- def test_extract_error_message_falls_back_when_message_strip_fails ():
987+ def test_extract_error_message_normalizes_message_values_when_strip_fails ():
976988 message = extract_error_message (
977989 _DummyResponse ({"message" : _BrokenStripString ("broken message" )}),
978990 RuntimeError ("fallback detail" ),
979991 )
980992
981- assert message == "fallback detail "
993+ assert message == "broken message "
982994
983995
984- def test_extract_error_message_falls_back_when_message_length_check_fails ():
996+ def test_extract_error_message_normalizes_message_values_when_length_check_fails ():
985997 message = extract_error_message (
986998 _DummyResponse ({"message" : _BrokenLenString ("broken message" )}),
987999 RuntimeError ("fallback detail" ),
9881000 )
9891001
990- assert message == "fallback detail "
1002+ assert message == "broken message "
9911003
9921004
993- def test_extract_error_message_falls_back_when_response_text_strip_fails ():
1005+ def test_extract_error_message_normalizes_response_text_values_when_strip_fails ():
9941006 message = extract_error_message (
9951007 _DummyResponse (" " , text = _BrokenStripString ("response body" )),
9961008 RuntimeError ("fallback detail" ),
9971009 )
9981010
999- assert message == "fallback detail "
1011+ assert message == "response body "
10001012
10011013
10021014def test_extract_error_message_handles_response_text_sanitization_iteration_failures ():
@@ -1033,6 +1045,24 @@ def test_extract_error_message_handles_fallback_errors_with_broken_string_subcla
10331045 assert message == "<_StringifiesToBrokenSubclass>"
10341046
10351047
1048+ def test_extract_error_message_handles_fallback_errors_with_string_subclass_results ():
1049+ message = extract_error_message (
1050+ _DummyResponse (" " , text = " " ),
1051+ _StringifiesToStringSubclass (),
1052+ )
1053+
1054+ assert message == "<_StringifiesToStringSubclass>"
1055+
1056+
1057+ def test_extract_error_message_normalizes_string_subclass_message_values ():
1058+ message = extract_error_message (
1059+ _DummyResponse ({"message" : _MessageStringSubclass ("detail from subclass" )}),
1060+ RuntimeError ("fallback detail" ),
1061+ )
1062+
1063+ assert message == "detail from subclass"
1064+
1065+
10361066def test_extract_error_message_sanitizes_control_characters_in_json_message ():
10371067 message = extract_error_message (
10381068 _DummyResponse ({"message" : "bad\t json\n message" }),
0 commit comments