Skip to content

Commit 8d96162

Browse files
tim-schillingaaugustin
authored andcommitted
Create a compat module that will handle django and python version issues.
Moved all simple try/except ImportError cases into the compat module
1 parent bc499da commit 8d96162

16 files changed

+62
-82
lines changed

debug_toolbar/compat.py

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
"""
2+
This file exists to contain all Django and Python compatibility issues.
3+
4+
In order to avoid circular references, nothing should be imported from
5+
debug_toolbar.
6+
"""
7+
8+
try:
9+
from django.template.engine import Engine
10+
except ImportError: # < Django 1.8
11+
Engine = None
12+
from django.template.context import get_standard_processors #NOQA
13+
from django.template.loader import find_template_loader # NOQA
14+
15+
try:
16+
from importlib import import_module
17+
except ImportError: # = python 2.6
18+
from django.utils.importlib import import_module # NOQA
19+
20+
try:
21+
from collections import OrderedDict
22+
except ImportError: # < python 2.7
23+
from django.utils.datastructures import SortedDict as OrderedDict # NOQA
24+
25+
try:
26+
from django.contrib.staticfiles.testing import (
27+
StaticLiveServerTestCase as LiveServerTestCase)
28+
except ImportError: # < Django 1.7
29+
from django.test import LiveServerTestCase # NOQA
30+
31+
try:
32+
from django.db.backends import utils
33+
except ImportError: # >= Django 1.7
34+
from django.db.backends import util as utils # NOQA
35+
36+
try:
37+
from django.dispatch.dispatcher import WEAKREF_TYPES
38+
except ImportError: # >= Django 1.7
39+
import weakref
40+
WEAKREF_TYPES = weakref.ReferenceType,

debug_toolbar/management/commands/debugsqlshell.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@
44

55
# 'debugsqlshell' is the same as the 'shell'.
66
from django.core.management.commands.shell import Command # noqa
7-
try:
8-
from django.db.backends import utils
9-
except ImportError:
10-
from django.db.backends import util as utils
117

128
import sqlparse
139

10+
from debug_toolbar.compat import utils
11+
1412

1513
class PrintQueryWrapper(utils.CursorDebugWrapper):
1614
def execute(self, sql, params=()):

debug_toolbar/middleware.py

+1-4
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 re
128
import threading
139

@@ -17,6 +13,7 @@
1713

1814
from debug_toolbar.toolbar import DebugToolbar
1915
from debug_toolbar import settings as dt_settings
16+
from debug_toolbar.compat import import_module
2017

2118
_HTML_TYPES = ('text/html', 'application/xhtml+xml')
2219
# Handles python threading module bug - http://bugs.python.org/issue14308

debug_toolbar/panels/cache.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,12 @@
1818
except ImportError: # Django < 1.7
1919
CacheHandler = None
2020
original_caches = None
21-
try:
22-
from collections import OrderedDict
23-
except ImportError:
24-
from django.utils.datastructures import SortedDict as OrderedDict
2521

22+
from debug_toolbar import settings as dt_settings
23+
from debug_toolbar.compat import OrderedDict
2624
from debug_toolbar.panels import Panel
2725
from debug_toolbar.utils import (tidy_stacktrace, render_stacktrace,
2826
get_template_info, get_stack)
29-
from debug_toolbar import settings as dt_settings
3027

3128

