Source code for pyroot_zen.entrypoints.at_cpp_lookup

#!/usr/bin/env python

import sys
import logging
from collections import OrderedDict

## Collection of hooks 
hooks_before = OrderedDict()
hooks_after  = OrderedDict()

[docs]def wrapper(func): def cppyy_import_hook(*args): logging.debug('importing: %s'%str(args)) ## Hooks before import for hook in hooks_before.values(): hook(args[0]) ## Actual import module = func(*args) ## Hooks after import for hook in hooks_after.values(): hook(args[0], module) return module return cppyy_import_hook
[docs]def inject_before(hook): """ Signature: hook(name) >>> foo = lambda arg: None >>> inject_before(foo) >>> inject_before(foo) Traceback (most recent call last): ... ValueError: Hook name already used: <lambda> """ logging.debug('Injecting: %r'%hook) name = hook.__name__ if name in hooks_before: raise ValueError('Hook name already used: %s'%name) hooks_before[name] = hook
[docs]def inject_after(hook): """ Signature: hook(name, module) >>> foo = lambda name, module: None >>> inject_after(foo) >>> inject_after(foo) Traceback (most recent call last): ... ValueError: Hook name already used: <lambda> """ logging.debug('Injecting: %r'%hook) name = hook.__name__ if name in hooks_after: raise ValueError('Hook name already used: %s'%name) hooks_after[name] = hook
[docs]def remove(name): for d in hooks_before, hooks_after: if name in d: del d[name]
def _init(): cppyy = sys.modules['cppyy'] cppyy._backend.LookupCppEntity = wrapper(cppyy._backend.LookupCppEntity) logging.debug('Binded to LookupCppEntity')