Features ======== Testing ------- * A fixture for testing WSGI applications conveniently and in-process, in :class:`paste.fixture.TestApp` * A fixture for testing command-line applications, also in :class:`paste.fixture.TestFileEnvironment` * Check components for WSGI-compliance in :mod:`paste.lint` * Check filesystem changes, with :mod:`paste.debug.fsdiff` Server ------ * A threaded HTTP server in :mod:`paste.httpserver` * A tool for seeing and killing errant threads in the HTTP server, in :mod:`paste.debug.watchthreads` Dispatching ----------- * Chain and cascade WSGI applications (returning the first non-error response) in :mod:`paste.cascade` * Dispatch to several WSGI applications based on URL prefixes, in :mod:`paste.urlmap` * Allow applications to make subrequests and forward requests internally, in :mod:`paste.recursive` * Redirect error pages (e.g., 404 Not Found) to custom error pages, in :mod:`paste.errordocument`. Web Application --------------- * Easily deal with incoming requests and sending a response in :mod:`paste.wsgiwrappers` * Work directly with the WSGI environment in :mod:`paste.request` * Run CGI programs as WSGI applications in :mod:`paste.cgiapp` * Traverse files and load WSGI applications from ``.py`` files (or static files), in :mod:`paste.urlparser` * Serve static directories of files, also in :mod:`paste.urlparser`; also serve using the Setuptools ``pkg_resources`` resource API. * Proxy to other servers, treating external HTTP servers as WSGI applications, in :mod:`paste.proxy`. * Serve files (with support for ``If-Modified-Since``, etc) in :mod:`paste.fileapp` Tools ----- * Catch HTTP-related exceptions (e.g., ``HTTPNotFound``) and turn them into proper responses in :mod:`paste.httpexceptions` * Manage HTTP header fields with :mod:`paste.httpheaders` * Handle authentication/identification of requests in :mod:`paste.auth` * Create sessions in :mod:`paste.session` and :mod:`paste.flup_session` * Gzip responses in :mod:`paste.gzipper` * A wide variety of routines for manipulating WSGI requests and producing responses, in :mod:`paste.request`, :mod:`paste.response` and :mod:`paste.wsgilib`. * Create Apache-style logs in :mod:`paste.translogger` * Handy request and response wrappers in :mod:`paste.wsgiwrappers` * Handling of request-local module globals sanely in :mod:`paste.registry` Authentication -------------- * Authentication using cookies in :mod:`paste.auth.cookie` and :mod:`paste.auth.auth_tkt`; login form in :mod:`paste.auth.form` * Authentication using `OpenID `_ in :mod:`paste.auth.open_id`, using `CAS `_ in :mod:`paste.auth.cas` * HTTP authentication in :mod:`paste.auth.basic` and :mod:`paste.auth.digest` * Dispatch to different authentication methods based on User-Agent, in :mod:`paste.auth.multi` * Grant roles based on IP addresses, in :mod:`paste.auth.grantip` Debugging Filters ----------------- * Catch (optionally email) errors with extended tracebacks (using Zope/ZPT conventions) in :mod:`paste.exceptions` * During debugging, show tracebacks with information about each stack frame, including an interactive prompt that runs in the individual stack frames, in :mod:`paste.evalexception`. * Catch errors presenting a `cgitb `_-based output, in :mod:`paste.cgitb_catcher`. * Profile each request and append profiling information to the HTML, in :mod:`paste.debug.profile` * Capture ``print`` output and present it in the browser for debugging, in :mod:`paste.debug.prints` * Validate all HTML output from applications using the `WDG Validator `_, appending any errors or warnings to the page, in :mod:`paste.debug.wdg_validator` Other Tools ----------- * A file monitor to allow restarting the server when files have been updated (for automatic restarting when editing code) in :mod:`paste.reloader` * A class for generating and traversing URLs, and creating associated HTML code, in :mod:`paste.url` * A small templating language (for internal use) in :mod:`paste.util.template` * A class to help with loops in templates, in :mod:`paste.util.looper` * Import modules and objects given a string, in :mod:`paste.util.import_string` * Ordered dictionary that can have multiple values with the same key, in :mod:`paste.util.multidict`