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
	
	 helmutm
						helmutm