Skip to main content

A micro web-framework using asyncio coroutines and chained middleware.

Project description

Growler is a web framework utilizing the new asynchronous library (asyncio) described in PEP 3156 and implemented in python 3.4. It takes a cue from nodejs’s express library, using a series of middleware to process HTTP requests. The custom chain of middleware provides an easy way to implement complex applications.

Installation

When available, growler will be installable via pip:

$ pip install growler

Optionals

There are optionals to the install command that will ensure that additional functionality is working. For example if you want to use the (quite pythonic) jade html template engine, you can install with growler by adding it to the list of optionals:

$ pip install growler[jade]

When multiple optionals are available, they will be listed here.

Usage

The core of the framework is the growler.App class, which acts as both server and handler. The App object creates a request and a response object when a client connects and passes the pair to a series of middleware specified when setting up the server. Note: The middleware are processed in the same order they are specified. Headers are parsed and each middleware added to the app (using app.use()), then routes are matched and functions called. The middleware manipulate the request and response objects and either respond to the client or pass to the next middleware in the chain. This stream/filter model makes it very easy to modularize and extend web applications with any features, backed by the power of python.

Example Usage

import asyncio

from growler import (App, create_http_server)
from growler.middleware import (Logger, Static, Renderer)


app = App('GrowlerServer')

app.use(Logger())
app.use(Renderer("views/", "jade"))

@app.get('/')
def index(req, res):
    res.render("home")

@app.get('/hello')
def hello_world(req, res):
    res.send_text("Hello World!!")

http = create_http_server(app(), host='127.0.0.1', port=8000)
asyncio.get_event_loop().run_until_complete(http.listen())

This code creates an application which is identified by ‘GrowlerServer’ (this name does nothing at this point) and has some listening options, host and port. Requests are passed to some middleware provided by the Grower package: Logger and Renderer. Logger simply prints the ip address of the connecting client, and Renderer adds the render function to the response object (used in index(req, res)).

Decorators are used to add endpoints to the application, so requests matching ‘/’ will call index(req, res) and requests matching ‘/hello’ will call hello_world(req, res).

Calling app.run() starts the asyncio event loop and calls asyncio.run_forever. This does not HAVE to be called; you can create any task which calls the coroutine app._server_listen() and pass to the event loop if you prefer.

Extensions

Growler now defines itself as a ‘namespace package’, allowing anybody to write extensions for it that can be imported via growler.my_cool_extension. It is best to place extensions in the extension path, middleware path, or abbreviated middleware path : growler.ext.my_ext, growler.middleware, growler.mw. This not mandatory (for now).

There is one ‘official’ extension, indexer which hosts an automatically generated index of a filesystem directory.

More

Currently Growler is single threaded, and not tested very well. Any submissions or comments would be appreciated.

The name Growler comes from the beer bottle due to the apparent convention of giving python micro-web-frameworks fluid container names.

License

Growler is licensed under Apache 2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

growler-0.5.0.tar.gz (26.9 kB view details)

Uploaded Source

File details

Details for the file growler-0.5.0.tar.gz.

File metadata

  • Download URL: growler-0.5.0.tar.gz
  • Upload date:
  • Size: 26.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for growler-0.5.0.tar.gz
Algorithm Hash digest
SHA256 c80b2fd402b50087b08f6b606cabf3c8a4e06e8680aefaa86836e4ef49c86357
MD5 e6695e99db9dfbae694aac80d349b155
BLAKE2b-256 4128927f89c15f108f3a43251092a41b8408fdfd3cd18101bcf0ab37b424c889

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page