X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=engine%2Fpage.py;h=57e52268df0dd68d59f10000fc4d6f3bf2882a1e;hb=557959f0e08f90646409d70f0231186d7a612c34;hp=ad671edc44ef5fb083a77e26982aadf76049a2e7;hpb=19ec09726b0265b30fb756c405c47dc789983256;p=unfold.git diff --git a/engine/page.py b/engine/page.py index ad671edc..57e52268 100644 --- a/engine/page.py +++ b/engine/page.py @@ -3,8 +3,10 @@ # 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): @@ -16,15 +18,17 @@ 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): @@ -38,7 +42,8 @@ class Page: # 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,) ) @@ -57,31 +62,43 @@ class Page: 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