Hooks before and after|error hooks are now nested

This commit is contained in:
Mark McClain
2010-11-27 12:04:29 -05:00
parent f8ec6cf9da
commit 2b7e3f93e1
2 changed files with 17 additions and 12 deletions

View File

@@ -90,9 +90,14 @@ class Pecan(object):
)
def handle_hooks(self, hook_type, *args):
for hook in state.hooks:
getattr(hook, hook_type)(*args)
if hook_type == 'before':
hooks = state.hooks
else:
hooks = reversed(state.hooks)
for hook in hooks:
getattr(hook, hook_type)(*args)
def get_params(self, all_params, remainder, argspec, im_self):
valid_params = dict()
positional_params = []

View File

@@ -70,9 +70,9 @@ class TestHooks(object):
assert run_hook[1] == 'before2'
assert run_hook[2] == 'before3'
assert run_hook[3] == 'inside'
assert run_hook[4] == 'after1'
assert run_hook[4] == 'after3'
assert run_hook[5] == 'after2'
assert run_hook[6] == 'after3'
assert run_hook[6] == 'after1'
def test_prioritized_hooks(self):
run_hook = []
@@ -109,9 +109,9 @@ class TestHooks(object):
assert run_hook[1] == 'before2'
assert run_hook[2] == 'before3'
assert run_hook[3] == 'inside'
assert run_hook[4] == 'after1'
assert run_hook[4] == 'after3'
assert run_hook[5] == 'after2'
assert run_hook[6] == 'after3'
assert run_hook[6] == 'after1'
for i in range(len(run_hook)): run_hook.pop()
@@ -128,9 +128,9 @@ class TestHooks(object):
assert run_hook[1] == 'before2'
assert run_hook[2] == 'before1'
assert run_hook[3] == 'inside'
assert run_hook[4] == 'after3'
assert run_hook[4] == 'after1'
assert run_hook[5] == 'after2'
assert run_hook[6] == 'after1'
assert run_hook[6] == 'after3'
def test_transaction_hook(self):
run_hook = []
@@ -303,8 +303,8 @@ class TestHooks(object):
assert run_hook[0] == 'before2'
assert run_hook[1] == 'before1'
assert run_hook[2] == 'inside_sub'
assert run_hook[3] == 'after2'
assert run_hook[4] == 'after1'
assert run_hook[3] == 'after1'
assert run_hook[4] == 'after2'
def test_hooks_with_validation(self):
run_hook = []
@@ -417,4 +417,4 @@ class TestHooks(object):
assert run_hook[2] == 'before'
assert run_hook[3] == 'inside'
assert run_hook[4] == 'after'
for i in range(len(run_hook)): run_hook.pop()
for i in range(len(run_hook)): run_hook.pop()