I worked a bit with ZopeHead. Required CMF patches attached.
Jim Fulton wrote at 2003-11-30 11:28 -0500: >Jim Fulton wrote: >>Yuppie wrote: >> 1.) "from ZODB import Persistent, PersistentMapping" doesn't work anymore "Persistent" was moved from ZODB into "Persistence". Had to modify DC-Workflow. > ... >> 3.) 'rebinding by assignment' doesn't work anymore >> >> With oldstyle ExtensionClasses you were able to rebind methods by >> assignment, without subclassing from the class that defines the method. >> >> CMFCore/FSPageTemplate.py seems to be a good use case for that feature: >> >> class FSPageTemplate(FSObject, Script, PageTemplate): >> pt_getContext = ZopePageTemplate.pt_getContext This is still possible but only for subclasses of assigned methods. Appending ".im_func" removes this restriction. > ... >> 4.) some objects publishable in Zope 2.7 aren't publishable anymore > >Can you give any specifics? > >> No big deal to add docstrings, but what's the policy change? Apparently, the old "ExtensionClass" was ready to inherit "__doc__" from a base class. Python 2.3 does not do this. Thus, "__doc__" strings have to be added... >> 5.) other issues >> >> I was not able to track this error down, but maybe you've got an idea >> what's going wrong here? >> >> http://localhost:8080/myCMFSite/portal_types/Document/manage_propertiesForm >> Traceback (innermost last): >> Module ZPublisher.Publish, line 100, in publish >> Module ZPublisher.mapply, line 88, in mapply >> Module ZPublisher.Publish, line 40, in call_object >> Module Products.CMFCore.utils, line 350, in manage_propertiesForm >> Module Shared.DC.Scripts.Bindings, line 252, in __call__ >> Module Shared.DC.Scripts.Bindings, line 281, in _bindAndExec >> Module Shared.DC.Scripts.Bindings, line 1, in ? >> Module Shared.DC.Scripts.Bindings, line 218, in _getContext >> AttributeError: aq_parent It is very obscure, indeed. Not that is does not work in "Zope 2.8" but that it worked in previous versions: "PropertyManager.manage_propertiesForm" ("mpF") is an "App.special_dtml.DTMLFile" instance. In "Products.CMFCore.utils.SimpleItemWithProperties.manage_propertiesForm" it is called by apply(mpF, (self, self, REQUEST,) ...) Apparently, former versions used the first "self" as "self" for the "DTMLFile" and passed the remaining arguments to "mpF"s "__call__", which seems really strange. Zope 2.8 does the natural thing: it does not change the "mpF"s "self" and passed all arguements to "__call__". As "mpF"s "self" is not acquisition wrapped, we get the "aq_parent" error. A fix calls "mpF" by: apply(mpF.__of__(self), (self, REQUEST,) ...) The attached patch to "CMFCore" fixes all CMF test failures with the exception of 2 ".security" errors. These are not related to Zope 2.8 but genuine bugs in my CMF 1.4.1 installation. -- Dieter
--- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/FSPageTemplate.py 2003-09-30 07:30:27.000000000 +0200 +++ CMFCore/FSPageTemplate.py 2003-12-06 14:11:11.000000000 +0100 @@ -220,15 +220,20 @@ PrincipiaSearchSource = ZopePageTemplate.PrincipiaSearchSource security.declareProtected(ViewManagementScreens, 'document_src') - document_src = ZopePageTemplate.document_src + document_src = ZopePageTemplate.document_src.im_func - pt_getContext = ZopePageTemplate.pt_getContext + pt_getContext = ZopePageTemplate.pt_getContext.im_func - ZScriptHTML_tryParams = ZopePageTemplate.ZScriptHTML_tryParams + ZScriptHTML_tryParams = ZopePageTemplate.ZScriptHTML_tryParams.im_func -d = FSPageTemplate.__dict__ -d['source.xml'] = d['source.html'] = Src() +# does not work with Zope 2.8 +#d = FSPageTemplate.__dict__ +#d['source.xml'] = d['source.html'] = Src() +_s = Src() +setattr(FSPageTemplate,'source.xml',_s) +setattr(FSPageTemplate,'source.html',_s) +del _s Globals.InitializeClass(FSPageTemplate) --- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/MemberDataTool.py 2003-06-24 15:00:39.000000000 +0200 +++ CMFCore/MemberDataTool.py 2003-12-06 14:25:33.000000000 +0100 @@ -224,7 +224,7 @@ transactions and to reduce the necessary number of entries. ''' - self._members[id] = m + self._members[id] = m.aq_base InitializeClass(MemberDataTool) --- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/CatalogTool.py 2003-09-17 07:00:53.000000000 +0200 +++ CMFCore/CatalogTool.py 2003-12-06 15:34:46.000000000 +0100 @@ -224,7 +224,7 @@ manage_catalogFind = DTMLFile( 'catalogFind', _dtmldir ) - def catalog_object(self, object, uid, idxs=[]): + def catalog_object(self, object, uid, idxs=[], update_metadata=1): # Wraps the object with workflow and accessibility # information just before cataloging. wf = getattr(self, 'portal_workflow', None) @@ -233,7 +233,7 @@ else: vars = {} w = IndexableObjectWrapper(vars, object) - ZCatalog.catalog_object(self, w, uid, idxs) + ZCatalog.catalog_object(self, w, uid, idxs, update_metadata) security.declarePrivate('indexObject') def indexObject(self, object): --- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/utils.py 2003-09-17 07:00:54.000000000 +0200 +++ CMFCore/utils.py 2003-12-06 15:57:52.000000000 +0100 @@ -359,8 +359,8 @@ 'An override that makes the schema fixed.' my_kw = kw.copy() my_kw['property_extensible_schema__'] = 0 - return apply(PropertyManager.manage_propertiesForm, - (self, self, REQUEST,) + args, my_kw) + return apply(PropertyManager.manage_propertiesForm.__of__(self), + (self, REQUEST,) + args, my_kw) security.declarePublic('propertyLabel') def propertyLabel(self, id): --- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/FSDTMLMethod.py 2003-09-17 07:00:53.000000000 +0200 +++ CMFCore/FSDTMLMethod.py 2003-12-06 16:25:05.000000000 +0100 @@ -189,7 +189,7 @@ document_src = DTMLMethod.document_src security.declareProtected(ViewManagementScreens, 'manage_haveProxy') - manage_haveProxy = DTMLMethod.manage_haveProxy + manage_haveProxy = DTMLMethod.manage_haveProxy.im_func Globals.InitializeClass(FSDTMLMethod) --- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/FSPythonScript.py 2003-09-17 07:00:53.000000000 +0200 +++ CMFCore/FSPythonScript.py 2003-12-06 16:25:10.000000000 +0100 @@ -202,7 +202,7 @@ def params(self): return self._params security.declareProtected(ViewManagementScreens, 'manage_haveProxy') - manage_haveProxy = PythonScript.manage_haveProxy + manage_haveProxy = PythonScript.manage_haveProxy.im_func security.declareProtected(ViewManagementScreens, 'body') def body(self): return self._body --- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/PortalFolder.py 2003-09-17 07:00:54.000000000 +0200 +++ CMFCore/PortalFolder.py 2003-12-06 16:27:48.000000000 +0100 @@ -602,5 +602,5 @@ """ return '; '.join(self.description) -manage_addPortalFolder = PortalFolder.manage_addPortalFolder +manage_addPortalFolder = PortalFolder.manage_addPortalFolder.im_func manage_addPortalFolderForm = DTMLFile( 'folderAdd', globals() ) --- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/tests/test_DirectoryView.py 2003-09-17 07:00:55.000000000 +0200 +++ CMFCore/tests/test_DirectoryView.py 2003-12-06 16:59:15.000000000 +0100 @@ -1,4 +1,5 @@ from unittest import TestCase, TestSuite, makeSuite, main +import time import Zope try: @@ -140,6 +141,9 @@ # initialise skins self._registerDirectory(self) + # sleep a bit to work around limited time resolution problem + time.sleep(1) + # add a method to the fake skin folder self._writeFile(self.test2path, "return 'test2'") @@ -185,6 +189,9 @@ """ remove(self.test2path) self.failIf(hasattr(self.ob.fake_skin,'test2')) + + # sleep a bit to work around limited time resolution problem + time.sleep(1) # add method back to the fake skin folder self._writeFile(self.test2path, "return 'test2.2'") @@ -192,6 +199,8 @@ # check self.assertEqual(self.ob.fake_skin.test2(),'test2.2') + # sleep a bit to work around limited time resolution problem + time.sleep(1) # edit method self._writeFile(self.test2path, "return 'test2.3'") --- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/tests/test_FSSecurity.py 2003-06-10 09:11:37.000000000 +0200 +++ CMFCore/tests/test_FSSecurity.py 2003-12-06 17:17:30.000000000 +0100 @@ -87,6 +87,7 @@ """ Test adding of a .security """ # baseline self._checkSettings(self.ob.fake_skin.test5,'View',1,[]) + sleep(1) # to counter limited time resolution # add self._writeFile('test5.py.security','View:acquire:Manager') # test @@ -96,9 +97,11 @@ """ Test deleting of a .security """ # baseline self._checkSettings(self.ob.fake_skin.test5,'View',1,[]) + sleep(1) # to counter limited time resolution self._writeFile('test5.py.security','View:acquire:Manager') self._checkSettings(self.ob.fake_skin.test5,'View',1,['Manager']) # delete + sleep(1) # to counter limited time resolution self._deleteFile('test5.py.security') # test self._checkSettings(self.ob.fake_skin.test5,'View',1,[]) @@ -115,6 +118,7 @@ self._writeFile('test5.py.security','View::Manager,Anonymous') self._checkSettings(self.ob.fake_skin.test5,'View',0,['Manager','Anonymous']) # edit + sleep(1) # to counter limited time resolution self._writeFile('test5.py.security','View:acquire:Manager') # test self._checkSettings(self.ob.fake_skin.test5,'View',1,['Manager']) @@ -138,6 +142,7 @@ self._checkSettings(self.ob.fake_skin.test5,'View',0,['Manager','Anonymous']) # edit + sleep(1) # see above self._writeFile('test5.py.security','View:acquire:Manager') # test self._checkSettings(self.ob.fake_skin.test5,'View',1,['Manager']) --- /home/dieter/Haufe/src/Zope/lib/python/Products/CMFCore/tests/base/tidata.py 2003-09-16 10:04:53.000000000 +0200 +++ CMFCore/tests/base/tidata.py 2003-12-06 16:40:34.000000000 +0100 @@ -283,11 +283,11 @@ ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath -##parameters=container, id +##parameters=container_, id ##title= ## -product = container.manage_addProduct['FooProduct'] +product = container_.manage_addProduct['FooProduct'] product.addFoo(id) -item = getattr(container, id) +item = getattr(container_, id) return item """
_______________________________________________ Zope-Dev maillist - [EMAIL PROTECTED] http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )