# wsgi module

## Synopsis

The `wsgi` module builds upon the classes defined in the `cgi` module to allow code originally written with the WSGI protocol in mind to be used unchanged with the jonpy modules.

Note: This module is currently experimental.

## Usage: WSGI server connectors with jonpy applications

To use existing jonpy code with WSGI a server connector, simply use `wsgi.Application` to convert your `cgi.Handler` class into a WSGI "application".

Example:

`import jon.cgi as cgi
import jon.wsgi as wsgi
class Handler(cgi.Handler):
def process(self, req):
req.set_header("Content-Type", "text/plain")
req.write("Hello, world!\n")
application = wsgi.Application(Handler)`

## Usage: jonpy server connectors with WSGI applications

To use jonpy server connectors with WSGI applications, simply use `wsgi.create_handler` to convert your WSGI application into a `cgi.Handler` class.

Example:

`import jon.cgi as cgi
import jon.wsgi as wsgi
def simple_app(environ, start_response):
status = "200 OK"
response_headers = [("Content-type", "text/plain")]
start_response(status, response_headers)
return ["Hello world!\n"]
cgi.CGIRequest(wsgi.create_handler(simple_app)).process()`

## class: Application

`Application` implements a WSGI application that responds to requests by calling the specified jonpy handler.

### Public Methods

#### `__init__(self, handler_type, request_type=Request)`

`handler_type`: `cgi.Handler` subclass
`request_type`: `wsgi.Request` subclass

Creates a new WSGI application object that responds to requests by calling the provided jonpy handler. The optional `request_type` parameter can be used to specify alternative `Request` classes to use - for example, `wsgi.GZipRequest`.

## class: Request(cgi.Request)

`Request` subclasses the `cgi.Request` class and implements the methods using WSGI's interface.

## class: GZipRequest(GZipMixIn, Request)

For convenience, this class provides the standard `Request` class with the `cgi.GZipMixIn` already mixed in.

Example:

`cgi.CGIRequest(wsgi.create_handler(simple_app, wsgi.GZipRequest)).process()`

## class: Handler(cgi.Handler)

`Handler` subclasses the `cgi.Handler` class and implements the methods using WSGI's interface.

## class: DebugHandler(cgi.DebugHandlerMixIn, Handler)

This class is identical to `Handler`, except that it uses `cgi.DebugHandlerMixIn` so that if an exception is thrown by a template page then a traceback will be sent to the browser. This class may be used during development to aid debugging but should never be used in a production environment since it will leak private information to the browser.

## Globals

### Functions

#### `create_handler(application, handler_type=Handler)`

`create_handler` creates a `cgi.Handler` type that responds to requests by calling the specified WSGI application. The optional `handler_type` can be used to specify alternate parent classes for the handler - for example, `cgi.DebugHandler`.

$Id: wsgi.html,v 0416d65875b7 2014/03/05 17:37:06 jon $