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