Thin wrapper for layabase and layab error handling
Project description
Exceptions handling for layab
To be able to throw exceptions in your code and send a proper HTTP response automatically to your client your need to add error handler(s) to your API and endpoints.
Add all handlers at once
from flask_restplus import Resource
import layaberr
api = None # Your flask-restplus API instance
error_responses = layaberr.add_error_handlers(api)
@api.route("/your_endpoint")
@api.doc(**error_responses)
class YourFlaskRestPlusResource(Resource):
def get(self):
return "test"
Add some handlers
from flask_restplus import Resource
import layaberr
api = None # Your flask-restplus API instance
error_response = layaberr.add_failed_validation_handler(api)
@api.route("/your_endpoint")
class YourFlaskRestPlusResource(Resource):
@api.response(error_response)
def get(self):
return "test"
Supported Exceptions
The following exceptions are handled:
ValidationFailed
In case your endpoint raises ValidationFailed, an HTTP error 400 (Bad Request) will be sent to the client.
Error not specific to a field in received data
This code:
from layaberr import ValidationFailed
received_data = None
raise ValidationFailed(received_data, message="This is the error message")
Will result in the following JSON response sent to the client:
{"fields": [{"item": 1, "field_name": "", "messages": ["This is the error message"]}]}
Error specific to a field in a received dictionary
This code:
from layaberr import ValidationFailed
received_data = {"field 1": "value 1"}
raise ValidationFailed(received_data, errors={"field 1": ["Invalid value"]})
Will result in the following JSON response sent to the client:
{"fields": [{"item": 1, "field_name": "field 1", "messages": ["Invalid value"]}]}
Error specific to a field in a received list of dictionaries
This code:
from layaberr import ValidationFailed
received_data = [{"field 1": "value 1"}, {"field 1": "value 2"}]
raise ValidationFailed(received_data, errors={1: {"field 1": ["Invalid value"]}})
Will result in the following JSON response sent to the client:
{"fields": [{"item": 2, "field_name": "field 1", "messages": ["Invalid value"]}]}
ModelCouldNotBeFound
In case your endpoint raises ModelCouldNotBeFound, an HTTP error 404 (Not Found) will be sent to the client.
This code:
from layaberr import ModelCouldNotBeFound
requested_data = None
raise ModelCouldNotBeFound(requested_data)
Will result in the following JSON response sent to the client:
{"message": "Corresponding model could not be found."}
BadRequest
In case your endpoint raises BadRequest, an HTTP error 400 (Bad Request) will be sent to the client.
This code:
from werkzeug.exceptions import BadRequest
raise BadRequest("The exception message")
Will result in the following JSON response sent to the client:
{"message": "The exception message"}
Unauthorized
In case your endpoint raises Unauthorized, an HTTP error 401 (Unauthorized) will be sent to the client.
This code:
from werkzeug.exceptions import Unauthorized
raise Unauthorized("The exception message")
Will result in the following JSON response sent to the client:
{"message": "The exception message"}
Forbidden
In case your endpoint raises Forbidden, an HTTP error 403 (Forbidden) will be sent to the client.
This code:
from werkzeug.exceptions import Forbidden
raise Forbidden("The exception message")
Will result in the following JSON response sent to the client:
{"message": "The exception message"}
Exception (this is the default handler)
In case your endpoint raises an Exception, an HTTP error 500 (Internal Server Error) will be sent to the client.
This code:
raise Exception("The exception message")
Will result in the following JSON response sent to the client:
{"message": "The exception message"}
How to install
- python 3.6+ must be installed
- Use pip to install module:
python -m pip install layaberr
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.