Module twisted.python.hook
I define support for hookable instance methods.
These are methods which you can register pre-call and post-call
external functions to augment their functionality. People familiar with
more esoteric languages may think of these as "method
combinations".
This could be used to add optional preconditions, user-extensible
callbacks (a-la emacs) or a thread-safety mechanism.
The four exported calls are:
All have the signature (class, methodName, callable), and the callable
they take must always have the signature (instance, *args, **kw) unless
the particular signature of the method they hook is known.
Hooks should typically not throw exceptions, however, no effort will
be made by this module to prevent them from doing so. Pre-hooks will
always be called, but post-hooks will only be called if the pre-hooks do
not raise any exceptions (they will still be called if the main method
raises an exception). The return values and exception status of the main
method will be propogated (assuming none of the hooks raise an
exception). Hooks will be executed in the order in which they are
added.
Exceptions |
HookError |
An error which will fire when an invariant is violated. |
Function Summary |
|
addPost (klass,
name,
func)
hook.addPost(klass, name, func) -> None |
|
addPre (klass,
name,
func)
hook.addPre(klass, name, func) -> None |
|
ORIG (k,
n)
(private) munging to turn a method name into an `original'
identifier |
|
POST (k,
n)
(private) munging to turn a method name into a
post-hook-method-name |
|
PRE (k,
n)
(private) munging to turn a method name into a
pre-hook-method-name |
|
removePost (klass,
name,
func)
hook.removePre(klass, name, func) -> None |
|
removePre (klass,
name,
func)
hook.removePre(klass, name, func) -> None |
addPost(klass,
name,
func)
hook.addPost(klass, name, func) -> None
Add a function to be called before the method klass.name is
invoked.
-
|
addPre(klass,
name,
func)
hook.addPre(klass, name, func) -> None
Add a function to be called before the method klass.name is
invoked.
-
|
ORIG(k,
n)
(private) munging to turn a method name into an `original'
identifier
-
|
POST(k,
n)
(private) munging to turn a method name into a
post-hook-method-name
-
|
PRE(k,
n)
(private) munging to turn a method name into a
pre-hook-method-name
-
|
removePost(klass,
name,
func)
hook.removePre(klass, name, func) -> None
Remove a function (previously registered with addPost) so that it is
no longer executed after klass.name.
-
|
removePre(klass,
name,
func)
hook.removePre(klass, name, func) -> None
Remove a function (previously registered with addPre) so that it is no
longer executed before klass.name.
-
|
hooked_func
-
- Type:
-
string
- Value:
'''
import %(module)s
def %(name)s(*args, **kw):
klazz = %(module)s.%(klass)s
for preMethod in klazz.%(preName)s:
apply(preMethod, args, kw)
...
|
|