[Zope3-checkins] CVS: Zope3/lib/python/Zope/App/OFS/Services/ServiceManager - IServiceConfiguration.py:1.3.4.1 ServiceConfiguration.py:1.3.4.1 ServiceManager.py:1.11.4.1

Jim Fulton jim@zope.com
Thu, 5 Dec 2002 11:21:00 -0500


Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Services/ServiceManager
In directory cvs.zope.org:/tmp/cvs-serv15574/lib/python/Zope/App/OFS/Services/ServiceManager

Modified Files:
      Tag: ComponentConfiguration-branch
	IServiceConfiguration.py ServiceConfiguration.py 
	ServiceManager.py 
Log Message:
Commiting code on branch so I can work on a different ws

=== Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/IServiceConfiguration.py 1.3 => 1.3.4.1 ===
--- Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/IServiceConfiguration.py:1.3	Tue Dec  3 13:15:30 2002
+++ Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/IServiceConfiguration.py	Thu Dec  5 11:20:29 2002
@@ -16,9 +16,10 @@
 """
 
 from Interface.Attribute import Attribute
-from Zope.App.OFS.Services.ConfigurationInterfaces import IConfiguration
+from Zope.App.OFS.Services.ConfigurationInterfaces \
+     import IComponentConfigurationn
 
-class IServiceConfiguration(IConfiguration):
+class IServiceConfiguration(IComponentConfiguration):
     """Service Configuration
 
     Service configurations are dependent on the components that they
@@ -27,12 +28,6 @@
     """
 
     serviceType = Attribute("The service type id")
-
-    componentPath = Attribute("The physical path to the component")
-
-    def getService():
-        """Return the service component named in the directive.
-        """
 
 __doc__ = IServiceConfiguration.__doc__ + __doc__
 


=== Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/ServiceConfiguration.py 1.3 => 1.3.4.1 ===
--- Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/ServiceConfiguration.py:1.3	Tue Dec  3 13:16:58 2002
+++ Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/ServiceConfiguration.py	Thu Dec  5 11:20:29 2002
@@ -15,92 +15,22 @@
 $Id$
 """
 
-__metaclass__ = type
-
-from Persistence import Persistent
-from Zope.Security.Checker import CheckerPublic, InterfaceChecker
-from Zope.Security.Proxy import Proxy
-from Zope.App.DependencyFramework.Exceptions import DependencyError
-from Zope.App.Traversing import traverse
 from IServiceConfiguration import IServiceConfiguration
-from Zope.Proxy.ProxyIntrospection import removeAllProxies
-from Zope.App.Traversing import getPhysicalRoot
-from Zope.ComponentArchitecture import getService, getServiceManager
-from Zope.App.Traversing import getPhysicalPathString
-from ServiceManager import ServiceManager
-from Zope.App.OFS.Container.IAddNotifiable import IAddNotifiable
-from Zope.App.OFS.Container.IDeleteNotifiable import IDeleteNotifiable
-from Zope.App.DependencyFramework.IDependable import IDependable
-from Zope.ComponentArchitecture import getServiceManager, getAdapter
-from Zope.ContextWrapper import ContextMethod
 from Zope.App.OFS.Services.Configuration import ConfigurationStatusProperty
-from Zope.ContextWrapper import ContextProperty
 from IBindingAware import IBindingAware
-from Zope.App.OFS.Services.ConfigurationInterfaces import Active
-from Zope.App.OFS.Services.ConfigurationInterfaces import Registered
-from Zope.App.OFS.Services.ConfigurationInterfaces import Unregistered
+from Zope.App.OFS.Services.Configuration import ComponentConfiguration
 
-class ServiceConfiguration(Persistent):
+class ServiceConfiguration(ComponentConfiguration):
     __doc__ = IServiceConfiguration.__doc__
     
-    __implements__ = IServiceConfiguration, IAddNotifiable, IDeleteNotifiable
+    __implements__ = (IServiceConfiguration,
+                      ComponentConfiguration.__implements__)
 
     status = ConfigurationStatusProperty('Services')
 
-    def __init__(self, service_type, component_path, permission=None):
+    def __init__(self, service_type, **kw):
         self.serviceType = service_type
-        self.componentPath = component_path
-        if permission == 'Zope.Public':
-            permission = CheckerPublic
-            
-        self.permission = permission
-
-    def __repr__(self):
-        return "service(%s, %s)" % (self.serviceType, self.componentPath)
-
-    ############################################################
-    # Implementation methods for interface
-    # Zope.App.OFS.Services.ServiceManager.IServiceConfiguration.
-
-    def getService(self):
-        service_manager = getServiceManager(self)
-        
-        service = getattr(self, '_v_service', None)
-        if service is None:
-            
-            # We have to be clever here. We need to do an honest to
-            # god unrestricted traveral, which means we have to
-            # traverse from an unproxies object. But, it's not enough
-            # for the service manager to be unproxies, because the
-            # path is an absolute path. When absolute paths are
-            # traversed, the traverser finds the physical root and
-            # traverses from there, so we need to make sure the
-            # physical root isn;t proxied.
-
-            # get the root and unproxy it.
-            root = removeAllProxies(getPhysicalRoot(service_manager))            
-            service = traverse(root, self.componentPath)
-
-            if self.permission:
-                if type(service) is Proxy:
-                    # XXX what is this?
-                    service = removeSecurityProxy(service)
-
-                interface = service_manager.getInterfaceFor(self.serviceType)
-
-                checker = InterfaceChecker(interface, self.permission)
-
-                service = Proxy(service, checker)
-
-            
-            self._v_service = service
-
-
-        return service
-
-    getService.__doc__ = IServiceConfiguration['getService'].__doc__
-
-    getService = ContextMethod(getService)
+        super(ServiceConfiguration, self).__init__(**kw)
 
     ############################################################
 
@@ -117,32 +47,6 @@
             service.unbound(self.serviceType)
 
     deactivated = ContextMethod(deactivated)
-
-    def manage_afterAdd(self, configuration, container):
-        "See Zope.App.OFS.Container.IAddNotifiable"
-        sm = getServiceManager(configuration)
-        service = configuration.getService()
-        dependents = getAdapter(service, IDependable)
-        objectpath = getPhysicalPathString(configuration)
-        dependents.addDependent(objectpath)
-        
-    def manage_beforeDelete(self, configuration, container):
-        "See Zope.App.OFS.Container.IDeleteNotifiable"
-        assert self == configuration
-        sm = getServiceManager(self)
-        service = self.getService()
-        objectstatus = self.status
-        dependents = getAdapter(service, IDependable)
-        objectpath = getPhysicalPathString(self)
-        
-        if objectstatus == Active:
-            raise DependencyError("Can't delete active configurations")
-        elif objectstatus == Registered:
-            self.status = Unregistered
-
-        dependents.removeDependent(objectpath)
-
-    manage_beforeDelete = ContextMethod(manage_beforeDelete)
     
 __doc__ = ServiceConfiguration.__doc__  + __doc__
 


=== Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/ServiceManager.py 1.11 => 1.11.4.1 ===
--- Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/ServiceManager.py:1.11	Tue Dec  3 12:45:20 2002
+++ Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/ServiceManager.py	Thu Dec  5 11:20:29 2002
@@ -163,7 +163,7 @@
         if registry:
             configuration = registry.active()
             if configuration is not None:
-                service = configuration.getService()
+                service = configuration.getComponent()
                 return service
             
         return None