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$
|
$Id$
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from BTrees.OOBTree import OOBTree
|
||||||
from persistent import Persistent
|
from persistent import Persistent
|
||||||
|
from zope.cachedescriptors.property import Lazy
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
from zope.interface import implements
|
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 IClient
|
||||||
from cybertools.composer.schema.interfaces import IClientManager, IClientFactory
|
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):
|
class Client(Persistent):
|
||||||
|
@ -50,3 +98,18 @@ class ClientFactory(object):
|
||||||
return Client(self.context)
|
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.
|
""" 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) '
|
clients = Attribute('A collection of client objects (e.g. persons) '
|
||||||
'associated with this client manager.')
|
'associated with this client manager.')
|
||||||
clientSchemas = Attribute('A collection of schema objects '
|
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 RuleManager, EventType
|
||||||
from cybertools.composer.rule.base import Rule, Action
|
from cybertools.composer.rule.base import Rule, Action
|
||||||
from cybertools.composer.schema.interfaces import IClientManager, IClient
|
from cybertools.composer.schema.interfaces import IClientManager, IClient
|
||||||
|
from cybertools.composer.schema.client import ClientManager
|
||||||
from cybertools.stateful.base import StatefulAdapter
|
from cybertools.stateful.base import StatefulAdapter
|
||||||
from cybertools.stateful.definition import registerStatesDefinition
|
from cybertools.stateful.definition import registerStatesDefinition
|
||||||
from cybertools.stateful.definition import StatesDefinition
|
from cybertools.stateful.definition import StatesDefinition
|
||||||
|
@ -48,57 +49,24 @@ from cybertools.organize.interfaces import IRegistration, IRegistrationTemplate
|
||||||
from cybertools.organize.interfaces import IClientRegistrations
|
from cybertools.organize.interfaces import IClientRegistrations
|
||||||
|
|
||||||
|
|
||||||
class ServiceManager(object):
|
class ServiceManager(ClientManager):
|
||||||
|
|
||||||
implements(IServiceManager, IClientManager)
|
implements(IServiceManager)
|
||||||
|
|
||||||
servicesFactory = Jeep
|
servicesFactory = Jeep
|
||||||
clientSchemasFactory = Jeep
|
|
||||||
clientsFactory = OOBTree
|
|
||||||
|
|
||||||
services = None
|
services = None
|
||||||
clients = None
|
|
||||||
|
|
||||||
messages = None
|
|
||||||
|
|
||||||
allowRegWithNumber = False
|
allowRegWithNumber = False
|
||||||
allowDirectRegistration = True
|
allowDirectRegistration = True
|
||||||
senderEmail = 'unknown@sender.com'
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
if self.servicesFactory is not None:
|
if self.servicesFactory is not None:
|
||||||
self.services = self.servicesFactory()
|
self.services = self.servicesFactory()
|
||||||
if self.clientSchemasFactory is not None:
|
super(ServiceManager, self).__init__()
|
||||||
self.clientSchemas = self.clientSchemasFactory()
|
|
||||||
|
|
||||||
def isActive(self):
|
|
||||||
return True
|
|
||||||
|
|
||||||
def getServices(self, categories=[]):
|
def getServices(self, categories=[]):
|
||||||
return self.services
|
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):
|
class Registration(object):
|
||||||
|
|
||||||
|
@ -313,7 +281,7 @@ class ClientRegistrations(object):
|
||||||
regs = getattr(self.context, self.registrationsAttributeName, [])
|
regs = getattr(self.context, self.registrationsAttributeName, [])
|
||||||
if self.template is not None:
|
if self.template is not None:
|
||||||
svcs = self.template.getServices().values()
|
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
|
return regs
|
||||||
|
|
||||||
def validate(self, clientName, services, numbers=None):
|
def validate(self, clientName, services, numbers=None):
|
||||||
|
@ -460,7 +428,7 @@ def clientRemoved(obj, event):
|
||||||
def serviceRemoved(obj, event):
|
def serviceRemoved(obj, event):
|
||||||
""" Handle removal of a service.
|
""" Handle removal of a service.
|
||||||
"""
|
"""
|
||||||
for r in obj.registrations.values():
|
for r in list(obj.registrations.values()):
|
||||||
regs = IClientRegistrations(r.client)
|
regs = IClientRegistrations(r.client)
|
||||||
regs.unregister([obj])
|
regs.unregister([obj])
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue