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