11import itertools
22
3- import six
4- from django .conf import settings
53from django .db import models
64from django .utils .text import capfirst
75from django_filters import Filter , MultipleChoiceFilter
8- from django_filters .filterset import FilterSet , FilterSetMetaclass
6+ from django_filters .filterset import BaseFilterSet , FilterSet
97from django_filters .filterset import FILTER_FOR_DBFIELD_DEFAULTS
108
119from graphql_relay .node .node import from_global_id
@@ -29,9 +27,6 @@ def filter(self, qs, value):
2927 return super (GlobalIDMultipleChoiceFilter , self ).filter (qs , gids )
3028
3129
32- ORDER_BY_FIELD = getattr (settings , 'GRAPHENE_ORDER_BY_FIELD' , 'order_by' )
33-
34-
3530GRAPHENE_FILTER_SET_OVERRIDES = {
3631 models .AutoField : {
3732 'filter_class' : GlobalIDFilter ,
@@ -48,25 +43,7 @@ def filter(self, qs, value):
4843}
4944
5045
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 ):
7047 FILTER_DEFAULTS = dict (itertools .chain (
7148 FILTER_FOR_DBFIELD_DEFAULTS .items (),
7249 GRAPHENE_FILTER_SET_OVERRIDES .items ()
@@ -93,26 +70,17 @@ def filter_for_reverse_field(cls, f, name):
9370 return GlobalIDFilter (** default )
9471
9572
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-
10573def setup_filterset (filterset_class ):
10674 """ Wrap a provided filterset in Graphene-specific functionality
10775 """
10876 return type (
10977 'Graphene{}' .format (filterset_class .__name__ ),
110- (six . with_metaclass ( GrapheneFilterSetMetaclass , GrapheneFilterSetMixin , filterset_class ), ),
78+ (filterset_class , GrapheneFilterSetMixin ),
11179 {},
11280 )
11381
11482
115- def custom_filterset_factory (model , filterset_base_class = GrapheneFilterSet ,
83+ def custom_filterset_factory (model , filterset_base_class = FilterSet ,
11684 ** meta ):
11785 """ Create a filterset for the given model using the provided meta data
11886 """
@@ -122,7 +90,7 @@ def custom_filterset_factory(model, filterset_base_class=GrapheneFilterSet,
12290 meta_class = type (str ('Meta' ), (object ,), meta )
12391 filterset = type (
12492 str ('%sFilterSet' % model ._meta .object_name ),
125- (filterset_base_class ,),
93+ (filterset_base_class , GrapheneFilterSetMixin ),
12694 {
12795 'Meta' : meta_class
12896 }
0 commit comments