Skip to content

Drop support for obsolete dependencies #664

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jul 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 22 additions & 78 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,119 +4,63 @@ cache: pip
# Favor explicit over implicit and use an explicit build matrix.
matrix:
allow_failures:
- env: TOXENV=py34-df21-django20-drfmaster
- env: TOXENV=py35-df21-django20-drfmaster
- env: TOXENV=py36-df21-django20-drfmaster
- env: TOXENV=py37-df21-django20-drfmaster
- env: TOXENV=py35-df21-django21-drfmaster
- env: TOXENV=py36-df21-django21-drfmaster
- env: TOXENV=py37-df21-django21-drfmaster
- env: TOXENV=py35-df21-django22-drfmaster
- env: TOXENV=py36-df21-django22-drfmaster
- env: TOXENV=py37-df21-django22-drfmaster
- env: TOXENV=py35-django21-drfmaster
- env: TOXENV=py36-django21-drfmaster
- env: TOXENV=py37-django21-drfmaster
- env: TOXENV=py35-django22-drfmaster
- env: TOXENV=py36-django22-drfmaster
- env: TOXENV=py37-django22-drfmaster

include:
- python: 3.6
env: TOXENV=flake8

- python: 2.7
env: TOXENV=py27-df11-django111-drf36
- python: 2.7
env: TOXENV=py27-df11-django111-drf37
- python: 2.7
env: TOXENV=py27-df11-django111-drf38
- python: 2.7
env: TOXENV=py27-df11-django111-drf39

- python: 3.4
env: TOXENV=py34-df21-django111-drf36
- python: 3.4
env: TOXENV=py34-df21-django111-drf37
- python: 3.4
env: TOXENV=py34-df21-django111-drf38
- python: 3.4
env: TOXENV=py34-df21-django20-drf37
- python: 3.4
env: TOXENV=py34-df21-django20-drf38
- python: 3.4
env: TOXENV=py34-df21-django20-drf39
- python: 3.4
env: TOXENV=py34-df21-django20-drfmaster

- python: 3.5
env: TOXENV=py35-df21-django111-drf36
- python: 3.5
env: TOXENV=py35-df21-django111-drf37
- python: 3.5
env: TOXENV=py35-df21-django111-drf38
- python: 3.5
env: TOXENV=py35-df21-django20-drf37
env: TOXENV=py35-django111-drf39
- python: 3.5
env: TOXENV=py35-df21-django20-drf38
env: TOXENV=py35-django111-drfmaster
- python: 3.5
env: TOXENV=py35-df21-django20-drf39
env: TOXENV=py35-django21-drf39
- python: 3.5
env: TOXENV=py35-df21-django20-drfmaster
- python: 3.5
env: TOXENV=py35-df21-django21-drf39
- python: 3.5
env: TOXENV=py35-df21-django21-drfmaster
env: TOXENV=py35-django21-drfmaster
- python: 3.5
dist: xenial
env: TOXENV=py35-df21-django22-drf39
env: TOXENV=py35-django22-drf39
- python: 3.5
dist: xenial
env: TOXENV=py35-df21-django22-drfmaster
env: TOXENV=py35-django22-drfmaster

- python: 3.6
env: TOXENV=py36-df21-django111-drf36
- python: 3.6
env: TOXENV=py36-df21-django111-drf37
- python: 3.6
env: TOXENV=py36-df21-django111-drf38
env: TOXENV=py36-django111-drf39
- python: 3.6
env: TOXENV=py36-df21-django20-drf37
env: TOXENV=py36-django111-drfmaster
- python: 3.6
env: TOXENV=py36-df21-django20-drf38
env: TOXENV=py36-django21-drf39
- python: 3.6
env: TOXENV=py36-df21-django20-drf39
- python: 3.6
env: TOXENV=py36-df21-django20-drfmaster
- python: 3.6
env: TOXENV=py36-df21-django21-drf39
- python: 3.6
env: TOXENV=py36-df21-django21-drfmaster
env: TOXENV=py36-django21-drfmaster
- python: 3.6
dist: xenial
env: TOXENV=py36-df21-django22-drf39
env: TOXENV=py36-django22-drf39
- python: 3.6
dist: xenial
env: TOXENV=py36-df21-django22-drfmaster
env: TOXENV=py36-django22-drfmaster

