[Checkins] SVN: five.localsitemanager/trunk/ fix a regression when unregistering a utility by interface if no utility is registered for that interface

David Glick davidglick at onenw.org
Sun Nov 15 23:57:56 EST 2009


Log message for revision 105684:
  fix a regression when unregistering a utility by interface if no utility is registered for that interface

Changed:
  U   five.localsitemanager/trunk/CHANGES.txt
  U   five.localsitemanager/trunk/src/five/localsitemanager/localsitemanager.txt
  U   five.localsitemanager/trunk/src/five/localsitemanager/registry.py

-=-
Modified: five.localsitemanager/trunk/CHANGES.txt
===================================================================
--- five.localsitemanager/trunk/CHANGES.txt	2009-11-16 03:46:20 UTC (rev 105683)
+++ five.localsitemanager/trunk/CHANGES.txt	2009-11-16 04:57:54 UTC (rev 105684)
@@ -4,6 +4,10 @@
 2.0.2 - Unreleased
 ------------------
 
+* Fix regression in five.localsitemanager 2.0.1 where unregistering a utility
+  based on its provided interface broke if no utility was registered for that
+  interface.
+  [davisagli]
 
 2.0.1 - 2009-10-19
 ------------------

Modified: five.localsitemanager/trunk/src/five/localsitemanager/localsitemanager.txt
===================================================================
--- five.localsitemanager/trunk/src/five/localsitemanager/localsitemanager.txt	2009-11-16 03:46:20 UTC (rev 105683)
+++ five.localsitemanager/trunk/src/five/localsitemanager/localsitemanager.txt	2009-11-16 04:57:54 UTC (rev 105684)
@@ -88,7 +88,12 @@
        ...
     ComponentLookupError: (<InterfaceClass ...ITestUtility>, 'to_remove')
 
+Trying to unregister a utility that is not registered should return False.
 
+    >>> sitemanager.unregisterUtility(provided=ITestUtility)
+    False
+
+
 Adapters
 ---------
 

Modified: five.localsitemanager/trunk/src/five/localsitemanager/registry.py
===================================================================
--- five.localsitemanager/trunk/src/five/localsitemanager/registry.py	2009-11-16 03:46:20 UTC (rev 105683)
+++ five.localsitemanager/trunk/src/five/localsitemanager/registry.py	2009-11-16 04:57:54 UTC (rev 105684)
@@ -302,12 +302,15 @@
                                 "provided")
             provided = _getUtilityProvided(component)
 
-        old = self._utility_registrations.get((provided, name))
-        if isinstance(old[0], ComponentPathWrapper):
-            # If the existing registration is a ComponentPathWrapper, we
-            # convert the component that is to be unregistered to a wrapper.
-            # This ensures that our custom comparision methods are called.
-            component = ComponentPathWrapper(Acquisition.aq_base(component),'')
-
+        # If the existing registration is a ComponentPathWrapper, we
+        # convert the component that is to be unregistered to a wrapper.
+        # This ensures that our custom comparision methods are called.
+        if component is not None:
+            old = self._utility_registrations.get((provided, name))
+            if old is not None:
+                if isinstance(old[0], ComponentPathWrapper):
+                    unwrapped_component = Acquisition.aq_base(component)
+                    component = ComponentPathWrapper(unwrapped_component,'')
+            
         return super(PersistentComponents, self).unregisterUtility(
             component=component, provided=provided, name=name)



More information about the checkins mailing list