proof-of-concept for a simple AOP implementation

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1967 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-08-27 19:33:26 +00:00
parent 171b3c76bc
commit a3dac1b675
2 changed files with 14 additions and 1 deletions

View file

@ -24,8 +24,17 @@ $Id$
def getNotifier(method):
if isinstance(method, Notifier):
if isinstance(method, (Notifier, BoundNotifier)):
return method
if method.im_self is not None:
name = method.im_func.func_name
classMethod = getattr(method.im_class, name)
if not isinstance(classMethod, Notifier):
classMethod = Notifier(classMethod)
setattr(method.im_class, name, classMethod)
notifier = BoundNotifier(classMethod, method.im_self)
setattr(method.im_self, name, notifier)
return notifier
return Notifier(method)

View file

@ -84,3 +84,7 @@ Combining class and instance level wrapping
logging: after foo, result=48
48
TODO: check case where instance is wrapped first, then class -
that means: always wrap class when wrapping an instance, and always
wrap instance with BoundNotifier.