[Zope3-dev] [Fwd: [Zope-Coders] Re: [Zope3-checkins] CVS: Zope3/lib/python/Zope/App/OFS/Services/ServiceManager
- ServiceDirective.py:1.3.6.1]
Chris Withers
chrisw@nipltd.com
Tue, 29 Oct 2002 10:26:26 +0000
I'm in agreement with Florent, and nto sure this ever made it to the zope3-dev
list, so I'm forwarding it there...
cheers,
Chris
-------- Original Message --------
Subject: [Zope-Coders] Re: [Zope3-checkins] CVS:
Zope3/lib/python/Zope/App/OFS/Services/ServiceManager - ServiceDirective.py:1.3.6.1
Date: Fri, 25 Oct 2002 21:39:50 +0200
From: Florent Guillaume <fg@nuxeo.com>
Organization: Nuxeo
To: sbabu@zeomega.com
CC: zope-coders@zope.org
I know it's current work done in a branch, but pretty please could we
have those things named differently than "manage_afterAdd" and
"manage_beforeDelete"? Those raise bad memories, and aren't in sync with
the rest of the naming in Z3.
Also, is this IAddNotifiable framework going to stay? I would have
thought we'd use the Event Service instead of that, where someone would
register as a listener for the add and remove events and would act on
them to keep the invariants needed.
Florent
In article <200210211612.g9LGCel13573@cvs.baymountain.com> you write:
> Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Services/ServiceManager
> In directory
> cvs.zope.org:/tmp/cvs-serv13324/lib/python/Zope/App/OFS/Services/ServiceManager
>
> Modified Files:
> Tag: Zope3-Bangalore-TTW-Branch
> ServiceDirective.py
> Log Message:
> Implemented the methods(manage_afterAdd, manage_beforeDelete) for
> adding and deleting the dependency of the object.
>
>
> ===
> Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/ServiceDirective.py
> 1.3 => 1.3.6.1 ===
> ---
> Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/ServiceDirective.py:1.3
> Thu Jul 18 11:08:08 2002
> +++
> Zope3/lib/python/Zope/App/OFS/Services/ServiceManager/ServiceDirective.py
> Mon Oct 21 12:12:39 2002
> @@ -24,11 +24,20 @@
> from IServiceDirective import IServiceDirective
> from Zope.Proxy.ProxyIntrospection import removeAllProxies
> from Zope.App.Traversing import getPhysicalRoot
> +from Zope.ComponentArchitecture import getService
> +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
>
> class ServiceDirective(Persistent):
> __doc__ = IServiceDirective.__doc__
>
> - __implements__ = IServiceDirective
> + __implements__ = IServiceDirective, IAddNotifiable, \
> + IDeleteNotifiable
>
> def __init__(self, service_type, component_path, permission=None):
> self.service_type = service_type
> @@ -82,9 +91,38 @@
>
> getService.__doc__ = IServiceDirective['getService'].__doc__
>
> - #
> ############################################################
>
> + def manage_afterAdd(self, directive, container):
> + "See Zope.App.OFS.Container.IAddNotifiable"
> + sm = getServiceManager(directive)
> + service = directive.getService(sm)
> + dependents = getAdapter(service, IDependable)
> + objectpath = getPhysicalPathString(directive)
> + dependents.addDependent(objectpath)
> +
> + def manage_beforeDelete(self, directive, container):
> + "See Zope.App.OFS.Container.IDeleteNotifiable"
> + directive = self
> + service_type = directive.service_type
> + sm = getServiceManager(directive)
> + service = directive.getService(sm)
> + objectstatus = sm.getRegistrationState(directive, service_type)
> + dependents = getAdapter(service, IDependable)
> + objectpath = getPhysicalPathString(directive)
> +
> + if objectstatus == 'Active':
> + raise "Object is active"
> + elif objectstatus == 'Registered':
> + sm.unbindService(directive)
> + dependents.removeDependent(objectpath)
> + else:
> + dependents.removeDependent(objectpath)
> +
> +
> +
> +
> + manage_beforeDelete = ContextMethod(manage_beforeDelete)
>
> __doc__ = ServiceDirective.__doc__ + __doc__
>
>
>
> _______________________________________________
> Zope3-Checkins mailing list
> Zope3-Checkins@zope.org
> http://lists.zope.org/mailman/listinfo/zope3-checkins
>
--
Florent Guillaume, Nuxeo (Paris, France)
+33 1 40 33 79 87 http://nuxeo.com mailto:fg@nuxeo.com
_______________________________________________
Zope-Coders mailing list
Zope-Coders@zope.org
http://lists.zope.org/mailman/listinfo/zope-coders