Author: jmorliaguet
Date: Sat Dec 17 01:17:00 2005
New Revision: 2038

Modified:
   cpsskins/branches/jmo-perspectives/browser/rendering/context.py
   cpsskins/branches/jmo-perspectives/browser/rendering/renderer.py
   cpsskins/branches/jmo-perspectives/browser/rendering/viewer.py
Log:

- fixed race condition on heavy loads



Modified: cpsskins/branches/jmo-perspectives/browser/rendering/context.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/browser/rendering/context.py     
(original)
+++ cpsskins/branches/jmo-perspectives/browser/rendering/context.py     Sat Dec 
17 01:17:00 2005
@@ -95,8 +95,9 @@
     def __repr__(self):
         return '<Renderer context info at %s>' % hex(id(self))
 
-def getContexts(request):
-    if 'cpsskins.contexts' not in request.annotations:
-         request.annotations['cpsskins.contexts'] = {}
-    return request.annotations['cpsskins.contexts']
+
+contexts = {}
+
+def getContexts():
+    return contexts
 

Modified: cpsskins/branches/jmo-perspectives/browser/rendering/renderer.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/browser/rendering/renderer.py    
(original)
+++ cpsskins/branches/jmo-perspectives/browser/rendering/renderer.py    Sat Dec 
17 01:17:00 2005
@@ -26,7 +26,6 @@
 from zope.publisher.interfaces import IRequest
 
 from cpsskins import configuration
-from cpsskins.browser.rendering.context import getContexts
 from cpsskins.browser.rendering.interfaces import IRendererView, IFilterView
 from cpsskins.elements.interfaces import IType, INode, IElement, ILeaf
 from cpsskins.setup.interfaces import IResource, ISetting
@@ -44,14 +43,13 @@
         self.element = element
         self.request = request
 
-    def __call__(self):
+    def __call__(self, tree):
         """Do the actual rendering by applying all filters.
         """
         element = self.element
         request = self.request
 
-        contexts = getContexts(request)
-        tree_element = contexts['tree'][element.identifier]
+        tree_element = tree[element.identifier]
 
         # set local context info variables
         info = tree_element['info']
@@ -68,7 +66,7 @@
                                    repr(node))
                     continue
                 renderer = getMultiAdapter((node, request), IRendererView)
-                rendered.append(renderer())
+                rendered.append(renderer(tree))
             markup = ''.join(rendered)
 
         # apply all the filters in sequence
@@ -87,8 +85,7 @@
         if display is None:
             return []
 
-        contexts = getContexts(request)
-        relations = contexts['relations']
+        relations = info.globals.relations
 
         # look for renderers associated to the element's content type
         iface = IType(element).getContentType()

Modified: cpsskins/branches/jmo-perspectives/browser/rendering/viewer.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/browser/rendering/viewer.py      
(original)
+++ cpsskins/branches/jmo-perspectives/browser/rendering/viewer.py      Sat Dec 
17 01:17:00 2005
@@ -29,7 +29,7 @@
 from zope.publisher.interfaces import IRequest
 
 from cpsskins.browser.negociation.interfaces import INegociation
-from cpsskins.browser.rendering.context import getContexts, ContextInfo
+from cpsskins.browser.rendering.context import ContextInfo
 from cpsskins.browser.rendering.interfaces import (
     IUpdateData, IViewer, IRendererView, IViewNodeEvent)
 from cpsskins.elements.interfaces import (
@@ -64,22 +64,23 @@
     def __call__(self, **kw):
         element = self.element
         request = self.request
-        contexts = getContexts(request)
 
         notify(ViewNodeEvent(element))
 
+        contexts = {}
+        tree = contexts['tree'] = {}
+
         relations = getUtility(IRelationStorage, context=element)
         negociation = getMultiAdapter((element, request),
                                       INegociation, 'negociation')
         perspective = negociation.getPerspective()
 
-        contexts['relations'] = relations
-
         # update global context info variables passed as keyword parameters
         globals = ContextInfo(kw)
         globals.update({
             'perspective': perspective,
             'request': request,
+            'relations': relations,
             })
 
         if globals.engine is None:
@@ -92,20 +93,20 @@
             globals.location = zapi.getParent(site)
 
         # build the tree and store it in the request
-        contexts['tree'] = _updateTreeInfo(node=element, globals=globals)
+        _updateTreeInfo(tree=tree, node=element, globals=globals)
 
         # render the tree
-        return getMultiAdapter((element, request), IRendererView)()
+        return getMultiAdapter((element, request), IRendererView)(tree)
 
-def _updateTreeInfo(index={}, node=None, globals=None):
+def _updateTreeInfo(tree={}, node=None, globals=None):
     """Build the tree info for an element.
     """
 
     if not INode.providedBy(node):
         logger.warning("The object '%s' is not a valid node.", repr(node))
-        return index
+        return {}
 
-    node_index = index[node.identifier] = {}
+    node_index = tree[node.identifier] = {}
 
     # if the object is inside a slot, get the parent's display.
     # TODO this should be moved somewhere else
@@ -136,7 +137,6 @@
         node.update(info)
 
     for child in children:
-        _updateTreeInfo(index=index, node=child, globals=globals)
+        _updateTreeInfo(tree=tree, node=child, globals=globals)
 
-    return index
 
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to