public
Description: Turtles all the way down
Homepage: http://simonwillison.net/2009/May/19/djng/
Clone URL: git://github.com/simonw/djng.git
simonw (author)
Mon May 18 10:17:31 -0700 2009
commit  c892dddf064d5542c17119d02920ea4f5e9dd7f5
tree    b934dfc212f02a6f25dd6372e084add18980c59b
parent  77d7b7c20b8a0561b4741ef777915376db8dbb0d
djng / djng / router.py
100644 29 lines (25 sloc) 1.045 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from django.conf.urls.defaults import patterns
from django.core import urlresolvers
 
class Router(object):
    """
Convenient wrapper around Django's urlresolvers, allowing them to be used
from normal application code.
 
from django.http import HttpResponse
from django_openid.request_factory import RequestFactory
from django.conf.urls.defaults import url
router = Router(
url('^foo/$', lambda r: HttpResponse('foo'), name='foo'),
url('^bar/$', lambda r: HttpResponse('bar'), name='bar')
)
rf = RequestFactory()
print router(rf.get('/bar/'))
"""
    def __init__(self, *urlpairs):
        self.urlpatterns = patterns('', *urlpairs)
        self.resolver = urlresolvers.RegexURLResolver(r'^/', self)
    
    def handle(self, request):
        path = request.path_info
        callback, callback_args, callback_kwargs = self.resolver.resolve(path)
        return callback(request, *callback_args, **callback_kwargs)
    
    def __call__(self, request):
        return self.handle(request)