diff --git a/ckan/controllers/flapi.py b/ckan/controllers/flapi.py index c1e4d800cd0..be102198628 100644 --- a/ckan/controllers/flapi.py +++ b/ckan/controllers/flapi.py @@ -1,9 +1,10 @@ import logging +import json import ckan.model as model import ckan.logic as logic -from flask import abort, jsonify, request +from flask import abort, jsonify, request, Response from flask.views import MethodView log = logging.getLogger(__name__) @@ -24,8 +25,9 @@ def get(self, func_name): # TODO: Check and pop callback + context = {'model':model, 'session': model.Session, 'user': ''} try: - response = fn({'model':model, 'session': model.Session}, params) + response = fn(context, params) except logic.ValidationError, e: error_dict = e.error_dict error_dict['__type'] = 'Validation Error' @@ -37,6 +39,10 @@ def get(self, func_name): log.info('Validation error (Action API): %r' % str(e.error_dict)) return jsonify(return_dict), 409 + if isinstance(response, list): + # Flask won't allow jsonifying lists because it's unsafe. Apparently. + return Response(json.dumps(response), mimetype='application/json') + return jsonify(response) def post(self, func_name):