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

Jim Fulton jim@zope.com
Wed, 28 Nov 2001 16:15:48 -0500


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

Modified Files:
      Tag: Zope-3x-branch
	IToIRegistry.py 
Log Message:
Began separating utility/service-style registration from
feature/presentation-style registration.

Added some basic sanity checks. We wish we could check more.


=== Zope3/lib/python/Zope/ComponentArchitecture/IToIRegistry.py 1.1.4.3 => 1.1.4.4 ===
 
 from Interface.Util import objectImplements
+from Exceptions import Invalid
+
 
 class IToIRegistry:  # Interface to Interface
     
     def __init__(self):
         self._reg = {}
-
+        
     def _registerAll(self, require, primary_provide, c, provide):
         '''
         Registers a component using (require, provide) as a key.
@@ -42,6 +44,10 @@
         '''
         Registers a component.
         '''
+        if not callable(c):
+            raise TypeError("The registered component callable is not "
+                            "callable")
+        
         self._registerAll(require, provide, c, provide)
 
     def _find(self, require, provide):
@@ -70,7 +76,19 @@
             c=self.get(i, provided)
             if c is not None: return c
         return self.get(None, provided)
+
+class IRegistry(IToIRegistry):
+    
+
+    def register(self, provide, c):
+        '''
+        Registers a component.
+        '''
+        if not provide.isImplementedBy(c):
+            raise Invalid("The registered component doesn't implement "
+                              "the promised interface.")
         
+        self._registerAll(None, provide, c, provide)
 
 
 class IToIRegistryWithLabels (IToIRegistry):