import contextlib | |
# Executed in the order they're registered | |
INTERMEDIATE_HOOKS = [] | |
@contextlib.contextmanager | |
def intermediate_hook(fn): | |
INTERMEDIATE_HOOKS.append(fn) | |
try: | |
yield | |
finally: | |
INTERMEDIATE_HOOKS.pop() | |
def run_intermediate_hooks(name, val): | |
global INTERMEDIATE_HOOKS | |
hooks = INTERMEDIATE_HOOKS | |
INTERMEDIATE_HOOKS = [] | |
try: | |
for hook in hooks: | |
hook(name, val) | |
finally: | |
INTERMEDIATE_HOOKS = hooks |