decoroute 0.8.1
Pattern-matching based WSGI-compliant URL routing tool
Decorator style and pattern-matching based url routing library. No framework! Very compact. Core logic less 100 lines of code. WSGI compliant. No additional API required.
Complete example
import decoroute
app = decoroute.App(prefix='')
# pure WSGI
@app.expose('/wsgi/<id:\d+>')
@decoroute.wsgi('wsgiorg.routing_args')
def wsgi_app(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return environ['wsgiorg.routing_args']
# pass variables into **kw
def render_response(status = '200 OK', content_type = 'text/plain', add_headers = [], **context):
return status, [('Content-Type', content_type)] + add_headers, context
@app.expose('/node', id = '1')
@app.expose('/node/<id:\d+>')
def node(env, id):
return render_response(id = id)
@app.expose('/url_for')
def url_for(env):
return render_response(url = app.url_for(node, id = 666))
@app.expose('/404')
def not_found(env):
raise decoroute.NotFound()
@app.not_found
def not_found_handler(env):
return render_response(status = '404 NF', **env)
@app.render
def render(env, (status, headers, context)):
context['site_uri'] = '%s://%s' % (env['wsgi.url_scheme'], env['HTTP_HOST'])
return status, headers, ['%s=%s\n' %(k, context[k]) for k in context.keys()] # fake templating
from wsgiref.simple_server import make_server
make_server('', 6666, app).serve_forever()
Tips
If you place your views (Django term. in ror - controller) in another modules, organize code like werkzeug.
# utils.py import decoroute app = decoroute.App()
# view.py and anoter
from utils import *
@app.render
def render(env, ...)
# returns of your endpoints pass to render handler
# in render use your prefered template engine and return triple
# status, generator of response headers, generator of response body
# ( generator / iterator / list - any )
# if you use default render endpoints must be return triple
@app.not_found
# no route enpoint
# it also pass to render handler
@app.expose('/node', id = '1')
@app.expose('/node/<id:\d+>')
def node(env, id):
# endpoint passed some variables
# env is a wsgi environ
# id = '1' default value of parameter
# all parameters must be <type 'str'>
# <id:\d+> parameter pattern;
# \d+ specify regexp constraint of parameter (required)
# manage.py - main module
from utils import app
import view # and all other
if __name__ == '__main__':
# serve app here
Legal
decoroute distributed under terms of GNU LGPL v.2.1.
Copyright 2008 - present Vsevolod Balashov.
| File | Type | Py Version | Uploaded on | Size | # downloads |
|---|---|---|---|---|---|
| decoroute-0.8.1.tar.gz (md5) | Source | 2009-10-28 | 5KB | 978 | |
- Author: Vsevolod Balashov
- Home Page: http://pypi.python.org/pypi/decoroute
- Keywords: python wsgi decorator route routing tool mvc mtv web webdev www
- License: LGPL 2.1
-
Categories
- Development Status :: 3 - Alpha
- Environment :: Web Environment
- Intended Audience :: Developers
- License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)
- Natural Language :: Russian
- Operating System :: OS Independent
- Programming Language :: Python
- Topic :: Internet :: WWW/HTTP :: WSGI :: Application
- Package Index Owner: sevkin
- DOAP record: decoroute-0.8.1.xml
