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]