use ClientManager as base class for ServiceManager
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3670 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
9f7974bd0d
commit
7dd1eabe6a
3 changed files with 75 additions and 38 deletions
|
@ -22,12 +22,60 @@ Client implementations.
|
|||
$Id$
|
||||
"""
|
||||
|
||||
from BTrees.OOBTree import OOBTree
|
||||
from persistent import Persistent
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.component import adapts
|
||||
from zope.interface import implements
|
||||
|
||||
from cybertools.composer.message.base import MessageManager
|
||||
from cybertools.composer.schema.interfaces import IClient
|
||||
from cybertools.composer.schema.interfaces import IClientManager, IClientFactory
|
||||
from cybertools.util.jeep import Jeep
|
||||
from cybertools.util.randomname import generateName
|
||||
|
||||
|
||||
class ClientManager(object):
|
||||
|
||||
implements(IClientManager)
|
||||
|
||||
clientSchemasFactory = Jeep
|
||||
clientsFactory = OOBTree
|
||||
|
||||
clients = None
|
||||
|
||||
messages = None
|
||||
|
||||
senderEmail = 'unknown@sender.com'
|
||||
|
||||
def __init__(self):
|
||||
if self.clientSchemasFactory is not None:
|
||||
self.clientSchemas = self.clientSchemasFactory()
|
||||
|
||||
def isActive(self):
|
||||
return True
|
||||
|
||||
def getClientSchemas(self):
|
||||
return self.clientSchemas
|
||||
|
||||
@Lazy
|
||||
def clients(self):
|
||||
return self.clientsFactory()
|
||||
|
||||
def getClients(self):
|
||||
return self.clients
|
||||
|
||||
def addClient(self, client):
|
||||
name = self.generateClientName(client)
|
||||
self.clients[name] = client
|
||||
client.__name__ = name
|
||||
return name
|
||||
|
||||
def generateClientName(self, client):
|
||||
return generateName(self.checkClientName)
|
||||
|
||||
def checkClientName(self, name):
|
||||
return name not in self.getClients()
|
||||
|
||||
|
||||
class Client(Persistent):
|
||||
|
@ -50,3 +98,18 @@ class ClientFactory(object):
|
|||
return Client(self.context)
|
||||
|
||||
|
||||
class MessageManagerAdapter(MessageManager):
|
||||
|
||||
adapts(IClientManager)
|
||||
|
||||
def __init__(self, context):
|
||||
self.context = context
|
||||
|
||||
def addMessage(self, messageName, text, **kw):
|
||||
super(MessageManagerAdapter, self).addMessage(messageName, text, **kw)
|
||||
self.context.messages = self.messages
|
||||
|
||||
@Lazy
|
||||
def messages(self):
|
||||
return self.context.messages
|
||||
|
||||
|
|
|
@ -306,6 +306,12 @@ class IClientManager(Interface):
|
|||
""" Cares for a client typically providing schemas.
|
||||
"""
|
||||
|
||||
senderEmail = schema.TextLine(
|
||||
title=_(u'Sender email'),
|
||||
description=_(u'Email address that will be used as sender '
|
||||
'address of confirmation and feedback messages.'),
|
||||
required=False,)
|
||||
|
||||
clients = Attribute('A collection of client objects (e.g. persons) '
|
||||
'associated with this client manager.')
|
||||
clientSchemas = Attribute('A collection of schema objects '
|
||||
|
|
|
@ -35,6 +35,7 @@ from cybertools.composer.message.base import MessageManager
|
|||
from cybertools.composer.rule.base import RuleManager, EventType
|
||||
from cybertools.composer.rule.base import Rule, Action
|
||||
from cybertools.composer.schema.interfaces import IClientManager, IClient
|
||||
from cybertools.composer.schema.client import ClientManager
|
||||
from cybertools.stateful.base import StatefulAdapter
|
||||
from cybertools.stateful.definition import registerStatesDefinition
|
||||
from cybertools.stateful.definition import StatesDefinition
|
||||
|
@ -48,57 +49,24 @@ from cybertools.organize.interfaces import IRegistration, IRegistrationTemplate
|
|||
from cybertools.organize.interfaces import IClientRegistrations
|
||||
|
||||
|
||||
class ServiceManager(object):
|
||||
class ServiceManager(ClientManager):
|
||||
|
||||
implements(IServiceManager, IClientManager)
|
||||
implements(IServiceManager)
|
||||
|
||||
servicesFactory = Jeep
|
||||
clientSchemasFactory = Jeep
|
||||
clientsFactory = OOBTree
|
||||
|
||||
services = None
|
||||
clients = None
|
||||
|
||||
messages = None
|
||||
|
||||
allowRegWithNumber = False
|
||||
allowDirectRegistration = True
|
||||
senderEmail = 'unknown@sender.com'
|
||||
|
||||
def __init__(self):
|
||||
if self.servicesFactory is not None:
|
||||
self.services = self.servicesFactory()
|
||||
if self.clientSchemasFactory is not None:
|
||||
self.clientSchemas = self.clientSchemasFactory()
|
||||
|
||||
def isActive(self):
|
||||
return True
|
||||
super(ServiceManager, self).__init__()
|
||||
|
||||
def getServices(self, categories=[]):
|
||||
return self.services
|
||||
|
||||
def getClientSchemas(self):
|
||||
return self.clientSchemas
|
||||
|
||||
@Lazy
|
||||
def clients(self):
|
||||
return self.clientsFactory()
|
||||
|
||||
def getClients(self):
|
||||
return self.clients
|
||||
|
||||
def addClient(self, client):
|
||||
name = self.generateClientName(client)
|
||||
self.clients[name] = client
|
||||
client.__name__ = name
|
||||
return name
|
||||
|
||||
def generateClientName(self, client):
|
||||
return generateName(self.checkClientName)
|
||||
|
||||
def checkClientName(self, name):
|
||||
return name not in self.getClients()
|
||||
|
||||
|
||||
class Registration(object):
|
||||
|
||||
|
@ -313,7 +281,7 @@ class ClientRegistrations(object):
|
|||
regs = getattr(self.context, self.registrationsAttributeName, [])
|
||||
if self.template is not None:
|
||||
svcs = self.template.getServices().values()
|
||||
regs = (r for r in regs if r.service in svcs)
|
||||
regs = [r for r in regs if r.service in svcs]
|
||||
return regs
|
||||
|
||||
def validate(self, clientName, services, numbers=None):
|
||||
|
@ -460,7 +428,7 @@ def clientRemoved(obj, event):
|
|||
def serviceRemoved(obj, event):
|
||||
""" Handle removal of a service.
|
||||
"""
|
||||
for r in obj.registrations.values():
|
||||
for r in list(obj.registrations.values()):
|
||||
regs = IClientRegistrations(r.client)
|
||||
regs.unregister([obj])
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue