Skip to content

Commit 98308a2

Browse files
authored
Merge pull request #1226 from tim-schilling/tox-expand-db-tests
Test with postgresql and mariadb on multiple versions of Django.
2 parents a8ae50b + 0caa826 commit 98308a2

File tree

4 files changed

+81
-62
lines changed

4 files changed

+81
-62
lines changed

.travis.yml

Lines changed: 52 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,67 @@ matrix:
77
- env: TOXENV=style
88
- env: TOXENV=readme
99
- python: 3.5
10-
env: TOXENV=py35-dj111
10+
env: TOXENV=py35-dj111-sqlite
1111
- python: 3.6
12-
env: TOXENV=py36-dj111
12+
env: TOXENV=py36-dj111-sqlite
1313
- python: 3.7
14-
env: TOXENV=py37-dj111
14+
env: TOXENV=py37-dj111-sqlite
1515
- python: 3.5
16-
env: TOXENV=py35-dj22
16+
env: TOXENV=py35-dj22-sqlite
1717
- python: 3.6
18-
env: TOXENV=py36-dj22
18+
env: TOXENV=py36-dj22-sqlite
1919
- python: 3.7
20-
env: TOXENV=py37-dj22
20+
env: TOXENV=py37-dj22-sqlite
2121
- python: 3.8
22-
env: TOXENV=py38-dj22
22+
env: TOXENV=py38-dj22-sqlite
2323
- python: 3.6
24-
env: TOXENV=py36-dj30
24+
env: TOXENV=py36-dj30-sqlite
2525
- python: 3.7
26-
env: TOXENV=py37-dj30
26+
env: TOXENV=py37-dj30-sqlite
2727
- python: 3.8
28-
env: TOXENV=py38-dj30
28+
env: TOXENV=py38-dj30-sqlite
2929
- python: 3.6
30-
env: TOXENV=py36-djmaster
30+
env: TOXENV=py36-djmaster-sqlite
3131
- python: 3.7
32-
env: TOXENV=py37-djmaster
32+
env: TOXENV=py37-djmaster-sqlite
3333
- python: 3.8
34-
env: TOXENV=py38-djmaster
35-
- env: TOXENV=postgresql
34+
env: TOXENV=py38-djmaster-sqlite
35+
- python: 3.7
36+
env: TOXENV=py37-dj111-postgresql
37+
addons:
38+
postgresql: "9.5"
39+
- python: 3.8
40+
env: TOXENV=py38-dj22-postgresql
41+
addons:
42+
postgresql: "9.5"
43+
- python: 3.8
44+
env: TOXENV=py38-dj30-postgresql
3645
addons:
3746
postgresql: "9.5"
38-
- env: TOXENV=mariadb
47+
- python: 3.7
48+
env: TOXENV=py37-dj111-mariadb
49+
addons:
50+
mariadb: "10.3"
51+
script:
52+
# working around https://travis-ci.community/t/mariadb-build-error-with-xenial/3160
53+
- mysql -u root -e "DROP USER IF EXISTS 'travis'@'%';"
54+
- mysql -u root -e "CREATE USER 'travis'@'%';"
55+
- mysql -u root -e "CREATE DATABASE debug_toolbar;"
56+
- mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'travis'@'%';";
57+
- tox -v
58+
- python: 3.8
59+
env: TOXENV=py38-dj22-mariadb
60+
addons:
61+
mariadb: "10.3"
62+
script:
63+
# working around https://travis-ci.community/t/mariadb-build-error-with-xenial/3160
64+
- mysql -u root -e "DROP USER IF EXISTS 'travis'@'%';"
65+
- mysql -u root -e "CREATE USER 'travis'@'%';"
66+
- mysql -u root -e "CREATE DATABASE debug_toolbar;"
67+
- mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'travis'@'%';";
68+
- tox -v
69+
- python: 3.8
70+
env: TOXENV=py38-dj30-mariadb
3971
addons:
4072
mariadb: "10.3"
4173
script:
@@ -46,9 +78,11 @@ matrix:
4678
- mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'travis'@'%';";
4779
- tox -v
4880
allow_failures:
49-
- env: TOXENV=py36-djmaster
50-
- env: TOXENV=py37-djmaster
51-
- env: TOXENV=py38-djmaster
81+
- env: TOXENV=py36-djmaster-sqlite
82+
- env: TOXENV=py37-djmaster-sqlite
83+
- env: TOXENV=py38-djmaster-sqlite
84+
- env: TOXENV=py38-djmaster-postgresql
85+
- env: TOXENV=py38-djmaster-mariadb
5286

5387
install:
5488
- pip install tox codecov

debug_toolbar/management/commands/debugsqlshell.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
from time import time
22

