from mediagoblin.init import (get_jinja_loader, get_staticdirector,
setup_global_and_app_config, setup_locales, setup_workbench, setup_database,
setup_storage)
-from mediagoblin.tools.pluginapi import PluginManager
+from mediagoblin.tools.pluginapi import PluginManager, hook_transform
from mediagoblin.tools.crypto import setup_crypto
raise IOError("Usable mediagoblin config not found.")
mgoblin_app = MediaGoblinApp(mediagoblin_config)
-
- for callable_hook in PluginManager().get_hook_callables('wrap_wsgi'):
- mgoblin_app = callable_hook(mgoblin_app)
+ mgoblin_app = hook_transform('wrap_wsgi', mgoblin_app)
return mgoblin_app
import sys
from celery import Celery
-from mediagoblin.tools.pluginapi import callable_runall
+from mediagoblin.tools.pluginapi import hook_runall
MANDATORY_CELERY_IMPORTS = ['mediagoblin.processing.task']
celery_app = Celery()
celery_app.config_from_object(celery_settings)
- callable_runall('celery_setup', celery_app)
+ hook_runall('celery_setup', celery_app)
def setup_celery_from_config(app_config, global_config,
from mediagoblin import app, mg_globals
from mediagoblin.init.celery import setup_celery_from_config
-from mediagoblin.tools.pluginapi import callable_runall
+from mediagoblin.tools.pluginapi import hook_runall
OUR_MODULENAME = __name__
logging.config.fileConfig(logging_conf_file)
- callable_runall('celery_logging_setup')
+ hook_runall('celery_logging_setup')
setup_logging.connect(setup_logging_from_paste_ini)
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, *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)
-
- unhandled_okay = kwargs.pop("unhandled_okay", False)
-
- 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
-
-
+#############################
## Hooks: The Next Generation
#############################