[Erp5-report] r43910 arnaud.fontaine - /erp5/trunk/products/ERP5Type/dynamic/

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Mar 2 17:54:35 CET 2011


Author: arnaud.fontaine
Date: Wed Mar  2 17:54:35 2011
New Revision: 43910

URL: http://svn.erp5.org?rev=43910&view=rev
Log:
expression_context must not be a global variable but a transactional
variable, otherwise it is kept for further transactions, thus leading
to ZODB ConnectionStateError.


Modified:
    erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py

Modified: erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py?rev=43910&r1=43909&r2=43910&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py [utf8] Wed Mar  2 17:54:35 2011
@@ -38,6 +38,7 @@ from types import ModuleType
 from Products.ERP5Type import Permissions
 from Products.ERP5Type.Utils import createExpressionContext
 from Products.ERP5Type.Globals import InitializeClass
+from Products.ERP5Type.TransactionalVariable import getTransactionalVariable
 
 from Products.ERP5Type.Utils import UpperCase
 from Products.ERP5Type.Accessor import Related, RelatedValue
@@ -298,13 +299,11 @@ def getPropertySheetValueList(site, prop
 
   return property_sheet_value_list
 
-expression_context = None
-
 def getAccessorHolderList(site, portal_type_name, property_sheet_value_list):
   import erp5.accessor_holder
 
-  global expression_context
   accessor_holder_list = []
+  tv = getTransactionalVariable()
 
   for property_sheet in property_sheet_value_list:
     # LOG("ERP5Type.dynamic", INFO,
@@ -323,8 +322,11 @@ def getAccessorHolderList(site, portal_t
                                           property_sheet_name))
     except AttributeError:
       # lazily create the context, only if needed.
-      if expression_context is None:
+      try:
+        expression_context = tv['accessor_holder_expression_context']
+      except KeyError:
         expression_context = createExpressionContext(site)
+        tv['accessor_holder_expression_context'] = expression_context
 
       # Generate the accessor holder as it has not been done yet
       accessor_holder_class = property_sheet.createAccessorHolder(



More information about the Erp5-report mailing list