summaryrefslogtreecommitdiff
path: root/paste/wareweb/event.py
diff options
context:
space:
mode:
authorianb <devnull@localhost>2005-05-14 23:12:45 +0000
committerianb <devnull@localhost>2005-05-14 23:12:45 +0000
commit330dac21c0908b871fc73d9a17efefb7bd1e04be (patch)
treea30f8371508bf8ff03d8a7ecfa2e28ba9b0dfd41 /paste/wareweb/event.py
parentc5b9dee9b6ce25ff35a1a06858be781d07de294f (diff)
downloadpaste-330dac21c0908b871fc73d9a17efefb7bd1e04be.tar.gz
Added Wareweb, a new framework. Yea for more frameworks\!
Diffstat (limited to 'paste/wareweb/event.py')
-rw-r--r--paste/wareweb/event.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/paste/wareweb/event.py b/paste/wareweb/event.py
new file mode 100644
index 0000000..5376d63
--- /dev/null
+++ b/paste/wareweb/event.py
@@ -0,0 +1,34 @@
+class Continue:
+ """
+ This class is a singleton (never meant to be instantiated) that
+ represents a kind of no-op return from a class.
+ """
+ def __init__(self):
+ assert False, (
+ "Continue cannot be instantiated (use the class object "
+ "itself)")
+
+def wrap_func(func):
+ name = func.__name__
+ def replacement_func(actor, *args, **kw):
+ # @@: It's really more of an "inner_value" than "next_method"
+ kw['next_method'] = func
+ result = raise_event('start_%s' % name, actor, *args, **kw)
+ del kw['next_method']
+ if result is Continue:
+ value = func(actor, *args, **kw)
+ else:
+ return result
+ result = raise_event('end_%s' % name, actor, value, *args, **kw)
+ if result is Continue:
+ return value
+ return result
+ replacement_func.__name__ = name
+ return replacement_func
+
+def raise_event(name, actor, *args, **kw):
+ for listener in actor.listeners:
+ value = listener(name, actor, *args, **kw)
+ if value is not Continue:
+ return value
+ return Continue