diff options
| author | Nachi Ueno <ueno.nachi@lab.ntt.co.jp> | 2011-08-19 12:30:55 -0700 |
|---|---|---|
| committer | Nachi Ueno <ueno.nachi@lab.ntt.co.jp> | 2011-08-19 12:30:55 -0700 |
| commit | c06bbe99734f2fea35cfb4bdd854814c9119b617 (patch) | |
| tree | ba7187f91ce12a2dbd8e3b6ab5bee8a8e8569cce /nova/utils.py | |
| parent | aca07a42fabb7f506cf132b995b4ad0139987b02 (diff) | |
| download | nova-c06bbe99734f2fea35cfb4bdd854814c9119b617.tar.gz nova-c06bbe99734f2fea35cfb4bdd854814c9119b617.tar.xz nova-c06bbe99734f2fea35cfb4bdd854814c9119b617.zip | |
Added monkey patching notification code function
w
Diffstat (limited to 'nova/utils.py')
| -rw-r--r-- | nova/utils.py | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/nova/utils.py b/nova/utils.py index 7276b6bd5..8024a3517 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -35,6 +35,7 @@ import sys import time import types import uuid +import pyclbr from xml.sax import saxutils from eventlet import event @@ -634,7 +635,7 @@ def synchronized(name, external=False): Different methods can share the same lock: @synchronized('mylock') - def foo(self, *args): + Gdef foo(self, *args): ... @synchronized('mylock') @@ -873,3 +874,24 @@ class Bootstrapper(object): for key in FLAGS: value = FLAGS.get(key, None) logging.audit(_("%(key)s : %(value)s" % locals())) + + +def monkey_patch(): + if not FLAGS.monkey_patch: + return + for module_and_decorator in FLAGS.monkey_patch_modules: + module, decorator_name = module_and_decorator.split(':') + decorator = import_class(decorator_name) + __import__(module) + module_data = pyclbr.readmodule_ex(module) + for key in module_data.keys(): + if isinstance(module_data[key], pyclbr.Class): + clz = import_class("%s.%s" % (module, key)) + for method, func in inspect.getmembers(clz, inspect.ismethod): + setattr(clz, method,\ + decorator("%s.%s" % (module, key), func)) + if isinstance(module_data[key], pyclbr.Function): + func = import_class("%s.%s" % (module, key)) + setattr(sys.modules[module], key,\ + setattr(sys.modules[module], key, \ + decorator("%s.%s" % (module, key), func))) |