3229
cache_called = Signal(providing_args=[

debug_toolbar/panels/headers.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
from __future__ import absolute_import, unicode_literals
22

3-
try:
4-
from collections import OrderedDict
5-
except ImportError:
6-
from django.utils.datastructures import SortedDict as OrderedDict
73
from django.utils.translation import ugettext_lazy as _
4+
5+
from debug_toolbar.compat import OrderedDict
86
from debug_toolbar.panels import Panel
97

108

debug_toolbar/panels/settings.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@
33
from django.conf import settings
44
from django.views.debug import get_safe_settings
55
from django.utils.translation import ugettext_lazy as _
6-
try:
7-
from collections import OrderedDict
8-
except ImportError:
9-
from django.utils.datastructures import SortedDict as OrderedDict
106

7+
from debug_toolbar.compat import OrderedDict
118
from debug_toolbar.panels import Panel
129

1310

debug_toolbar/panels/signals.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,17 @@
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)
106
from django.db.backends.signals import connection_created
117
from django.db.models.signals import (
128
class_prepared, pre_init, post_init, pre_save, post_save,
139
pre_delete, post_delete, post_syncdb)
14-
try:
15-
from django.dispatch.dispatcher import WEAKREF_TYPES
16-
except ImportError:
17-
import weakref
18-
WEAKREF_TYPES = weakref.ReferenceType,
10+
1911
from django.utils.translation import ugettext_lazy as _, ungettext
2012

2113
from debug_toolbar.panels import Panel
14+
from debug_toolbar.compat import import_module, WEAKREF_TYPES
2215

2316

2417
class SignalsPanel(Panel):

debug_toolbar/panels/staticfiles.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,9 @@
1313
from django.utils.encoding import python_2_unicode_compatible
1414
from django.utils.functional import LazyObject
1515
from django.utils.translation import ungettext, ugettext_lazy as _
16-
try:
17-
from collections import OrderedDict
18-
except ImportError:
19-
from django.utils.datastructures import SortedDict as OrderedDict
2016

2117
from debug_toolbar import panels
18+
from debug_toolbar.compat import OrderedDict
2219
from debug_toolbar.utils import ThreadCollector
2320

2421

debug_toolbar/panels/templates/panel.py

+1-9
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 collections import OrderedDict
5-
except ImportError:
6-
from django.utils.datastructures import SortedDict as OrderedDict
73
from os.path import normpath
84
from pprint import pformat
95

@@ -19,15 +15,11 @@
1915
from django.utils import six
2016
from django.utils.translation import ugettext_lazy as _
2117

18+
from debug_toolbar.compat import OrderedDict, Engine, get_standard_processors
2219
from debug_toolbar.panels import Panel
2320
from debug_toolbar.panels.sql.tracking import recording, SQLQueryTriggered
2421
from debug_toolbar.panels.templates import views
2522

26-
try:
27-
from django.template.engine import Engine
28-
except ImportError:
29-
Engine = None
30-
from django.template.context import get_standard_processors
3123

3224
# Monkey-patch to enable the template_rendered signal. The receiver returns
3325
# immediately when the panel is disabled to keep the overhead small.

debug_toolbar/panels/templates/views.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,8 @@
66
from django.template import TemplateDoesNotExist
77
from django.utils.safestring import mark_safe
88

9-
try:
10-
from django.template.engine import Engine
11-
except ImportError:
12-
Engine = None
13-
from django.template.loader import find_template_loader
9+
from debug_toolbar.compat import Engine, find_template_loader
10+
1411

1512
def template_source(request):
1613
"""

debug_toolbar/panels/versions.py

+1-8
Original file line numberDiff line numberDiff line change
@@ -1,19 +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 sys
84

95
import django
106
from django.conf import settings
117
from django.utils.translation import ugettext_lazy as _
12-
try:
13-
from collections import OrderedDict
14-
except ImportError:
15-
from django.utils.datastructures import SortedDict as OrderedDict
168

9+
from debug_toolbar.compat import import_module, OrderedDict
1710
from debug_toolbar.panels import Panel
1811

1912

debug_toolbar/settings.py

+2-4
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.compat import import_module
9+
1210

1311
# Always import this module as follows:
1412
# from debug_toolbar import settings [as dt_settings]

debug_toolbar/toolbar.py

+1-8
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
@@ -16,12 +12,9 @@
1612
from django.core.exceptions import ImproperlyConfigured
1713
from django.template import TemplateSyntaxError
1814
from django.template.loader import render_to_string
19-
try:
20-
from collections import OrderedDict
21-
except ImportError:
22-
from django.utils.datastructures import SortedDict as OrderedDict
2315

2416
from debug_toolbar import settings as dt_settings
17+
from debug_toolbar.compat import import_module, OrderedDict
2518

2619

2720
class DebugToolbar(object):

debug_toolbar/utils.py

+1-4
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 inspect
84
import os.path
95
import re
@@ -23,6 +19,7 @@
2319
from django.views.debug import linebreak_iter
2420

2521
from .settings import CONFIG
22+
from debug_toolbar.compat import import_module
2623

2724
# Figure out some paths
2825
django_path = os.path.realpath(os.path.dirname(django.__file__))

tests/commands/test_debugsqlshell.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44

55
from django.contrib.auth.models import User
66
from django.core import management
7-
try:
8-
from django.db.backends import utils
9-
except ImportError:
10-
from django.db.backends import util as utils
117
from django.test import TestCase
128
from django.test.utils import override_settings
139
from django.utils import six
1410

11+
from debug_toolbar.compat import utils
12+
1513

1614
@override_settings(DEBUG=True)
1715
class DebugSQLShellTestCase(TestCase):

tests/test_integration.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,11 @@
1212
except ImportError:
1313
webdriver = None
1414

15-
try:
16-
from django.contrib.staticfiles.testing import StaticLiveServerTestCase \
17-
as LiveServerTestCase
18-
except ImportError:
19-
# When we're using < Django 1.7
20-
from django.test import LiveServerTestCase
2115
from django.test import RequestFactory, TestCase
2216
from django.test.utils import override_settings
2317
from django.utils.unittest import skipIf, skipUnless
2418

19+
from debug_toolbar.compat import LiveServerTestCase
2520
from debug_toolbar.middleware import DebugToolbarMiddleware, show_toolbar
2621

2722
from .base import BaseTestCase

0 commit comments

Comments
 (0)