# it is expected to exist one such object for a given page
import json
+
from engine.prelude import Prelude
from engine.manifoldapi import ManifoldAPI
+from myslice.config import Config
# decorator to deflect calls on this Page to its prelude
def to_prelude (method):
class Page:
def __init__ (self, request):
+ self.request=request
+ # all plugins mentioned in this page
self._plugins = {}
# queue of queries
self._queue=[]
+ # global prelude object
self.prelude=Prelude(css_files='css/plugin.css')
- # no queries yet, needed ?
# load metadata
self._metadata={}
- self._metadata_javascript=''
- self.load_metadata(request)
+ # 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):
# the js async methods (see manifold_async_success)
# offer the option to deliver the result to a specific DOM elt
- # otherwise it goes through the pubsub using query's uuid
+ # otherwise (i.e. if domid not provided)
+ # it goes through the pubsub using query's uuid
def enqueue_query (self, query, domid=None):
self._queue.append ( (query,domid,) )
self.add_js_chunks (js)
- def load_metadata(self, request):
- manifold_api_session_auth = request.session['manifold']['auth']
- manifold_api = ManifoldAPI(auth=manifold_api_session_auth)
+ def expose_js_metadata(self):
+ request=self.request
+ # 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)
- fields = ['table', 'column.column',
- 'column.description','column.header', 'column.title',
- 'column.unit', 'column.info_type',
- 'column.resource_type', 'column.value_type',
- 'column.allowed_values', 'column.platforms.platform',
- 'column.platforms.platform_url']
+ fields = ['table', 'column.column',
+ 'column.description','column.header', 'column.title',
+ 'column.unit', 'column.info_type',
+ 'column.resource_type', 'column.value_type',
+ 'column.allowed_values', 'column.platforms.platform',
+ 'column.platforms.platform_url']
- results = manifold_api.Get('metadata:table', [], [], fields)
+ results = manifold_api.Get('metadata:table', [], [], fields)
- for res in results:
- method = res['table']
- self._metadata[method] = res
+ for res in results:
+ method = res['table']
+ 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)
+ request.session['metadata'] = self._metadata
+ javascript = "all_headers=" + json.dumps(self._metadata) + ";"
+ self.add_js_chunks(javascript)
def metadata_get_fields(self, method):
return self._metadata[method]['column'].sort()
+ def expose_js_manifold_config (self):
+ self.add_js_chunks(Config.manifold_js_export())
#################### requirements/prelude management
# just forward to self.prelude - see decorator above