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

Shane Hathaway shane@digicool.com
Tue, 18 Sep 2001 17:47:52 -0400


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

Modified Files:
      Tag: ComponentArchitecture-branch
	IToIRegistry.py 
Log Message:
Checkpoint


=== Zope/lib/python/ComponentArchitecture/IToIRegistry.py 1.1.2.1 => 1.1.2.2 ===
         self._registerAll(require, provide, c, provide)
 
+    def _find(self, require, provide):
+        return self._reg.get((require, provide), None)
+
     def get(self, ob_interface, provide):
         """
         Finds a registered component that provides the given interface.
         Returns None if not found.
         """
-        c = self._reg.get((ob_interface, provide), None)
+        c = self._find(ob_interface, provide)
         if c is not None:
             return c[1]
         bases = getattr(ob_interface, '__bases__', ())
@@ -53,6 +56,27 @@
                 if c is not None:
                     return c
         return None
+
+
+class IToIRegistryWithLabels (IToIRegistry):
+    """
+    Supports the use of label interfaces for inputs.
+    """
+    def register(self, require, provide, c):
+        '''
+        Registers a component.
+        '''
+        if isinstance(require, LabelInterface):
+            # register the name instead of the interface.
+            require = require.getName()
+        self._registerAll(require, provide, c, provide)
+
+    def _find(self, require, provide):
+        if isinstance(require, LabelInterface):
+            # Look up the name instead of the interface.
+            return self._reg.get((require.getName(), provide), None)
+        else:
+            return self._reg.get((require, provide), None)