work in progress: rule handling

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2149 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-11-04 11:49:10 +00:00
parent 81b8564278
commit 39ffba3b03
8 changed files with 51 additions and 22 deletions

View file

@ -39,13 +39,16 @@ class MessageManager(object):
messages = None
manager = None
def __init__(self):
if self.messagesFactory is not None:
self.messages = self.messagesFactory()
def getManager(self):
return self.manager
def addMessage(self, messageName, text):
message = Message(messageName, manager=self)
message.text = text
if self.messages is None:
self.messages = self.messagesFactory()
self.messages.append(message)
class Message(Template):

View file

@ -25,6 +25,7 @@ $Id$
from string import Template
from zope import component
from zope.interface import implements
from zope.publisher.browser import TestRequest
from cybertools.composer.instance import Instance
from cybertools.composer.interfaces import IInstance
@ -38,7 +39,7 @@ class MessageInstance(Instance):
self.client = client
self.template = template
def applyTemplate(self, **kw):
def applyTemplate(self, data=None, **kw):
data = DataProvider(self)
return MessageTemplate(self.template.text).safe_substitute(data)
@ -55,9 +56,12 @@ class DataProvider(object):
viewName = key[2:]
if client is None:
return '$' + key
view = component.getMultiAdapter(
(client.manager, TestRequest(form=form)), name=viewName)
return view()
view = component.queryMultiAdapter(
(client.manager, TestRequest()), name=viewName)
if view is not None:
return view()
else:
return key
elif key in messageManager.messages:
#mi = component.getMultiAdapter(
# (client, messageManager.messages[key]), IInstance)

View file

@ -42,6 +42,10 @@ class IMessageManager(Interface):
messages = Attribute('A collection of message objects managed.')
def addMessage(name, text):
""" Add a message under the name given with the given message text.
"""
class IMessage(ITemplate):
""" A complex message that may be expanded using instance data.

View file

@ -63,15 +63,6 @@ class RuleManager(object):
ri.template = r
ri.event = event
ri.applyTemplate()
#for c in r.conditions:
# cond = component.getAdapter(r, ICondition, name=c)
# if not cond(event):
# continue
#data = None
#for action in r.actions:
# handler = component.getAdapter(action, IActionHandler,
# name=action.handlerName)
# data = handler(data, event)
class Rule(Template):
@ -166,5 +157,5 @@ class ActionHandler(object):
def __init__(self, context):
self.context = context
def __call__(self, data, event, params={}):
def __call__(self, data, params={}):
pass

View file

@ -42,9 +42,9 @@ class RuleInstance(Instance):
cond = component.getAdapter(self, ICondition, name=c)
if not cond():
continue
data = None
data = {}
for action in self.template.actions:
handler = component.getAdapter(self, IActionHandler,
name=action.handlerName)
data = handler(data, self.event)
data = handler(data, action.parameters)

View file

@ -17,7 +17,7 @@
#
"""
Event definitions.
Action handler for sending emails.
$Id$
"""

View file

@ -3,6 +3,14 @@
import unittest, doctest
from zope.testing.doctestunit import DocFileSuite
from cybertools.composer.rule.base import ActionHandler
class MailActionHandler(ActionHandler):
def __call__(self, data, event, params={}):
pass
class Test(unittest.TestCase):
"Basic tests."

View file

@ -31,6 +31,7 @@ from zope import component
from zope.interface import implements, Interface
from cybertools.composer.interfaces import IInstance
from cybertools.composer.message.base import MessageManager
from cybertools.composer.rule.base import RuleManager, EventType
from cybertools.composer.schema.interfaces import IClientManager, IClient
from cybertools.stateful.base import StatefulAdapter
@ -56,6 +57,8 @@ class ServiceManager(object):
services = None
clients = None
messages = None
allowRegWithNumber = False
allowDirectRegistration = True
@ -344,7 +347,7 @@ class StatefulRegistration(StatefulAdapter):
statesDefinition = registrationStates
# rules and events
# events, rules, actions
eventTypes = Jeep((
EventType('service.checkout'),
@ -359,6 +362,22 @@ class RuleManagerAdapter(RuleManager):
self.context = context
class MessageManagerAdapter(MessageManager):
adapts(IServiceManager)
def __init__(self, context):
self.context = context
def addMessage(self, messageName, text):
super(MessageManagerAdapter, self).addMessage(messageName, text)
self.context.messages = self.messages
@Lazy
def messages(self):
return self.context.messages
# Zope event handlers
def clientRemoved(obj, event):