X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=engine%2Fmanifoldproxy.py;h=f75d430c2bbab036fbfe2836912de81a6895e726;hb=2f570c9fab30a41767b20607bb3e01d102f12fec;hp=0eac779778580372d66fecf8095757416900b2ff;hpb=2757273117a830a2ec078139acdfb996ed8aec78;p=myslice.git diff --git a/engine/manifoldproxy.py b/engine/manifoldproxy.py index 0eac7797..f75d430c 100644 --- a/engine/manifoldproxy.py +++ b/engine/manifoldproxy.py @@ -1,26 +1,58 @@ +import json +# this is for django objects only +#from django.core import serializers +from django.http import HttpResponse, HttpResponseForbidden + +from engine.manifoldquery import ManifoldQuery +from engine.manifoldapi import ManifoldAPI + +# add artificial delay in s +debug_spin=0 +#debug_spin=1 + # this view is what the javascript talks to when it sends a query # see also # myslice/urls.py # as well as # static/js/manifold-async.js - -from django.core import serializers -from django.http import HttpResponse - -# xxx should probably cater for -# format_in : how is the query encoded in POST -# format_out: how to serve the results def api (request,format): + """the view associated with /manifold/api/ +with the query passed using POST""" + # expecting a POST if request.method != 'POST': print "manifoldproxy.api: unexpected method %s -- exiting"%request.method return # we only support json for now + # if needed in the future we should probably cater for + # format_in : how is the query encoded in POST + # format_out: how to serve the results if format != 'json': print "manifoldproxy.api: unexpected format %s -- exiting"%format return + try: + # translate incoming POST request into a query object + manifold_query = ManifoldQuery() + manifold_query.fill_from_dict(request.POST) + # retrieve session for request + manifold_api_session_auth = request.session['manifold']['auth'] + # actually forward + manifold_api= ManifoldAPI(auth=manifold_api_session_auth) + answer=manifold_api.send_manifold_query (manifold_query) + if debug_spin: + import time + time.sleep(debug_spin) + # return json-encoded answer + return HttpResponse (json.dumps(answer), mimetype="application/json") + except: + import traceback + traceback.print_exc() - # xxx actually ask the backend here - hard_wired_answer = {'a':'some string','b':123} - return HttpResponse (serializers.serialize("json",hard_wired_answer), - mimetype="application/json") +#################### +# see CSRF_FAILURE_VIEW in settings.py +# the purpose of redefining this was to display the failure reason somehow +# this however turns out disappointing/not very informative +failure_answer=[ "csrf_failure" ] +def csrf_failure(request, reason=""): + print "CSRF failure with reason '%s'"%reason + return HttpResponseForbidden (json.dumps (failure_answer), mimetype="application/json")