Files
pyDevSup/python/devsup/hooks.py
Michael Davidsaver 1e34cf9b76 move hooks into python
2013-04-14 12:01:56 -04:00

61 lines
1.4 KiB
Python

from __future__ import print_function
import traceback
from collections import defaultdict
try:
import _dbapi
except ImportError:
import devsup._nullapi as _dbapi
__all__ = [
"hooknames",
"addHook",
"debugHooks",
]
hooknames = _dbapi._hooks.keys()
_revnames = dict([(v,k) for k,v in _dbapi._hooks.iteritems()])
_hooktable = defaultdict(list)
def addHook(state, func):
"""addHook("stats", funcion)
Add callable to IOC start sequence.
Callables are run in the order in
which they were added (except for 'AtIocExit').
>>> def show():
... print 'State Occurred'
>>> addHook("AfterIocRunning", show)
An additional special hook 'AtIocExit' may be used
for cleanup actions during IOC shutdown.
"""
sid = _dbapi._hooks[state]
_hooktable[sid].append(func)
def debugHooks():
"""Install debugging print to hooks
"""
for h in hooknames:
def _showstate(state=h):
print('Reached state',state)
addHook(h, _showstate)
def _runhook(sid):
name = _revnames[sid]
pop = -1 if name=='AtIocExit' else 0
fns = _hooktable.get(sid)
if fns is not None:
while len(fns)>0:
fn = fns.pop(pop)
try:
fn()
except:
print("Error running",name,"hook",fn)
traceback.print_exc()