From 1974618e29229df64fdf61918a5d7da141d95c2c Mon Sep 17 00:00:00 2001 From: Paris Kolios Date: Wed, 18 Oct 2017 10:53:46 +0200 Subject: [PATCH 1/4] Allow compatibility with DRF 3.7 --- README.rst | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index aa97d8d4..d6f2fcca 100644 --- a/README.rst +++ b/README.rst @@ -39,7 +39,7 @@ Compatibility with DRF, Django and Python =============== ============================ ==================== ================================== DRF-gis version DRF version Django version Python version -**0.11.x** **3.1** to **3.6** **1.7** to **1.11** **2.7** to **3.6** +**0.11.x** **3.1** to **3.7** **1.7** to **1.11** **2.7** to **3.6** **0.10.x** **3.1** to **3.3** **1.7** to **1.9** **2.7** to **3.5** **0.9.6** **3.1** to **3.2** **1.5** to **1.8** **2.6** to **3.5** **0.9.5** **3.1** to **3.2** **1.5** to **1.8** **2.6** to **3.4** diff --git a/requirements.txt b/requirements.txt index ba1aac69..d04748e9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ six -djangorestframework>=3.3,<3.7 +djangorestframework>=3.3,<3.8 From 39c9781d7b64cddfb4f88781e3e2365ced0b6932 Mon Sep 17 00:00:00 2001 From: Paris Kolios Date: Wed, 18 Oct 2017 12:04:53 +0200 Subject: [PATCH 2/4] Fix tests views DjangoFilterBackend import --- tests/django_restframework_gis_tests/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/django_restframework_gis_tests/views.py b/tests/django_restframework_gis_tests/views.py index 4f1e0126..7333b7d5 100644 --- a/tests/django_restframework_gis_tests/views.py +++ b/tests/django_restframework_gis_tests/views.py @@ -1,5 +1,5 @@ +from django_filters.rest_framework import DjangoFilterBackend from rest_framework import generics -from rest_framework.filters import DjangoFilterBackend from rest_framework_gis.filters import * from rest_framework_gis.pagination import GeoJsonPagination From 9e574967dc64a73aa2dfb647c8adaae40cb36826 Mon Sep 17 00:00:00 2001 From: Paris Kolios Date: Wed, 18 Oct 2017 15:12:10 +0200 Subject: [PATCH 3/4] Drop support for Django 1.8 --- .travis.yml | 4 ---- README.rst | 1 + tox.ini | 3 +-- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 713f1809..48843ce9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,8 +18,6 @@ matrix: env: TOXENV=py36-django110 - python: 3.6 env: TOXENV=py36-django19 - - python: 3.6 - env: TOXENV=py36-django18 - python: 3.5 env: TOXENV=py35-django110 @@ -33,8 +31,6 @@ matrix: env: TOXENV=py27-django110 - python: 2.7 env: TOXENV=py27-django19 - - python: 2.7 - env: TOXENV=py27-django18 branches: only: diff --git a/README.rst b/README.rst index d6f2fcca..67e695a0 100644 --- a/README.rst +++ b/README.rst @@ -39,6 +39,7 @@ Compatibility with DRF, Django and Python =============== ============================ ==================== ================================== DRF-gis version DRF version Django version Python version +**0.12.x** **3.1** to **3.7** **1.9** to **1.11** **2.7** to **3.6** **0.11.x** **3.1** to **3.7** **1.7** to **1.11** **2.7** to **3.6** **0.10.x** **3.1** to **3.3** **1.7** to **1.9** **2.7** to **3.5** **0.9.6** **3.1** to **3.2** **1.5** to **1.8** **2.6** to **3.5** diff --git a/tox.ini b/tox.ini index 0c284adc..653e2d5f 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py{27,34,35,36,py,py3}-django{18,19,110,111}{,-pytest} +envlist = py{27,34,35,36,py,py3}-django{19,110,111}{,-pytest} [testenv] usedevelop = true @@ -13,7 +13,6 @@ commands = {env:DRFG_TEST_RUNNER} {posargs:tests/django_restframework_gis_tests} deps = - django18: Django>=1.8,<1.9 django19: Django>=1.9,<1.10 django110: Django>=1.10,<1.11 django111: Django>=1.11,<2.0 From ecfb2f6447a79c4e1f6bfb8329de70036d64f16a Mon Sep 17 00:00:00 2001 From: Nicolas Delaby Date: Fri, 20 Oct 2017 16:25:22 +0200 Subject: [PATCH 4/4] Bring compatibility with django 2.0 along the way drop django1.9 and 1.10 --- .gitignore | 2 +- .travis.yml | 33 ++++++++----------- README.rst | 2 +- rest_framework_gis/fields.py | 4 +-- rest_framework_gis/filters.py | 19 +++++++---- .../django_restframework_gis_tests/models.py | 1 - .../test_bbox.py | 5 ++- .../test_filters.py | 5 ++- .../test_performance.py | 5 ++- tests/django_restframework_gis_tests/tests.py | 5 ++- tests/urls.py | 7 ++-- tox.ini | 7 ++-- 12 files changed, 55 insertions(+), 40 deletions(-) diff --git a/.gitignore b/.gitignore index 1652c5dc..894d4cf4 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,4 @@ tests/static/ /htmlcov __pycache__/ *.pyc - +.tox/ diff --git a/.travis.yml b/.travis.yml index 48843ce9..2004988c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,25 +12,20 @@ services: matrix: include: - - python: 3.6 - env: TOXENV=py36-django111 - - python: 3.6 - env: TOXENV=py36-django110 - - python: 3.6 - env: TOXENV=py36-django19 - - - python: 3.5 - env: TOXENV=py35-django110 - - - python: 3.4 - env: TOXENV=py34-django110 - - - python: 2.7 - env: TOXENV=py27-django111 - - python: 2.7 - env: TOXENV=py27-django110 - - python: 2.7 - env: TOXENV=py27-django19 + - env: TOXENV=py27-django111 + python: 2.7 + - env: TOXENV=py34-django111 + python: 3.4 + - env: TOXENV=py35-django111 + python: 3.5 + - env: TOXENV=py36-django111 + python: 3.6 + - env: TOXENV=py34-django20 + python: 3.4 + - env: TOXENV=py35-django20 + python: 3.5 + - env: TOXENV=py36-django20 + python: 3.6 branches: only: diff --git a/README.rst b/README.rst index 67e695a0..404909dd 100644 --- a/README.rst +++ b/README.rst @@ -39,7 +39,7 @@ Compatibility with DRF, Django and Python =============== ============================ ==================== ================================== DRF-gis version DRF version Django version Python version -**0.12.x** **3.1** to **3.7** **1.9** to **1.11** **2.7** to **3.6** +**0.12.x** **3.1** to **3.7** **1.9** to **2.0** **2.7** to **3.6** **0.11.x** **3.1** to **3.7** **1.7** to **1.11** **2.7** to **3.6** **0.10.x** **3.1** to **3.3** **1.7** to **1.9** **2.7** to **3.5** **0.9.6** **3.1** to **3.2** **1.5** to **1.8** **2.6** to **3.5** diff --git a/rest_framework_gis/fields.py b/rest_framework_gis/fields.py index 8eff21e5..407bae2f 100644 --- a/rest_framework_gis/fields.py +++ b/rest_framework_gis/fields.py @@ -3,7 +3,7 @@ from collections import OrderedDict from django.contrib.gis.geos import GEOSGeometry, GEOSException -from django.contrib.gis.gdal import OGRException +from django.contrib.gis.gdal import GDALException from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ from rest_framework.fields import Field, SerializerMethodField @@ -38,7 +38,7 @@ def to_internal_value(self, value): value = json.dumps(value) try: return GEOSGeometry(value) - except (ValueError, GEOSException, OGRException, TypeError): + except (ValueError, GEOSException, GDALException, TypeError): raise ValidationError(_('Invalid format: string or unicode input unrecognized as GeoJSON, WKT EWKT or HEXEWKB.')) def validate_empty_values(self, data): diff --git a/rest_framework_gis/filters.py b/rest_framework_gis/filters.py index 8b27d388..596cafbb 100644 --- a/rest_framework_gis/filters.py +++ b/rest_framework_gis/filters.py @@ -18,13 +18,18 @@ 'restframework-gis filters depend on package "django-filter" ' 'which is missing. Install with "pip install django-filter".' ) - -try: # pragma: no cover - # django >= 1.8 - from django.contrib.gis.db.models.lookups import gis_lookups -except ImportError: # pragma: no cover - # django <= 1.7 - gis_lookups = models.sql.query.ALL_TERMS +try: + # Django >= 2.0 + from django.contrib.gis.db.models.fields import BaseSpatialField +except ImportError: + try: # pragma: no cover + # django >= 1.8,<2.0 + from django.contrib.gis.db.models.lookups import gis_lookups + except ImportError: # pragma: no cover + # django <= 1.7 + gis_lookups = models.sql.query.ALL_TERMS +else: + gis_lookups = BaseSpatialField.get_lookups() __all__ = [ diff --git a/tests/django_restframework_gis_tests/models.py b/tests/django_restframework_gis_tests/models.py index 278bfe1a..7de18002 100644 --- a/tests/django_restframework_gis_tests/models.py +++ b/tests/django_restframework_gis_tests/models.py @@ -14,7 +14,6 @@ class BaseModel(models.Model): slug = models.SlugField(max_length=128, unique=True, blank=True) timestamp = models.DateTimeField(null=True, blank=True) geometry = models.GeometryField() - objects = models.GeoManager() class Meta: abstract = True diff --git a/tests/django_restframework_gis_tests/test_bbox.py b/tests/django_restframework_gis_tests/test_bbox.py index e602789d..510ba1e6 100644 --- a/tests/django_restframework_gis_tests/test_bbox.py +++ b/tests/django_restframework_gis_tests/test_bbox.py @@ -1,7 +1,10 @@ import json from django.test import TestCase -from django.core.urlresolvers import reverse +try: + from django.urls import reverse +except ImportError: + from django.core.urlresolvers import reverse from django.core.exceptions import ImproperlyConfigured from rest_framework_gis import serializers as gis_serializers diff --git a/tests/django_restframework_gis_tests/test_filters.py b/tests/django_restframework_gis_tests/test_filters.py index 4e33ea12..431e7f12 100644 --- a/tests/django_restframework_gis_tests/test_filters.py +++ b/tests/django_restframework_gis_tests/test_filters.py @@ -6,7 +6,10 @@ from django.conf import settings from django.test import TestCase from django.contrib.gis.geos import GEOSGeometry, Polygon -from django.core.urlresolvers import reverse +try: + from django.urls import reverse +except ImportError: + from django.core.urlresolvers import reverse from .models import Location diff --git a/tests/django_restframework_gis_tests/test_performance.py b/tests/django_restframework_gis_tests/test_performance.py index 6286db21..d6625c50 100644 --- a/tests/django_restframework_gis_tests/test_performance.py +++ b/tests/django_restframework_gis_tests/test_performance.py @@ -7,7 +7,10 @@ # or by setting ``settings.TEST_PERFORMANCE`` to ``True`` if 'django_restframework_gis_tests.test_performance' in sys.argv or settings.TEST_PERFORMANCE: from django.test import TestCase - from django.core.urlresolvers import reverse + try: + from django.urls import reverse + except ImportError: + from django.core.urlresolvers import reverse from rest_framework.renderers import JSONRenderer from rest_framework_gis import serializers as gis_serializers from contexttimer import Timer diff --git a/tests/django_restframework_gis_tests/tests.py b/tests/django_restframework_gis_tests/tests.py index a191480b..2950d44f 100644 --- a/tests/django_restframework_gis_tests/tests.py +++ b/tests/django_restframework_gis_tests/tests.py @@ -9,7 +9,10 @@ from django.test import TestCase from django.contrib.gis.geos import GEOSGeometry, Polygon, Point -from django.core.urlresolvers import reverse +try: + from django.urls import reverse +except ImportError: + from django.core.urlresolvers import reverse from django.core.exceptions import ImproperlyConfigured from rest_framework_gis import serializers as gis_serializers diff --git a/tests/urls.py b/tests/urls.py index 79755849..5111f375 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -1,10 +1,13 @@ -from django.conf.urls import include, url +try: + from django.urls import include, url +except ImportError: + from django.conf.urls import include, url from django.contrib import admin from django.contrib.staticfiles import views urlpatterns = [ # Uncomment the next line to enable the admin: - url(r'^admin/', include(admin.site.urls)), + url(r'^admin/', admin.site.urls), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), diff --git a/tox.ini b/tox.ini index 653e2d5f..eda4dbbb 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,7 @@ [tox] -envlist = py{27,34,35,36,py,py3}-django{19,110,111}{,-pytest} +envlist = + py{27,34,35,36,py,py3}-django111{,-pytest} + py{34,35,36,py3}-django20{,-pytest} [testenv] usedevelop = true @@ -13,9 +15,8 @@ commands = {env:DRFG_TEST_RUNNER} {posargs:tests/django_restframework_gis_tests} deps = - django19: Django>=1.9,<1.10 - django110: Django>=1.10,<1.11 django111: Django>=1.11,<2.0 + django20: Django>=2.0b1,<2.1 -rrequirements-test.txt pytest: pytest pytest: pytest-django