diff options
| -rw-r--r-- | debug_toolbar/panels/headers.py | 6 | ||||
| -rw-r--r-- | debug_toolbar/panels/request_vars.py | 17 | ||||
| -rw-r--r-- | debug_toolbar/panels/template.py | 5 | ||||
| -rw-r--r-- | debug_toolbar/panels/timer.py | 12 | ||||
| -rw-r--r-- | tests/test_integration.py | 10 | 
5 files changed, 30 insertions, 20 deletions
| diff --git a/debug_toolbar/panels/headers.py b/debug_toolbar/panels/headers.py index 36ecf3c..2a41081 100644 --- a/debug_toolbar/panels/headers.py +++ b/debug_toolbar/panels/headers.py @@ -49,13 +49,15 @@ class HeaderDebugPanel(DebugPanel):              self.request_headers['Cookie'] = '=> see Request Vars panel'          self.environ = OrderedDict(              (k, v) for (k, v) in wsgi_env if k in self.environ_filter) +        self.record_stats({ +            'request_headers': self.request_headers, +            'environ': self.environ, +        })      def process_response(self, request, response):          self.response_headers = OrderedDict(sorted(response.items()))          self.record_stats({ -            'request_headers': self.request_headers,              'response_headers': self.response_headers, -            'environ': self.environ,          }) diff --git a/debug_toolbar/panels/request_vars.py b/debug_toolbar/panels/request_vars.py index dc5b7b0..b5e7070 100644 --- a/debug_toolbar/panels/request_vars.py +++ b/debug_toolbar/panels/request_vars.py @@ -23,14 +23,11 @@ class RequestVarsDebugPanel(DebugPanel):      def title(self):          return _('Request Vars') -    def process_request(self, request): -        self.request = request -      def process_response(self, request, response):          self.record_stats({ -            'get': [(k, self.request.GET.getlist(k)) for k in sorted(self.request.GET)], -            'post': [(k, self.request.POST.getlist(k)) for k in sorted(self.request.POST)], -            'cookies': [(k, self.request.COOKIES.get(k)) for k in sorted(self.request.COOKIES)], +            'get': [(k, request.GET.getlist(k)) for k in sorted(request.GET)], +            'post': [(k, request.POST.getlist(k)) for k in sorted(request.POST)], +            'cookies': [(k, request.COOKIES.get(k)) for k in sorted(request.COOKIES)],          })          view_info = {              'view_func': _('<no view>'), @@ -39,7 +36,7 @@ class RequestVarsDebugPanel(DebugPanel):              'view_urlname': 'None',          }          try: -            match = resolve(self.request.path) +            match = resolve(request.path)              func, args, kwargs = match              view_info['view_func'] = get_name_from_obj(func)              view_info['view_args'] = args @@ -50,8 +47,8 @@ class RequestVarsDebugPanel(DebugPanel):              pass          self.record_stats(view_info) -        if hasattr(self.request, 'session'): +        if hasattr(request, 'session'):              self.record_stats({ -                'session': [(k, self.request.session.get(k)) -                            for k in sorted(self.request.session.keys(), key=force_text)] +                'session': [(k, request.session.get(k)) +                            for k in sorted(request.session.keys(), key=force_text)]              }) diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py index 711193e..172765a 100644 --- a/debug_toolbar/panels/template.py +++ b/debug_toolbar/panels/template.py @@ -120,14 +120,11 @@ class TemplateDebugPanel(DebugPanel):          num_templates = len(self.templates)          return _('Templates (%(num_templates)s rendered)') % {'num_templates': num_templates} -    def process_request(self, request): -        self.request = request -      def process_response(self, request, response):          context_processors = dict(              [                  ("%s.%s" % (k.__module__, k.__name__), -                    pformat(k(self.request))) for k in get_standard_processors() +                    pformat(k(request))) for k in get_standard_processors()              ]          )          template_context = [] diff --git a/debug_toolbar/panels/timer.py b/debug_toolbar/panels/timer.py index ac8a808..9a0fef3 100644 --- a/debug_toolbar/panels/timer.py +++ b/debug_toolbar/panels/timer.py @@ -32,8 +32,10 @@ class TimerDebugPanel(DebugPanel):              self._start_rusage = resource.getrusage(resource.RUSAGE_SELF)      def process_response(self, request, response): -        stats = {'total_time': (time.time() - self._start_time) * 1000} -        if self.has_resource: +        stats = {} +        if hasattr(self, '_start_time'): +            stats['total_time'] = (time.time() - self._start_time) * 1000 +        if hasattr(self, '_start_rusage'):              self._end_rusage = resource.getrusage(resource.RUSAGE_SELF)              stats['utime'] = 1000 * self._elapsed_ru('ru_utime')              stats['stime'] = 1000 * self._elapsed_ru('ru_stime') @@ -62,15 +64,17 @@ class TimerDebugPanel(DebugPanel):      def nav_subtitle(self):          stats = self.get_stats() -        if self.has_resource: +        if hasattr(self, '_start_rusage'):              utime = self._end_rusage.ru_utime - self._start_rusage.ru_utime              stime = self._end_rusage.ru_stime - self._start_rusage.ru_stime              return _('CPU: %(cum)0.2fms (%(total)0.2fms)') % {                  'cum': (utime + stime) * 1000.0,                  'total': stats['total_time']              } -        else: +        elif 'total_time' in stats:              return _('TOTAL: %0.2fms') % stats['total_time'] +        else: +            return ''      def title(self):          return _('Time') diff --git a/tests/test_integration.py b/tests/test_integration.py index 4bb0d38..a80f50c 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -12,6 +12,7 @@ from debug_toolbar.middleware import DebugToolbarMiddleware, show_toolbar  from debug_toolbar.panels.request_vars import RequestVarsDebugPanel  from .base import BaseTestCase +from .views import regular_view  rf = RequestFactory() @@ -117,6 +118,15 @@ class DebugToolbarTestCase(BaseTestCase):          self.assertEqual(stats['view_kwargs'], 'None')          self.assertEqual(stats['view_func'], '<no view>') +    # Django doesn't guarantee that process_request, process_view and +    # process_response always get called in this order. + +    def test_middleware_view_only(self): +        DebugToolbarMiddleware().process_view(self.request, regular_view, ('title',), {}) + +    def test_middleware_response_only(self): +        DebugToolbarMiddleware().process_response(self.request, self.response) +  @override_settings(DEBUG=True)  class DebugToolbarIntegrationTestCase(TestCase): | 
