[Erp5-report] r43255 nicolas.dumazet - in /erp5/trunk/products/ERP5Type: Core/ dynamic/ mixin/
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Feb 10 09:08:38 CET 2011
Author: nicolas.dumazet
Date: Thu Feb 10 09:08:38 2011
New Revision: 43255
URL: http://svn.erp5.org?rev=43255&view=rev
Log:
move/copy new way to generate related value accessors to accessor_holder module
Using a static small dictionary has the advantage that we don't have to recreate
this dictionary for each category we will treat.
Again, this code is still not used anywhere.
Modified:
erp5/trunk/products/ERP5Type/Core/CategoryProperty.py
erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py
erp5/trunk/products/ERP5Type/mixin/constraint.py
Modified: erp5/trunk/products/ERP5Type/Core/CategoryProperty.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Core/CategoryProperty.py?rev=43255&r1=43254&r2=43255&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Core/CategoryProperty.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Core/CategoryProperty.py [utf8] Thu Feb 10 09:08:38 2011
@@ -193,9 +193,9 @@ class CategoryProperty(XMLObject):
accessor_name = uppercase_reference[0].lower() + uppercase_reference[1:]
accessor = Value.ListGetter(accessor_name + 'Values', id)
- accessor_holder.registerAccessor(accessor_holder, read_permission)
+ accessor_holder.registerAccessor(accessor, read_permission)
accessor = Value.IdListGetter(accessor_name + 'Ids', id)
- accessor_holder.registerAccessor(accessor_holder, read_permission)
+ accessor_holder.registerAccessor(accessor, read_permission)
# then getters
for id_format, accessor_class in cls.getter_definition_dict.iteritems():
Modified: erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py?rev=43255&r1=43254&r2=43255&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py [utf8] Thu Feb 10 09:08:38 2011
@@ -41,6 +41,9 @@ from Products.ERP5Type.Utils import crea
from Products.ERP5Type.Utils import setDefaultClassProperties, setDefaultProperties
from Products.ERP5Type.Globals import InitializeClass
+from Products.ERP5Type.Utils import UpperCase
+from Products.ERP5Type.Accessor import Related, RelatedValue
+
from zLOG import LOG, ERROR, INFO
class AccessorHolderType(type):
@@ -187,27 +190,28 @@ def _generatePreferenceToolAccessorHolde
for accessor_holder in accessor_holder_list:
for prop in accessor_holder._properties:
- if prop.get('preference'):
- # XXX read_permission and write_permissions defined at
- # property sheet are not respected by this.
- # only properties marked as preference are used
-
- # properties have already been 'converted' and _list is appended
- # to list_types properties
- attribute = prop['id']
- if attribute.endswith('_list'):
- attribute = prop['base_id']
- attr_list = [ 'get%s' % convertToUpperCase(attribute)]
- if prop['type'] == 'boolean':
- attr_list.append('is%s' % convertToUpperCase(attribute))
- if prop['type'] in list_types :
- attr_list.append('get%sList' % convertToUpperCase(attribute))
- read_permission = prop.get('read_permission')
- for attribute_name in attr_list:
- method = PreferenceMethod(attribute_name, prop.get('default'))
- setattr(property_holder, attribute_name, method)
- if read_permission:
- property_holder.declareProtected(read_permission, attribute_name)
+ if not prop.get('preference'):
+ continue
+ # XXX read_permission and write_permissions defined at
+ # property sheet are not respected by this.
+ # only properties marked as preference are used
+
+ # properties have already been 'converted' and _list is appended
+ # to list_types properties
+ attribute = prop['id']
+ if attribute.endswith('_list'):
+ attribute = prop['base_id']
+ attr_list = [ 'get%s' % convertToUpperCase(attribute)]
+ if prop['type'] == 'boolean':
+ attr_list.append('is%s' % convertToUpperCase(attribute))
+ if prop['type'] in list_types :
+ attr_list.append('get%sList' % convertToUpperCase(attribute))
+ read_permission = prop.get('read_permission')
+ for attribute_name in attr_list:
+ method = PreferenceMethod(attribute_name, prop.get('default'))
+ setattr(property_holder, attribute_name, method)
+ if read_permission:
+ property_holder.declareProtected(read_permission, attribute_name)
accessor_holder = AccessorHolderType.fromPropertyHolder(
property_holder,
@@ -216,3 +220,133 @@ def _generatePreferenceToolAccessorHolde
initialize=False)
setattr(accessor_holder_module, 'PreferenceTool', accessor_holder)
return accessor_holder
+
+related_accessor_definition_dict = {
+ # List getter
+ RelatedValue.ListGetter: (
+ 'get%sRelatedValueList',
+ '_categoryGet%sRelatedValueList',
+ ),
+
+ # Set getter
+ RelatedValue.SetGetter: (
+ 'get%sRelatedValueSet',
+ '_categoryGet%sRelatedValueSet',
+ ),
+
+ # Default value getter
+ RelatedValue.DefaultGetter: (
+ 'getDefault%sRelatedValue',
+ 'get%sRelatedValue',
+ '_categoryGetDefault%sRelatedValue',
+ '_categoryGet%sRelatedValue',
+ ),
+
+ # Related Relative Url
+ Related.ListGetter: (
+ 'get%sRelatedList',
+ '_categoryGet%sRelatedList',
+ ),
+
+ # Related as Set
+ Related.SetGetter: (
+ 'get%sRelatedSet',
+ '_categoryGet%sRelatedSet',
+ ),
+
+ # Default getter
+ Related.DefaultGetter: (
+ 'getDefault%sRelated',
+ 'get%sRelated',
+ '_categoryGetDefault%sRelated',
+ '_categoryGet%sRelated',
+ ),
+
+ # Related Ids (ie. reverse relation getters)
+ RelatedValue.IdListGetter: (
+ 'get%sRelatedIdList',
+ '_categoryGet%sRelatedIdList',
+ ),
+
+ # Related Ids as Set
+ RelatedValue.IdSetGetter: (
+ 'get%sRelatedIdSet',
+ '_categoryGet%sRelatedIdSet',
+ ),
+
+ # Default Id getter
+ RelatedValue.DefaultIdGetter: (
+ 'getDefault%sRelatedId',
+ 'get%sRelatedId',
+ '_categoryGetDefault%sRelatedId',
+ '_categoryGet%sRelatedId',
+ ),
+
+ # Related Title list
+ RelatedValue.TitleListGetter: (
+ 'get%sRelatedTitleList',
+ '_categoryGet%sRelatedTitleList',
+ ),
+
+ # Related Title Set
+ RelatedValue.TitleSetGetter: (
+ 'get%sRelatedTitleSet',
+ '_categoryGet%sRelatedTitleSet',
+ ),
+
+ # Related default title
+ RelatedValue.DefaultTitleGetter: (
+ 'getDefault%sRelatedTitle',
+ 'get%sRelatedTitle',
+ '_categoryGetDefault%sRelatedTitle',
+ '_categoryGet%sRelatedTitle',
+ ),
+
+ # Related Property list
+ RelatedValue.PropertyListGetter: (
+ 'get%sRelatedPropertyList',
+ '_categoryGet%sRelatedPropertyList',
+ ),
+
+ # Related Property Set
+ RelatedValue.PropertySetGetter: (
+ 'get%sRelatedPropertySet',
+ '_categoryGet%sRelatedPropertySet',
+ ),
+
+ # Related default title
+ RelatedValue.DefaultPropertyGetter: (
+ 'getDefault%sRelatedProperty',
+ 'get%sRelatedProperty',
+ '_categoryGetDefault%sRelatedProperty',
+ '_categoryGet%sRelatedProperty',
+ ),
+}
+def applyCategoryAsRelatedValueAccessor(accessor_holder,
+ category_id,
+ category_tool):
+ """
+ Take one category_id, generate and apply all related value accessors
+ implied by this category, and apply/set them to the accessor_holder
+ """
+ cat_object = category_tool.get(category_id, None)
+ if cat_object is not None:
+ read_permission = Permissions.__dict__.get(
+ cat_object.getReadPermission(),
+ Permissions.AccessContentsInformation)
+ else:
+ read_permission = Permissions.AccessContentsInformation
+
+ uppercase_id = UpperCase(category_id)
+
+ # two special cases
+ accessor_name = uppercase_id[0].lower() + uppercase_id[1:]
+ accessor = RelatedValue.ListGetter(accessor_name + 'RelatedValues', id)
+ accessor_holder.registerAccessor(accessor, read_permission)
+ accessor = RelatedValue.IdListGetter(accessor_name + 'RelatedIds', id)
+ accessor_holder.registerAccessor(accessor, read_permission)
+
+ for accessor_class, accessor_name_list in related_accessor_definition_dict.items():
+ for accessor_name in accessor_name_list:
+ accessor = accessor_class(accessor_name % uppercase_id, id)
+ accessor_holder.registerAccessor(accessor, read_permission)
Modified: erp5/trunk/products/ERP5Type/mixin/constraint.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/mixin/constraint.py?rev=43255&r1=43254&r2=43255&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/mixin/constraint.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/mixin/constraint.py [utf8] Thu Feb 10 09:08:38 2011
@@ -242,5 +242,5 @@ class ConstraintMixin(Predicate):
security.declareProtected(Permissions.AccessContentsInformation,
'applyOnAccessorHolder')
- def applyOnAccessorHolder(self, accessor_holder, expression_context):
+ def applyOnAccessorHolder(self, accessor_holder, expression_context, portal):
accessor_holder.constraints.append(self)
More information about the Erp5-report
mailing list