Add coreapi/DRF compatibility
This commit is contained in:
parent
0b1ec0507b
commit
bc359782fd
|
@ -1,4 +1,6 @@
|
||||||
|
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import django
|
import django
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
@ -12,6 +14,13 @@ except ImportError:
|
||||||
is_crispy = 'crispy_forms' in settings.INSTALLED_APPS and crispy_forms
|
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):
|
def remote_field(field):
|
||||||
"""
|
"""
|
||||||
https://docs.djangoproject.com/en/1.9/releases/1.9/#field-rel-changes
|
https://docs.djangoproject.com/en/1.9/releases/1.9/#field-rel-changes
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
from django.template import Template, TemplateDoesNotExist, loader
|
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 rest_framework.filters import BaseFilterBackend
|
||||||
|
|
||||||
from .. import compat
|
from .. import compat
|
||||||
|
@ -94,10 +94,10 @@ class DjangoFilterBackend(BaseFilterBackend):
|
||||||
# This is not compatible with widgets where the query param differs from the
|
# This is not compatible with widgets where the query param differs from the
|
||||||
# filter's attribute name. Notably, this includes `MultiWidget`, where query
|
# filter's attribute name. Notably, this includes `MultiWidget`, where query
|
||||||
# params will be of the format `<name>_0`, `<name>_1`, etc...
|
# 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())
|
filter_class = self.get_filter_class(view, view.get_queryset())
|
||||||
|
|
||||||
return [] if not filter_class else [
|
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()
|
for field_name in filter_class().filters.keys()
|
||||||
]
|
]
|
||||||
|
|
|
@ -16,10 +16,9 @@ except ImportError:
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
|
||||||
from rest_framework import generics, serializers, status
|
from rest_framework import generics, serializers, status
|
||||||
from rest_framework.compat import coreapi
|
|
||||||
from rest_framework.test import APIRequestFactory
|
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 DjangoFilterBackend, FilterSet
|
||||||
from django_filters.rest_framework import backends
|
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):
|
class GetSchemaFieldsTests(TestCase):
|
||||||
def test_fields_with_filter_fields_list(self):
|
def test_fields_with_filter_fields_list(self):
|
||||||
backend = DjangoFilterBackend()
|
backend = DjangoFilterBackend()
|
||||||
|
|
Loading…
Reference in New Issue