gargant.dispatch
a flexible dispatcher for WSGI
@hirokiky
@hirokiky
Contributing to Django, django-localflavor
Admin of djangoproject.jp
BePROUD Inc
Talk about pure WSGI library
Not Django
Pure WSGI dispatcher
urlrelay
example code by WSGI.org
WebDispatch
gargant.dispatch
A dispatcher for WSGI application.
now available on PyPI
2.7, 3.3 support
Basic usage
Creating tree
>>> from gargant.dispatch import Node, path_matching
>>> from path.to.yours import wsgi_app
>>> tree = Node((path_matching(['']),),
...             case=wsgi_app,
...             name='first')
            
Base setting (a.k.a Routing)
path.to.yours.wsgi_app will be called when PATH_INFO='/'
Basic usage
And creating WSGI app
>>> from wsgiref.simple_server import make_server
>>> from gargant.dispatch import make_wsgi_app
>>> app = make_wsgi_app(tree)
>>> httpd = make_server('', 8000, app)
>>> httpb.serve_forever()
            
Node
gargant.dispatch.Node is not just for creating a WSGI application.
>>> tree = Node((path_matching(['']),),
...             case='dolls')
>>> node = tree({'PATH_INFO': '/'})
>>> node.case  # 'dolls'
            
Hierarchy
>>> tree = Node((path_matching(['']),),
...             case='dolls',
...             children=(
...                 Node((path_matching['fifth']),
...                      case='shinku'),
...             ))
>>>
>>> node = tree({'PATH_INFO': '/fifth'})
>>> node.case  # 'shinku'
>>> node = tree({'PATH_INFO': '/'})
>>> node.case  # 'dolls'
            
Matching
matchings is not only path_matching
>>> tree = Node((path_matching(['']),
...             method_matching('get'),
...             lambda environ: True),
...             case='dolls',
...             )
>>>
>>> node = tree({'PATH_INFO': '/',
...              'REQUEST_METHOD': 'GET'})
>>> node.case  # 'dolls'
            
matchings return function handling environ
All of matchings return values (as bool True), the node will be
matched
URL args
node.metched is values returned by matchings
>>> tree = Node((path_matching(['']),),
...             case='doll_list',
...             children=(
...                 Node((path_matching(['{doll}']),),
...                       case='doll_detail',
...                 ),
...             ))
>>>
>>> node = tree({'PATH_INFO': '/first'})
>>> node.case  # 'doll_detail'
>>> node.matched[0]['doll']  # 'first'
            
and more...
Adaptation of each path
iteration leaf node to root node
Getting URL from node.name (future)
Let's write dispatcher
gargant.dispach is experimental/for education project
please give me your feedback
thanks
gargant.dispatch
@hirokiky

gargant.dispatch, a flexible dispatcher for WSGI