diff --git a/util/aop.py b/util/aop.py index a66a1f6..7c160ee 100644 --- a/util/aop.py +++ b/util/aop.py @@ -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) diff --git a/util/aop.txt b/util/aop.txt index 562faaa..5c05061 100644 --- a/util/aop.txt +++ b/util/aop.txt @@ -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. +