'Search all plugins for a function named ``hook_fn_prefix`` + ``hook_name``
and run the first with ``hook_arg`` and every function after with the
return value of the previous.
..note:
This makes plugin load order very important.
:type   hook_name:  string
:param  hook_name:  name (suffix) of the hook to run
:type   hook_arg:   any
:param  hook_arg:   the arg to be passed between hook functions
:rtype:             any
:returns:           the modified hook_arg'

def filter_hook(self, hook_name, hook_arg, *args, **kwargs):

    hook_fn_name = ''.join([self.hook_fn_prefix, hook_name])
    for (plugin_name, plugin) in self.plugins.items():
        hook_fn = getattr(plugin.module, hook_fn_name, None)
        if (hook_fn and hasattr(hook_fn, '__call__')):
            try:
                hook_arg = hook_fn(hook_arg, *args, **kwargs)
            except Exception:
                log.exception('Filter    hook    function    "%s"    failed    for    plugin    "%s"', hook_name, plugin.name)
    return hook_arg
