[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