Replacing django-filter detection with GRAPHENE_ENABLE_FILTERING setting

Also moving GRAPHENE_ORDER_BY_FIELD into settings.py which
centralises use of django settings and their default values
This commit is contained in:
Adam Charnock 2015-12-05 13:06:44 +00:00
parent 0f35f4de8d
commit 880807dd2f
9 changed files with 25 additions and 26 deletions

View File

@ -1,9 +1,10 @@
from graphene.contrib.django.utils import DJANGO_FILTER_INSTALLED
from graphene.contrib.django import settings
if not DJANGO_FILTER_INSTALLED:
if not settings.GRAPHENE_ENABLE_FILTERING:
raise Exception(
"Use of django filtering requires the django-filter package "
"be installed. You can do so using `pip install django-filter`"
"To make use of filtering you configure "
"GRAPHENE_ENABLE_FILTERING=True. This will also require "
"django-filter be installed"
)
from .fields import DjangoFilterConnectionField

View File

@ -1,11 +1,11 @@
import six
from django.conf import settings
from django.db import models
from django.utils.text import capfirst
from django_filters import Filter, MultipleChoiceFilter
from django_filters.filterset import FilterSetMetaclass, FilterSet
from graphql_relay.node.node import from_global_id
from graphene.contrib.django import settings
from graphene.contrib.django.forms import GlobalIDFormField, GlobalIDMultipleChoiceField
@ -25,9 +25,6 @@ class GlobalIDMultipleChoiceFilter(MultipleChoiceFilter):
return super(GlobalIDMultipleChoiceFilter, self).filter(qs, gids)
ORDER_BY_FIELD = getattr(settings, 'GRAPHENE_ORDER_BY_FIELD', 'order_by')
GRAPHENE_FILTER_SET_OVERRIDES = {
models.AutoField: {
'filter_class': GlobalIDFilter,
@ -54,7 +51,7 @@ class GrapheneFilterSetMetaclass(FilterSetMetaclass):
class GrapheneFilterSetMixin(object):
order_by_field = ORDER_BY_FIELD
order_by_field = settings.GRAPHENE_ORDER_BY_FIELD
@classmethod
def filter_for_reverse_field(cls, f, name):

View File

@ -1,11 +1,11 @@
from .utils import DJANGO_FILTER_INSTALLED
from graphene.contrib.django import settings
from ...core.classtypes.objecttype import ObjectTypeOptions
from ...relay.types import Node
from ...relay.utils import is_node
VALID_ATTRS = ('model', 'only_fields', 'exclude_fields')
if DJANGO_FILTER_INSTALLED:
if settings.GRAPHENE_ENABLE_FILTERING:
VALID_ATTRS += ('filter_fields', 'filter_order_by')

View File

@ -0,0 +1,4 @@
from django.conf import settings
GRAPHENE_ORDER_BY_FIELD = getattr(settings, 'GRAPHENE_ORDER_BY_FIELD', 'order_by')
GRAPHENE_ENABLE_FILTERING = getattr(settings, 'GRAPHENE_ENABLE_FILTERING', False)

View File

@ -0,0 +1,4 @@
from graphene.contrib.django import settings
# Force filtering for tests
settings.GRAPHENE_ENABLE_FILTERING = True

View File

@ -1,7 +1,7 @@
import pytest
from graphene import ObjectType, Schema
from graphene.contrib.django.utils import DJANGO_FILTER_INSTALLED
from graphene.contrib.django import settings
from graphene.relay import NodeField
@ -10,7 +10,7 @@ from graphene.contrib.django.forms import GlobalIDFormField, GlobalIDMultipleCho
from graphene.contrib.django.tests.models import Article, Pet, Reporter
pytestmark = []
if DJANGO_FILTER_INSTALLED:
if settings.GRAPHENE_ENABLE_FILTERING:
import django_filters
from graphene.contrib.django.filter import (GlobalIDFilter, DjangoFilterConnectionField,
GlobalIDMultipleChoiceFilter)

View File

@ -1,17 +1,16 @@
import pytest
from django.core.exceptions import ImproperlyConfigured
from graphene.contrib.django.utils import DJANGO_FILTER_INSTALLED
from graphene.contrib.django import settings
from graphene.contrib.django.tests.models import Reporter, Article
from graphene.contrib.django.tests.test_resolvers import ReporterNode, ArticleNode
if DJANGO_FILTER_INSTALLED:
if settings.GRAPHENE_ENABLE_FILTERING:
from graphene.contrib.django.filter.resolvers import FilterConnectionResolver
from graphene.contrib.django.tests.filter.filters import ReporterFilter, ArticleFilter
else:
pytestmark = pytest.mark.skipif(True, reason='django_filters not installed')
from graphene.contrib.django.tests.models import Reporter, Article
from graphene.contrib.django.tests.test_resolvers import ReporterNode, ArticleNode
def test_filter_get_filterset_class_explicit():
reporter = Reporter(id=1, first_name='Cookie Monster')

View File

@ -3,9 +3,9 @@ import inspect
import six
from django.db import models
from graphene.contrib.django import settings
from ...core.classtypes.objecttype import ObjectType, ObjectTypeMeta
from ...relay.types import Connection, Node, NodeMeta
from .utils import DJANGO_FILTER_INSTALLED
from .converter import convert_django_field
from .options import DjangoOptions
from .utils import get_reverse_fields, maybe_queryset
@ -104,7 +104,7 @@ class DjangoConnection(Connection):
django_node_meta_bases = (DjangoObjectTypeMeta, NodeMeta)
# Only include filter functionality if available
if DJANGO_FILTER_INSTALLED:
if settings.GRAPHENE_ENABLE_FILTERING:
django_node_meta_bases = (DjangoFilterObjectTypeMeta,) + django_node_meta_bases

View File

@ -7,12 +7,6 @@ from graphene.utils import LazyList
from graphene import Argument, String
try:
import django_filters # noqa
DJANGO_FILTER_INSTALLED = True
except ImportError:
DJANGO_FILTER_INSTALLED = False
def get_type_for_model(schema, model):
schema = schema