debug & renamings
[unfold.git] / engine / manifoldproxy.py
index 0eac779..d5a4ab0 100644 (file)
@@ -1,26 +1,54 @@
+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
+    # 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")
 
-    # 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")