55 lines
1.2 KiB
Python
55 lines
1.2 KiB
Python
"""API response utilities."""
|
|
from flask import jsonify, g
|
|
|
|
|
|
# Version for the response envelope
|
|
ENVELOPE_VERSION = "1.0"
|
|
|
|
|
|
def api_response(
|
|
*,
|
|
data=None,
|
|
success=True,
|
|
message="",
|
|
status=200,
|
|
error_type=None,
|
|
error_details=None,
|
|
meta=None
|
|
):
|
|
"""
|
|
Create a standardized API response.
|
|
|
|
Args:
|
|
data: Response data (only included if success=True)
|
|
success: Whether the request was successful
|
|
message: Human-readable message
|
|
status: HTTP status code
|
|
error_type: Type of error (only if success=False)
|
|
error_details: Additional error details (only if success=False)
|
|
meta: Additional metadata (pagination, etc.)
|
|
|
|
Returns:
|
|
Tuple of (response, status_code)
|
|
"""
|
|
payload = {
|
|
"version": ENVELOPE_VERSION,
|
|
"success": success,
|
|
"code": status,
|
|
"message": message,
|
|
"request_id": g.get("request_id", "unknown"),
|
|
}
|
|
|
|
if meta:
|
|
payload["meta"] = meta
|
|
|
|
if success:
|
|
if data is not None:
|
|
payload["data"] = data
|
|
else:
|
|
payload["error"] = {
|
|
"type": error_type or "UNKNOWN",
|
|
"details": error_details or {}
|
|
}
|
|
|
|
return jsonify(payload), status
|