diff options
| -rw-r--r-- | debug_toolbar/panels/request_vars.py | 47 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/panels/request_vars.html | 2 | ||||
| -rw-r--r-- | tests/tests.py | 56 | ||||
| -rw-r--r-- | tests/urls.py | 3 | ||||
| -rw-r--r-- | tests/views.py | 7 | 
5 files changed, 67 insertions, 48 deletions
| diff --git a/debug_toolbar/panels/request_vars.py b/debug_toolbar/panels/request_vars.py index 4f85052..ade23f3 100644 --- a/debug_toolbar/panels/request_vars.py +++ b/debug_toolbar/panels/request_vars.py @@ -1,3 +1,5 @@ +from django.core.urlresolvers import resolve +from django.http import Http404  from django.utils.translation import ugettext_lazy as _  from debug_toolbar.panels import DebugPanel @@ -12,12 +14,6 @@ class RequestVarsDebugPanel(DebugPanel):      template = 'debug_toolbar/panels/request_vars.html'      has_content = True -    def __init__(self, *args, **kwargs): -        DebugPanel.__init__(self, *args, **kwargs) -        self.view_func = None -        self.view_args = None -        self.view_kwargs = None -      def nav_title(self):          return _('Request Vars') @@ -30,31 +26,32 @@ class RequestVarsDebugPanel(DebugPanel):      def process_request(self, request):          self.request = request -    def process_view(self, request, view_func, view_args, view_kwargs): -        self.view_func = view_func -        self.view_args = view_args -        self.view_kwargs = view_kwargs -      def process_response(self, request, response):          self.record_stats({              'get': [(k, self.request.GET.getlist(k)) for k in self.request.GET],              'post': [(k, self.request.POST.getlist(k)) for k in self.request.POST],              'cookies': [(k, self.request.COOKIES.get(k)) for k in self.request.COOKIES],          }) - -        if hasattr(self, 'view_func'): -            if self.view_func is not None: -                name = get_name_from_obj(self.view_func) -            else: -                name = '<no view>' - -            self.record_stats({ -                'view_func': name, -                'view_args': self.view_args, -                'view_kwargs': self.view_kwargs -            }) +        view_info = { +             'view_func': _('<no view>'), +             'view_args': 'None', +             'view_kwargs': 'None', +             'view_urlname': 'None', +         } +        try: +            match = resolve(self.request.path) +            func, args, kwargs = match +            view_info['view_func'] = get_name_from_obj(func) +            view_info['view_args'] = args +            view_info['view_kwargs'] = kwargs +            view_info['view_urlname'] = getattr(match, 'url_name', +                                                _('<unavailable>')) +        except Http404: +            pass +        self.record_stats(view_info)          if hasattr(self.request, 'session'):              self.record_stats({ -                'session': [(k, self.request.session.get(k)) for k in self.request.session.iterkeys()] -            }) +                'session': [(k, self.request.session.get(k)) +                            for k in self.request.session.iterkeys()] +                }) diff --git a/debug_toolbar/templates/debug_toolbar/panels/request_vars.html b/debug_toolbar/templates/debug_toolbar/panels/request_vars.html index 07c223a..057f4de 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/request_vars.html +++ b/debug_toolbar/templates/debug_toolbar/panels/request_vars.html @@ -5,6 +5,7 @@  	<thead>  		<tr>  			<th>{% trans 'View Function' %}</th> +			<th>{% trans 'URL Name' %}</th>  			<th>{% trans 'args' %}</th>  			<th>{% trans 'kwargs' %}</th>  		</tr> @@ -12,6 +13,7 @@  	<tbody>  		<tr>  			<td>{{ view_func }}</td> +			<td>{{ view_urlname }}</td>  			<td>{{ view_args|default:"None" }}</td>  			<td>  			{% if view_kwargs.items %} diff --git a/tests/tests.py b/tests/tests.py index fcebb50..7d6436e 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -11,6 +11,7 @@ from django.contrib.auth.models import User  from django.http import HttpResponse  from django.test import TestCase  from django.template import Template, Context +from django import VERSION  from dingus import Dingus  import thread @@ -158,31 +159,42 @@ class DebugToolbarTestCase(BaseTestCase):              middleware.process_request(request)              self.assertFalse(isinstance(request.urlconf, basestring)) -    def test_with_process_view(self): -        request = self.request -        response = self.response - -        def _test_view(request): -            return HttpResponse('') - +    def _resolve_stats(self, path): +        # takes stats from RequestVars panel +        self.request.path = path          with Settings(DEBUG=True):              panel = self.toolbar.get_panel(RequestVarsDebugPanel) -            panel.process_request(request) -            panel.process_view(request, _test_view, [], {}) -            panel.process_response(request, response) -            content = panel.content() -            self.assertTrue('tests.tests._test_view' in content, content) +            panel.process_request(self.request) +            panel.process_response(self.request, self.response) +            return self.toolbar.stats['requestvars'] + +    def test_url_resolving_positional(self): +        stats = self._resolve_stats('/resolving1/a/b/') +        if tuple(VERSION[:2]) >= (1, 3): +            self.assertEquals(stats['view_urlname'], 'positional-resolving')  # Django >= 1.3 +        else: +            self.assertEquals(stats['view_urlname'], '<unavailable>')  # Django < 1.3 +        self.assertEquals(stats['view_func'], 'tests.views.resolving_view') +        self.assertEquals(stats['view_args'], ('a', 'b')) +        self.assertEquals(stats['view_kwargs'], {}) + +    def test_url_resolving_named(self): +        stats = self._resolve_stats('/resolving2/a/b/') +        self.assertEquals(stats['view_args'], ()) +        self.assertEquals(stats['view_kwargs'], {'arg1': 'a', 'arg2': 'b'}) + +    def test_url_resolving_mixed(self): +        stats = self._resolve_stats('/resolving3/a/') +        self.assertEquals(stats['view_args'], ('a',)) +        self.assertEquals(stats['view_kwargs'], {'arg2': 'default'}) + +    def test_url_resolving_bad(self): +        stats = self._resolve_stats('/non-existing-url/') +        self.assertEquals(stats['view_urlname'], 'None') +        self.assertEquals(stats['view_args'], 'None') +        self.assertEquals(stats['view_kwargs'], 'None') +        self.assertEquals(stats['view_func'], '<no view>') -    def test_without_process_view(self): -        request = self.request -        response = self.response - -        with Settings(DEBUG=True): -            panel = self.toolbar.get_panel(RequestVarsDebugPanel) -            panel.process_request(request) -            panel.process_response(request, response) -            content = panel.content() -            self.assertTrue('<no view>' in content, content)  class DebugToolbarNameFromObjectTest(BaseTestCase):      def test_func(self): diff --git a/tests/urls.py b/tests/urls.py index 359fd8f..a556703 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -11,5 +11,8 @@ admin.autodiscover()  urlpatterns = patterns('',      # This pattern should be last to ensure tests still work +    url(r'^resolving1/(.+)/(.+)/$', 'tests.views.resolving_view', name = 'positional-resolving'), +    url(r'^resolving2/(?P<arg1>.+)/(?P<arg2>.+)/$', 'tests.views.resolving_view'), +    url(r'^resolving3/(.+)/$', 'tests.views.resolving_view', { 'arg2' : 'default' }),      url(r'^execute_sql/$', 'tests.views.execute_sql'),  ) diff --git a/tests/views.py b/tests/views.py index f989dcd..909a784 100644 --- a/tests/views.py +++ b/tests/views.py @@ -4,4 +4,9 @@ from django.http import HttpResponse  def execute_sql(request):      list(User.objects.all()) -    return HttpResponse()
\ No newline at end of file +    return HttpResponse() + +def resolving_view(request, arg1, arg2): +    # see test_url_resolving in tests.py +    return HttpResponse() + | 
