diff --git a/.circleci/config.yml b/.circleci/config.yml
index 266d4328..8e282c9e 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -6,7 +6,7 @@ jobs:
parallelism: 1
docker:
- - image: circleci/python:2.7.15-jessie
+ - image: circleci/python:2.7.16-stretch
steps:
- checkout
- run:
@@ -54,7 +54,7 @@ jobs:
command: ENABLE_INTEGRATION_TESTS=True py.test tests/integration
- run:
name: Run Tox Tests
- command: tox
+ command: tox --parallel=4
workflows:
version: 2
diff --git a/.circleci/python-versions.txt b/.circleci/python-versions.txt
index a0d957fa..4e6d5c7a 100644
--- a/.circleci/python-versions.txt
+++ b/.circleci/python-versions.txt
@@ -1 +1 @@
-2.7.15 3.4.9 3.5.6 3.6.6
+2.7.16 3.5.7 3.6.9 3.7.4
diff --git a/README.md b/README.md
index e992d808..d00ba15b 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@ See http://dynamic-rest.readthedocs.org for full documentation.
- [Directory panel](#directory-panel)
- [Optimizations](#optimizations)
- [Settings](#settings)
-- [Compatibility table](#compatibility-table)
+- [Compatibility](#compatibility)
- [Contributing](#contributing)
- [License](#license)
@@ -625,87 +625,16 @@ DYNAMIC_REST = {
}
```
-# Compatibility table
-
-Not all versions of Python, Django, and DRF are compatible. Here are the combinations you can use reliably with DREST (all tested by our tox configuration):
-
-| Python | Django | DRF | OK |
-| ------ | ------ | --- | --- |
-| 2.7 | 1.8 | 3.1 | YES |
-| 2.7 | 1.8 | 3.2 | YES |
-| 2.7 | 1.8 | 3.3 | YES |
-| 2.7 | 1.8 | 3.4 | YES |
-| 2.7 | 1.9 | 3.1 | NO1 |
-| 2.7 | 1.9 | 3.2 | YES |
-| 2.7 | 1.9 | 3.3 | YES |
-| 2.7 | 1.9 | 3.4 | YES |
-| 2.7 | 1.10 | 3.2 | NO3 |
-| 2.7 | 1.10 | 3.3 | NO3 |
-| 2.7 | 1.10 | 3.4 | YES |
-| 2.7 | 1.10 | 3.5 | YES |
-| 2.7 | 1.10 | 3.6 | YES |
-| 2.7 | 1.11 | 3.4 | YES |
-| 2.7 | 1.11 | 3.5 | YES |
-| 2.7 | 1.11 | 3.6 | YES |
-| 3.3 | 1.8 | 3.1 | YES |
-| 3.3 | 1.8 | 3.2 | YES |
-| 3.3 | 1.8 | 3.3 | YES |
-| 3.3 | 1.8 | 3.4 | YES |
-| 3.3 | 1.9 | x.x | NO2 |
-| 3.3 | 1.10 | x.x | NO4 |
-| 3.3 | 1.11 | x.x | NO5 |
-| 3.4 | 1.8 | 3.1 | YES |
-| 3.4 | 1.8 | 3.2 | YES |
-| 3.4 | 1.8 | 3.3 | YES |
-| 3.4 | 1.8 | 3.4 | YES |
-| 3.4 | 1.9 | 3.1 | NO1 |
-| 3.4 | 1.9 | 3.2 | YES |
-| 3.4 | 1.9 | 3.3 | YES |
-| 3.4 | 1.9 | 3.4 | YES |
-| 3.4 | 1.10 | 3.2 | NO3 |
-| 3.4 | 1.10 | 3.3 | NO3 |
-| 3.4 | 1.10 | 3.4 | YES |
-| 3.4 | 1.10 | 3.5 | YES |
-| 3.4 | 1.10 | 3.6 | YES |
-| 3.4 | 1.11 | 3.3 | NO3 |
-| 3.4 | 1.11 | 3.4 | YES |
-| 3.4 | 1.11 | 3.5 | YES |
-| 3.5 | 1.8 | 3.1 | YES |
-| 3.5 | 1.8 | 3.2 | YES |
-| 3.5 | 1.8 | 3.3 | YES |
-| 3.5 | 1.8 | 3.4 | YES |
-| 3.5 | 1.9 | 3.1 | NO1 |
-| 3.5 | 1.9 | 3.2 | YES |
-| 3.5 | 1.9 | 3.3 | YES |
-| 3.5 | 1.9 | 3.4 | YES |
-| 3.5 | 1.10 | 3.2 | NO3 |
-| 3.5 | 1.10 | 3.3 | NO3 |
-| 3.5 | 1.10 | 3.4 | YES |
-| 3.5 | 1.10 | 3.5 | YES |
-| 3.5 | 1.10 | 3.6 | YES |
-| 3.5 | 1.11 | 3.4 | YES |
-| 3.5 | 1.11 | 3.5 | YES |
-| 3.5 | 1.11 | 3.6 | YES |
-| 3.5 | 2.0 | 3.7 | YES |
-| 3.5 | 2.0 | 3.8 | YES |
-| 3.5 | 2.0 | 3.9 | YES |
-| 3.5 | 2.1 | 3.7 | YES |
-| 3.5 | 2.1 | 3.8 | YES |
-| 3.5 | 2.1 | 3.9 | YES |
-| 3.6 | 1.11 | 3.7 | YES |
-| 3.6 | 2.0 | 3.7 | YES |
-| 3.6 | 2.1 | 3.7 | YES |
-| 3.6 | 1.11 | 3.8 | YES |
-| 3.6 | 2.0 | 3.8 | YES |
-| 3.6 | 2.1 | 3.8 | YES |
-| 3.6 | 2.0 | 3.9 | YES |
-| 3.6 | 2.1 | 3.9 | YES |
-
-* 1: Django 1.9 is not compatible with DRF 3.1
-* 2: Django 1.9 is not compatible with Python 3.3
-* 3: Django 1.10 is only compatible with DRF 3.4+
-* 4: Django 1.10 requires Python 2.7, 3.4, 3.5
-* 5: Django 1.11 requires Python 2.7, 3.4, 3.5, 3.6
+# Compatibility
+
+We actively support the following:
+
+* Python: 2.7, 3.5, 3.6, 3.7
+* Django: 1.11, 2.0, 2.2
+* Django Rest Framework: 3.4 ~ 3.10
+
+**Note:** Some combinations are not supported. For up-to-date information on actively supported/tested combinations, see the tox.ini file.
+
# Contributing
See [Contributing](CONTRIBUTING.md).
diff --git a/README.rst b/README.rst
index 57ec23b6..3c1e485b 100644
--- a/README.rst
+++ b/README.rst
@@ -40,6 +40,6 @@ Maintainers
Requirements
============
-- Python (2.7, 3.4, 3.5, 3.6)
-- Django (1.8, 1.9, 1.10, 1.11, 2.0, 2.1)
-- Django REST Framework (3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9)
+- Python (2.7, 3.5, 3.6, 3.7)
+- Django (1.11, 2.0, 2.1, 2.2)
+- Django REST Framework (3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10)
diff --git a/install_requires.txt b/install_requires.txt
index 78c78804..67ec0785 100644
--- a/install_requires.txt
+++ b/install_requires.txt
@@ -1,4 +1,5 @@
Django>=1.8,<2.0
-djangorestframework>=3.1.0,<3.8
+djangorestframework>=3.1.0,<3.10
inflection==0.3.1
requests
+pytz
diff --git a/install_requires_python3.txt b/install_requires_python3.txt
index beb353fa..ebeac85b 100644
--- a/install_requires_python3.txt
+++ b/install_requires_python3.txt
@@ -1,4 +1,4 @@
-Django>=1.8,<2.2
-djangorestframework>=3.1.0,<3.10
+Django>=1.8,<2.3
+djangorestframework>=3.1.0,<3.11
inflection==0.3.1
requests
diff --git a/requirements.benchmark.txt b/requirements.benchmark.txt
index 950a7145..e6cf3575 100644
--- a/requirements.benchmark.txt
+++ b/requirements.benchmark.txt
@@ -10,4 +10,4 @@ pytest==2.7.2
psycopg2==2.5.1
tox-pyenv==1.0.2
tox==2.3.1
-djay==0.0.4
+djay==0.0.8
diff --git a/requirements.test.txt b/requirements.test.txt
index df4a92f6..5caa5be8 100644
--- a/requirements.test.txt
+++ b/requirements.test.txt
@@ -10,4 +10,4 @@ pytest==3.7.1
psycopg2==2.7.5
tox-pyenv==1.1.0
tox==3.2.1
-djay==0.0.4
+djay==0.0.8
diff --git a/requirements.txt b/requirements.txt
index b7041354..443c4ddb 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -8,5 +8,5 @@ pytest-sugar==0.9.0
pytest==3.2.5 # last supported version python 2
psycopg2==2.7.3.2
tox-pyenv==1.1.0
-tox==2.9.1
-djay==0.0.4
+tox==3.13.2
+djay==0.0.8
diff --git a/tests/integration/test_blueprints.py b/tests/integration/test_blueprints.py
index c0e57db6..f552c2bd 100644
--- a/tests/integration/test_blueprints.py
+++ b/tests/integration/test_blueprints.py
@@ -27,7 +27,7 @@ def test_blueprints(self):
# generate an API endpoint for the generated model
application.execute('generate api v0 foo --not-interactive')
# start the server
- server = application.execute('serve 9123', async=True)
+ server = application.execute('serve 9123', run_async=True)
time.sleep(2)
# verify a simple POST flow for the "foo" resource
diff --git a/tox.ini b/tox.ini
index 443c56ed..c21f3c52 100644
--- a/tox.ini
+++ b/tox.ini
@@ -4,31 +4,26 @@ addopts=--tb=short
[tox]
envlist =
py27-lint,
- {py27,py34,py35}-django18-drf{31,32,33,34},
- {py27,py34,py35}-django111-drf{34,35,36,37},
- {py35}-django{20,21}-drf{37,38,39},
- {py36}-django{20,21}-drf{38,39},
+ {py27,py35,py36}-django111-drf{34,35,36,37,39},
+ {py35}-django{20,21,22}-drf{37,38,39,310},
+ {py36,py37}-django{20,21,22}-drf{38,39,310},
[testenv]
commands = ./runtests.py --fast {posargs} --coverage -rw
setenv =
PYTHONDONTWRITEBYTECODE=1
deps =
- django18: Django==1.8.14
- django19: Django==1.9.9
- django110: Django==1.10.0
- django111: Django==1.11.2
- django20: Django==2.0.1
- django21: Django==2.1.8
- drf31: djangorestframework==3.1.0
- drf32: djangorestframework==3.2.0
- drf33: djangorestframework==3.3.0
+ django111: Django==1.11.7
+ django20: Django==2.0.13
+ django21: Django==2.1.10
+ django22: Django==2.2.3
drf34: djangorestframework==3.4.0
drf35: djangorestframework==3.5.0
drf36: djangorestframework==3.6.2
drf37: djangorestframework==3.7.7
drf38: djangorestframework==3.8.2
- drf39: djangorestframework==3.9.2
+ drf39: djangorestframework==3.9.4
+ drf310: djangorestframework==3.10.2
-rrequirements.test.txt
[testenv:py27-lint]