# HG changeset patch # User Thomas De Schampheleire # Date 2017-03-18 20:21:18 # Node ID b5a0ae670b8adf1e537db35a3755173a6927e772 # Parent 0948ff2e1c831f5e8aaa42073c783e29c0288bb1 config: move bulk of make_app to app_cfg.py In preparation of migrating to TurboGears2, where almost all setup code is in one file app_cfg.py, move the existing Pylons-based configuration to the same location. This will make it more clear which changes are really done for TurboGears2. The current move does not make functional changes, the code is moved unmodified. diff --git a/kallithea/config/app_cfg.py b/kallithea/config/app_cfg.py --- a/kallithea/config/app_cfg.py +++ b/kallithea/config/app_cfg.py @@ -32,6 +32,21 @@ from kallithea.lib.utils2 import engine_ from kallithea.model.base import init_model from kallithea.model.scm import ScmModel +from routes.middleware import RoutesMiddleware +from paste.cascade import Cascade +from paste.registry import RegistryManager +from paste.urlparser import StaticURLParser +from paste.deploy.converters import asbool + +from pylons.middleware import ErrorHandler, StatusCodeRedirect +from pylons.wsgiapp import PylonsApp + +from kallithea.lib.middleware.simplehg import SimpleHg +from kallithea.lib.middleware.simplegit import SimpleGit +from kallithea.lib.middleware.https_fixup import HttpsFixup +from kallithea.lib.middleware.sessionmiddleware import SecureSessionMiddleware +from kallithea.lib.middleware.wrapper import RequestWrapper + def setup_configuration(config, paths, app_conf, test_env, test_index): # store some globals into kallithea @@ -111,3 +126,60 @@ def setup_configuration(config, paths, a formencode.api.set_stdtranslation(languages=[config.get('lang')]) return config + +def setup_application(config, global_conf, full_stack, static_files): + + # The Pylons WSGI app + app = PylonsApp(config=config) + + # Routing/Session/Cache Middleware + app = RoutesMiddleware(app, config['routes.map'], use_method_override=False) + app = SecureSessionMiddleware(app, config) + + # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) + if asbool(config['pdebug']): + from kallithea.lib.profiler import ProfilingMiddleware + app = ProfilingMiddleware(app) + + if asbool(full_stack): + + from kallithea.lib.middleware.sentry import Sentry + from kallithea.lib.middleware.appenlight import AppEnlight + if AppEnlight and asbool(config['app_conf'].get('appenlight')): + app = AppEnlight(app, config) + elif Sentry: + app = Sentry(app, config) + + # Handle Python exceptions + app = ErrorHandler(app, global_conf, **config['pylons.errorware']) + + # Display error documents for 401, 403, 404 status codes (and + # 500 when debug is disabled) + # Note: will buffer the output in memory! + if asbool(config['debug']): + app = StatusCodeRedirect(app) + else: + app = StatusCodeRedirect(app, [400, 401, 403, 404, 500]) + + # we want our low level middleware to get to the request ASAP. We don't + # need any pylons stack middleware in them - especially no StatusCodeRedirect buffering + app = SimpleHg(app, config) + app = SimpleGit(app, config) + + # Enable https redirects based on HTTP_X_URL_SCHEME set by proxy + if any(asbool(config.get(x)) for x in ['https_fixup', 'force_https', 'use_htsts']): + app = HttpsFixup(app, config) + + app = RequestWrapper(app, config) # logging + + # Establish the Registry for this application + app = RegistryManager(app) # thread / request-local module globals / variables + + if asbool(static_files): + # Serve static files + static_app = StaticURLParser(config['pylons.paths']['static_files']) + app = Cascade([static_app, app]) + + app.config = config + + return app diff --git a/kallithea/config/middleware.py b/kallithea/config/middleware.py --- a/kallithea/config/middleware.py +++ b/kallithea/config/middleware.py @@ -15,22 +15,8 @@ Pylons middleware initialization """ -from routes.middleware import RoutesMiddleware -from paste.cascade import Cascade -from paste.registry import RegistryManager -from paste.urlparser import StaticURLParser -from paste.deploy.converters import asbool - -from pylons.middleware import ErrorHandler, StatusCodeRedirect -from pylons.wsgiapp import PylonsApp - -from kallithea.lib.middleware.simplehg import SimpleHg -from kallithea.lib.middleware.simplegit import SimpleGit -from kallithea.lib.middleware.https_fixup import HttpsFixup -from kallithea.lib.middleware.sessionmiddleware import SecureSessionMiddleware +from kallithea.config.app_cfg import setup_application from kallithea.config.environment import load_environment -from kallithea.lib.middleware.wrapper import RequestWrapper - def make_app(global_conf, full_stack=True, static_files=True, **app_conf): """Create a Pylons WSGI application and return it @@ -54,57 +40,4 @@ def make_app(global_conf, full_stack=Tru # Configure the Pylons environment config = load_environment(global_conf, app_conf) - # The Pylons WSGI app - app = PylonsApp(config=config) - - # Routing/Session/Cache Middleware - app = RoutesMiddleware(app, config['routes.map'], use_method_override=False) - app = SecureSessionMiddleware(app, config) - - # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) - if asbool(config['pdebug']): - from kallithea.lib.profiler import ProfilingMiddleware - app = ProfilingMiddleware(app) - - if asbool(full_stack): - - from kallithea.lib.middleware.sentry import Sentry - from kallithea.lib.middleware.appenlight import AppEnlight - if AppEnlight and asbool(config['app_conf'].get('appenlight')): - app = AppEnlight(app, config) - elif Sentry: - app = Sentry(app, config) - - # Handle Python exceptions - app = ErrorHandler(app, global_conf, **config['pylons.errorware']) - - # Display error documents for 401, 403, 404 status codes (and - # 500 when debug is disabled) - # Note: will buffer the output in memory! - if asbool(config['debug']): - app = StatusCodeRedirect(app) - else: - app = StatusCodeRedirect(app, [400, 401, 403, 404, 500]) - - # we want our low level middleware to get to the request ASAP. We don't - # need any pylons stack middleware in them - especially no StatusCodeRedirect buffering - app = SimpleHg(app, config) - app = SimpleGit(app, config) - - # Enable https redirects based on HTTP_X_URL_SCHEME set by proxy - if any(asbool(config.get(x)) for x in ['https_fixup', 'force_https', 'use_htsts']): - app = HttpsFixup(app, config) - - app = RequestWrapper(app, config) # logging - - # Establish the Registry for this application - app = RegistryManager(app) # thread / request-local module globals / variables - - if asbool(static_files): - # Serve static files - static_app = StaticURLParser(config['pylons.paths']['static_files']) - app = Cascade([static_app, app]) - - app.config = config - - return app + return setup_application(config, global_conf, full_stack, static_files)