store registration additionally in client, + IObjectRemovedEvent handler
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1922 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
5f290c0723
commit
94b10e85da
2 changed files with 35 additions and 6 deletions
|
@ -30,6 +30,16 @@ from cybertools.composer.schema.browser.common import BaseView
|
||||||
from cybertools.composer.schema.interfaces import IClientFactory
|
from cybertools.composer.schema.interfaces import IClientFactory
|
||||||
|
|
||||||
|
|
||||||
|
class ServiceView(object):
|
||||||
|
|
||||||
|
def __init__(self, context, request):
|
||||||
|
self.context = context
|
||||||
|
self.request = request
|
||||||
|
|
||||||
|
def getRegistrations(self):
|
||||||
|
return self.context.registrations
|
||||||
|
|
||||||
|
|
||||||
class RegistrationTemplateView(BaseView):
|
class RegistrationTemplateView(BaseView):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
|
|
|
@ -22,6 +22,7 @@ Service management classes.
|
||||||
$Id$
|
$Id$
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from time import time
|
||||||
from BTrees.OOBTree import OOBTree
|
from BTrees.OOBTree import OOBTree
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.cachedescriptors.property import Lazy
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
|
@ -134,6 +135,7 @@ class Registration(object):
|
||||||
def __init__(self, client, service):
|
def __init__(self, client, service):
|
||||||
self.client = client
|
self.client = client
|
||||||
self.service = service
|
self.service = service
|
||||||
|
self.timeStamp = int(time())
|
||||||
|
|
||||||
|
|
||||||
class RegistrationTemplate(object):
|
class RegistrationTemplate(object):
|
||||||
|
@ -163,20 +165,37 @@ class ClientRegistrations(object):
|
||||||
|
|
||||||
template = None
|
template = None
|
||||||
|
|
||||||
|
registrationsAttributeName = '__service_registrations__'
|
||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
self.context = context
|
self.context = context
|
||||||
|
|
||||||
def register(self, services):
|
def register(self, services):
|
||||||
for service in services:
|
regs = [service.register(self.context) for service in services]
|
||||||
service.register(self.context)
|
old = getattr(self.context, self.registrationsAttributeName, [])
|
||||||
|
regs.extend(r for r in old if r.service not in services)
|
||||||
|
setattr(self.context, self.registrationsAttributeName, regs)
|
||||||
|
|
||||||
def unregister(self, services):
|
def unregister(self, services):
|
||||||
|
old = getattr(self.context, self.registrationsAttributeName, [])
|
||||||
|
regs = [r for r in old if r.service not in services]
|
||||||
|
setattr(self.context, self.registrationsAttributeName, regs)
|
||||||
for service in services:
|
for service in services:
|
||||||
service.unregister(self.context)
|
service.unregister(self.context)
|
||||||
|
|
||||||
def getRegistrations(self):
|
def getRegistrations(self):
|
||||||
for service in self.template.getServices():
|
return getattr(self.context, self.registrationsAttributeName, [])
|
||||||
for reg in service.registrations.values():
|
#for service in self.template.getServices():
|
||||||
if self.context == reg.client:
|
# for reg in service.registrations.values():
|
||||||
yield reg
|
# if self.context == reg.client:
|
||||||
|
# yield reg
|
||||||
|
|
||||||
|
|
||||||
|
# event handlers
|
||||||
|
|
||||||
|
def clientRemoved(obj, event):
|
||||||
|
""" Handle removal of a client object.
|
||||||
|
"""
|
||||||
|
regs = IClientRegistrations(obj)
|
||||||
|
for r in regs.getRegistrations():
|
||||||
|
r.service.unregister(obj)
|
||||||
|
|
Loading…
Add table
Reference in a new issue