Project description

Guava is a super lightweight and high performance web framework for Python written in C. It is totally different with other traditional Python web frameworks. Keep in mind, this project is not to revent the wheel.

If you don't like the features Guava supplied, you can use the underlying structures like **router**, **session**, **request**, **response**, **builtin web server** to construct your own web framework with the benifits of high performance which guava gives you.

I wrote an article to explain a little bit of the design of the guava framework, [Link](http://code-trick.com/guava-a-super-lightweight-high-performance-web-framework-for-python-written-in-c/).

## Status

1. Under highly active development.
2. Haven't release any stable versions, this git repo is the **Developer Preview Version**. Donot use it for production now.

I will release the stable version ASAP. I will also release the traditional web applications built on top of guava.

Anyways, you can evaluate it, hack it in advance. Don't forget to star it if you think guava can help you in the future. :)

If you want to contribute, please see the contribution section.

I will try my best to keep this README.md up to date, any time it's better if you can read the source codes.

## Philosophy of Guava

For the detailed story and design of the Guava project, please go to [My Blog](http://www.code-trick.com).

1. High performance
2. Prefer convention over configuration
3. Lightweight, only do what one web framework should do
4. Super scalability

The performance of the Guava builtin web server is good enough for serving as the standalone web server. But till now I haven't spend so much time on the security part, so maybe it's not the best time to choose this kind of deployment.

## Router

Guava has four builtin routers trying to simplify your life. For detailed documentation, please refer to the doc directory in this repo.

Each router has one mount point. All routers will composite the tree like structures. The concept of mount point is for you easily group you sub applications.

All your controllers should inherit from ```guava.controller.Controller```.

## Session

Guava already builtin two kinds of Session store solutions, one is in memory store, the other is file based store. If you want to support SSO and try to store session in MC, Redis or databases, you need to create a new class inherited from the builtin session store.

### InMemory Store

This is specially useful for debugging purpose. Each time you restarted the guava web server, all data in this kind of session store will be dropped.