public
Description: Turtles all the way down
Homepage: http://simonwillison.net/2009/May/19/djng/
Clone URL: git://github.com/simonw/djng.git
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)