[Zope-Checkins] CVS: Zope/lib/python/ComponentArchitecture - Errors.py:1.1.2.5 InputToName.py:1.1.2.6 NameProvider.py:1.1.2.2 Package.py:1.1.2.2 Service.py:1.1.2.4

Shane Hathaway shane@digicool.com
Mon, 13 Aug 2001 14:44:25 -0400


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

Modified Files:
      Tag: NR-branch
	Errors.py InputToName.py NameProvider.py Package.py Service.py 
Log Message:
Further integrated services.


=== Zope/lib/python/ComponentArchitecture/Errors.py 1.1.2.4 => 1.1.2.5 ===
                                          `self.name`)
 
+
+class ServiceNotFound (ObjectAndNameException):
+    """Could not find a service"""
+
+
 class PresentationNotFound (ObjectAndNameException):
     """Could not find the necessary presentation for a component"""
 


=== Zope/lib/python/ComponentArchitecture/InputToName.py 1.1.2.5 => 1.1.2.6 ===
 from Service import Service, SERVICE_MANAGER_NAME
 from InterfaceComponents import objectImplements
-from Component import Component
 from Package import PackageAwareComponent
 
 
@@ -46,8 +45,12 @@
         '''
         '''
 
+    def listComponents():
+        '''
+        '''
+
 
-class InputToNameComponent (Component, PackageAwareComponent):
+class InputToNameComponent (PackageAwareComponent):
     '''
     A component that requires some set of interfaces and provides
     a name.


=== Zope/lib/python/ComponentArchitecture/NameProvider.py 1.1.2.1 => 1.1.2.2 ===
 import Interface
 from Service import Service, SERVICE_MANAGER_NAME
-from Component import Component
+from Package import PackageAwareComponent
 
 
 class NameProviderService (Service):
@@ -25,7 +25,7 @@
         '''
 
 
-class NameProviderComponent (Component):
+class NameProviderComponent (PackageAwareComponent):
     '''
     A component that provides names.
     '''


=== Zope/lib/python/ComponentArchitecture/Package.py 1.1.2.1 => 1.1.2.2 ===
 import Interface
 from Service import Service
+from Component import Component
 
 PACKAGE_SERVICE_NAME = 'packages'
 
@@ -9,6 +10,9 @@
 class PackageService (Service):
     '''
     '''
+    def getPackage(name, default=None):
+        '''
+        '''
 
 
 class Package (Interface.Base):
@@ -16,8 +20,20 @@
     '''
 
 
-class PackageAwareComponent (Interface.Base):
+class PackageAwareComponent (Component):
     '''
     '''
+    def getPackageRef():
+        '''
+        Should return an acquisition wrapper.
+        '''
+
+    def setPackageRef(r):
+        '''
+        '''
+
+    def delPackageRef():
+        '''
+        '''
 
 


=== Zope/lib/python/ComponentArchitecture/Service.py 1.1.2.3 => 1.1.2.4 ===
+from Acquisition import aq_acquire
+import Errors
 import Interface
 
 
@@ -12,3 +14,35 @@
     def getServiceName(self):
         '''
         '''
+
+
+def _findService(x_orig, x_ob, x_name, sm, (service_name, result)):
+    '''
+    This is an acquisition filter callback.
+    '''
+    s = sm.getService(service_name, None)
+    if s is not None:
+        result.append(s)
+        return 1
+    return 0        
+
+
+_marker = []  # Create a new marker object.
+
+def getService(object, service_name, default=_marker):
+    '''
+    Finds one implementation of a service in a place.
+    '''
+    result = []
+    try:
+        aq_acquire(object, SERVICE_MANAGER_NAME, _findService,
+                   (service_name, result), 1, None, 1)
+    except AttributeError:
+        pass
+    if result:
+        return result[0]
+    else:
+        if default is _marker:
+            raise Errors.ServiceNotFound(object, service_name)
+        else:
+            return default