1
1
import itertools
2
2
3
- import six
4
- from django .conf import settings
5
3
from django .db import models
6
4
from django .utils .text import capfirst
7
5
from django_filters import Filter , MultipleChoiceFilter
8
- from django_filters .filterset import FilterSet , FilterSetMetaclass
6
+ from django_filters .filterset import BaseFilterSet , FilterSet
9
7
from django_filters .filterset import FILTER_FOR_DBFIELD_DEFAULTS
10
8
11
9
from graphql_relay .node .node import from_global_id
@@ -29,9 +27,6 @@ def filter(self, qs, value):
29
27
return super (GlobalIDMultipleChoiceFilter , self ).filter (qs , gids )
30
28
31
29
32
- ORDER_BY_FIELD = getattr (settings , 'GRAPHENE_ORDER_BY_FIELD' , 'order_by' )
33
-
34
-
35
30
GRAPHENE_FILTER_SET_OVERRIDES = {
36
31
models .AutoField : {
37
32
'filter_class' : GlobalIDFilter ,
@@ -48,25 +43,7 @@ def filter(self, qs, value):
48
43
}
49
44
50
45
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
46
+ class GrapheneFilterSetMixin (BaseFilterSet ):
70
47
FILTER_DEFAULTS = dict (itertools .chain (
71
48
FILTER_FOR_DBFIELD_DEFAULTS .items (),
72
49
GRAPHENE_FILTER_SET_OVERRIDES .items ()
@@ -93,26 +70,17 @@ def filter_for_reverse_field(cls, f, name):
93
70
return GlobalIDFilter (** default )
94
71
95
72
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
-
105
73
def setup_filterset (filterset_class ):
106
74
""" Wrap a provided filterset in Graphene-specific functionality
107
75
"""
108
76
return type (
109
77
'Graphene{}' .format (filterset_class .__name__ ),
110
- (six . with_metaclass ( GrapheneFilterSetMetaclass , GrapheneFilterSetMixin , filterset_class ), ),
78
+ (filterset_class , GrapheneFilterSetMixin ),
111
79
{},
112
80
)
113
81
114
82
115
- def custom_filterset_factory (model , filterset_base_class = GrapheneFilterSet ,
83
+ def custom_filterset_factory (model , filterset_base_class = FilterSet ,
116
84
** meta ):
117
85
""" Create a filterset for the given model using the provided meta data
118
86
"""
@@ -122,7 +90,7 @@ def custom_filterset_factory(model, filterset_base_class=GrapheneFilterSet,
122
90
meta_class = type (str ('Meta' ), (object ,), meta )
123
91
filterset = type (
124
92
str ('%sFilterSet' % model ._meta .object_name ),
125
- (filterset_base_class ,),
93
+ (filterset_base_class , GrapheneFilterSetMixin ),
126
94
{
127
95
'Meta' : meta_class
128
96
}
0 commit comments