From ea488e4006ccce19cf3f410bcca437bfc7faee4f Mon Sep 17 00:00:00 2001 From: Julien Muchembled <jm@nexedi.com> Date: Mon, 18 Oct 2010 14:11:30 +0000 Subject: [PATCH] Variated -> VariatedMixin git-svn-id: https://svn.erp5.org/repos/public/erp5/sandbox/amount_generator@39281 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../Resource_getScaledInventoryList.xml | 2 +- product/ERP5/Document/Amount.py | 11 +- product/ERP5/Document/Budget.py | 5 +- product/ERP5/Document/BudgetLine.py | 4 +- product/ERP5/Document/Consumption.py | 7 +- product/ERP5/Document/DeliveryLine.py | 4 +- product/ERP5/Document/Resource.py | 11 +- product/ERP5/Document/Transformation.py | 2 +- product/ERP5/Variated.py | 360 +----------------- product/ERP5/VariationValue.py | 5 +- product/ERP5/mixin/variated.py | 30 +- 11 files changed, 37 insertions(+), 404 deletions(-) diff --git a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Resource_getScaledInventoryList.xml b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Resource_getScaledInventoryList.xml index f76e6487c9..66c74ad85e 100644 --- a/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Resource_getScaledInventoryList.xml +++ b/bt5/erp5_pdm/SkinTemplateItem/portal_skins/erp5_pdm/Resource_getScaledInventoryList.xml @@ -82,7 +82,7 @@ variation_list = kwargs.get(\'variation_list\')\n variation_text = \'\'\n \n if variation_list is not None and len(variation_list) > 0:\n - # imitate behaviour from ERP5/Variated.py:getVariationText\n + # imitate behaviour from VariatedMixin.getVariationText\n # to create text\n variation_list.sort()\n variation_text = \'\\n\'.join(variation_list)\n diff --git a/product/ERP5/Document/Amount.py b/product/ERP5/Document/Amount.py index b2b9cc3021..14d1607889 100644 --- a/product/ERP5/Document/Amount.py +++ b/product/ERP5/Document/Amount.py @@ -30,7 +30,7 @@ import zope.interface from math import log from AccessControl import ClassSecurityInfo -from Products.ERP5.Variated import Variated +from Products.ERP5.mixin.variated import VariatedMixin from Products.ERP5.VariationValue import VariationValue from Products.ERP5Type import Permissions, PropertySheet, interfaces from Products.ERP5Type.Base import Base @@ -41,7 +41,7 @@ from zLOG import LOG, ERROR from warnings import warn -class Amount(Base, Variated): +class Amount(Base, VariatedMixin): """ A mix-in class which provides some utilities (variations, conversions, etc.) @@ -61,8 +61,7 @@ class Amount(Base, Variated): security.declareObjectProtected(Permissions.AccessContentsInformation) # Declarative interfaces - zope.interface.implements(interfaces.IVariated, - interfaces.IAmount) + zope.interface.implements(interfaces.IAmount) property_sheets = ( PropertySheet.Base , PropertySheet.SimpleItem @@ -108,7 +107,7 @@ class Amount(Base, Variated): current_category=None,**kw): """ Returns the list of possible variations - XXX Copied and modified from Variated + XXX Copied and modified from VariatedMixin Result is left display. """ variation_category_item_list = [] @@ -274,7 +273,7 @@ class Amount(Base, Variated): result = resource.getVariationBaseCategoryList( omit_optional_variation=omit_optional_variation) else: - result = Variated.getVariationRangeBaseCategoryList(self) + result = super(Amount, self).getVariationRangeBaseCategoryList() return result security.declareProtected(Permissions.AccessContentsInformation, diff --git a/product/ERP5/Document/Budget.py b/product/ERP5/Document/Budget.py index dcbeab5ae9..0490d7eb3c 100644 --- a/product/ERP5/Document/Budget.py +++ b/product/ERP5/Document/Budget.py @@ -30,11 +30,10 @@ from AccessControl import ClassSecurityInfo from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5.Document.Predicate import Predicate +from Products.ERP5.mixin.variated import VariatedMixin -from Products.ERP5.Variated import Variated - -class Budget(Predicate, Variated): +class Budget(Predicate, VariatedMixin): """ Budget means a kind of budget stock. """ diff --git a/product/ERP5/Document/BudgetLine.py b/product/ERP5/Document/BudgetLine.py index a9e9e3943a..f0fb252f26 100644 --- a/product/ERP5/Document/BudgetLine.py +++ b/product/ERP5/Document/BudgetLine.py @@ -32,10 +32,10 @@ from AccessControl import ClassSecurityInfo from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type.XMLMatrix import XMLMatrix from Products.ERP5.Document.Predicate import Predicate -from Products.ERP5.Variated import Variated +from Products.ERP5.mixin.variated import VariatedMixin -class BudgetLine(Predicate, XMLMatrix, Variated): +class BudgetLine(Predicate, XMLMatrix, VariatedMixin): """ A Line of budget, variated in budget cells. """ diff --git a/product/ERP5/Document/Consumption.py b/product/ERP5/Document/Consumption.py index ffecd75d0b..4068b4aa1b 100644 --- a/product/ERP5/Document/Consumption.py +++ b/product/ERP5/Document/Consumption.py @@ -33,9 +33,10 @@ from AccessControl import ClassSecurityInfo from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type.XMLObject import XMLObject from Products.ERP5Type.XMLMatrix import XMLMatrix -from Products.ERP5.Variated import Variated +from Products.ERP5.mixin.variated import VariatedMixin -class Consumption(XMLObject, XMLMatrix, Variated): + +class Consumption(XMLObject, XMLMatrix, VariatedMixin): """ A matrix which provides default quantities for a given quantity @@ -66,7 +67,7 @@ class Consumption(XMLObject, XMLMatrix, Variated): self._setCategoryMembership(self.getVariationRangeBaseCategoryList(), value, base=1) # XXX Must use in futur this method, but it failed today - #Variated._setVariationCategoryList(self, value) + #VariatedMixin._setVariationCategoryList(self, value) # XXX FIXME: Use a interaction workflow instead # Kept for compatibility. self.updateCellRange(base_id='quantity') diff --git a/product/ERP5/Document/DeliveryLine.py b/product/ERP5/Document/DeliveryLine.py index 90f6fc66e6..93b490f580 100644 --- a/product/ERP5/Document/DeliveryLine.py +++ b/product/ERP5/Document/DeliveryLine.py @@ -35,11 +35,9 @@ from Products.ERP5Type.XMLMatrix import XMLMatrix from Products.ERP5Type.XMLObject import XMLObject from Products.ERP5.Document.Movement import Movement -from Products.ERP5.Variated import Variated from Products.ERP5.Document.ImmobilisationMovement import ImmobilisationMovement -class DeliveryLine(Movement, XMLObject, XMLMatrix, Variated, - ImmobilisationMovement): +class DeliveryLine(Movement, XMLObject, XMLMatrix, ImmobilisationMovement): """ A DeliveryLine object allows to implement lines in Deliveries (packing list, order, invoice, etc.) diff --git a/product/ERP5/Document/Resource.py b/product/ERP5/Document/Resource.py index 2ff27c9190..8d8222b07a 100644 --- a/product/ERP5/Document/Resource.py +++ b/product/ERP5/Document/Resource.py @@ -38,14 +38,13 @@ from Products.ERP5Type.XMLMatrix import XMLMatrix from Products.ERP5Type.Base import Base from Products.ERP5Type.Utils import cartesianProduct - -from Products.ERP5.Variated import Variated +from Products.ERP5.mixin.variated import VariatedMixin from Products.CMFCategory.Renderer import Renderer from Products.CMFCore.utils import getToolByName from zLOG import LOG, WARNING -class Resource(XMLMatrix, Variated): +class Resource(XMLMatrix, VariatedMixin): """ A Resource """ @@ -147,8 +146,8 @@ class Resource(XMLMatrix, Variated): other_base_category_dict.iteritems() if y == 1] # Get category variation if other_base_category_list: - result.extend(Variated.getVariationRangeCategoryItemList( - self, base_category_list=other_base_category_list, + result.extend(super(Resource, self).getVariationRangeCategoryItemList( + base_category_list=other_base_category_list, base=base, display_base_category=display_base_category, **kw)) # Return result return result @@ -187,7 +186,7 @@ class Resource(XMLMatrix, Variated): if not x in optional_bc_list] - result = Variated.getVariationCategoryItemList(self, + result = super(Resource, self).getVariationCategoryItemList( base_category_list=other_bc_list, display_base_category=display_base_category, display_id=display_id, base=base, **kw) diff --git a/product/ERP5/Document/Transformation.py b/product/ERP5/Document/Transformation.py index 9f568c6557..a9ed756c9b 100644 --- a/product/ERP5/Document/Transformation.py +++ b/product/ERP5/Document/Transformation.py @@ -237,7 +237,7 @@ class Transformation(MappedValue, AmountGeneratorMixin, VariatedMixin): **kw): """ Returns the list of possible variations - XXX Copied and modified from Variated + XXX Copied and modified from VariatedMixin Result is left display. """ variation_category_item_list = [] diff --git a/product/ERP5/Variated.py b/product/ERP5/Variated.py index 552a9c72dc..4e976613c9 100644 --- a/product/ERP5/Variated.py +++ b/product/ERP5/Variated.py @@ -26,367 +26,13 @@ # ############################################################################## -from AccessControl import ClassSecurityInfo from Products.ERP5Type.Globals import InitializeClass -from Products.CMFCore.utils import getToolByName - -from Products.ERP5Type import interfaces, Permissions from Products.ERP5Type.Base import Base -from Products.CMFCategory.Renderer import Renderer - -from warnings import warn -from zope.interface import implements - -class Variated(Base): - """ - Variated is a mix-in class for all classes which implement - the Variated Interface. - - A Variable object is an object which can variate - according to multiple dimensions. Variable objects include: - - - a Resource instance - - - an Amount instance (a Movement, a DeliveryLine, etc.) - - - an Item - - - a TransformedResource instance - """ - - # Declarative security - security = ClassSecurityInfo() - - # Declarative interfaces - implements(interfaces.IVariated) - - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationBaseCategoryList') - def getVariationBaseCategoryList(self, omit_optional_variation=0, - omit_option_base_category=None, omit_individual_variation=0): - """ - Return the list of variation base category. - If omit_optional_variation==1, do not include base category - considered as option (ex: industrial_phase). - """ - #XXX backwards compatibility - if omit_option_base_category is not None: - warn("Please use omit_optional_variation instead of"\ - " omit_option_base_category.", DeprecationWarning) - omit_optional_variation = omit_option_base_category - - vbcl = self._baseGetVariationBaseCategoryList() - if omit_optional_variation == 1: - # XXX First implementation - # option base category list is a portal method, until the creation - # of a good API. - option_base_category_list = self.getPortalOptionBaseCategoryList() - vbcl = [x for x in vbcl if x not in option_base_category_list] - else: - vbcl.extend(self.getOptionalVariationBaseCategoryList()) - - if omit_individual_variation == 0: - vbcl.extend(self.getIndividualVariationBaseCategoryList()) - - return vbcl - - security.declareProtected(Permissions.AccessContentsInformation, - '_getVariationCategoryList') - def _getVariationCategoryList(self, base_category_list = ()): - if base_category_list is (): - base_category_list = self.getVariationBaseCategoryList() -# base_category_list = self.getVariationRangeBaseCategoryList() - return self.getAcquiredCategoryMembershipList(base_category_list, base=1) - - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationCategoryList') - def getVariationCategoryList(self, base_category_list=(), - omit_optional_variation=0, omit_option_base_category=None): - """ - Returns the list of possible variations - """ - #XXX backwards compatibility - if omit_option_base_category is not None: - warn("Please use omit_optional_variation instead of"\ - " omit_option_base_category.", DeprecationWarning) - omit_optional_variation = omit_option_base_category - - return self._getVariationCategoryList( - base_category_list=base_category_list) - - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationCategoryItemList') - def getVariationCategoryItemList(self, base_category_list=(), base=1, - display_id='logical_path', display_base_category=1, - current_category=None, omit_optional_variation=0, - omit_option_base_category=None, **kw): - """ - Returns the list of possible variations - """ - #XXX backwards compatibility - if omit_option_base_category is not None: - warn("Please use omit_optional_variation instead of"\ - " omit_option_base_category.", DeprecationWarning) - omit_optional_variation = omit_option_base_category - - variation_category_item_list = [] - if current_category is not None: - variation_category_item_list.append((current_category,current_category)) - - if base_category_list is (): - base_category_list = self.getVariationBaseCategoryList() - if omit_optional_variation == 1: - base_category_list = [x for x in base_category_list if x not in - self.getPortalOptionBaseCategoryList()] - # Prepare 2 rendering - portal_categories = self.portal_categories - for base_category in base_category_list: - variation_category_list = self._getVariationCategoryList( - base_category_list=[base_category]) - - category_list = [] - object_list = [] - for variation_category_path in variation_category_list: - try: - variation_category = portal_categories.resolveCategory( - variation_category_path) - var_cat_portal_type = variation_category.getPortalType() - except AttributeError: - variation_category_item_list.append((variation_category_path, - variation_category_path)) - else: - if var_cat_portal_type != 'Category': - object_list.append(variation_category) - else: - category_list.append(variation_category) - # Render categories - variation_category_item_list.extend(Renderer( - display_base_category=display_base_category, - display_none_category=0, base=base, - current_category=current_category, - display_id=display_id, **kw).\ - render(category_list)) - # Render the others - variation_category_item_list.extend(Renderer( - base_category=base_category, - display_base_category=display_base_category, - display_none_category=0, base=base, - current_category=current_category, - display_id='title', **kw).\ - render(object_list)) - return variation_category_item_list - - # XXX Is it used ? -# def getVariationCategoryTitleOrIdItemList(self, base_category_list=(), -# base=1, **kw): -# """ -# Returns a list of tuples by parsing recursively all categories in a -# given list of base categories. Uses getTitleOrId as method -# """ -# return self.getVariationCategoryItemList( -# display_id='title_or_id', -# base_category_list=base_category_list, base=base, **kw) - - security.declareProtected(Permissions.ModifyPortalContent, - '_setVariationCategoryList') - def _setVariationCategoryList(self, node_list, base_category_list=()): - if base_category_list is (): - base_category_list = self.getVariationBaseCategoryList() - self._setCategoryMembership(base_category_list,node_list,base=1) - - security.declareProtected(Permissions.ModifyPortalContent, - 'setVariationCategoryList') - def setVariationCategoryList(self, node_list, base_category_list=()): - self._setVariationCategoryList(node_list, - base_category_list=base_category_list) - self.reindexObject() - - # Range - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeBaseCategoryList') - def getVariationRangeBaseCategoryList(self): - """ - Returns possible variation base_category ids. - """ - # Get a portal method which defines a list of - # variation base category - return self.getPortalVariationBaseCategoryList() - - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeBaseCategoryItemList') - def getVariationRangeBaseCategoryItemList(self, base=1, - display_id='getTitle', - current_category=None): - """ - Returns possible variations of the resource - as a list of tuples (id, title). This is mostly - useful in ERP5Form instances to generate selection - menus. - """ - return self.portal_categories.getItemList( - self.getVariationBaseCategoryList()) - - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationBaseCategoryItemList') - def getVariationBaseCategoryItemList(self, display_id='title_or_id', - omit_optional_variation=0, omit_option_base_category=None, - omit_individual_variation=0): - """ - Returns base category of the resource - as a list of tuples (title, id). This is mostly - useful in ERP5Form instances to generate selection - menus. - """ - #XXX backwards compatibility - if omit_option_base_category is not None: - warn("Please use omit_optional_variation instead of"\ - " omit_option_base_category.", DeprecationWarning) - omit_optional_variation = omit_option_base_category - - variation_base_category_list = self.getVariationBaseCategoryList( - omit_optional_variation=omit_optional_variation, - omit_individual_variation=omit_individual_variation) - result = [] - for base_category in variation_base_category_list: - bc = self.portal_categories.resolveCategory(base_category) - result.extend(Renderer(display_base_category=0, - display_none_category=0, base=1, - display_id=display_id).render([bc])) - return result - - # Methods for matrix UI widgets - # XXX FIXME Those method are depreciated. - # We now use _asCellRange scripts. - security.declareProtected(Permissions.AccessContentsInformation, - 'getLineVariationRangeCategoryItemList') - def getLineVariationRangeCategoryItemList(self): - """ - Returns possible variations in line - """ - try: - resource = self.getDefaultResourceValue() - except AttributeError: - resource = None - if resource is not None: - clist = resource.getVariationRangeCategoryItemList( - base_category_list=self.getVariationBaseCategoryLine(), - root=0) - else: - clist = [(None,None)] - return clist - - security.declareProtected(Permissions.AccessContentsInformation, - 'getColumnVariationRangeCategoryItemList') - def getColumnVariationRangeCategoryItemList(self): - """ - Returns possible variations in column - """ - try: - resource = self.getDefaultResourceValue() - except AttributeError: - resource = None - if resource is not None: - clist = resource.getVariationRangeCategoryItemList(base_category_list = - self.getVariationBaseCategoryColumn(), root=0) - else: - clist = [(None,None)] - return clist - - security.declareProtected(Permissions.AccessContentsInformation, - 'getTabVariationRangeCategoryItemList') - def getTabVariationRangeCategoryItemList(self): - """ - Returns possible variations in tab - """ - try: - resource = self.getDefaultResourceValue() - except AttributeError: - resource = None - if resource is not None: - clist = resource.getVariationRangeCategoryItemList(base_category_list = - self.getVariationBaseCategoryTabList(), root=0) - else: - clist = [(None,None)] - return clist - - # Help - security.declareProtected(Permissions.AccessContentsInformation, - 'getMatrixVariationRangeBaseCategoryList') - def getMatrixVariationRangeBaseCategoryList(self): - """ - Return base categories used in the matrix - """ - line_bc= self.getVariationBaseCategoryLine() - column_bc = self.getVariationBaseCategoryColumn() - # We need to copy values first - tab_bc = list(self.getVariationBaseCategoryTabList()) - result = tab_bc - if line_bc is not None and line_bc is not '': - result += [line_bc] - if column_bc is not None and column_bc is not '': - result += [column_bc] - return result - - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeCategoryItemList') - def getVariationRangeCategoryItemList(self, base_category_list=(), base=1, - root=1, - display_method_id='getCategoryChildLogicalPathItemList', - display_base_category=1, - current_category=None, **kw): - """ - Returns possible variations - => [(display, value)] - """ - result = [] - if base_category_list is (): - base_category_list = self.getVariationBaseCategoryList() - elif type(base_category_list) is type('a'): - base_category_list = (base_category_list, ) - - traverse = getToolByName(self, 'portal_categories').unrestrictedTraverse - # Render categories - for base_category in base_category_list: - result += getattr(traverse(base_category), display_method_id)( - base=base, - display_base_category=display_base_category, - display_none_category=0, **kw) - # Return result - return result +from Products.ERP5.mixin.variated import VariatedMixin - security.declareProtected(Permissions.AccessContentsInformation, - 'getVariationRangeCategoryList') - def getVariationRangeCategoryList(self, base_category_list=(), base=1, - root=1, current_category=None, - omit_individual_variation=0, **kw): - """ - Returns the range of acceptable categories - """ - vrcil = self.getVariationRangeCategoryItemList( - base_category_list=base_category_list, base=base, root=root, - current_category=current_category, - omit_individual_variation=omit_individual_variation, **kw) - # display is on left - return [x[1] for x in vrcil] - # Context related methods - security.declarePublic('newVariationValue') - def newVariationValue(self, context=None, REQUEST=None, **kw): - # PERFORMANCE ISSUE - from Products.ERP5.VariationValue import newVariationValue - if context is None: - return newVariationValue(REQUEST=REQUEST, **kw) - else: - return newVariationValue(context=context, REQUEST=REQUEST, **kw) +class Variated(Base, VariatedMixin): + """Deprecated. Use mixin.variated.VariatedMixin instead.""" - # Provide a string representation of variations - security.declarePublic('getVariationText') - def getVariationText(self): - """ - Provide a string representation of variation - """ - category_list = list(self.getVariationCategoryList()) - category_list.sort() - return '\n'.join(category_list) InitializeClass(Variated) diff --git a/product/ERP5/VariationValue.py b/product/ERP5/VariationValue.py index a79b4e69c7..90923fdc8b 100644 --- a/product/ERP5/VariationValue.py +++ b/product/ERP5/VariationValue.py @@ -29,8 +29,7 @@ from Products.ERP5Type import interfaces from Products.ERP5Type.Context import Context from Products.ERP5Type.Globals import InitializeClass -from Products.ERP5.Variated import Variated - +from Products.ERP5.mixin.variated import VariatedMixin from zope.interface import implements def newVariationValue(context=None, REQUEST=None, **kw): @@ -42,7 +41,7 @@ def newVariationValue(context=None, REQUEST=None, **kw): else: return context_obj -class VariationValue(Context, Variated): +class VariationValue(Context, VariatedMixin): """ Embodies a variation value. Implements discrete variations. """ diff --git a/product/ERP5/mixin/variated.py b/product/ERP5/mixin/variated.py index 8f9878f101..bd3844c7d4 100644 --- a/product/ERP5/mixin/variated.py +++ b/product/ERP5/mixin/variated.py @@ -27,21 +27,16 @@ # ############################################################################## +from warnings import warn from AccessControl import ClassSecurityInfo -from Products.ERP5Type.Globals import InitializeClass -from Products.CMFCore.utils import getToolByName - -from Products.ERP5Type import Context, interfaces, Permissions -from Products.ERP5Type.Base import Base from Products.CMFCategory.Renderer import Renderer +from Products.ERP5Type import interfaces, Permissions +import zope.interface -from warnings import warn -from zope.interface import implements -class VariatedMixin(Base): +class VariatedMixin: """ - Variated is a mix-in class for all classes which implement - the Variated Interface. + Mix-in class for all classes which implement the Variated Interface. A Variable object is an object which can variate according to multiple dimensions. Variable objects include: @@ -59,7 +54,7 @@ class VariatedMixin(Base): security = ClassSecurityInfo() # Declarative interfaces - implements(interfaces.IVariated) + zope.interface.implements(interfaces.IVariated) security.declareProtected(Permissions.AccessContentsInformation, 'getVariationBaseCategoryList') @@ -345,7 +340,7 @@ class VariatedMixin(Base): elif type(base_category_list) is type('a'): base_category_list = (base_category_list, ) - traverse = getToolByName(self, 'portal_categories').unrestrictedTraverse + traverse = self.getPortalObject().portal_categories.unrestrictedTraverse # Render categories for base_category in base_category_list: result += getattr(traverse(base_category), display_method_id)( @@ -359,15 +354,14 @@ class VariatedMixin(Base): 'getVariationRangeCategoryList') def getVariationRangeCategoryList(self, base_category_list=(), base=1, root=1, current_category=None, - omit_individual_variation=0): + omit_individual_variation=0, **kw): """ Returns the range of acceptable categories """ vrcil = self.getVariationRangeCategoryItemList( - base_category_list=base_category_list, - base=base, root=root, - current_category=current_category, - omit_individual_variation=omit_individual_variation) + base_category_list=base_category_list, base=base, root=root, + current_category=current_category, + omit_individual_variation=omit_individual_variation, **kw) # display is on left return [x[1] for x in vrcil] @@ -390,5 +384,3 @@ class VariatedMixin(Base): category_list = list(self.getVariationCategoryList()) category_list.sort() return '\n'.join(category_list) - -InitializeClass(VariatedMixin) -- 2.30.9