diff options
| author | ianb <devnull@localhost> | 2005-05-14 23:12:45 +0000 |
|---|---|---|
| committer | ianb <devnull@localhost> | 2005-05-14 23:12:45 +0000 |
| commit | 330dac21c0908b871fc73d9a17efefb7bd1e04be (patch) | |
| tree | a30f8371508bf8ff03d8a7ecfa2e28ba9b0dfd41 /paste/wareweb/event.py | |
| parent | c5b9dee9b6ce25ff35a1a06858be781d07de294f (diff) | |
| download | paste-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.py | 34 |
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 |
