From 880807dd2f4303df97054a388e38816d0c2bac2f Mon Sep 17 00:00:00 2001 From: Adam Charnock Date: Sat, 5 Dec 2015 13:06:44 +0000 Subject: [PATCH] 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 --- graphene/contrib/django/filter/__init__.py | 9 +++++---- graphene/contrib/django/filter/filterset.py | 7 ++----- graphene/contrib/django/options.py | 4 ++-- graphene/contrib/django/settings.py | 4 ++++ graphene/contrib/django/tests/__init__.py | 4 ++++ graphene/contrib/django/tests/filter/test_fields.py | 4 ++-- graphene/contrib/django/tests/filter/test_resolvers.py | 9 ++++----- graphene/contrib/django/types.py | 4 ++-- graphene/contrib/django/utils.py | 6 ------ 9 files changed, 25 insertions(+), 26 deletions(-) create mode 100644 graphene/contrib/django/settings.py diff --git a/graphene/contrib/django/filter/__init__.py b/graphene/contrib/django/filter/__init__.py index 95b28aff..1495b99f 100644 --- a/graphene/contrib/django/filter/__init__.py +++ b/graphene/contrib/django/filter/__init__.py @@ -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 diff --git a/graphene/contrib/django/filter/filterset.py b/graphene/contrib/django/filter/filterset.py index 4755eac2..dbcfd128 100644 --- a/graphene/contrib/django/filter/filterset.py +++ b/graphene/contrib/django/filter/filterset.py @@ -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): diff --git a/graphene/contrib/django/options.py b/graphene/contrib/django/options.py index 55868dd7..276b4cfb 100644 --- a/graphene/contrib/django/options.py +++ b/graphene/contrib/django/options.py @@ -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') diff --git a/graphene/contrib/django/settings.py b/graphene/contrib/django/settings.py new file mode 100644 index 00000000..c98de70b --- /dev/null +++ b/graphene/contrib/django/settings.py @@ -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) diff --git a/graphene/contrib/django/tests/__init__.py b/graphene/contrib/django/tests/__init__.py index e69de29b..57726259 100644 --- a/graphene/contrib/django/tests/__init__.py +++ b/graphene/contrib/django/tests/__init__.py @@ -0,0 +1,4 @@ +from graphene.contrib.django import settings + +# Force filtering for tests +settings.GRAPHENE_ENABLE_FILTERING = True diff --git a/graphene/contrib/django/tests/filter/test_fields.py b/graphene/contrib/django/tests/filter/test_fields.py index 33cc2421..a7d9866c 100644 --- a/graphene/contrib/django/tests/filter/test_fields.py +++ b/graphene/contrib/django/tests/filter/test_fields.py @@ -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) diff --git a/graphene/contrib/django/tests/filter/test_resolvers.py b/graphene/contrib/django/tests/filter/test_resolvers.py index a336cddf..a16b0755 100644 --- a/graphene/contrib/django/tests/filter/test_resolvers.py +++ b/graphene/contrib/django/tests/filter/test_resolvers.py @@ -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') diff --git a/graphene/contrib/django/types.py b/graphene/contrib/django/types.py index e25130df..1e5a5a58 100644 --- a/graphene/contrib/django/types.py +++ b/graphene/contrib/django/types.py @@ -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 diff --git a/graphene/contrib/django/utils.py b/graphene/contrib/django/utils.py index 38bf7546..134e0631 100644 --- a/graphene/contrib/django/utils.py +++ b/graphene/contrib/django/utils.py @@ -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