Archangel
=========
Archangel is a webserver designed to be fast and easy to use for personal 
usage. It was created to replace an internal webserver based off of flup for 
fcgi and wsgiref for http serving (basically anything would be an improvement) as 
well as explore the new pep-3156_/Tulip_ based library by Guido van Rossum

Archangel is designed to be 'fast'. This does not mean however that archangel 
is fast, Archangel is instead intended to explore how fast a server using an 
event loop based of tulip can be made to go and what is needed to get it there.

As an additional side effect it should serve as a light house in the fog as to 
what you should or should not do with Tulip_ (Of course it is still yet to be 
determine on which side of the divide Archangel ends up)

Tenets:
--------
Only do things when we need to:
    Do things "Just in Time"
Only do things we have to:
    Be lazy
Do it quickly:
    Go back to sleep as fast as possible

WSGI-STREAM
------------
Archangel also provides a test-bed for developing a new protocol loosely based 
off of pep-3333_ but designed for the needs of streaming and for use with 
tulip_. Due to the use of the ``yield from`` construct by tulip_ compatible 
event loops, using yield to incrementaly return a body is not possible. As 
such, an alternate interface is needed to support both writing the body as one 
whole chunk and iteratively generating the body as well as providing 
compatibility with the ideas of WSGI for 'wrapping' apps in middleware. At this 
time (version 0.1) file like proxies are being used for both the request and 
the response that can be 'corked' or paused until ``start_response`` has been 
called, preserving a similar interface to WSGI and allowing a WSGI-STREAM 
middleware to fully emulate a WSGI middleware interface

Requirements
------------
* Python 3.3 or greater
* Distutils2 (to replace setup.py, a fallback is provided)
* A copy of the Tulip_ library
* PyYaml for parsing the config files

Getting the Latest version
---------------------------
The latest version of Archangel can be obtained with mercurial/hg using the 
following command:

    hg clone http://code.pocketnix.org/archangel

Links
-----
* `Design Notes`_

.. _pep-3333: http://www.python.org/dev/peps/pep-3333/
.. _pep-3156: http://www.python.org/dev/peps/pep-3156/
.. _Tulip: https://code.google.com/p/tulip/
.. _Design Notes: http://www.pocketnix.org/posts/Archangel Design Notes: Part 1
