[Zope-Checkins] CVS: Zope3/lib/python/Zope/ComponentArchitecture - IToIRegistry.py:1.4

Jim Fulton jim@zope.com
Tue, 18 Jun 2002 15:35:30 -0400


Update of /cvs-repository/Zope3/lib/python/Zope/ComponentArchitecture
In directory cvs.zope.org:/tmp/cvs-serv23687/lib/python/Zope/ComponentArchitecture

Modified Files:
	IToIRegistry.py 
Log Message:
implemented
http://dev.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/ContentSensitiveBrowserMenuConfigurationDirectives



=== Zope3/lib/python/Zope/ComponentArchitecture/IToIRegistry.py 1.3 => 1.4 ===
                   } for provides in seen]
 
-    def getAll(self, ob_interface, provide, result=None, seen=None):
+    def getAll(self, ob_interface, provide=None):
         """Get all components that match an interface
         
         Finds all registered components that provides the given interface.
         Returns None if not found.
         """
-        if result is None:
-            result = []
-        if seen is None:
-            seen = {}
 
-        if ob_interface in seen:
-            return result
+        result = []
+
+        get = self._reg.get
+
+        if ob_interface is not None:
         
-        c = self._find(ob_interface, provide)
+            for interface in _flatten(ob_interface):
+                c = get((interface, provide))
+                if c is not None:
+                    result.append(c[1])
+
+        c = get((None, provide))
         if c is not None:
             result.append(c[1])
-        seen[ob_interface] = 1
-
-        bases = getattr(ob_interface, '__bases__', ())
-        if bases:
-            # 'require' might be a subinterface of a required interface
-            # for a registered component.
-            for base in bases:
-                self.getAll(base, provide, result, seen)
 
         return result
 
@@ -164,12 +160,7 @@
         Finds all registered components that provides the given interface.
         Returns None if not found.
         """
-        result = []
-        seen = {}
-        for i in objectImplements(removeAllProxies(ob)):
-            self.getAll(i, provided, result, seen)
-
-        return self.getAll(None, provided, result, seen)
+        return self.getAll(getattr(ob, '__implements__', None), provided)
     
 
 class IRegistry(IToIRegistry):