- python: 3.7
dist: xenial
sudo: required
env: TOXENV=py37-df21-django20-drf39
- python: 3.7
dist: xenial
sudo: required
env: TOXENV=py37-df21-django20-drfmaster
- python: 3.7
dist: xenial
sudo: required
env: TOXENV=py37-df21-django21-drf39
env: TOXENV=py37-django21-drf39
- python: 3.7
dist: xenial
sudo: required
env: TOXENV=py37-df21-django21-drfmaster
env: TOXENV=py37-django21-drfmaster
- python: 3.7
dist: xenial
sudo: required
env: TOXENV=py37-df21-django22-drf39
env: TOXENV=py37-django22-drf39
- python: 3.7
dist: xenial
sudo: required
env: TOXENV=py37-df21-django22-drfmaster
env: TOXENV=py37-django22-drfmaster
install:
- pip install tox
script:
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
Note that in line with [Django REST Framework policy](http://www.django-rest-framework.org/topics/release-notes/),
any parts of the framework not mentioned in the documentation should generally be considered private API, and may be subject to change.

## [Unreleased]

### Removed

* Removed support for Python 2.7 and 3.4.
* Removed support for Django Filter 1.1.
* Removed obsolete dependency six.
* Removed support for Django REST Framework <=3.8.
* Removed support for Django 2.0.

## [2.8.0] - 2019-06-13

This is the last release supporting Python 2.7, Python 3.4, Django Filter 1.1, Django REST Framework <=3.8 and Django 2.0.
Expand Down
6 changes: 3 additions & 3 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,9 @@ As a Django REST Framework JSON API (short DJA) we are trying to address followi
Requirements
------------

1. Python (2.7, 3.4, 3.5, 3.6, 3.7)
2. Django (1.11, 2.0, 2.1, 2.2)
3. Django REST Framework (3.6, 3.7, 3.8, 3.9)
1. Python (3.5, 3.6, 3.7)
2. Django (1.11, 2.1, 2.2)
3. Django REST Framework (3.9)

------------
Installation
Expand Down
6 changes: 3 additions & 3 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ like the following:

## Requirements

1. Python (2.7, 3.4, 3.5, 3.6, 3.7)
2. Django (1.11, 2.0, 2.1, 2.2)
3. Django REST Framework (3.6, 3.7, 3.8, 3.9)
1. Python (3.5, 3.6, 3.7)
2. Django (1.11, 2.1, 2.2)
3. Django REST Framework (3.9)

## Installation

Expand Down
8 changes: 4 additions & 4 deletions example/api/resources/identity.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.contrib.auth import models as auth_models
from django.utils import encoding
from rest_framework import generics, parsers, renderers, serializers, viewsets
from rest_framework.decorators import detail_route, list_route
from rest_framework.decorators import action
from rest_framework.response import Response

from rest_framework_json_api import mixins, utils
Expand All @@ -15,7 +15,7 @@ class Identity(mixins.MultipleIDMixin, viewsets.ModelViewSet):
serializer_class = IdentitySerializer

# demonstrate sideloading data for use at app boot time
@list_route()
@action(detail=False)
def posts(self, request):
self.resource_name = False

Expand All @@ -28,12 +28,12 @@ def posts(self, request):
}
return Response(utils.format_field_names(data, format_type='camelize'))

@detail_route()
@action(detail=True)
def manual_resource_name(self, request, *args, **kwargs):
self.resource_name = 'data'
return super(Identity, self).retrieve(request, args, kwargs)

@detail_route()
@action(detail=True)
def validation(self, request, *args, **kwargs):
raise serializers.ValidationError('Oh nohs!')

Expand Down
10 changes: 0 additions & 10 deletions example/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from polymorphic.models import PolymorphicModel


Expand Down Expand Up @@ -32,7 +31,6 @@ class Meta:
ordering = ('id',)


