simonw / djng

Turtles all the way down

djng / djng / router.py
ee2c14a2 » simonw 2009-05-09 Started to play around with... 1 from django.conf.urls.defaults import patterns
2 from django.core import urlresolvers
3
4 class Router(object):
5 """
6 Convenient wrapper around Django's urlresolvers, allowing them to be used
7 from normal application code.
8
9 from django.http import HttpResponse
10 from django_openid.request_factory import RequestFactory
11 from django.conf.urls.defaults import url
12 router = Router(
13 url('^foo/$', lambda r: HttpResponse('foo'), name='foo'),
14 url('^bar/$', lambda r: HttpResponse('bar'), name='bar')
15 )
16 rf = RequestFactory()
17 print router(rf.get('/bar/'))
18 """
19 def __init__(self, *urlpairs):
20 self.urlpatterns = patterns('', *urlpairs)
21 self.resolver = urlresolvers.RegexURLResolver(r'^/', self)
22
23 def handle(self, request):
24 path = request.path_info
25 callback, callback_args, callback_kwargs = self.resolver.resolve(path)
26 return callback(request, *callback_args, **callback_kwargs)
27
28 def __call__(self, request):
29 return self.handle(request)