Convenience functions for callable hooks
This commit is contained in:
parent
7d503a897b
commit
e495e28ee0
@ -272,3 +272,68 @@ def get_hook_templates(hook_name):
|
|||||||
A list of strings representing template paths.
|
A list of strings representing template paths.
|
||||||
"""
|
"""
|
||||||
return PluginManager().get_template_hooks(hook_name)
|
return PluginManager().get_template_hooks(hook_name)
|
||||||
|
|
||||||
|
|
||||||
|
###########################
|
||||||
|
# Callable convenience code
|
||||||
|
###########################
|
||||||
|
|
||||||
|
class CantHandleIt(Exception):
|
||||||
|
"""
|
||||||
|
A callable may call this method if they look at the relevant
|
||||||
|
arguments passed and decide it's not possible for them to handle
|
||||||
|
things.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
class UnhandledCallable(Exception):
|
||||||
|
"""
|
||||||
|
Raise this method if no callables were available to handle the
|
||||||
|
specified hook. Only used by callable_runone.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def callable_runone(hookname, unhandled_okay=False, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Run the callable hook HOOKNAME... run until the first response,
|
||||||
|
then return.
|
||||||
|
|
||||||
|
This function will run stop at the first hook that handles the
|
||||||
|
result. Hooks raising CantHandleIt will be skipped.
|
||||||
|
|
||||||
|
Unless unhandled_okay is True, this will error out if no hooks
|
||||||
|
have been registered to handle this function.
|
||||||
|
"""
|
||||||
|
callables = PluginManager().get_hook_callables(hookname)
|
||||||
|
|
||||||
|
for callable in callables:
|
||||||
|
try:
|
||||||
|
return callable(*args, **kwargs)
|
||||||
|
except CantHandleIt:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if unhandled_okay is False:
|
||||||
|
raise UnhandledCallable(
|
||||||
|
"No hooks registered capable of handling '%s'" % hookname)
|
||||||
|
|
||||||
|
|
||||||
|
def callable_runall(hookname, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Run all callables for HOOKNAME.
|
||||||
|
|
||||||
|
This method will run *all* hooks that handle this method (skipping
|
||||||
|
those that raise CantHandleIt), and will return a list of all
|
||||||
|
results.
|
||||||
|
"""
|
||||||
|
callables = PluginManager().get_hook_callables(hookname)
|
||||||
|
|
||||||
|
results = []
|
||||||
|
|
||||||
|
for callable in callables:
|
||||||
|
try:
|
||||||
|
results.append(callable(*args, **kwargs))
|
||||||
|
except CantHandleIt:
|
||||||
|
continue
|
||||||
|
|
||||||
|
return results
|
||||||
|
Loading…
x
Reference in New Issue
Block a user