"""Shared utilities for service HTTP clients.""" def extract_error_text(response) -> str: """ Extract a human-readable error message from an httpx Response. Priority: 1. JSON body -> 'detail' field (FastAPI / DRF standard) 2. JSON body -> 'message' field 3. JSON body -> entire dict as string 4. Raw response text (truncated to 300 chars) """ try: body = response.json() if isinstance(body, dict): msg = body.get("detail") or body.get("message") if msg: # msg may itself be a list of validation errors if isinstance(msg, list): parts = [] for item in msg: if isinstance(item, dict): parts.append(item.get("msg") or str(item)) else: parts.append(str(item)) return "; ".join(parts) return str(msg) return str(body) except Exception: pass text = response.text or "" return text[:300] if len(text) > 300 else text