########################################################################## # # pgAdmin 4 - PostgreSQL Tools # # Copyright (C) 2013 - 2016, The pgAdmin Development Team # This software is released under the PostgreSQL Licence # ########################################################################## """Utility functions for dealing with AJAX.""" from flask import Response from flask.ext.babel import gettext as _ import simplejson as json import datetime import decimal class DataTypeJSONEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime.datetime): return obj.isoformat() if isinstance(obj, decimal.Decimal): return float(obj) return json.JSONEncoder.default(self, obj) def make_json_response(success=1, errormsg='', info='', result=None, data=None, status=200): """Create a HTML response document describing the results of a request and containing the data.""" doc = dict() doc['success'] = success doc['errormsg'] = errormsg doc['info'] = info doc['result'] = result doc['data'] = data return Response( response=json.dumps(doc, cls=DataTypeJSONEncoder), status=status, mimetype="text/json" ) def make_response(response=None, status=200): """Create a JSON response handled by the backbone models.""" return Response( response=json.dumps(response, cls=DataTypeJSONEncoder), status=status, mimetype="text/json" ) def internal_server_error(errormsg=''): """Create a response with HTTP status code 500 - Internal Server Error.""" return make_json_response( status=500, success=0, errormsg=errormsg ) def forbidden(errmsg=''): """Create a response with HTTP status code 403 - Forbidden.""" return make_json_response( status=403, success=0, errormsg=errmsg ) def unauthorized(errormsg=''): """Create a response with HTTP status code 401 - Unauthorized.""" return make_json_response( status=401, success=0, errormsg=errormsg ) def bad_request(errormsg=''): """Create a response with HTTP status code 400 - Bad Request.""" return make_json_response( status=400, success=0, errormsg=errormsg ) def precondition_required(errormsg=''): """Create a response with HTTP status code 428 - Precondition Required.""" return make_json_response( status=428, success=0, errormsg=errormsg ) def success_return(message=''): """Create a response with HTTP status code 200 - OK.""" return make_json_response( status=200, success=1, info=message ) def gone(errormsg=''): """Create a response with HTTP status code 410 - GONE.""" return make_json_response( status=410, success=0, errormsg=errormsg ) def not_implemented(errormsg=_('It is not implemented!')): """Create a response with HTTP status code 501 - Not Implemented.""" return make_json_response( status=501, success=0, errormsg=errormsg )