@python_2_unicode_compatible
class Blog(BaseModel):
name = models.CharField(max_length=100)
tagline = models.TextField()
Expand All @@ -45,7 +43,6 @@ class Meta:
ordering = ('id',)


@python_2_unicode_compatible
class AuthorType(BaseModel):
name = models.CharField(max_length=50)

Expand All @@ -56,7 +53,6 @@ class Meta:
ordering = ('id',)


@python_2_unicode_compatible
class Author(BaseModel):
name = models.CharField(max_length=50)
email = models.EmailField()
Expand All @@ -69,7 +65,6 @@ class Meta:
ordering = ('id',)


@python_2_unicode_compatible
class AuthorBio(BaseModel):
author = models.OneToOneField(Author, related_name='bio', on_delete=models.CASCADE)
body = models.TextField()
Expand All @@ -81,7 +76,6 @@ class Meta:
ordering = ('id',)


@python_2_unicode_compatible
class AuthorBioMetadata(BaseModel):
"""
Just a class to have a relation with author bio
Expand All @@ -96,7 +90,6 @@ class Meta:
ordering = ('id',)


@python_2_unicode_compatible
class Entry(BaseModel):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
headline = models.CharField(max_length=255)
Expand All @@ -116,7 +109,6 @@ class Meta:
ordering = ('id',)


@python_2_unicode_compatible
class Comment(BaseModel):
entry = models.ForeignKey(Entry, related_name='comments', on_delete=models.CASCADE)
body = models.TextField()
Expand All @@ -135,7 +127,6 @@ class Meta:
ordering = ('id',)


@python_2_unicode_compatible
class ProjectType(BaseModel):
name = models.CharField(max_length=50)

Expand All @@ -160,7 +151,6 @@ class ResearchProject(Project):
supervisor = models.CharField(max_length=30)


@python_2_unicode_compatible
class Company(models.Model):
name = models.CharField(max_length=100)
current_project = models.ForeignKey(
Expand Down
1 change: 0 additions & 1 deletion example/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,5 @@ pluggy
py
pyparsing
pytz
six
sqlparse
django-filter>=2.0
7 changes: 2 additions & 5 deletions example/tests/integration/test_non_paginated_responses.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
from unittest import mock

import pytest
from django.urls import reverse

try:
from unittest import mock
except ImportError: # pragma: no cover
import mock

pytestmark = pytest.mark.django_db


Expand Down
8 changes: 2 additions & 6 deletions example/tests/integration/test_pagination.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
from unittest import mock

import pytest
from django.urls import reverse

try:
from unittest import mock
except ImportError: # pragma: no cover
import mock


pytestmark = pytest.mark.django_db


Expand Down
7 changes: 2 additions & 5 deletions example/tests/test_serializers.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest import mock

import pytest
from django.test import TestCase
from django.urls import reverse
Expand All @@ -15,11 +17,6 @@
from example.models import Author, Blog, Entry
from example.serializers import BlogSerializer

try:
from unittest import mock
except ImportError: # pragma: no cover
import mock

request_factory = APIRequestFactory()
pytestmark = pytest.mark.django_db

Expand Down
5 changes: 2 additions & 3 deletions example/tests/unit/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import pytest
from django.contrib.auth import get_user_model
from django.test import override_settings
from django.utils import six
from rest_framework import serializers
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
Expand Down Expand Up @@ -130,7 +129,7 @@ def test_get_included_serializers_against_class():
'comments': CommentSerializer,
'self': klass
}
assert six.viewkeys(included_serializers) == six.viewkeys(klass.included_serializers), (
assert included_serializers.keys() == klass.included_serializers.keys(), (
'the keys must be preserved'
)

Expand All @@ -147,7 +146,7 @@ def test_get_included_serializers_against_instance():
'comments': CommentSerializer,
'self': klass
}
assert six.viewkeys(included_serializers) == six.viewkeys(klass.included_serializers), (
assert included_serializers.keys() == klass.included_serializers.keys(), (
'the keys must be preserved'
)

Expand Down
Loading