Bespin Python Server

This program provides the server side functionality for Bespin. Though there is nothing Mac or Unix specific to the Bespin server, at the moment it has only been tested on Unix-like platforms.

Understanding the Code

The BespinServer is built entirely out of WSGI components (to see which packages are used, check out requirements.txt).

In development, the data is stored in an sqlite database (devdata.db). SQLAlchemy (http://www.sqlalchemy.org) manages the persistence of the data.

bespin/model.py contains the model objects and the "manager" objects that know how to store and retrieve them from the database for use by the web layer. These manager objects are inserted into the WSGI environment.

There is a very trivial "web framework" in bespin/framework.py. This provides a simple wrapper for:

  1. Handling authentication as needed (which is most URLs)
  2. Providing Request and Response objects that are simpler to use than the standard WSGI environ, start_response parameters. These are just small subclasses of WebOb's Request and Response.
  3. Providing a decorator that expresses which URL a given function responds to (wrapping the behavior of urlrelay).

Authentication is handled via Paste's AuthTKTMiddleware, which puts an authentication token into a cookie.

bespin/controllers.py contains the functions that respond to the URLs. It also contains the make_app function, which knows how to construct the WSGI application that will appear on the web.

bespin/config.py knows how to configure the system based on "profiles" such as "test", "dev" and "prod".

bespin/tests contains the unit tests.