summaryrefslogtreecommitdiff
path: root/pecan/hooks.py
diff options
context:
space:
mode:
Diffstat (limited to 'pecan/hooks.py')
-rw-r--r--pecan/hooks.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/pecan/hooks.py b/pecan/hooks.py
index 57392d7..f1f7073 100644
--- a/pecan/hooks.py
+++ b/pecan/hooks.py
@@ -1,3 +1,4 @@
+import types
import sys
from inspect import getmembers
@@ -27,7 +28,15 @@ def walk_controller(root_class, controller, hooks):
for hook in hooks:
value._pecan.setdefault('hooks', set()).add(hook)
elif hasattr(value, '__class__'):
- if name.startswith('__') and name.endswith('__'):
+ # Skip non-exposed methods that are defined in parent classes;
+ # they're internal implementation details of that class, and
+ # not actual routable controllers, so we shouldn't bother
+ # assigning hooks to them.
+ if (
+ isinstance(value, types.MethodType) and
+ any(filter(lambda c: value.__func__ in c.__dict__.values(),
+ value.im_class.mro()[1:]))
+ ):
continue
walk_controller(root_class, value, hooks)