SessionCache is a cleaner and more robust mechanism for caching material attached...
[unfold.git] / unfold / page.py
index 42a3506..f8f4eb3 100644 (file)
@@ -9,8 +9,10 @@ from django.template.loader import render_to_string
 from manifoldapi.metadata import MetaData
 
 from unfold.prelude import Prelude
-
+from unfold.sessioncache import SessionCache
+    
 from myslice.configengine import ConfigEngine
+from myslice.settings import logger
 
 # decorator to deflect calls on this Page to its prelude
 def to_prelude (method):
@@ -97,25 +99,17 @@ class Page:
     # needs to be called explicitly and only when metadata is actually required
     # in particular user needs to be logged
     def get_metadata (self):
-        # look in session's cache - we don't want to retrieve this for every request
-        session=self.request.session
-
-        if 'manifold' not in session:
-            session['manifold'] = {}
-        manifold = session['manifold']
-
-        # if cached, use it
-        if 'metadata' in manifold and isinstance(manifold['metadata'],MetaData):
-            if debug: print "Page.get_metadata: return cached value"
-            return manifold['metadata']
+        cached_metadata = SessionCache().get_metadata(self.request)
+        if cached_metadata and isinstance(cached_metadata, MetaData):
+            logger.debug("Page.get_metadata: return cached value")
+            return cached_metadata
 
         metadata_auth = {'AuthMethod':'anonymous'}
 
-        metadata=MetaData (metadata_auth)
+        metadata = MetaData (metadata_auth)
         metadata.fetch(self.request)
-        # store it for next time
-        manifold['metadata']=metadata
-        if debug: print "Page.get_metadata: return new value"
+        SessionCache().store_metadata(self.request, metadata)
+        logger.debug("Page.get_metadata: return new value")
         return metadata
             
     def expose_js_metadata (self):
@@ -123,6 +117,10 @@ class Page:
         # xxx this is fetched synchroneously..
         self.add_js_init_chunks("var MANIFOLD_METADATA =" + self.get_metadata().to_json() + ";\n")
 
+    def expose_js_var(self, name, value):
+        # expose variable as a js value
+        self.add_js_init_chunks("var " + name + "=" + value + ";\n")
+
     def expose_js_manifold_config (self):
         self.add_js_init_chunks(ConfigEngine().manifold_js_export())