X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=mediagoblin%2Fapp.py;h=580583607f32f2ca3bd7558993ec5900f469ebf2;hb=6331e927e47afb937bfde503864b164d49b05abd;hp=bb6be4d4204366d8243ccb0a954a7db4e1604f7d;hpb=55c7bf592c07e560fd38943eba4ed2f538cc4bb4;p=mediagoblin.git diff --git a/mediagoblin/app.py b/mediagoblin/app.py index bb6be4d4..58058360 100644 --- a/mediagoblin/app.py +++ b/mediagoblin/app.py @@ -25,7 +25,7 @@ from werkzeug.exceptions import HTTPException from werkzeug.routing import RequestRedirect from mediagoblin import meddleware, __version__ -from mediagoblin.tools import common, translate, template +from mediagoblin.tools import common, session, translate, template from mediagoblin.tools.response import render_http_exception from mediagoblin.tools.theme import register_themes from mediagoblin.tools import request as mg_request @@ -34,8 +34,10 @@ 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_locales, setup_workbench, setup_database, - setup_storage, setup_beaker_cache) -from mediagoblin.tools.pluginapi import PluginManager + setup_storage) +from mediagoblin.tools.pluginapi import PluginManager, hook_transform +from mediagoblin.tools.crypto import setup_crypto +from mediagoblin import notifications _log = logging.getLogger(__name__) @@ -66,10 +68,15 @@ class MediaGoblinApp(object): # Open and setup the config global_config, app_config = setup_global_and_app_config(config_path) + setup_crypto() + ########################################## # Setup other connections / useful objects ########################################## + # Setup Session Manager, not needed in celery + self.session_manager = session.SessionManager() + # load all available locales setup_locales() @@ -100,9 +107,6 @@ class MediaGoblinApp(object): # set up staticdirector tool self.staticdirector = get_staticdirector(app_config) - # set up caching - self.cache = setup_beaker_cache() - # Setup celery, if appropriate if setup_celery and not app_config.get('celery_setup_elsewhere'): if os.environ.get('CELERY_ALWAYS_EAGER', 'false').lower() == 'true': @@ -157,7 +161,8 @@ class MediaGoblinApp(object): ## Attach utilities to the request object # Do we really want to load this via middleware? Maybe? - request.session = request.environ['beaker.session'] + session_manager = self.session_manager + request.session = session_manager.load_session_from_cookie(request) # Attach self as request.app # Also attach a few utilities from request.app for convenience? request.app = self @@ -182,8 +187,11 @@ class MediaGoblinApp(object): request.urlgen = build_proxy + request.notifications = notifications + mg_request.setup_user_in_request(request) + request.controller_name = None try: found_rule, url_values = map_adapter.match(return_rule=True) request.matchdict = url_values @@ -197,6 +205,9 @@ class MediaGoblinApp(object): exc.get_description(environ))(environ, start_response) controller = endpoint_to_controller(found_rule) + # Make a reference to the controller's symbolic name on the request... + # used for lazy context modification + request.controller_name = found_rule.endpoint # pass the request through our meddleware classes try: @@ -223,9 +234,12 @@ class MediaGoblinApp(object): for m in self.meddleware[::-1]: m.process_response(request, response) except HTTPException as e: - response = render_http_exeption( + response = render_http_exception( request, e, e.get_description(environ)) + session_manager.save_session_to_cookie(request.session, + request, response) + return response(environ, start_response) def __call__(self, environ, start_response): @@ -252,8 +266,6 @@ def paste_app_factory(global_config, **app_config): 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