3+
import django
34
import sqlparse
45
from django.core.management.commands.shell import Command # noqa
5-
from django.db.backends import utils as db_backends_utils
6+
from django.db import connection
7+
8+
if connection.vendor == "postgresql" and django.VERSION >= (3, 0, 0):
9+
from django.db.backends.postgresql import base as base_module
10+
else:
11+
from django.db.backends import utils as base_module
612

713
# 'debugsqlshell' is the same as the 'shell'.
814

915

10-
class PrintQueryWrapper(db_backends_utils.CursorDebugWrapper):
16+
class PrintQueryWrapper(base_module.CursorDebugWrapper):
1117
def execute(self, sql, params=()):
1218
start_time = time()
1319
try:
@@ -20,4 +26,4 @@ def execute(self, sql, params=()):
2026
print("{} [{:.2f}ms]".format(formatted_sql, duration))
2127

2228

23-
db_backends_utils.CursorDebugWrapper = PrintQueryWrapper
29+
base_module.CursorDebugWrapper = PrintQueryWrapper

tests/commands/test_debugsqlshell.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
import io
22
import sys
33

4+
import django
45
from django.contrib.auth.models import User
56
from django.core import management
6-
from django.db.backends import utils as db_backends_utils
7+
from django.db import connection
78
from django.test import TestCase
89
from django.test.utils import override_settings
910

11+
if connection.vendor == "postgresql" and django.VERSION >= (3, 0, 0):
12+
from django.db.backends.postgresql import base as base_module
13+
else:
14+
from django.db.backends import utils as base_module
15+
1016

1117
@override_settings(DEBUG=True)
1218
class DebugSQLShellTestCase(TestCase):
1319
def setUp(self):
14-
self.original_cursor_wrapper = db_backends_utils.CursorDebugWrapper
20+
self.original_wrapper = base_module.CursorDebugWrapper
1521
# Since debugsqlshell monkey-patches django.db.backends.utils, we can
1622
# test it simply by loading it, without executing it. But we have to
1723
# undo the monkey-patch on exit.
@@ -20,7 +26,7 @@ def setUp(self):
2026
management.load_command_class(app_name, command_name)
2127

2228
def tearDown(self):
23-
db_backends_utils.CursorDebugWrapper = self.original_cursor_wrapper
29+
base_module.CursorDebugWrapper = self.original_wrapper
2430

2531
def test_command(self):
2632
original_stdout, sys.stdout = sys.stdout, io.StringIO()

tox.ini

Lines changed: 11 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@ envlist =
33
flake8
44
style
55
readme
6-
py{35,36,37}-dj111
7-
py{35,36,37,38}-dj22
8-
py{36,37,38}-dj30
9-
py{36,37,38}-djmaster
10-
postgresql
11-
mariadb
6+
py{35,36,37}-dj111-sqlite
7+
py{35,36,37,38}-dj22-sqlite
8+
py{36,37,38}-dj30-sqlite
9+
py{36,37,38}-djmaster-sqlite
10+
py37-dj111-{postgresql,mariadb}
11+
py{37,38}-dj{22,30}-{postgresql,mariadb}
1212

1313
[testenv]
1414
deps =
1515
dj111: Django==1.11.*
1616
dj22: Django==2.2.*
1717
dj30: Django==3.0.*
18+
sqlite: mock
19+
postgresql: psycopg2-binary
20+
mariadb: mysqlclient
1821
djmaster: https://github.com/django/django/archive/master.tar.gz
1922
coverage
2023
Jinja2
@@ -23,38 +26,8 @@ deps =
2326
sqlparse
2427
setenv =
2528
PYTHONPATH = {toxinidir}
26-
whitelist_externals = make
27-
pip_pre = True
28-
commands = make coverage TEST_ARGS='{posargs:tests}'
29-
30-
[testenv:postgresql]
31-
deps =
32-
Django==1.11.*
33-
coverage
34-
Jinja2
35-
html5lib
36-
psycopg2-binary
37-
selenium<4.0
38-
sqlparse
39-
setenv =
40-
PYTHONPATH = {toxinidir}
41-
DJANGO_DATABASE_ENGINE = postgresql
42-
whitelist_externals = make
43-
pip_pre = True
44-
commands = make coverage TEST_ARGS='{posargs:tests}'
45-
46-
[testenv:mariadb]
47-
deps =
48-
Django==2.2.*
49-
coverage
50-
Jinja2
51-
html5lib
52-
mysqlclient<1.4
53-
selenium<4.0
54-
sqlparse
55-
setenv =
56-
PYTHONPATH = {toxinidir}
57-
DJANGO_DATABASE_ENGINE = mysql
29+
postgresql: DJANGO_DATABASE_ENGINE = postgresql
30+
mariadb: DJANGO_DATABASE_ENGINE = mysql
5831
whitelist_externals = make
5932
pip_pre = True
6033
commands = make coverage TEST_ARGS='{posargs:tests}'

0 commit comments

Comments
 (0)