diff --git a/debug_toolbar_line_profiler/panel.py b/debug_toolbar_line_profiler/panel.py index 3aa8be4..4dda0b8 100644 --- a/debug_toolbar_line_profiler/panel.py +++ b/debug_toolbar_line_profiler/panel.py @@ -12,6 +12,7 @@ from django.utils.six.moves import cStringIO from debug_toolbar.panels import Panel from django.views.generic.base import View +from django.urls import resolve from line_profiler import LineProfiler, show_func @@ -185,19 +186,22 @@ def _unwrap_closure_and_profile(self, func): if name[0] != '_' and inspect.ismethod(value): self._unwrap_closure_and_profile(value) - def process_view(self, request, view_func, view_args, view_kwargs): + + def process_request(self, request): + match = resolve(request.path) + view_func, view_args, view_kwargs = match self.view_func = view_func + self.profiler = cProfile.Profile() - args = (request,) + view_args self.line_profiler = LineProfiler() - self._unwrap_closure_and_profile(view_func) + self._unwrap_closure_and_profile(self.view_func) signals.profiler_setup.send(sender=self, profiler=self.line_profiler, view_func=view_func, view_args=view_args, view_kwargs=view_kwargs) self.line_profiler.enable_by_count() - out = self.profiler.runcall(view_func, *args, **view_kwargs) + out = self.profiler.runcall(super().process_request, request) self.line_profiler.disable_by_count() return out @@ -238,7 +242,7 @@ def add_node(self, func_list, func, max_depth, cum_time=0.1): max_depth=max_depth, cum_time=subfunc.cumtime()/16) - def process_response(self, request, response): + def generate_stats(self, request, response): if not hasattr(self, 'profiler'): return None # Could be delayed until the panel content is requested (perf. optim.) diff --git a/setup.py b/setup.py index 5b136de..adf58c8 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name='django-debug-toolbar-line-profiler', - version='0.6.1', + version='0.7.0', description='A panel for django-debug-toolbar that integrates ' + 'information from line_profiler', long_description=open('README.rst').read(),