[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):