How to return error messages in JSON with Bottle HTTPError?

Seventh Helix picture Seventh Helix · Jun 15, 2015 · Viewed 8.3k times · Source

I have a bottle server that returns HTTPErrors as such:

return HTTPError(400, "Object already exists with that name")

When I receive this response in the browser, I'd like to be able to pick out the error message given. As it is right now I can see the error message in the response's responseText field, but it's buried in an HTML string that I'd rather not parse if I don't have to.

Is there any way I can specifically set the error message in Bottle so I can pick it out in JSON in the browser?

Answer

dreyescat picture dreyescat · Jun 16, 2015

HTTPError uses a predefined HTML template to build the body of the response. Instead of using HTTPError you can use response with the appropriate status code and body.

import json
from bottle import run, route, response

@route('/text')
def get_text():
    response.status = 400
    return 'Object already exists with that name'

@route('/json')
def get_json():
    response.status = 400
    response.content_type = 'application/json'
    return json.dumps({'error': 'Object already exists with that name'})

# Start bottle server.
run(host='0.0.0.0', port=8070, debug=True)