[Twisted-Python] Possible patch to twisted.python.hook
Itamar Shtull-Trauring
twisted at itamarst.org
Sun Nov 18 13:08:02 EST 2001
The following patch makes post hook get the result of the hooked function.
THis lets you do cool stuff like pre/post-conditions (like synchronization,
they can be optional), but it is most likely rather slower than the current
hook, which means synchronized classes will be slower.
I have a working implementation of pre/post conditions based on this, if
anyone's interested.
*** hook.py Sun Nov 18 20:02:59 2001
--- hook.py-new Sun Nov 11 11:31:17 2001
***************
*** 48,55 ****
--- 48,58 ----
none of the hooks raise an exception). Hooks will be executed in the
order in
which they are added.
+ Pre-functions should have the signature (self, args, kwargs).
+ Post-functions should have the signature (success, result, self, args,
kwargs).
"""
+
# System Imports
import string
***************
*** 99,114 ****
hooked_func = """
import %(module)s
def %(name)s(*args, **kw):
klazz = %(module)s.%(klass)s
for preMethod in klazz.%(preName)s:
apply(preMethod, args, kw)
try:
! return apply(klazz.%(originalName)s, args, kw)
! finally:
! for postMethod in klazz.%(postName)s:
! apply(postMethod, args, kw)
"""
_PRE = '__hook_pre_%s_%s_%s__'
--- 102,128 ----
hooked_func = """
import %(module)s
+ import sys
def %(name)s(*args, **kw):
klazz = %(module)s.%(klass)s
for preMethod in klazz.%(preName)s:
apply(preMethod, args, kw)
+
try:
! result = apply(klazz.%(originalName)s, args, kw)
! success = 1
! except:
! success = 0
! result = sys.last_value
!
! for postMethod in klazz.%(postName)s:
! apply(postMethod, (success, result) + args, kw)
!
! if success:
! return result
! else:
! raise result
"""
_PRE = '__hook_pre_%s_%s_%s__'
More information about the Twisted-Python
mailing list