Files
deb-python-pecan/pecan/__init__.py

74 lines
2.3 KiB
Python

from core import (
abort, override_template, Pecan, load_app, redirect, render,
request, response
)
from decorators import expose
from hooks import RequestViewerHook
from middleware.debug import DebugMiddleware
from middleware.errordocument import ErrorDocumentMiddleware
from middleware.recursive import RecursiveMiddleware
from middleware.static import StaticFileMiddleware
from configuration import set_config, Config
from configuration import _runtime_conf as conf
try:
from logging.config import dictConfig as load_logging_config
except ImportError:
from .compat.dictconfig import dictConfig as load_logging_config
__all__ = [
'make_app', 'load_app', 'Pecan', 'request', 'response',
'override_template', 'expose', 'conf', 'set_config', 'render',
'abort', 'redirect'
]
def make_app(root, static_root=None, logging={}, debug=False,
wrap_app=None, **kw):
# A shortcut for the RequestViewerHook middleware.
if hasattr(conf, 'requestviewer'):
existing_hooks = kw.get('hooks', [])
existing_hooks.append(RequestViewerHook(conf.requestviewer))
kw['hooks'] = existing_hooks
# Instantiate the WSGI app by passing **kw onward
app = Pecan(root, **kw)
# Optionally wrap the app in another WSGI app
if wrap_app:
app = wrap_app(app)
# Configuration for serving custom error messages
if hasattr(conf.app, 'errors'):
app = ErrorDocumentMiddleware(app, conf.app.errors)
# Included for internal redirect support
app = RecursiveMiddleware(app)
# Pass logging configuration (if it exists) on to the Python logging module
if logging:
if isinstance(logging, Config):
logging = logging.as_dict()
if 'version' not in logging:
logging['version'] = 1
load_logging_config(logging)
# When in debug mode, load our exception dumping middleware
if debug:
app = DebugMiddleware(app)
# Support for serving static files (for development convenience)
if static_root:
app = StaticFileMiddleware(app, static_root)
elif static_root:
from warnings import warn
warn(
"`static_root` is only used when `debug` is True, ignoring",
RuntimeWarning
)
return app