Commit dde89f18 authored by Vincent Pelletier's avatar Vincent Pelletier

XXX: Remove multi-level inheritance from CopyContainer

Base inherits from it, and BaseTool inherits from Base.
parent 246f5c12
...@@ -44,7 +44,7 @@ from Products.ERP5Type.dynamic import portal_type_class ...@@ -44,7 +44,7 @@ from Products.ERP5Type.dynamic import portal_type_class
from zLOG import LOG from zLOG import LOG
class CategoryTool(CopyContainer, CMFCategoryTool, BaseTool): class CategoryTool(CMFCategoryTool, BaseTool):
""" """
The CategoryTool object is the placeholder for all methods The CategoryTool object is the placeholder for all methods
and algorithms related to categories and relations in ERP5. and algorithms related to categories and relations in ERP5.
...@@ -152,4 +152,18 @@ class CategoryTool(CopyContainer, CMFCategoryTool, BaseTool): ...@@ -152,4 +152,18 @@ class CategoryTool(CopyContainer, CMFCategoryTool, BaseTool):
self.updateRelatedContent(o, previous_o_category_url, self.updateRelatedContent(o, previous_o_category_url,
new_o_category_url) new_o_category_url)
# CMFCategoryTool inherits indirectly from a different CopyContainer which
# lacks our customisations.
# Resolve all inheritence conflicts between CopyContainer (which CategoryTool
# inherits from via BaseTool) and CMFCategoryTool in favour of the property
# from BaseTool (so it may override CopyContainer).
for CopyContainer_property_id in CopyContainer.__dict__:
if CopyContainer_property_id in CategoryTool.__dict__:
continue
try:
BaseTool_property = getattr(BaseTool, CopyContainer_property_id)
except AttributeError:
continue
setattr(CategoryTool, CopyContainer_property_id, BaseTool_property)
InitializeClass( CategoryTool ) InitializeClass( CategoryTool )
...@@ -588,7 +588,7 @@ _HANDLER_LIST = ( ...@@ -588,7 +588,7 @@ _HANDLER_LIST = (
# Bad value, accidentally put everywhere long ago # Bad value, accidentally put everywhere long ago
_BROKEN_BTREE_HANDLER = 'CMFBTreeFolderHandler' _BROKEN_BTREE_HANDLER = 'CMFBTreeFolderHandler'
class Folder(CopyContainer, OFSFolder2, CMFBTreeFolder, CMFHBTreeFolder, Base, FolderMixIn): class Folder(OFSFolder2, CMFBTreeFolder, CMFHBTreeFolder, Base, FolderMixIn):
""" """
A Folder is a subclass of Base but not of XMLObject. A Folder is a subclass of Base but not of XMLObject.
Folders are not considered as documents and are therefore Folders are not considered as documents and are therefore
...@@ -1036,9 +1036,6 @@ class Folder(CopyContainer, OFSFolder2, CMFBTreeFolder, CMFHBTreeFolder, Base, F ...@@ -1036,9 +1036,6 @@ class Folder(CopyContainer, OFSFolder2, CMFBTreeFolder, CMFHBTreeFolder, Base, F
return id return id
return self.generateNewId() return self.generateNewId()
#security.declareProtected( Permissions.DeletePortalContent, 'manage_delObjects' )
#manage_delObjects = CopyContainer.manage_delObjects
# Implementation # Implementation
hasContent = hasObject hasContent = hasObject
...@@ -1643,3 +1640,17 @@ for source_klass, destination_klass in \ ...@@ -1643,3 +1640,17 @@ for source_klass, destination_klass in \
# Zope 2.7 required to have methodId__roles__ defined # Zope 2.7 required to have methodId__roles__ defined
# to know the security ot the method # to know the security ot the method
setattr(destination_klass, method_id+'__roles__', None) setattr(destination_klass, method_id+'__roles__', None)
# Some of Folder base inherits indirectly from a different CopyContainer which
# lacks our customisations.
# Resolve all inheritence conflicts between CopyContainer (which Folder
# inherits from via Base) and those bases in favour of the property
# from Base (so it may override CopyContainer).
for CopyContainer_property_id in CopyContainer.__dict__:
if CopyContainer_property_id in Folder.__dict__:
continue
try:
Base_property = getattr(Base, CopyContainer_property_id)
except AttributeError:
continue
setattr(Folder, CopyContainer_property_id, Base_property)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment