r13677 - in archetypes.schemaextender/branches/2.0: . archetypes/schemaextender

"Malthe Borch" <[email protected]> Sat, 11 Jun 2011 09:47:01 +0000
Newsgroups gmane.comp.web.zope.plone.archetypes.cvs
Message-ID <[email protected]>
Author: mborch
Date: Sat Jun 11 09:47:01 2011
New Revision: 13677

Modified:
   archetypes.schemaextender/branches/2.0/CHANGES.txt
   archetypes.schemaextender/branches/2.0/archetypes/schemaextender/extender.py
Log:
Backport request acquisition fix from trunk.

Modified: archetypes.schemaextender/branches/2.0/CHANGES.txt
==============================================================================
--- archetypes.schemaextender/branches/2.0/CHANGES.txt	(original)
+++ archetypes.schemaextender/branches/2.0/CHANGES.txt	Sat Jun 11 09:47:01 2011
@@ -4,6 +4,13 @@
 2.0.4 - unreleased
 ------------------
 
+* Acquire request object via local site hook if object is not
+  acquisition-wrapped (in ``cachingInstanceSchemaFactory``). This
+  fixes caching issues with objects rendered using DTML. Note that
+  this is likely a bug in the ``DocumentTemplate`` code. Ideally, the
+  issue should be resolved there.
+  [malthe]
+
 * Added example how to use ordered extenders and browser layer aware extenders [miohtama]
 
 2.0.3 - 2010-07-07

Modified: archetypes.schemaextender/branches/2.0/archetypes/schemaextender/extender.py
==============================================================================
--- archetypes.schemaextender/branches/2.0/archetypes/schemaextender/extender.py	(original)
+++ archetypes.schemaextender/branches/2.0/archetypes/schemaextender/extender.py	Sat Jun 11 09:47:01 2011
@@ -10,6 +10,13 @@
 from archetypes.schemaextender.interfaces import IExtensible
 from zope.component import adapter, getAdapters
 from zope.interface import implementer
+
+try:
+    from zope.site.hooks import getSite
+except ImportError:
+    # BBB, for older Zope 2
+    from zope.app.component.hooks import getSite
+
 try:
     from plone.browserlayer.utils import registered_layers
     has_plone_browserlayer = True
@@ -111,8 +118,17 @@
     """ schema adapter factory using a cache on the request object """
     schema = None
     if CACHE_ENABLED:
-        request = getattr(context, 'REQUEST', None)
-        if request is not None and not isinstance(request, str):
+        try:
+            lookup = context.aq_acquire
+        except AttributeError:
+            site = getSite()
+            lookup = site.aq_acquire
+
+        try:
+            request = lookup('REQUEST')
+        except AttributeError:
+            pass
+        else:
             attr = CACHE_KEY
             cache = getattr(request, attr, _marker)
             if cache is _marker:

------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev