From 002ec3e10dffd60ddf7c852b47b5ff273855a038 Mon Sep 17 00:00:00 2001 From: James Turk Date: Tue, 13 Oct 2015 23:30:31 -0400 Subject: [PATCH 1/8] add django 1.9 entry to tox --- tox.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tox.ini b/tox.ini index 6ec1691a..300af924 100644 --- a/tox.ini +++ b/tox.ini @@ -3,12 +3,14 @@ envlist = py{27,32,33}-django16-drf{31,32}, py{27,32,33,34}-django17-drf{31,32}, py{27,32,33,34}-django18-drf{31,32}, + py{27,33,34,35}-django19-drf{31,32}, [testenv] deps = django16: Django>=1.6,<1.7 django17: Django>=1.7,<1.8 django18: Django>=1.8,<1.9 + django19: Django>=1.9a1 drf31: djangorestframework>=3.1,<3.2 drf32: djangorestframework>=3.2 -r{toxinidir}/requirements-development.txt From ad6e22dacc73e7ef60726bff7d3fe91e850841a8 Mon Sep 17 00:00:00 2001 From: James Turk Date: Tue, 13 Oct 2015 23:33:53 -0400 Subject: [PATCH 2/8] attempt to fix relation_type_lookup --- rest_framework_json_api/metadata.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/rest_framework_json_api/metadata.py b/rest_framework_json_api/metadata.py index f0e2686e..dfcedff0 100644 --- a/rest_framework_json_api/metadata.py +++ b/rest_framework_json_api/metadata.py @@ -43,10 +43,9 @@ class JSONAPIMetadata(SimpleMetadata): }) relation_type_lookup = ClassLookupDict({ - related.ManyRelatedObjectsDescriptor: 'ManyToMany', - related.ReverseManyRelatedObjectsDescriptor: 'ManyToMany', - related.ForeignRelatedObjectsDescriptor: 'OneToMany', - related.ReverseSingleRelatedObjectDescriptor: 'ManyToOne', + related.ManyToManyDescriptor: 'ManyToMany', + related.ReverseManyToOneDescriptor: 'OneToMany', + related.ForwardManyToOneDescriptor: 'ManyToOne', }) def determine_metadata(self, request, view): From a487332d9b00c8690b9136b4888ad10283d68db1 Mon Sep 17 00:00:00 2001 From: James Turk Date: Wed, 14 Oct 2015 18:50:43 -0400 Subject: [PATCH 3/8] relation_type_lookup on <=1.9 --- rest_framework_json_api/metadata.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/rest_framework_json_api/metadata.py b/rest_framework_json_api/metadata.py index dfcedff0..dec5346f 100644 --- a/rest_framework_json_api/metadata.py +++ b/rest_framework_json_api/metadata.py @@ -42,11 +42,19 @@ class JSONAPIMetadata(SimpleMetadata): serializers.Serializer: 'Serializer', }) - relation_type_lookup = ClassLookupDict({ - related.ManyToManyDescriptor: 'ManyToMany', - related.ReverseManyToOneDescriptor: 'OneToMany', - related.ForwardManyToOneDescriptor: 'ManyToOne', - }) + try: + relation_type_lookup = ClassLookupDict({ + related.ManyToManyDescriptor: 'ManyToMany', + related.ReverseManyToOneDescriptor: 'ManyToOne', + related.ForwardManyToOneDescriptor: 'OneToMany', + }) + except AttributeError: + relation_type_lookup = ClassLookupDict({ + related.ManyRelatedObjectsDescriptor: 'ManyToMany', + related.ReverseManyRelatedObjectsDescriptor: 'ManyToMany', + related.ForeignRelatedObjectsDescriptor: 'OneToMany', + related.ReverseSingleRelatedObjectDescriptor: 'ManyToOne', + }) def determine_metadata(self, request, view): metadata = OrderedDict() From b5df87ca98300d1a770d6257bd73ef1f2cb02efa Mon Sep 17 00:00:00 2001 From: James Turk Date: Wed, 14 Oct 2015 20:07:48 -0400 Subject: [PATCH 4/8] fix bulk add error introduced by Django 1.9 --- rest_framework_json_api/views.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/rest_framework_json_api/views.py b/rest_framework_json_api/views.py index 6dbfd06f..36c89687 100644 --- a/rest_framework_json_api/views.py +++ b/rest_framework_json_api/views.py @@ -1,3 +1,4 @@ +import django from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import NoReverseMatch from django.db.models import Model @@ -85,7 +86,12 @@ def patch(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data, model_class=related_model_class, many=True) serializer.is_valid(raise_exception=True) related_instance_or_manager.all().delete() - related_instance_or_manager.add(*serializer.validated_data) + # have to set bulk to False since data isn't saved yet + if django.VERSION >= (1, 9): + related_instance_or_manager.add(*serializer.validated_data, + bulk=False) + else: + related_instance_or_manager.add(*serializer.validated_data) else: related_model_class = related_instance_or_manager.__class__ serializer = self.get_serializer(data=request.data, model_class=related_model_class) From 9edd5367372dccb6da2a25cdf427d7f883fc2d90 Mon Sep 17 00:00:00 2001 From: James Turk Date: Wed, 14 Oct 2015 20:13:54 -0400 Subject: [PATCH 5/8] fix relation_type_lookup names were swapped, ForwardManyToOneDescriptor is essentially the same as ReverseSingleRelatedObjectDescriptor and vice-versa --- rest_framework_json_api/metadata.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rest_framework_json_api/metadata.py b/rest_framework_json_api/metadata.py index dec5346f..2355f2cf 100644 --- a/rest_framework_json_api/metadata.py +++ b/rest_framework_json_api/metadata.py @@ -45,8 +45,8 @@ class JSONAPIMetadata(SimpleMetadata): try: relation_type_lookup = ClassLookupDict({ related.ManyToManyDescriptor: 'ManyToMany', - related.ReverseManyToOneDescriptor: 'ManyToOne', - related.ForwardManyToOneDescriptor: 'OneToMany', + related.ReverseManyToOneDescriptor: 'OneToMany', + related.ForwardManyToOneDescriptor: 'ManyToOne', }) except AttributeError: relation_type_lookup = ClassLookupDict({ From ab7ac710c5d358e3a4f178267aeaa70c45630308 Mon Sep 17 00:00:00 2001 From: James Turk Date: Wed, 14 Oct 2015 20:21:26 -0400 Subject: [PATCH 6/8] add appropriate tests for Django 1.9 --- .travis.yml | 4 ++++ tox.ini | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a5084225..367bd518 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,3 +25,7 @@ env: - TOXENV=py33-django18-drf32 - TOXENV=py34-django18-drf31 - TOXENV=py34-django18-drf32 + - TOXENV=py27-django19-drf31 + - TOXENV=py27-django19-drf32 + - TOXENV=py34-django19-drf31 + - TOXENV=py34-django19-drf32 diff --git a/tox.ini b/tox.ini index 300af924..57655070 100644 --- a/tox.ini +++ b/tox.ini @@ -3,7 +3,7 @@ envlist = py{27,32,33}-django16-drf{31,32}, py{27,32,33,34}-django17-drf{31,32}, py{27,32,33,34}-django18-drf{31,32}, - py{27,33,34,35}-django19-drf{31,32}, + py{27,34}-django19-drf{31,32}, [testenv] deps = From 6e9410a38ae1c55d8b08fdb27e945e2ae1de002f Mon Sep 17 00:00:00 2001 From: James Turk Date: Wed, 14 Oct 2015 20:33:12 -0400 Subject: [PATCH 7/8] update to test on py35 --- .travis.yml | 2 ++ requirements-development.txt | 2 +- tox.ini | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 367bd518..bb8c0d53 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,3 +29,5 @@ env: - TOXENV=py27-django19-drf32 - TOXENV=py34-django19-drf31 - TOXENV=py34-django19-drf32 + - TOXENV=py35-django19-drf31 + - TOXENV=py35-django19-drf32 diff --git a/requirements-development.txt b/requirements-development.txt index 1f1959ad..00fed3b0 100644 --- a/requirements-development.txt +++ b/requirements-development.txt @@ -1,5 +1,5 @@ -e . -pytest==2.7.2 +pytest==2.8.2 pytest-django pytest-factoryboy tox diff --git a/tox.ini b/tox.ini index 57655070..edbb5f70 100644 --- a/tox.ini +++ b/tox.ini @@ -3,7 +3,7 @@ envlist = py{27,32,33}-django16-drf{31,32}, py{27,32,33,34}-django17-drf{31,32}, py{27,32,33,34}-django18-drf{31,32}, - py{27,34}-django19-drf{31,32}, + py{27,34,35}-django19-drf{31,32}, [testenv] deps = From aedaa4598dd013467f8f138e6cd379a7ebf9f5a9 Mon Sep 17 00:00:00 2001 From: James Turk Date: Wed, 14 Oct 2015 20:38:25 -0400 Subject: [PATCH 8/8] set base python to 3.5 so it's available in tox --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index bb8c0d53..4053d3a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: python +python: 3.5 sudo: false install: pip install tox script: tox