Add coreapi/DRF compatibility

This commit is contained in:
Ryan P Kilby 2016-10-16 19:13:12 -04:00
parent 0b1ec0507b
commit bc359782fd
3 changed files with 14 additions and 6 deletions

View File

@ -1,4 +1,6 @@
from __future__ import absolute_import
import django
from django.conf import settings
@ -12,6 +14,13 @@ except ImportError:
is_crispy = 'crispy_forms' in settings.INSTALLED_APPS and crispy_forms
# coreapi only compatible with DRF 3.4+
try:
from rest_framework.compat import coreapi
except ImportError:
coreapi = None
def remote_field(field):
"""
https://docs.djangoproject.com/en/1.9/releases/1.9/#field-rel-changes

View File

@ -2,7 +2,7 @@
from __future__ import absolute_import
from django.template import Template, TemplateDoesNotExist, loader
from rest_framework.compat import coreapi, template_render
from rest_framework.compat import template_render
from rest_framework.filters import BaseFilterBackend
from .. import compat
@ -94,10 +94,10 @@ class DjangoFilterBackend(BaseFilterBackend):
# This is not compatible with widgets where the query param differs from the
# filter's attribute name. Notably, this includes `MultiWidget`, where query
# params will be of the format `<name>_0`, `<name>_1`, etc...
assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
assert compat.coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
filter_class = self.get_filter_class(view, view.get_queryset())
return [] if not filter_class else [
coreapi.Field(name=field_name, required=False, location='query')
compat.coreapi.Field(name=field_name, required=False, location='query')
for field_name in filter_class().filters.keys()
]

View File

@ -16,10 +16,9 @@ except ImportError:
from django.core.urlresolvers import reverse
from rest_framework import generics, serializers, status
from rest_framework.compat import coreapi
from rest_framework.test import APIRequestFactory
from django_filters import filters
from django_filters import compat, filters
from django_filters.rest_framework import DjangoFilterBackend, FilterSet
from django_filters.rest_framework import backends
@ -123,7 +122,7 @@ urlpatterns = [
]
@skipIf(coreapi is None, 'coreapi must be installed')
@skipIf(compat.coreapi is None, 'coreapi must be installed')
class GetSchemaFieldsTests(TestCase):
def test_fields_with_filter_fields_list(self):
backend = DjangoFilterBackend()