middleware.py
70 lines
| 2.5 KiB
| text/x-python
|
PythonLexer
Marcin Kuzminski
|
r0 | """Pylons middleware initialization""" | ||
r43 | from beaker.middleware import SessionMiddleware | |||
Marcin Kuzminski
|
r0 | 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 routes.middleware import RoutesMiddleware | ||||
Marcin Kuzminski
|
r41 | from paste.auth.basic import AuthBasicHandler | ||
Marcin Kuzminski
|
r0 | from pylons_app.config.environment import load_environment | ||
Marcin Kuzminski
|
r41 | from pylons_app.lib.auth import authfunc | ||
Marcin Kuzminski
|
r12 | |||
r43 | def make_app(global_conf, full_stack=True, static_files=True, **app_conf): | |||
Marcin Kuzminski
|
r0 | """Create a Pylons WSGI application and return it | ||
``global_conf`` | ||||
The inherited configuration for this application. Normally from | ||||
the [DEFAULT] section of the Paste ini file. | ||||
``full_stack`` | ||||
Marcin Kuzminski
|
r12 | Whether or not this application provides a full WSGI stack (by | ||
default, meaning it handles its own exceptions and errors). | ||||
Disable full_stack when this application is "managed" by | ||||
another WSGI middleware. | ||||
Marcin Kuzminski
|
r0 | |||
``app_conf`` | ||||
The application's local configuration. Normally specified in | ||||
the [app:<name>] section of the Paste ini file (where <name> | ||||
defaults to main). | ||||
""" | ||||
# Configure the Pylons environment | ||||
r43 | config = load_environment(global_conf, app_conf) | |||
Marcin Kuzminski
|
r0 | |||
# The Pylons WSGI app | ||||
r43 | app = PylonsApp(config=config) | |||
Marcin Kuzminski
|
r0 | |||
Marcin Kuzminski
|
r12 | # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) | ||
Marcin Kuzminski
|
r0 | # Routing/Session/Cache Middleware | ||
app = RoutesMiddleware(app, config['routes.map']) | ||||
Marcin Kuzminski
|
r21 | app = SessionMiddleware(app, config) | ||
Marcin Kuzminski
|
r41 | app = AuthBasicHandler(app, config['repos_name'] + ' mercurial repository', authfunc) | ||
Marcin Kuzminski
|
r0 | if asbool(full_stack): | ||
# 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) | ||||
if asbool(config['debug']): | ||||
Marcin Kuzminski
|
r14 | #don't handle 404, since mercurial does it for us. | ||
Marcin Kuzminski
|
r49 | app = StatusCodeRedirect(app, [400, 401, 403]) | ||
Marcin Kuzminski
|
r0 | else: | ||
Marcin Kuzminski
|
r14 | app = StatusCodeRedirect(app, [400, 401, 403, 500]) | ||
Marcin Kuzminski
|
r41 | |||
Marcin Kuzminski
|
r0 | # Establish the Registry for this application | ||
app = RegistryManager(app) | ||||
r43 | if asbool(static_files): | |||
# Serve static files | ||||
static_app = StaticURLParser(config['pylons.paths']['static_files']) | ||||
app = Cascade([static_app, app]) | ||||
app.config = config | ||||
Marcin Kuzminski
|
r12 | return app | ||
Marcin Kuzminski
|
r0 | |||