[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