middleware.py
65 lines
| 2.3 KiB
| text/x-python
|
PythonLexer
Marcin Kuzminski
|
r0 | """Pylons middleware initialization""" | ||
from beaker.middleware import CacheMiddleware, SessionMiddleware | ||||
from paste.cascade import Cascade | ||||
from paste.registry import RegistryManager | ||||
from paste.urlparser import StaticURLParser | ||||
from paste.deploy.converters import asbool | ||||
from pylons import config | ||||
from pylons.middleware import ErrorHandler, StatusCodeRedirect | ||||
from pylons.wsgiapp import PylonsApp | ||||
from routes.middleware import RoutesMiddleware | ||||
Marcin Kuzminski
|
r17 | |||
Marcin Kuzminski
|
r0 | from pylons_app.config.environment import load_environment | ||
Marcin Kuzminski
|
r12 | |||
def make_app(global_conf, full_stack = 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 | ||||
load_environment(global_conf, app_conf) | ||||
# The Pylons WSGI app | ||||
app = PylonsApp() | ||||
Marcin Kuzminski
|
r12 | # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) | ||
Marcin Kuzminski
|
r0 | # Routing/Session/Cache Middleware | ||
app = RoutesMiddleware(app, config['routes.map']) | ||||
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. | ||
app = StatusCodeRedirect(app, [400, 401, 403, 500]) | ||||
Marcin Kuzminski
|
r0 | else: | ||
Marcin Kuzminski
|
r14 | app = StatusCodeRedirect(app, [400, 401, 403, 500]) | ||
Marcin Kuzminski
|
r0 | |||
# Establish the Registry for this application | ||||
app = RegistryManager(app) | ||||
Marcin Kuzminski
|
r12 | # Static files (If running in production, and Apache or another web | ||
# server is handling this static content, remove the following 3 lines) | ||||
static_app = StaticURLParser(config['pylons.paths']['static_files']) | ||||
app = Cascade([static_app, app]) | ||||
return app | ||||
Marcin Kuzminski
|
r0 | |||