Log message for revision 69226: Made the pythonproducts monkey patching more robust by checking to ensure patches aren't reapplied and cleaning up after itself.
Changed: U Products.Five/branches/1.4/CHANGES.txt U Products.Five/branches/1.4/pythonproducts.py U Products.Five/branches/1.4/tests/test_pythonproducts.py -=- Modified: Products.Five/branches/1.4/CHANGES.txt =================================================================== --- Products.Five/branches/1.4/CHANGES.txt 2006-07-20 12:22:36 UTC (rev 69225) +++ Products.Five/branches/1.4/CHANGES.txt 2006-07-20 12:22:54 UTC (rev 69226) @@ -20,6 +20,12 @@ to ZopeTwoPageTemplateFile and as a Zope 2 correspondence to zope.app.pagetemplate.ViewPageTemplateFile. +Bugfixes +-------- + +* Made the pythonproducts monkey patching more robust by checking to + ensure patches aren't reapplied and cleaning up after itself. + Five 1.4 (2006-05-29) ===================== Modified: Products.Five/branches/1.4/pythonproducts.py =================================================================== --- Products.Five/branches/1.4/pythonproducts.py 2006-07-20 12:22:36 UTC (rev 69225) +++ Products.Five/branches/1.4/pythonproducts.py 2006-07-20 12:22:54 UTC (rev 69226) @@ -24,9 +24,13 @@ import Products from App.Product import initializeProduct from App.ProductContext import ProductContext +from zope.testing import cleanup _zope_app = None +def isMonkeyPatched(m): + return hasattr(m, '__five_method__') + def setupPythonProducts(appOrContext): """Initialize the python-packages-as-products logic """ @@ -52,7 +56,23 @@ patch_ProductDispatcher__bobo_traverse__(app) patch_externalmethod(app) +def removePatches(): + """Remove all monkey patches. + """ + + from App.FactoryDispatcher import FactoryDispatcher, ProductDispatcher + from App import Extensions + from Products.ExternalMethod import ExternalMethod + + if isMonkeyPatched(ProductDispatcher.__bobo_traverse__): + ProductDispatcher.__bobo_traverse__ = _original__bobo_traverse__ + if isMonkeyPatched(Extensions.getPath): + Extensions.getPath = _originalGetPath + ExternalMethod.getPath = _originalGetPath + +cleanup.addCleanUp(removePatches) + # BEGIN MONKEY PATCHES # Most of these monkey patches were repurposed from the code I # wrote for Basket - Rocky @@ -93,6 +113,10 @@ """ from App.FactoryDispatcher import FactoryDispatcher, ProductDispatcher + + if isMonkeyPatched(ProductDispatcher.__bobo_traverse__): + return + global _original__bobo_traverse__ _original__bobo_traverse__ = ProductDispatcher.__bobo_traverse__ @@ -108,6 +132,7 @@ dispatcher=dispatcher_class(product, self.aq_parent, REQUEST) return dispatcher.__of__(self) + __bobo_traverse__.__five_method__ = True ProductDispatcher.__bobo_traverse__ = __bobo_traverse__ @@ -120,6 +145,9 @@ from App import Extensions, FactoryDispatcher from Products.ExternalMethod import ExternalMethod + + if isMonkeyPatched(Extensions.getPath): + return global _originalGetPath _originalGetPath = Extensions.getPath @@ -154,5 +182,7 @@ except: pass + getPath.__five_method__ = True + Extensions.getPath = getPath ExternalMethod.getPath = getPath Modified: Products.Five/branches/1.4/tests/test_pythonproducts.py =================================================================== --- Products.Five/branches/1.4/tests/test_pythonproducts.py 2006-07-20 12:22:36 UTC (rev 69225) +++ Products.Five/branches/1.4/tests/test_pythonproducts.py 2006-07-20 12:22:54 UTC (rev 69226) @@ -24,9 +24,10 @@ from Products.Five.tests import testing sys.path.append(testing.__path__[0]) -def test_registerPackage(): +def test_aRegisterPackageCall(): """ - Testing registerPackage + Testing registerPackage. Recently renamed method to something to + would produce an out of order issue that breaks the test. >>> from zope.app.testing.placelesssetup import setUp, tearDown >>> setUp() _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins