Skip to content

Commit 7d687b7

Browse files
committed
Various cleanup of utilities
1 parent 855598e commit 7d687b7

20 files changed

+450
-340
lines changed

debug_toolbar/middleware.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,16 @@
44

55
from __future__ import absolute_import, unicode_literals
66

7-
try:
8-
from importlib import import_module
9-
except ImportError: # python 2.6
10-
from django.utils.importlib import import_module
117
import re
128
import threading
139

1410
from django.conf import settings
11+
from django.utils import six
1512
from django.utils.encoding import force_text
1613

17-
from debug_toolbar.toolbar import DebugToolbar
1814
from debug_toolbar import settings as dt_settings
15+
from debug_toolbar.toolbar import DebugToolbar
16+
from debug_toolbar.utils.imports import import_string
1917

2018
_HTML_TYPES = ('text/html', 'application/xhtml+xml')
2119
# Handles python threading module bug - http://bugs.python.org/issue14308
@@ -44,10 +42,11 @@ class DebugToolbarMiddleware(object):
4442

4543
def process_request(self, request):
4644
# Decide whether the toolbar is active for this request.
47-
func_path = dt_settings.CONFIG['SHOW_TOOLBAR_CALLBACK']
48-
# Replace this with import_by_path in Django >= 1.6.
49-
mod_path, func_name = func_path.rsplit('.', 1)
50-
show_toolbar = getattr(import_module(mod_path), func_name)
45+
show_toolbar = dt_settings.CONFIG['SHOW_TOOLBAR_CALLBACK']
46+
47+
if isinstance(show_toolbar, six.string_types):
48+
show_toolbar = import_string(func_path)
49+
5150
if not show_toolbar(request):
5251
return
5352

debug_toolbar/panels/__init__.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
from __future__ import absolute_import, unicode_literals
22

3+
import operator
34
import warnings
45

56
from django.template.loader import render_to_string
7+
from django.utils.translation import ungettext
68

79
from debug_toolbar import settings as dt_settings
8-
from debug_toolbar.utils import get_name_from_obj
910
from debug_toolbar.utils.function_wrapper import FunctionWrapper
11+
from debug_toolbar.utils.imports import get_name_from_obj
1012
from debug_toolbar.utils.patch_context import PatchContext
1113

1214

@@ -203,3 +205,12 @@ def enable_instrumentation(self):
203205
def disable_instrumentation(self):
204206
for context in self._context:
205207
context.unpatch()
208+
209+
@property
210+
def nav_subtitle(self):
211+
calls = len(self.calls)
212+
duration = int(sum(((c['end'] - c['start']) for c in self.calls)) * 1000)
213+
214+
return ungettext('%(calls)d call in %(duration).2fms',
215+
'%(calls)d calls in %(duration).2fms',
216+
calls) % {'calls': calls, 'duration': duration}

debug_toolbar/panels/cache.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
1616
from django.utils.datastructures import SortedDict as OrderedDict
1717

1818
from debug_toolbar.panels import Panel
19-
from debug_toolbar.utils import (tidy_stacktrace, render_stacktrace,
20-
get_template_info, get_stack)
19+
from debug_toolbar.utils.stacktraces import (tidy_stacktrace, render_stacktrace,
20+
get_stack)
21+
from debug_toolbar.utils.templates import get_template_info
2122
from debug_toolbar import settings as dt_settings
2223

2324

debug_toolbar/panels/logging.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
threading = None
99
from django.utils.translation import ungettext, ugettext_lazy as _
1010
from debug_toolbar.panels import Panel
11-
from debug_toolbar.utils import ThreadCollector
11+
from debug_toolbar.utils.thread_collector import ThreadCollector
1212

1313
MESSAGE_IF_STRING_REPRESENTATION_INVALID = '[Could not get log message]'
1414

debug_toolbar/panels/request.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from django.utils.translation import ugettext_lazy as _
77

88
from debug_toolbar.panels import Panel
9-
from debug_toolbar.utils import get_name_from_obj
9+
from debug_toolbar.utils.imports import get_name_from_obj
1010

1111

1212
class RequestPanel(Panel):

debug_toolbar/panels/signals.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
from __future__ import absolute_import, unicode_literals
22

3-
try:
4-
from importlib import import_module
5-
except ImportError: # python 2.6
6-
from django.utils.importlib import import_module
73

84
from django.core.signals import (
95
request_started, request_finished, got_request_exception)
@@ -19,6 +15,7 @@
1915
from django.utils.translation import ugettext_lazy as _, ungettext
2016

2117
from debug_toolbar.panels import Panel
18+
from debug_toolbar.utils.imports import import_string
2219

2320

2421
class SignalsPanel(Panel):
@@ -60,9 +57,7 @@ def nav_subtitle(self):
6057
def signals(self):
6158
signals = self.SIGNALS.copy()
6259
for signal in self.toolbar.config['EXTRA_SIGNALS']:
63-
mod_path, signal_name = signal.rsplit('.', 1)
64-
signals_mod = import_module(mod_path)
65-
signals[signal_name] = getattr(signals_mod, signal_name)
60+
signals[signal_name] = import_string(signal)
6661
return signals
6762

6863
def process_response(self, request, response):

debug_toolbar/panels/sql/panel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010

1111
from debug_toolbar.panels import Panel
1212
from debug_toolbar.panels.sql.forms import SQLSelectForm
13-
from debug_toolbar.utils import render_stacktrace
1413
from debug_toolbar.panels.sql.utils import reformat_sql, contrasting_color_generator
1514
from debug_toolbar.panels.sql.tracking import wrap_cursor, unwrap_cursor
1615
from debug_toolbar.panels.sql import views
16+
from debug_toolbar.utils.stacktraces import render_stacktrace
1717

1818

1919
def get_isolation_level_display(vendor, level):

debug_toolbar/panels/sql/tracking.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
from django.utils.encoding import force_text
88
from django.utils import six
99

10-
from debug_toolbar.utils import tidy_stacktrace, get_template_info, get_stack
1110
from debug_toolbar import settings as dt_settings
11+
from debug_toolbar.utils.stacktraces import tidy_stacktrace, get_stack
12+
from debug_toolbar.utils.templates import get_template_info
1213

1314

1415
class SQLQueryTriggered(Exception):

debug_toolbar/panels/staticfiles.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from django.utils.datastructures import SortedDict as OrderedDict
2020

2121
from debug_toolbar import panels
22-
from debug_toolbar.utils import ThreadCollector
22+
from debug_toolbar.utils.thread_collector import ThreadCollector
2323

2424

2525
@python_2_unicode_compatible

debug_toolbar/panels/versions.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
from __future__ import absolute_import, unicode_literals
22

3-
try:
4-
from importlib import import_module
5-
except ImportError: # python 2.6
6-
from django.utils.importlib import import_module
73
import sys
84

95
import django
@@ -15,6 +11,7 @@
1511
from django.utils.datastructures import SortedDict as OrderedDict
1612

1713
from debug_toolbar.panels import Panel
14+
from debug_toolbar.utils.imports import import_string
1815

1916

2017
class VersionsPanel(Panel):
@@ -55,7 +52,7 @@ def gen_app_versions_1_7(self):
5552
def gen_app_versions_1_6(self):
5653
for app in list(settings.INSTALLED_APPS):
5754
name = app.split('.')[-1].replace('_', ' ').capitalize()
58-
app = import_module(app)
55+
app = import_string(app)
5956
version = self.get_app_version(app)
6057
if version:
6158
yield name, version

debug_toolbar/settings.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
from __future__ import absolute_import, unicode_literals
22

3-
try:
4-
from importlib import import_module
5-
except ImportError: # python 2.6
6-
from django.utils.importlib import import_module
73
import warnings
84

95
from django.conf import settings
106
from django.utils import six
117

8+
from debug_toolbar.utils.imports import import_string
9+
1210

1311
# Always import this module as follows:
1412
# from debug_toolbar import settings [as dt_settings]
@@ -184,9 +182,7 @@ def check_middleware():
184182
def is_middleware_class(middleware_class, middleware_path):
185183
# This could be replaced by import_by_path in Django >= 1.6.
186184
try:
187-
mod_path, cls_name = middleware_path.rsplit('.', 1)
188-
mod = import_module(mod_path)
189-
middleware_cls = getattr(mod, cls_name)
185+
middleware_cls = import_string(middleware_path)
190186
except (AttributeError, ImportError, ValueError):
191187
return
192188
return issubclass(middleware_cls, middleware_class)
@@ -225,7 +221,7 @@ def patch_root_urlconf():
225221
try:
226222
reverse('djdt:render_panel')
227223
except NoReverseMatch:
228-
urlconf_module = import_module(settings.ROOT_URLCONF)
224+
urlconf_module = import_string(settings.ROOT_URLCONF)
229225
urlconf_module.urlpatterns = [
230226
url(r'^__debug__/', include(debug_toolbar.urls)),
231227
] + urlconf_module.urlpatterns

debug_toolbar/toolbar.py

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44

55
from __future__ import absolute_import, unicode_literals
66

7-
try:
8-
from importlib import import_module
9-
except ImportError: # python 2.6
10-
from django.utils.importlib import import_module
117
import uuid
128

139
import django
@@ -22,6 +18,7 @@
2218
from django.utils.datastructures import SortedDict as OrderedDict
2319

2420
from debug_toolbar import settings as dt_settings
21+
from debug_toolbar.utils.imports import import_string
2522

2623

2724
class DebugToolbar(object):
@@ -125,23 +122,14 @@ def get_panel_classes(cls):
125122
panel_classes = []
126123
for panel_path in dt_settings.PANELS:
127124
# This logic could be replaced with import_by_path in Django 1.6.
125+
128126
try:
129-
panel_module, panel_classname = panel_path.rsplit('.', 1)
130-
except ValueError:
131-
raise ImproperlyConfigured(
132-
"%s isn't a debug panel module" % panel_path)
133-
try:
134-
mod = import_module(panel_module)
127+
panel_class = import_string(panel_path)
135128
except ImportError as e:
136129
raise ImproperlyConfigured(
137130
'Error importing debug panel %s: "%s"' %
138-
(panel_module, e))
139-
try:
140-
panel_class = getattr(mod, panel_classname)
141-
except AttributeError:
142-
raise ImproperlyConfigured(
143-
'Toolbar Panel module "%s" does not define a "%s" class' %
144-
(panel_module, panel_classname))
131+
(panel_path, e))
132+
145133
panel_classes.append(panel_class)
146134
cls._panel_classes = panel_classes
147135
return cls._panel_classes

0 commit comments

Comments
 (0)