Spaces:
Sleeping
Sleeping
File size: 2,238 Bytes
5df8a73 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #!/usr/bin/env python
"""
Error Utilities - Error formatting and handling utilities
"""
import json
from typing import Optional
def _find_json_block(message: str) -> Optional[str]:
"""Extract potential JSON block from message by matching braces."""
start_idx = message.find("{")
if start_idx == -1:
return None
brace_count = 0
in_string = False
escape_next = False
for char_idx in range(start_idx, len(message)):
char = message[char_idx]
if escape_next:
escape_next = False
continue
if char == "\\":
escape_next = True
continue
if char == '"':
in_string = not in_string
continue
if not in_string:
if char == "{":
brace_count += 1
elif char == "}":
brace_count -= 1
if brace_count == 0:
return message[start_idx : char_idx + 1]
return None
def format_exception_message(exc: Exception) -> str:
"""
Format exception message for better readability
Args:
exc: The exception to format
Returns:
Formatted error message
"""
message = str(exc)
# Try to parse JSON error messages (common in API errors)
potential_json = _find_json_block(message)
if potential_json:
try:
error_data = json.loads(potential_json)
# Standard extraction logic
if isinstance(error_data, dict) and "error" in error_data:
error_info = error_data["error"]
if isinstance(error_info, dict):
parts = []
if "message" in error_info:
parts.append(f"Message: {error_info['message']}")
if "type" in error_info:
parts.append(f"Type: {error_info['type']}")
if "code" in error_info:
parts.append(f"Code: {error_info['code']}")
if parts:
return " | ".join(parts)
except (json.JSONDecodeError, AttributeError):
pass
# Return original message if parsing fails
return message
|