[Zope-dev] Re: New-style ExtensionClasses (Zope 2.8) -- MRO issue

Jim Fulton jim at zope.com
Tue Nov 25 15:55:55 EST 2003


Note that this is moot, as I've decided to use a backward-compatible mro.

That is, new-style extension classes will use an mro that is backward
compatible with old-style extension classes. They do *not* use the same
mro algorithm as new-style classes.

Jim


Tres Seaver wrote:
> On Mon, 2003-11-24 at 12:03, Christian Heimes wrote:
> 
>>Sidnei da Silva wrote:
>>
>>>I'm going to fix those (after my english class) and then try something
>>>harder ;)
>>
>>Here is more stuff:
>>
>> >>> import mrohell
>> >>> base = mrohell.step1()
>> >>> mrohell.step2(base, mroonly=True)
>>Couldn't get mro for  Products.Archetypes.BaseBTreeFolder.BaseBTreeFolder
>>Couldn't get mro for  Products.Archetypes.BaseFolder.BaseFolder
>>Couldn't get mro for 
>>Products.Archetypes.OrderedBaseFolder.OrderedBaseFolder
>>Couldn't get mro for 
>>Products.GroupUserFolder.GroupUserFolder.GroupUserFolder
>>Couldn't get mro for  Products.CMFPlone.PloneFolder.BasePloneFolder		
>>Couldn't get mro for  Products.CMFPlone.LargePloneFolder.LargePloneFolder
>>Couldn't get mro for  Products.Archetypes.BaseFolder.BaseFolderMixin
>>Couldn't get mro for  Products.CMFDefault.SkinnedFolder.SkinnedFolder
>>Couldn't get mro for  Products.CMFPlone.PloneFolder.PloneFolder
>>Couldn't get mro for  Products.Archetypes.ArchetypeTool.ArchetypeTool
>>Couldn't get mro for  Products.CMFFormController.Script.FSPythonScript
>>Couldn't get mro for 
>>Products.CMFFormController.FSControllerValidator.FSControllerValidator
>>Couldn't get mro for  Products.CMFCore.FSPythonScript.FSPythonScript
>>Couldn't get mro for 
>>Products.CMFFormController.FSControllerPythonScript.FSControllerPythonScript
>>Couldn't get mro for  Products.CMFCore.FSPageTemplate.FSPageTemplate
>>Couldn't get mro for 
>>Products.CMFFormController.FSControllerPageTemplate.FSControllerPageTemplate
>>Couldn't get mro for  Products.CMFPlone.PropertiesTool.PropertiesTool
>>Couldn't get mro for  Products.CMFCore.FSZSQLMethod.FSZSQLMethod
>>Couldn't get mro for  Products.CMFPlone.FactoryTool.TempFolder
>>Couldn't get mro for  Products.Archetypes.OrderedBaseFolder.OrderedFolder
>>Couldn't get mro for  Products.Archetypes.examples.SimpleFolder.SimpleFolder
>>526 21 210
>>
>>
>>It seems that there are only several classes that cause problems:
>>Products.CMFDefault.SkinnedFolder.SkinnedFolder
>>Products.Archetypes.BaseFolder.BaseFolder
>>Products.CMFCore.FS*
>>Products.Archetypes.BaseFolder.BaseFolderMixin
>>
>>AFAIK most of the other classes with mro problems are just subclasses of 
>>these classes above.
> 
> 
> Jim made checkins to deal with the CMF-related MRO problems, on his
> 'mro-advanture-branch'::
> 
> === CMF/CMFDefault/SkinnedFolder.py 1.15 => 1.15.6.1 ===
> --- CMF/CMFDefault/SkinnedFolder.py:1.15        Sat Jun 28 12:31:21 2003
> +++ CMF/CMFDefault/SkinnedFolder.py     Fri Oct 31 14:24:19 2003
> @@ -61,8 +61,7 @@
>  ,
>  )
>  
> -
> -class SkinnedFolder(CMFCatalogAware, PortalFolder):
> +class SkinnedFolder(PortalFolder):
>      """
>      """
>      meta_type = 'Skinned Folder'
> @@ -70,6 +69,10 @@
>      security = ClassSecurityInfo()
>  
>      manage_options = PortalFolder.manage_options
> +
> +    indexObject = CMFCatalogAware.indexObject
> +    unindexObject = CMFCatalogAware.unindexObject
> +    reindexObject = CMFCatalogAware.reindexObject
>  
>      def __call__(self):
>          '''
> 
> === CMF/CMFCore/FSObject.py 1.15 => 1.15.2.1 ===
> --- CMF/CMFCore/FSObject.py:1.15        Fri Sep 12 20:46:40 2003
> +++ CMF/CMFCore/FSObject.py     Fri Oct 31 14:24:18 2003
> @@ -18,7 +18,7 @@
>  from string import split
>  from os import path, stat
>  
> -import Acquisition, Globals
> +import Acquisition, Globals, ExtensionClass
>  from AccessControl import ClassSecurityInfo
>  from OFS.SimpleItem import Item
>  from DateTime import DateTime
> @@ -31,7 +31,7 @@
>  
>  from OFS.Cache import Cacheable
>  
> -class FSObject(Acquisition.Implicit, Item, Cacheable):
> +class FSObject(Item, Cacheable, Acquisition.Implicit,
> ExtensionClass.Base):
>      """FSObject is a base class for all filesystem based look-alikes.
>      
>      Subclasses of this class mimic ZODB based objects like Image and
> 
> 
> 
> 
> I imagine making similar small changes to Archetypes won't be hard.
> 
> Tres.


-- 
Jim Fulton           mailto:jim at zope.com       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org




More information about the Zope-Dev mailing list