Lastest release
Introduction
Storm is a fast, small and powerful object-relational mapper. Try it to use in web-aware applications.
WSGI application mainly miltithreaded, but Store object is not thread safe.
Middlestorm middleware manage Store objects (one per thread) and add it into environ dictonary.
Simple example
- There are 3 ways to create middleware:
- class
- decorator
- Paste configuration
Class middleware:
from wsgiref.simple_server import make_server from storm.database import create_database from middlestorm import MiddleStorm def storm_app(environ, start_response): store = environ['storm.store'] # ... db = create_database('postgres://user:password@host/base') app = MiddleStorm(storm_app, db) make_server('', 8000, app).serve_forever()
Decorator middleware:
from wsgiref.simple_server import make_server from storm.database import create_database import middlestorm @middlestorm.decorator(create_database('postgres://user:password@host/base')) def storm_app(environ, start_response): store = environ['storm.store'] # ... make_server('', 8000, storm_app).serve_forever()
To create middleware via Paste configuration, add a stanza to the .ini file:
[filter:middlestorm] use = middlestorm#middlestorm db_uri = sqlite:myapp.db
and then add that filter to the Paste pipeline (again, in the .ini file):
[pipeline:main] pipeline = middlestorm myapp
By default Store placed in variable storm.store. This can be customized:
app = MiddleStorm(storm_app, db, key='custom.mystore')
or decorator style:
@middlestorm.decorator(db, key='custom.mystore') def storm_app(environ, start_response): store = environ['custom.mystore']
or in the Paste configuration:
[filter:middlestorm] use = middlestorm#middlestorm db_uri = sqlite:myapp.db key = myapp.store
Legal
middlestorm distributed under terms of GNU LGPL v.2.1.
Copyright 2007 - present Vsevolod Balashov.
Links
Source code of middlestorm. Arch Linux PKGBUILD.