From eb2aae3e732b2a9b24f8cd926ef1ed3743dbb5c5 Mon Sep 17 00:00:00 2001
From: Thierry Parmentelat <thierry.parmentelat@inria.fr>
Date: Thu, 14 Mar 2013 09:27:16 +0100
Subject: [PATCH] make exposure of metadata explicit rather than automatic -
 not all views require a login, nor the metadata in fact

---
 engine/manifoldapi.py            |  3 ---
 engine/page.py                   | 22 +++++++++++++---------
 engine/static/js/plugin.js       | 12 ++++--------
 plugins/quickfilter.py           |  2 +-
 plugins/static/js/quickfilter.js |  2 +-
 5 files changed, 19 insertions(+), 22 deletions(-)

diff --git a/engine/manifoldapi.py b/engine/manifoldapi.py
index 1001f1b9..40f3e0c0 100644
--- a/engine/manifoldapi.py
+++ b/engine/manifoldapi.py
@@ -11,9 +11,6 @@ class ManifoldAPI:
 
     config = Config()
     self.auth = auth
-#    self.server = config.manifold_server
-#    self.port = config.manifold_port
-#    self.path = config.manifold_path
     self.cainfo = cainfo
     self.errors = []
     self.trace = []
diff --git a/engine/page.py b/engine/page.py
index dfbb5a95..57e52268 100644
--- a/engine/page.py
+++ b/engine/page.py
@@ -27,8 +27,8 @@ class Page:
         self.prelude=Prelude(css_files='css/plugin.css')
         # load metadata
         self._metadata={}
-        self._metadata_javascript='' 
-        self.expose_js_metadata()
+        # do not call this uncondionnally as we might not even have logged in
+        # self.expose_js_metadata()
 
     # record known plugins hashed on their domid
     def record_plugin (self, plugin):
@@ -64,7 +64,15 @@ class Page:
 
     def expose_js_metadata(self):
         request=self.request
-        if 'metadata' not in request.session.keys(): 
+        # xxx this code should probably not be called unconditionnally at page creation time
+        # because we're not sure a user is logged in so we might have no session...
+        if 'manifold' not in request.session:
+            print "Page.expose_js_metadata: no 'manifold' in session... - skipping"
+            return
+        # use cached version if present
+        if 'metadata' in request.session.keys(): 
+            self._metadata = request.session['metadata']
+        else:
             manifold_api_session_auth = request.session['manifold']['auth']
             manifold_api = ManifoldAPI(auth=manifold_api_session_auth)
         
@@ -82,13 +90,9 @@ class Page:
                  self._metadata[method] = res
 
             request.session['metadata'] = self._metadata
-            self._metadata_javascript = "all_headers=" + json.dumps(self._metadata) + ";"
-            self.add_js_chunks(self._metadata_javascript)
-        else:
-            self._metadata = request.session['metadata']
 
-        self._metadata_javascript = "all_headers=" + json.dumps(self._metadata) + ";"
-        self.add_js_chunks(self._metadata_javascript)
+        javascript = "all_headers=" + json.dumps(self._metadata) + ";"
+        self.add_js_chunks(javascript)
 
     def metadata_get_fields(self, method):
         return self._metadata[method]['column'].sort()
diff --git a/engine/static/js/plugin.js b/engine/static/js/plugin.js
index 709421ed..76683d1d 100644
--- a/engine/static/js/plugin.js
+++ b/engine/static/js/plugin.js
@@ -1,10 +1,10 @@
 function getMetadata(){
-    return all_headers;
+    return MANIFOLD_METADATA;
 }
 // returns all fields of a given method
 function getMetadata_fields(method){
     var result=new Array();
-    jQuery.each(all_headers, function(m,obj){
+    jQuery.each(MANIFOLD_METADATA, function(m,obj){
         if(m==method){
             jQuery.each(obj['column'], function(i,f){
                 result.push(f);
@@ -18,9 +18,8 @@ function getMetadata_fields(method){
 }
 // returns all properties of a given field
 function getMetadata_field(method, field){
-    //console.log(all_headers);
     var result=new Array();
-    jQuery.each(all_headers, function(m,obj){
+    jQuery.each(MANIFOLD_METADATA, function(m,obj){
         if(m==method){
             jQuery.each(obj['column'], function(i,f){
                 if(f['column']==field){
@@ -35,9 +34,8 @@ function getMetadata_field(method, field){
 }
 // returns the value of a property from a field within a method (type of object : resource,node,lease,slice...)
 function getMetadata_property(method, field, property){
-    //console.log(all_headers);
     var result=null;
-    jQuery.each(all_headers, function(m,obj){
+    jQuery.each(MANIFOLD_METADATA, function(m,obj){
         if(m==method){
             jQuery.each(obj['column'], function(i,f){
                 if(f['column']==field){
@@ -49,6 +47,4 @@ function getMetadata_property(method, field, property){
         }
     });
     return result;
-    //all_headers[method]['column']
-    //[field][]
 }
diff --git a/plugins/quickfilter.py b/plugins/quickfilter.py
index 77929d7f..b7777e42 100644
--- a/plugins/quickfilter.py
+++ b/plugins/quickfilter.py
@@ -6,7 +6,7 @@ class QuickFilter (Plugin) :
         Plugin.__init__ (self, **settings)
         self.list=list
         self.with_datatables = with_datatables
-        
+        self.page.expose_js_metadata()
 
     def title (self) : return "Title for Quick "
 
diff --git a/plugins/static/js/quickfilter.js b/plugins/static/js/quickfilter.js
index b14efe1f..7402b7b7 100644
--- a/plugins/static/js/quickfilter.js
+++ b/plugins/static/js/quickfilter.js
@@ -152,7 +152,7 @@
                     console.log(filter[0]);
                     allowedValues=getMetadata_property('resource', filter[0], 'allowed_values');
                     if (allowedValues!='' && allowedValues!="N/A") {
-                    //if(all_headers[filter[0]]['allowed_values']!=''){
+                    //if(MANIFOLD_METADATA[filter[0]]['allowed_values']!=''){
                         jQuery('#QuickFilter_select_field').val("#");
                         jQuery('#QuickFilter_select_value').children().remove().end();
                         jQuery('#QuickFilter_select_value_container').hide();
-- 
2.47.0