[Zope-Checkins] SVN: Products.Five/branches/1.4/ Made the
pythonproducts monkey patching more robust by checking to
ensure patches aren't reapplied and cleaning up after itself.
Rocky Burt
rocky at serverzen.com
Thu Jul 20 08:22:55 EDT 2006
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()
More information about the Zope-Checkins
mailing list