[z3-checkins] r18406 - z3/Five/branch/regebro-sitemanager

regebro at codespeak.net regebro at codespeak.net
Tue Oct 11 16:26:36 CEST 2005


Author: regebro
Date: Tue Oct 11 16:26:35 2005
New Revision: 18406

Modified:
   z3/Five/branch/regebro-sitemanager/fiveconfigure.py
Log:
Added uninstall of the hook, for better testing.


Modified: z3/Five/branch/regebro-sitemanager/fiveconfigure.py
==============================================================================
--- z3/Five/branch/regebro-sitemanager/fiveconfigure.py	(original)
+++ z3/Five/branch/regebro-sitemanager/fiveconfigure.py	Tue Oct 11 16:26:35 2005
@@ -26,14 +26,19 @@
 from zLOG import LOG, ERROR
 
 from zope.interface import classImplements
+from zope.interface.interface import InterfaceClass
 from zope.configuration import xmlconfig
 from zope.configuration.exceptions import ConfigurationError
 from zope.app.component.interface import provideInterface
+from zope.app.component.metaconfigure import adapter
+from zope.app.utility.interfaces import ILocalUtilityService
+from zope.app.site.interfaces import IPossibleSite, ISite
 
 from viewable import Viewable
 from traversable import Traversable
 from bridge import fromZ2Interface
 from browser.metaconfigure import page
+from localsite import FiveSite, SimpleLocalUtilityService
 
 debug_mode = App.config.getConfiguration().debug_mode
 
@@ -234,54 +239,6 @@
         page(_context, name=name, permission=permission,
              layer=layer, for_=for_, template=fname)
 
-# clean up code
-
-def killMonkey(class_, name, fallback, attr=None):
-    """Die monkey, die!"""
-    method = getattr(class_, name, None)
-    if isFiveMethod(method):
-        original = getattr(class_, fallback, None)
-        if original is None:
-            try:
-                delattr(class_, name)
-            except AttributeError:
-                pass
-        else:                
-            setattr(class_, name, original)
-
-    if attr is not None:
-        try:
-            delattr(class_, attr)
-        except (AttributeError, KeyError):
-            pass
-
-def untraversable(class_):
-    """Restore class's initial state with respect to traversability"""
-    killMonkey(class_, '__bobo_traverse__', '__fallback_traverse__',
-               '__five_traversable__')
-
-def undefaultViewable(class_):
-    """Restore class's initial state with respect to being default
-    viewable."""
-    killMonkey(class_, '__browser_default__', '__fallback_default__',
-               '__five_viewable__')
-
-def cleanUp():
-    for class_ in _traversable_monkies:
-        untraversable(class_)
-    for class_ in _defaultviewable_monkies:
-        undefaultViewable(class_)
-
-from zope.testing.cleanup import addCleanUp
-addCleanUp(cleanUp)
-del addCleanUp
-
-from zope.interface.interface import InterfaceClass
-from zope.app.site.interfaces import IPossibleSite, ISite
-from zope.app.component.metaconfigure import adapter
-from zope.app.utility.interfaces import ILocalUtilityService
-from localsite import FiveSite, SimpleLocalUtilityService
-
 def classSiteHook(class_, site_class):
     setattr(class_, 'getSiteManager',
             site_class.getSiteManager.im_func)
@@ -294,6 +251,7 @@
     count += 1
     return count
 
+_localsite_monkies = []
 def installSiteHook(_context, class_, site_class=None, utility_service=None):
     if site_class is None:
         if not IPossibleSite.implementedBy(class_):
@@ -333,4 +291,58 @@
         callable = classImplements,
         args=(class_, iface)
         )
+    _localsite_monkies.append(class_)
+
+# clean up code
+
+def killMonkey(class_, name, fallback, attr=None):
+    """Die monkey, die!"""
+    method = getattr(class_, name, None)
+    if isFiveMethod(method):
+        original = getattr(class_, fallback, None)
+        if original is None:
+            try:
+                delattr(class_, name)
+            except AttributeError:
+                pass
+        else:                
+            setattr(class_, name, original)
+
+    if attr is not None:
+        try:
+            delattr(class_, attr)
+        except (AttributeError, KeyError):
+            pass
+
+def untraversable(class_):
+    """Restore class's initial state with respect to traversability"""
+    killMonkey(class_, '__bobo_traverse__', '__fallback_traverse__',
+               '__five_traversable__')
+
+def undefaultViewable(class_):
+    """Restore class's initial state with respect to being default
+    viewable."""
+    killMonkey(class_, '__browser_default__', '__fallback_default__',
+               '__five_viewable__')
+
+def uinstallSiteHook(class_):
+    delattr(class_, 'getSiteManager')
+    delattr(class_, 'setSiteManager')
+    from zope.interface import implementedBy, classImplementsOnly
+    ifaces = list(implementedBy(class_).interfaces())
+    ifaces = [i for i in ifaces if i is not ISite]
+    classImplementsOnly(class_, ifaces)
+    _localsite_monkies.remove(class_)
+
+def cleanUp():
+    for class_ in _traversable_monkies:
+        untraversable(class_)
+    for class_ in _defaultviewable_monkies:
+        undefaultViewable(class_)
+    for class_ in _localsite_monkies:
+        uinstallSiteHook(class_)
+    
+from zope.testing.cleanup import addCleanUp
+addCleanUp(cleanUp)
+del addCleanUp
 


More information about the z3-checkins mailing list