diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 308fe289..ae94c17c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,88 +9,48 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.6', '3.7', '3.8', '3.9'] + python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] es-version: ['6', '7'] include: - python-version: 3.6 - tox_env: py36-django22-elasticsearch7 - requirements: django_2_2 - - python-version: 3.6 - tox_env: py36-django31-elasticsearch7 - requirements: django_3_1 - - python-version: 3.6 - tox_env: py36-django32-elasticsearch7 - requirements: django_3_2 + es-version: '7' + tox_env: py36-django{22,31,32}-elasticsearch7 - python-version: 3.6 - tox_env: py36-django22-elasticsearch6 - requirements: django_2_2 - - python-version: 3.6 - tox_env: py36-django31-elasticsearch6 - requirements: django_3_1 - - python-version: 3.6 - tox_env: py36-django32-elasticsearch6 - requirements: django_3_2 + es-version: '6' + tox_env: py36-django{22,31,32}-elasticsearch6 - python-version: 3.7 - tox_env: py37-django22-elasticsearch7 - requirements: django_2_2 - - python-version: 3.7 - tox_env: py37-django31-elasticsearch7 - requirements: django_3_1 - - python-version: 3.7 - tox_env: py37-django32-elasticsearch7 - requirements: django_3_2 + es-version: '7' + tox_env: py37-django{22,31,32}-elasticsearch7 - python-version: 3.7 - tox_env: py37-django22-elasticsearch6 - requirements: django_2_2 - - python-version: 3.7 - tox_env: py37-django31-elasticsearch6 - requirements: django_3_1 - - python-version: 3.7 - tox_env: py37-django32-elasticsearch6 - requirements: django_3_2 + es-version: '6' + tox_env: py37-django{22,31,32}-elasticsearch6 - python-version: 3.8 - tox_env: py38-django22-elasticsearch7 - requirements: django_2_2 - - python-version: 3.8 - tox_env: py38-django31-elasticsearch7 - requirements: django_3_1 - - python-version: 3.8 - tox_env: py38-django32-elasticsearch7 - requirements: django_3_2 + es-version: '7' + tox_env: py38-django{22,31,32,40}-elasticsearch7 - python-version: 3.8 - tox_env: py38-django22-elasticsearch6 - requirements: django_2_2 - - python-version: 3.8 - tox_env: py38-django31-elasticsearch6 - requirements: django_3_1 - - python-version: 3.8 - tox_env: py38-django32-elasticsearch6 - requirements: django_3_2 + es-version: '6' + tox_env: py38-django{22,31,32}-elasticsearch6 - python-version: 3.9 - tox_env: py39-django22-elasticsearch7 - requirements: django_2_2 - - python-version: 3.9 - tox_env: py39-django31-elasticsearch7 - requirements: django_3_1 - - python-version: 3.9 - tox_env: py39-django32-elasticsearch7 - requirements: django_3_2 + es-version: '7' + tox_env: py39-django{22,31,32,40}-elasticsearch7 - python-version: 3.9 - tox_env: py39-django22-elasticsearch6 - requirements: django_2_2 - - python-version: 3.9 - tox_env: py39-django31-elasticsearch6 - requirements: django_3_1 - - python-version: 3.9 - tox_env: py39-django32-elasticsearch6 - requirements: django_3_2 + es-version: '6' + tox_env: py39-django{22,31,32}-elasticsearch6 + + - python-version: 3.10 + es-version: '7' + tox_env: py310-django{32,40}-elasticsearch7 + + - python-version: 3.10 + es-version: '6' + tox_env: py310-django32-elasticsearch6 services: elasticsearch: @@ -115,16 +75,10 @@ jobs: python -m pip install --upgrade pip setuptools wheel pip install pip-tools python -m pip install tox - pip-compile examples/requirements/${{ matrix.requirements }}.in - pip-compile examples/requirements/elastic_${{ matrix.es-version }}x.in - pip-compile examples/requirements/test.in - python -m pip install -r examples/requirements/${{ matrix.requirements }}.txt - python -m pip install -r examples/requirements/elastic_${{ matrix.es-version }}x.txt - python -m pip install -r examples/requirements/test.txt - name: Run tests uses: nick-invision/retry@v2 with: - command: tox -e ${{ matrix.tox_env }} -- --color yes + command: tox -r -e '${{ matrix.tox_env }}' -- --color yes timeout_minutes: 15 max_attempts: 3 - name: Upload to Codecov diff --git a/README.rst b/README.rst index fa5ba9df..1f7c751d 100644 --- a/README.rst +++ b/README.rst @@ -46,8 +46,8 @@ Make sure to read `FAQ =4.0,<4.1 +django-cors-headers==3.11 +django-debug-toolbar>=3.2 +django-debug-toolbar-force>=0.1.8 +django-elasticsearch-debug-toolbar>=2.0 +django-ormex>=0.2.1 +djangorestframework>=3.13,<3.14 diff --git a/examples/requirements/django_4_0.txt b/examples/requirements/django_4_0.txt new file mode 100644 index 00000000..53ae662d --- /dev/null +++ b/examples/requirements/django_4_0.txt @@ -0,0 +1,40 @@ +# +# This file is autogenerated by pip-compile with python 3.9 +# To update, run: +# +# pip-compile django_4_0.in +# +asgiref==3.5.0 + # via django +django==4.0.2 + # via + # -r django_4_0.in + # django-cors-headers + # django-debug-toolbar + # djangorestframework +django-cors-headers==3.11 + # via -r django_4_0.in +django-debug-toolbar==3.2.4 + # via -r django_4_0.in +django-debug-toolbar-force==0.1.8 + # via -r django_4_0.in +django-elasticsearch-debug-toolbar==2.0.0 + # via -r django_4_0.in +django-nine==0.2.5 + # via + # django-debug-toolbar-force + # django-ormex +django-ormex==0.2.1 + # via -r django_4_0.in +djangorestframework==3.13.1 + # via -r django_4_0.in +pytz==2021.3 + # via djangorestframework +six==1.16.0 + # via + # django-debug-toolbar-force + # django-ormex +sqlparse==0.4.2 + # via + # django + # django-debug-toolbar diff --git a/examples/requirements/django_4_0_and_elastic_6x.in b/examples/requirements/django_4_0_and_elastic_6x.in new file mode 100644 index 00000000..973838e0 --- /dev/null +++ b/examples/requirements/django_4_0_and_elastic_6x.in @@ -0,0 +1,2 @@ +-r django_4_0.in +-r elastic_6x.in diff --git a/examples/requirements/django_4_0_and_elastic_6x.txt b/examples/requirements/django_4_0_and_elastic_6x.txt new file mode 100644 index 00000000..cbddcda2 --- /dev/null +++ b/examples/requirements/django_4_0_and_elastic_6x.txt @@ -0,0 +1,58 @@ +# +# This file is autogenerated by pip-compile with python 3.9 +# To update, run: +# +# pip-compile django_4_0_and_elastic_6x.in +# +asgiref==3.5.0 + # via django +django==4.0.2 + # via + # -r django_4_0.in + # django-cors-headers + # django-debug-toolbar + # django-nine + # djangorestframework +django-cors-headers==3.11 + # via -r django_4_0.in +django-debug-toolbar==3.2.4 + # via -r django_4_0.in +django-debug-toolbar-force==0.1.8 + # via -r django_4_0.in +django-elasticsearch-debug-toolbar==2.0.0 + # via -r django_4_0.in +django-elasticsearch-dsl @ https://github.com/django-es/django-elasticsearch-dsl/archive/dbbbfac01e4ba85c5e991fb1c0522404f170bdc0.zip + # via -r elastic_6x.in +django-nine==0.2.5 + # via + # django-debug-toolbar-force + # django-ormex +django-ormex==0.2.1 + # via -r django_4_0.in +djangorestframework==3.13.1 + # via -r django_4_0.in +elasticsearch==6.3.0 + # via + # -r elastic_6x.in + # elasticsearch-dsl +elasticsearch-dsl==6.4.0 + # via + # -r elastic_6x.in + # django-elasticsearch-dsl +python-dateutil==2.8.2 + # via elasticsearch-dsl +pytz==2021.3 + # via djangorestframework +six==1.16.0 + # via + # django-debug-toolbar-force + # django-elasticsearch-dsl + # django-ormex + # elasticsearch-dsl + # python-dateutil +sqlparse==0.4.2 + # via + # django + # django-debug-toolbar +urllib3==1.26.8 + # via elasticsearch diff --git a/examples/requirements/django_4_0_and_elastic_7x.in b/examples/requirements/django_4_0_and_elastic_7x.in new file mode 100644 index 00000000..4b4528b0 --- /dev/null +++ b/examples/requirements/django_4_0_and_elastic_7x.in @@ -0,0 +1,2 @@ +-r django_4_0.in +-r elastic_7x.in diff --git a/examples/requirements/django_4_0_and_elastic_7x.txt b/examples/requirements/django_4_0_and_elastic_7x.txt new file mode 100644 index 00000000..1bb8215a --- /dev/null +++ b/examples/requirements/django_4_0_and_elastic_7x.txt @@ -0,0 +1,60 @@ +# +# This file is autogenerated by pip-compile with python 3.9 +# To update, run: +# +# pip-compile django_4_0_and_elastic_7x.in +# +asgiref==3.5.0 + # via django +certifi==2021.10.8 + # via elasticsearch +django==4.0.2 + # via + # -r django_4_0.in + # django-cors-headers + # django-debug-toolbar + # django-nine + # djangorestframework +django-cors-headers==3.11 + # via -r django_4_0.in +django-debug-toolbar==3.2.4 + # via -r django_4_0.in +django-debug-toolbar-force==0.1.8 + # via -r django_4_0.in +django-elasticsearch-debug-toolbar==2.0.0 + # via -r django_4_0.in +django-elasticsearch-dsl==7.2.2 + # via -r elastic_7x.in +django-nine==0.2.5 + # via + # django-debug-toolbar-force + # django-ormex +django-ormex==0.2.1 + # via -r django_4_0.in +djangorestframework==3.13.1 + # via -r django_4_0.in +elasticsearch==7.10.1 + # via + # -r elastic_7x.in + # elasticsearch-dsl +elasticsearch-dsl==7.3.0 + # via + # -r elastic_7x.in + # django-elasticsearch-dsl +python-dateutil==2.8.2 + # via elasticsearch-dsl +pytz==2021.3 + # via djangorestframework +six==1.16.0 + # via + # django-debug-toolbar-force + # django-elasticsearch-dsl + # django-ormex + # elasticsearch-dsl + # python-dateutil +sqlparse==0.4.2 + # via + # django + # django-debug-toolbar +urllib3==1.26.8 + # via elasticsearch diff --git a/examples/requirements/elastic.txt b/examples/requirements/elastic.txt index 89857eef..a5c80def 100644 --- a/examples/requirements/elastic.txt +++ b/examples/requirements/elastic.txt @@ -6,7 +6,7 @@ # certifi==2021.5.30 # via elasticsearch -django-elasticsearch-dsl==7.1.4 +django-elasticsearch-dsl==7.2.2 # via -r elastic_7x.in elasticsearch==7.10.1 # via diff --git a/examples/requirements/elastic_7x.in b/examples/requirements/elastic_7x.in index b512b51a..2c1ae300 100644 --- a/examples/requirements/elastic_7x.in +++ b/examples/requirements/elastic_7x.in @@ -1,3 +1,3 @@ elasticsearch==7.10.1 #7.0.2 elasticsearch-dsl==7.3.0 #7.0.0 -django-elasticsearch-dsl==7.1.4 +django-elasticsearch-dsl==7.2.2 diff --git a/examples/requirements/elastic_7x.txt b/examples/requirements/elastic_7x.txt index a1c2f5ed..c85d5216 100644 --- a/examples/requirements/elastic_7x.txt +++ b/examples/requirements/elastic_7x.txt @@ -6,7 +6,7 @@ # certifi==2021.5.30 # via elasticsearch -django-elasticsearch-dsl==7.1.4 +django-elasticsearch-dsl==7.2.2 # via -r elastic_7x.in elasticsearch==7.10.1 # via diff --git a/examples/requirements/elastic_docker.in b/examples/requirements/elastic_docker.in index a57377db..0f248469 100644 --- a/examples/requirements/elastic_docker.in +++ b/examples/requirements/elastic_docker.in @@ -1,3 +1,3 @@ elasticsearch==7.5.1 elasticsearch-dsl==7.1.0 -django-elasticsearch-dsl==7.1.1 +django-elasticsearch-dsl==7.2.2 diff --git a/examples/simple/books/urls.py b/examples/simple/books/urls.py index aeaaeaf1..dab0c979 100644 --- a/examples/simple/books/urls.py +++ b/examples/simple/books/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from .views import ( AddAuthorsToBookView, @@ -22,66 +22,66 @@ urlpatterns = [ # Authors list - url(r'^authors/$', AuthorListView.as_view(), name='books.authors'), + re_path(r'^authors/$', AuthorListView.as_view(), name='books.authors'), # Authors list (more efficient) - url(r'^authors-values/$', + re_path(r'^authors-values/$', AuthorListValuesView.as_view(), name='books.authors_values'), # Authors list (with counts) - url(r'^authors-with-counts/$', + re_path(r'^authors-with-counts/$', AuthorListWithCountsView.as_view(), name='books.authors_with_counts'), # Authors list (values with counts) - url(r'^authors-values-with-counts/$', + re_path(r'^authors-values-with-counts/$', AuthorListValuesWithCountsView.as_view(), name='books.authors_values_with_counts'), # Authors list in JSON format - url(r'^authors-json/$', + re_path(r'^authors-json/$', AuthorListJSONView.as_view(), name='books.authors_json'), # Books list - url(r'^books/$', BookListView.as_view(), name='books.books'), + re_path(r'^books/$', BookListView.as_view(), name='books.books'), # Books list (with counts) - url(r'^books-with-counts/$', + re_path(r'^books-with-counts/$', BookListWithCountsView.as_view(), name='books.books_with_counts'), # Books list (more efficient) - url(r'^books-values/$', + re_path(r'^books-values/$', view=BookListValuesView.as_view(), name='books.books_values'), # Publishers list - url(r'^publishers/$', + re_path(r'^publishers/$', PublisherListView.as_view(), name='books.publishers'), # Publisher IDs - url(r'^publisher-ids/$', + re_path(r'^publisher-ids/$', PublisherIDsView.as_view(), name='books.publisher_ids'), # Create authors view - url(r'^create-authors/$', + re_path(r'^create-authors/$', CreateAuthorsView.as_view(), name='books.create_authors'), # Add authors to a book view - url(r'^add-authors-to-book/$', + re_path(r'^add-authors-to-book/$', AddAuthorsToBookView.as_view(), name='books.add_authors_to_book'), # Update books view - url(r'^update-books/$', + re_path(r'^update-books/$', UpdateBooksView.as_view(), name='books.update_books'), # Index view - url(r'^$', IndexView.as_view(), name='books.index'), + re_path(r'^$', IndexView.as_view(), name='books.index'), ] diff --git a/examples/simple/search_indexes/urls.py b/examples/simple/search_indexes/urls.py index dd76a992..4d6cfc5f 100644 --- a/examples/simple/search_indexes/urls.py +++ b/examples/simple/search_indexes/urls.py @@ -1,5 +1,7 @@ -from django.conf.urls import url, include +from django.urls import include, re_path + from rest_framework.routers import DefaultRouter + from .viewsets import ( AddressDocumentViewSet, AuthorDocumentViewSet, @@ -264,5 +266,5 @@ # ********************************************************** urlpatterns = [ - url(r'^', include(router.urls)), + re_path(r'^', include(router.urls)), ] diff --git a/examples/simple/urls.py b/examples/simple/urls.py index c0ac1ac6..f9a7b998 100755 --- a/examples/simple/urls.py +++ b/examples/simple/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, re_path from django.conf import settings from django.contrib import admin from django.contrib.staticfiles.urls import staticfiles_urlpatterns @@ -19,22 +19,22 @@ if versions.DJANGO_GTE_2_0: urlpatterns_args += [ - url(r'^admin/', admin.site.urls), + re_path(r'^admin/', admin.site.urls), ] else: urlpatterns_args += [ - url(r'^admin/', include(admin.site.urls)), + re_path(r'^admin/', include(admin.site.urls)), ] urlpatterns_args += [ # Books URLs - url(r'^books/', include(books_urls)), + re_path(r'^books/', include(books_urls)), # Search URLs - url(r'^search/', include(search_index_urls)), + re_path(r'^search/', include(search_index_urls)), # Home page - url(r'^$', TemplateView.as_view(template_name='home.html')), + re_path(r'^$', TemplateView.as_view(template_name='home.html')), ] urlpatterns += urlpatterns_args[:] @@ -51,5 +51,5 @@ import debug_toolbar urlpatterns = [ - url(r'^__debug__/', include(debug_toolbar.urls)), + re_path(r'^__debug__/', include(debug_toolbar.urls)), ] + urlpatterns diff --git a/scripts/compile_requirements.sh b/scripts/compile_requirements.sh index 45d308e9..d39b05ea 100755 --- a/scripts/compile_requirements.sh +++ b/scripts/compile_requirements.sh @@ -16,6 +16,9 @@ pip-compile django_3_1_and_elastic_7x.in "$@" pip-compile django_3_2.in "$@" pip-compile django_3_2_and_elastic_6x.in "$@" pip-compile django_3_2_and_elastic_7x.in "$@" +pip-compile django_4_0.in "$@" +pip-compile django_4_0_and_elastic_6x.in "$@" +pip-compile django_4_0_and_elastic_7x.in "$@" pip-compile docs.in "$@" pip-compile documentation.in "$@" pip-compile elastic.in "$@" diff --git a/setup.py b/setup.py index 3f71d134..8cb551b2 100644 --- a/setup.py +++ b/setup.py @@ -186,6 +186,7 @@ "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Environment :: Web Environment", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "License :: OSI Approved :: GNU Lesser General Public License v2 or " @@ -211,7 +212,7 @@ package_dir={'': 'src'}, packages=find_packages(where='./src'), license='GPL-2.0-only OR LGPL-2.1-or-later', - python_requires=">=2.7", + python_requires=">=3.6", install_requires=(install_requires + extras_require), tests_require=tests_require, include_package_data=True, diff --git a/tox.ini b/tox.ini index 1fae0786..10e2df93 100755 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] envlist = - py{36,37,38,39}-django{22,31,32}-elasticsearch{6,7} + py{36,37,38,39,310}-django{22,31,32,40}-elasticsearch{6,7} [testenv] envlogdir= @@ -12,12 +12,14 @@ deps = django22: -r{toxinidir}/examples/requirements/django_2_2.txt django31: -r{toxinidir}/examples/requirements/django_3_1.txt django32: -r{toxinidir}/examples/requirements/django_3_2.txt + django40: -r{toxinidir}/examples/requirements/django_4_0.txt elasticsearch6: -r{toxinidir}/examples/requirements/elastic_6x.txt elasticsearch7: -r{toxinidir}/examples/requirements/elastic_7x.txt + -r{toxinidir}/examples/requirements/test.txt ; coreapischema: -r{toxinidir}/examples/requirements/coreapi_coreschema.txt ; none: -r{toxinidir}/examples/requirements/none.txt commands = pip install -e . - pytest + python -m pytest ; {envpython} runtests.py {posargs} ; {envpython} examples/simple/manage.py test {posargs:django_elasticsearch_dsl_drf} --settings=settings.testing --traceback -v 3