Source code for shopyo.api.response

"""
response.py

Utilities for standardized API responses in Flask.
"""

from flask import jsonify


[docs] def json_response(data=None, status=200, message=None, **kwargs): """ Return a standard JSON response. Args: data (dict or list, optional): The main data payload. status (int): HTTP status code. message (str, optional): Optional message. **kwargs: Additional fields to include. Returns: Flask Response: JSON response. """ response = { "success": 200 <= status < 300, "data": data, "message": message, } response.update(kwargs) return jsonify(response), status
[docs] def error_response(message, status=400, errors=None, **kwargs): """ Return a standard error JSON response. Args: message (str): Error message. status (int): HTTP status code. errors (dict or list, optional): Additional error details. **kwargs: Additional fields to include. Returns: Flask Response: JSON response. """ response = { "success": False, "error": { "message": message, "details": errors, }, } response.update(kwargs) return jsonify(response), status
[docs] def paginated_response( items, total, page, per_page, status=200, message=None, **kwargs ): """ Return a paginated JSON response. Args: items (list): List of items for the current page. total (int): Total number of items. page (int): Current page number. per_page (int): Items per page. status (int): HTTP status code. message (str, optional): Optional message. **kwargs: Additional fields to include. Returns: Flask Response: JSON response. """ response = { "success": 200 <= status < 300, "data": items, "pagination": { "total": total, "page": page, "per_page": per_page, "pages": (total + per_page - 1) // per_page, }, "message": message, } response.update(kwargs) return jsonify(response), status