[Erp5-report] r20889 - in /erp5/trunk/products/ERP5Type: Base.py Utils.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed May 7 05:59:30 CEST 2008
Author: yo
Date: Wed May 7 05:59:30 2008
New Revision: 20889
URL: http://svn.erp5.org?rev=20889&view=rev
Log:
Make it sure to generate dynamic methods in an ERP5 Site.
Modified:
erp5/trunk/products/ERP5Type/Base.py
erp5/trunk/products/ERP5Type/Utils.py
Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=20889&r1=20888&r2=20889&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py (original)
+++ erp5/trunk/products/ERP5Type/Base.py Wed May 7 05:59:30 2008
@@ -526,10 +526,10 @@
# Mark as generated
Base.aq_method_generated[klass] = 1
-def initializePortalTypeDynamicProperties(self, klass, ptype, aq_key):
+def initializePortalTypeDynamicProperties(self, klass, ptype, aq_key, portal):
## Init CachingMethod which implements caching for ERP5
from Products.ERP5Type.Cache import initializePortalCachingProperties
- initializePortalCachingProperties(self)
+ initializePortalCachingProperties(portal)
id = ''
#LOG('before aq_portal_type %s' % id, 0, str(ptype))
@@ -544,9 +544,10 @@
(ptype != parent_type or klass != parent_klass) and \
not Base.aq_portal_type.has_key(parent_type):
initializePortalTypeDynamicProperties(parent_object, parent_klass,
- parent_type, parent_object._aq_key())
+ parent_type,
+ parent_object._aq_key(), portal)
# Initiatise portal_type properties (XXX)
- ptype_object = getattr(aq_base(self.portal_types), ptype, None)
+ ptype_object = getattr(aq_base(portal.portal_types), ptype, None)
prop_list = list(getattr(klass, '_properties', []))
cat_list = list(getattr(klass, '_categories', []))
constraint_list = list(getattr(klass, '_constraints', []))
@@ -588,10 +589,10 @@
prop_holder._constraints = constraint_list
from Utils import setDefaultClassProperties, setDefaultProperties
setDefaultClassProperties(prop_holder)
- setDefaultProperties(prop_holder, object=self)
+ setDefaultProperties(prop_holder, object=self, portal=portal)
#LOG('initializeDefaultProperties: %s' % ptype, 0, str(prop_holder.__dict__))
-# initializePortalTypeDynamicWorkflowMethods(self,
- initializePortalTypeDynamicWorkflowMethods(self, klass, ptype, prop_holder)
+ initializePortalTypeDynamicWorkflowMethods(self, klass, ptype, prop_holder,
+ portal)
# We can now associate it after initialising security
InitializeClass(prop_holder)
prop_holder.__propholder__ = prop_holder
@@ -600,7 +601,8 @@
#klass.__ac_permissions__ = prop_holder.__ac_permissions__
Base.aq_portal_type[aq_key] = prop_holder
-def initializePortalTypeDynamicWorkflowMethods(self, klass, ptype, prop_holder):
+def initializePortalTypeDynamicWorkflowMethods(self, klass, ptype, prop_holder,
+ portal):
"""We should now make sure workflow methods are defined
and also make sure simulation state is defined."""
# aq_inner is required to prevent extra name lookups from happening
@@ -608,7 +610,7 @@
# wrapper contains an object with _aq_dynamic defined, the workflow id
# is looked up with _aq_dynamic, thus causes infinite recursions.
- portal_workflow = aq_inner(getToolByName(self, 'portal_workflow'))
+ portal_workflow = aq_inner(getToolByName(portal, 'portal_workflow'))
for wf in portal_workflow.getWorkflowsFor(self):
if wf.__class__.__name__ in ('DCWorkflowDefinition', ):
wf_id = wf.id
@@ -877,22 +879,27 @@
initializeClassDynamicProperties(self, klass)
generated = 1
+ # Iterate until an ERP5 Site is obtained.
+ portal = self.getPortalObject()
+ while portal.portal_type != 'ERP5 Site':
+ portal = portal.aq_parent.aq_inner.getPortalObject()
+
# Generate portal_type methods
if not Base.aq_portal_type.has_key(aq_key):
if ptype == 'Preference':
# XXX-JPS this should be moved to Preference class
from Products.ERP5Form.PreferenceTool import updatePreferenceClassPropertySheetList
updatePreferenceClassPropertySheetList()
- initializePortalTypeDynamicProperties(self, klass, ptype, aq_key)
+ initializePortalTypeDynamicProperties(self, klass, ptype, aq_key, portal)
generated = 1
# Generate Related Accessors
if not Base.aq_related_generated:
from Utils import createRelatedValueAccessors
generated = 1
- portal_types = getToolByName(self, 'portal_types', None)
+ portal_types = getToolByName(portal, 'portal_types', None)
generated_bid = {}
- econtext = createExpressionContext(self.getPortalObject())
+ econtext = createExpressionContext(object=self, portal=portal)
for pid, ps in PropertySheet.__dict__.items():
if pid[0] != '_':
base_category_list = []
@@ -925,7 +932,7 @@
from Products.ERP5Form.PreferenceTool import createPreferenceToolAccessorList
from Products.ERP5Form.PreferenceTool import updatePreferenceClassPropertySheetList
updatePreferenceClassPropertySheetList()
- createPreferenceToolAccessorList(self.getPortalObject())
+ createPreferenceToolAccessorList(portal)
except ImportError, e :
LOG('Base._aq_dynamic', WARNING,
'unable to create methods for PreferenceTool', e)
Modified: erp5/trunk/products/ERP5Type/Utils.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Utils.py?rev=20889&r1=20888&r2=20889&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Utils.py (original)
+++ erp5/trunk/products/ERP5Type/Utils.py Wed May 7 05:59:30 2008
@@ -999,16 +999,11 @@
document_constructor.__name__ = document_constructor_name
-def createExpressionContext(object):
+def createExpressionContext(object, portal):
"""
Return a context used for evaluating a TALES expression.
"""
- if object is not None:
- portal = object.getPortalObject()
- else:
- portal = None
-
- if object is None or not hasattr(object, 'aq_base'):
+ if object is None or getattr(object, 'aq_base', None) is None:
folder = portal
else:
folder = object
@@ -1059,7 +1054,7 @@
}
return getEngine().getContext(data)
-def setDefaultProperties(property_holder, object=None):
+def setDefaultProperties(property_holder, object=None, portal=None):
"""
This methods sets default accessors for this object as well
as consistency checkers, based on the definition
@@ -1083,7 +1078,7 @@
Set default attributes in current object for all properties in '_properties'
"""
- econtext = createExpressionContext(object)
+ econtext = createExpressionContext(object, portal)
legalTypes = type_definition.keys()
# First build the property list from the property sheet
# and the class properties
@@ -1236,8 +1231,8 @@
write_permission=Permissions.ModifyPortalContent)
# Get read and write permission
- if object is not None:
- cat_object = object.getPortalObject().portal_categories.get(cat, None)
+ if portal is not None:
+ cat_object = portal.portal_categories.get(cat, None)
else:
cat_object = None
if cat_object is not None:
@@ -1273,8 +1268,8 @@
base_category_list.append(cat)
for cat in base_category_list:
# Get read and write permission
- if object is not None:
- cat_object = object.getPortalObject().portal_categories.get(cat, None)
+ if portal is not None:
+ cat_object = portal.portal_categories.get(cat, None)
else:
cat_object = None
if cat_object is not None:
More information about the Erp5-report
mailing list