Skip to content

Commit 8dfe7bb

Browse files
committed
Remove filter order_by as Django Filters have deprecated it in 1.0
1 parent 48993dd commit 8dfe7bb

File tree

8 files changed

+26
-68
lines changed

8 files changed

+26
-68
lines changed

graphene_django/filter/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
)
99
else:
1010
from .fields import DjangoFilterConnectionField
11-
from .filterset import GrapheneFilterSet, GlobalIDFilter, GlobalIDMultipleChoiceFilter
11+
from .filterset import GlobalIDFilter, GlobalIDMultipleChoiceFilter
1212

13-
__all__ = ['DjangoFilterConnectionField', 'GrapheneFilterSet',
13+
__all__ = ['DjangoFilterConnectionField',
1414
'GlobalIDFilter', 'GlobalIDMultipleChoiceFilter']

graphene_django/filter/fields.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
from functools import partial
22

3+
from django_filters import OrderingFilter
4+
35
from ..fields import DjangoConnectionField
46
from .utils import get_filtering_args_from_filterset, get_filterset_class
57

68

79
class DjangoFilterConnectionField(DjangoConnectionField):
810

9-
def __init__(self, type, fields=None, order_by=None,
10-
extra_filter_meta=None, filterset_class=None,
11-
*args, **kwargs):
11+
def __init__(self, type, fields=None, extra_filter_meta=None,
12+
filterset_class=None, *args, **kwargs):
1213

13-
self.order_by = order_by or type._meta.filter_order_by
1414
self.fields = fields or type._meta.filter_fields
1515
meta = dict(model=type._meta.model,
16-
fields=self.fields,
17-
order_by=self.order_by)
16+
fields=self.fields)
1817
if extra_filter_meta:
1918
meta.update(extra_filter_meta)
2019
self.filterset_class = get_filterset_class(filterset_class, **meta)
@@ -27,12 +26,8 @@ def __init__(self, type, fields=None, order_by=None,
2726
def connection_resolver(resolver, connection, default_manager, filterset_class, filtering_args,
2827
root, args, context, info):
2928
filter_kwargs = {k: v for k, v in args.items() if k in filtering_args}
30-
order = args.get('order_by', None)
3129
qs = default_manager.get_queryset()
32-
if order:
33-
qs = qs.order_by(order)
34-
qs = filterset_class(data=filter_kwargs, queryset=qs)
35-
30+
qs = filterset_class(data=filter_kwargs, queryset=qs).qs
3631
return DjangoConnectionField.connection_resolver(resolver, connection, qs, root, args, context, info)
3732

3833
def get_resolver(self, parent_resolver):

graphene_django/filter/filterset.py

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.db import models
66
from django.utils.text import capfirst
77
from django_filters import Filter, MultipleChoiceFilter
8-
from django_filters.filterset import FilterSet, FilterSetMetaclass
8+
from django_filters.filterset import BaseFilterSet, FilterSet, FilterSetMetaclass
99
from django_filters.filterset import FILTER_FOR_DBFIELD_DEFAULTS
1010

1111
from graphql_relay.node.node import from_global_id
@@ -29,9 +29,6 @@ def filter(self, qs, value):
2929
return super(GlobalIDMultipleChoiceFilter, self).filter(qs, gids)
3030

3131

32-
ORDER_BY_FIELD = getattr(settings, 'GRAPHENE_ORDER_BY_FIELD', 'order_by')
33-
34-
3532
GRAPHENE_FILTER_SET_OVERRIDES = {
3633
models.AutoField: {
3734
'filter_class': GlobalIDFilter,
@@ -48,25 +45,7 @@ def filter(self, qs, value):
4845
}
4946

5047

51-
# Only useful for Django-filter 0.14-, not necessary in latest version 0.15+
52-
class GrapheneFilterSetMetaclass(FilterSetMetaclass):
53-
54-
def __new__(cls, name, bases, attrs):
55-
new_class = super(GrapheneFilterSetMetaclass, cls).__new__(cls, name, bases, attrs)
56-
# Customise the filter_overrides for Graphene
57-
if hasattr(new_class, '_meta') and hasattr(new_class._meta, 'filter_overrides'):
58-
filter_overrides = new_class._meta.filter_overrides
59-
else:
60-
filter_overrides = new_class.filter_overrides
61-
62-
for k, v in GRAPHENE_FILTER_SET_OVERRIDES.items():
63-
filter_overrides.setdefault(k, v)
64-
65-
return new_class
66-
67-
68-
class GrapheneFilterSetMixin(object):
69-
order_by_field = ORDER_BY_FIELD
48+
class GrapheneFilterSetMixin(BaseFilterSet):
7049
FILTER_DEFAULTS = dict(itertools.chain(
7150
FILTER_FOR_DBFIELD_DEFAULTS.items(),
7251
GRAPHENE_FILTER_SET_OVERRIDES.items()
@@ -93,26 +72,17 @@ def filter_for_reverse_field(cls, f, name):
9372
return GlobalIDFilter(**default)
9473

9574

96-
class GrapheneFilterSet(six.with_metaclass(GrapheneFilterSetMetaclass, GrapheneFilterSetMixin, FilterSet)):
97-
""" Base class for FilterSets used by Graphene
98-
99-
You shouldn't usually need to use this class. The
100-
DjangoFilterConnectionField will wrap FilterSets with this class as
101-
necessary
102-
"""
103-
104-
10575
def setup_filterset(filterset_class):
10676
""" Wrap a provided filterset in Graphene-specific functionality
10777
"""
10878
return type(
10979
'Graphene{}'.format(filterset_class.__name__),
110-
(six.with_metaclass(GrapheneFilterSetMetaclass, GrapheneFilterSetMixin, filterset_class),),
80+
(filterset_class, GrapheneFilterSetMixin),
11181
{},
11282
)
11383

11484

115-
def custom_filterset_factory(model, filterset_base_class=GrapheneFilterSet,
85+
def custom_filterset_factory(model, filterset_base_class=FilterSet,
11686
**meta):
11787
""" Create a filterset for the given model using the provided meta data
11888
"""
@@ -122,7 +92,7 @@ def custom_filterset_factory(model, filterset_base_class=GrapheneFilterSet,
12292
meta_class = type(str('Meta'), (object,), meta)
12393
filterset = type(
12494
str('%sFilterSet' % model._meta.object_name),
125-
(filterset_base_class,),
95+
(filterset_base_class, GrapheneFilterSetMixin),
12696
{
12797
'Meta': meta_class
12898
}

graphene_django/filter/tests/filters.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import django_filters
2+
from django_filters import OrderingFilter
23

34
from graphene_django.tests.models import Article, Pet, Reporter
45

@@ -12,20 +13,21 @@ class Meta:
1213
'pub_date': ['gt', 'lt', 'exact'],
1314
'reporter': ['exact'],
1415
}
15-
order_by = False
16+
17+
order_by = OrderingFilter(fields=('pub_date',))
1618

1719

1820
class ReporterFilter(django_filters.FilterSet):
1921

2022
class Meta:
2123
model = Reporter
2224
fields = ['first_name', 'last_name', 'email', 'pets']
23-
order_by = True
25+
26+
order_by = OrderingFilter(fields=('pub_date',))
2427

2528

2629
class PetFilter(django_filters.FilterSet):
2730

2831
class Meta:
2932
model = Pet
3033
fields = ['name']
31-
order_by = False

graphene_django/filter/tests/test_fields.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class ArticleNode(DjangoObjectType):
2727
class Meta:
2828
model = Article
2929
interfaces = (Node, )
30+
filter_fields = ('headline', )
3031

3132

3233
class ReporterNode(DjangoObjectType):
@@ -110,8 +111,8 @@ def test_filter_explicit_filterset_orderable():
110111

111112

112113
def test_filter_shortcut_filterset_orderable_true():
113-
field = DjangoFilterConnectionField(ReporterNode, order_by=True)
114-
assert_orderable(field)
114+
field = DjangoFilterConnectionField(ReporterNode)
115+
assert_not_orderable(field)
115116

116117

117118
# def test_filter_shortcut_filterset_orderable_headline():
@@ -126,9 +127,9 @@ def test_filter_explicit_filterset_not_orderable():
126127

127128
def test_filter_shortcut_filterset_extra_meta():
128129
field = DjangoFilterConnectionField(ArticleNode, extra_filter_meta={
129-
'order_by': True
130+
'exclude': ('headline', )
130131
})
131-
assert_orderable(field)
132+
assert 'headline' not in field.filterset_class.get_fields()
132133

133134

134135
def test_filter_filterset_information_on_meta():
@@ -138,11 +139,10 @@ class Meta:
138139
model = Reporter
139140
interfaces = (Node, )
140141
filter_fields = ['first_name', 'articles']
141-
filter_order_by = True
142142

143143
field = DjangoFilterConnectionField(ReporterFilterNode)
144144
assert_arguments(field, 'first_name', 'articles')
145-
assert_orderable(field)
145+
assert_not_orderable(field)
146146

147147

148148
def test_filter_filterset_information_on_meta_related():
@@ -152,15 +152,13 @@ class Meta:
152152
model = Reporter
153153
interfaces = (Node, )
154154
filter_fields = ['first_name', 'articles']
155-
filter_order_by = True
156155

157156
class ArticleFilterNode(DjangoObjectType):
158157

159158
class Meta:
160159
model = Article
161160
interfaces = (Node, )
162161
filter_fields = ['headline', 'reporter']
163-
filter_order_by = True
164162

165163
class Query(ObjectType):
166164
all_reporters = DjangoFilterConnectionField(ReporterFilterNode)
@@ -171,7 +169,7 @@ class Query(ObjectType):
171169
schema = Schema(query=Query)
172170
articles_field = ReporterFilterNode._meta.fields['articles'].get_type()
173171
assert_arguments(articles_field, 'headline', 'reporter')
174-
assert_orderable(articles_field)
172+
assert_not_orderable(articles_field)
175173

176174

177175
def test_filter_filterset_related_results():
@@ -181,15 +179,13 @@ class Meta:
181179
model = Reporter
182180
interfaces = (Node, )
183181
filter_fields = ['first_name', 'articles']
184-
filter_order_by = True
185182

186183
class ArticleFilterNode(DjangoObjectType):
187184

188185
class Meta:
189186
interfaces = (Node, )
190187
model = Article
191188
filter_fields = ['headline', 'reporter']
192-
filter_order_by = True
193189

194190
class Query(ObjectType):
195191
all_reporters = DjangoFilterConnectionField(ReporterFilterNode)

graphene_django/filter/utils.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ def get_filtering_args_from_filterset(filterset_class, type):
1818
field_type.description = filter_field.label
1919
args[name] = field_type
2020

21-
# Also add the 'order_by' field
22-
if getattr(filterset_class._meta, 'order_by', None):
23-
args[filterset_class.order_by_field] = String()
24-
2521
return args
2622

2723

graphene_django/types.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ def __new__(cls, name, bases, attrs):
6565
# we allow more attributes in Meta
6666
defaults.update(
6767
filter_fields=(),
68-
filter_order_by=(),
6968
)
7069

7170
options = Options(

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
'pytest-runner',
4343
],
4444
tests_require=[
45-
'django-filter>=0.10.0',
45+
'django-filter>=1.0.0',
4646
'pytest',
4747
'pytest-django==2.9.1',
4848
'mock',

0 commit comments

Comments
 (0)