diff options
Diffstat (limited to 'mediagoblin/app.py')
-rw-r--r-- | mediagoblin/app.py | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/mediagoblin/app.py b/mediagoblin/app.py index 0a57c091..97080ed8 100644 --- a/mediagoblin/app.py +++ b/mediagoblin/app.py @@ -27,6 +27,7 @@ from mediagoblin.tools.response import render_404 from mediagoblin.tools import request as mg_request from mediagoblin.mg_globals import setup_globals from mediagoblin.init.celery import setup_celery_from_config +from mediagoblin.init.plugins import setup_plugins from mediagoblin.init import (get_jinja_loader, get_staticdirector, setup_global_and_app_config, setup_workbench, setup_database, setup_storage, setup_beaker_cache) @@ -52,6 +53,7 @@ class MediaGoblinApp(object): setting up celery.) """ _log.info("GNU MediaGoblin %s main server starting", __version__) + _log.debug("Using config file %s", config_path) ############## # Setup config ############## @@ -63,6 +65,11 @@ class MediaGoblinApp(object): # Setup other connections / useful objects ########################################## + # Set up plugins -- need to do this early so that plugins can + # affect startup. + _log.info("Setting up plugins.") + setup_plugins() + # Set up the database self.connection, self.db = setup_database() @@ -84,7 +91,7 @@ class MediaGoblinApp(object): # Setup celery, if appropriate if setup_celery and not app_config.get('celery_setup_elsewhere'): - if os.environ.get('CELERY_ALWAYS_EAGER'): + if os.environ.get('CELERY_ALWAYS_EAGER', 'false').lower() == 'true': setup_celery_from_config( app_config, global_config, force_celery_always_eager=True) @@ -109,7 +116,7 @@ class MediaGoblinApp(object): self.meddleware = [common.import_component(m)(self) for m in meddleware.ENABLED_MEDDLEWARE] - def __call__(self, environ, start_response): + def call_backend(self, environ, start_response): request = Request(environ) ## Routing / controller loading stuff @@ -167,7 +174,13 @@ class MediaGoblinApp(object): request.matchdict = {} # in case our template expects it return render_404(request)(environ, start_response) - controller = common.import_component(route_match['controller']) + # import the controller, or if it's already a callable, call that + route_controller = route_match['controller'] + if isinstance(route_controller, unicode) \ + or isinstance(route_controller, str): + controller = common.import_component(route_match['controller']) + else: + controller = route_match['controller'] # pass the request through our meddleware classes for m in self.meddleware: @@ -184,15 +197,18 @@ class MediaGoblinApp(object): for m in self.meddleware[::-1]: m.process_response(request, response) - # Reset the sql session, so that the next request - # gets a fresh session + return response(environ, start_response) + + def __call__(self, environ, start_response): + ## If more errors happen that look like unclean sessions: + # self.db.check_session_clean() + try: + return self.call_backend(environ, start_response) + finally: + # Reset the sql session, so that the next request + # gets a fresh session self.db.reset_after_request() - except TypeError: - # We're still on mongo - pass - - return response(environ, start_response) def paste_app_factory(global_config, **app_config): |