X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=engine%2Fmanifoldproxy.py;h=f75d430c2bbab036fbfe2836912de81a6895e726;hb=2d486f53c3e3acb881ddca8e3625f4dee7bc81f7;hp=109f59348189fbfb64c76210bf20161e9096fb60;hpb=00e925de365deefe83fd1bf17726dce43947dfbd;p=unfold.git diff --git a/engine/manifoldproxy.py b/engine/manifoldproxy.py index 109f5934..f75d430c 100644 --- a/engine/manifoldproxy.py +++ b/engine/manifoldproxy.py @@ -1,45 +1,57 @@ -# 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 - 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 -# xxx should probably cater for -# format_in : how is the query encoded in POST -# format_out: how to serve the results +# 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 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 - - # xxx actually ask the backend here - # 4amine - # manifold_query = ManifoldQuery() - # manifold_query.fill_from_dict(request.POST) - # locate the api and/or the auth - # api= - # forward - # answer=api.send_manifold_query (manifold_query) - hard_wired_answer = [ {'slice_hrn':'a.b.c'}, {'slice_hrn':'ple.inria.foo' } ] - answer=hard_wired_answer - return HttpResponse (json.dumps(answer), mimetype="application/json") + 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() #################### -# to enable : see CSRF_FAILURE_VIEW in settings.py -# probably we want to elaborate this one a little in real life -# at least we can display the reason in the django output (although this turns out disappointing) +# 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