Skip to content

Commit 6f1389c

Browse files
tcleonardThomas Leonard
and
Thomas Leonard
authored
fix: declaration of required variable in filters v2 (#1136)
* fix: declaration of required variable * Add unit test * Fix flaky test * Formatting * Fix for python 2.7 Co-authored-by: Thomas Leonard <[email protected]>
1 parent e323e2b commit 6f1389c

File tree

4 files changed

+44
-10
lines changed

4 files changed

+44
-10
lines changed

graphene_django/converter.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ class EnumWithDescriptionsType(object):
6969
def description(self):
7070
return named_choices_descriptions[self.name]
7171

72-
return Enum(name, list(named_choices), type=EnumWithDescriptionsType)
72+
if named_choices == []:
73+
# Python 2.7 doesn't handle enums with lists with zero entries, but works okay with empty sets
74+
named_choices = set()
75+
76+
return Enum(name, named_choices, type=EnumWithDescriptionsType)
7377

7478

7579
def generate_enum_name(django_model_meta, field):

graphene_django/filter/tests/test_enum_filtering.py

+18-6
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,22 @@ def test_filter_enum_field_schema_type(schema):
135135
in schema_str
136136
)
137137

138-
assert (
139-
"""type Query {
140-
allReporters(offset: Int, before: String, after: String, first: Int, last: Int): ReporterTypeConnection
141-
allArticles(offset: Int, before: String, after: String, first: Int, last: Int, lang: ArticleLang, lang_In: [ArticleLang], reporter_AChoice: ReporterAChoice, reporter_AChoice_In: [ReporterAChoice]): ArticleTypeConnection
142-
}"""
143-
in schema_str
138+
filters = {
139+
"offset": "Int",
140+
"before": "String",
141+
"after": "String",
142+
"first": "Int",
143+
"last": "Int",
144+
"lang": "ArticleLang",
145+
"lang_In": "[ArticleLang]",
146+
"reporter_AChoice": "ReporterAChoice",
147+
"reporter_AChoice_In": "[ReporterAChoice]",
148+
}
149+
150+
all_articles_filters = (
151+
schema_str.split(" allArticles(")[1]
152+
.split("): ArticleTypeConnection\n")[0]
153+
.split(", ")
144154
)
155+
for filter_field, gql_type in filters.items():
156+
assert "{}: {}".format(filter_field, gql_type) in all_articles_filters

graphene_django/filter/tests/test_fields.py

+20-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
if DJANGO_FILTER_INSTALLED:
1818
import django_filters
19-
from django_filters import FilterSet, NumberFilter
19+
from django_filters import FilterSet, NumberFilter, OrderingFilter
2020

2121
from graphene_django.filter import (
2222
GlobalIDFilter,
@@ -1216,3 +1216,22 @@ class Query(ObjectType):
12161216
assert result.data == {
12171217
"people": {"edges": [{"node": {"name": "Joe"}}, {"node": {"name": "Bob"}},]}
12181218
}
1219+
1220+
1221+
def test_only_custom_filters():
1222+
class ReporterFilter(FilterSet):
1223+
class Meta:
1224+
model = Reporter
1225+
fields = []
1226+
1227+
some_filter = OrderingFilter(fields=("name",))
1228+
1229+
class ReporterFilterNode(DjangoObjectType):
1230+
class Meta:
1231+
model = Reporter
1232+
interfaces = (Node,)
1233+
fields = "__all__"
1234+
filterset_class = ReporterFilter
1235+
1236+
field = DjangoFilterConnectionField(ReporterFilterNode)
1237+
assert_arguments(field, "some_filter")

graphene_django/filter/utils.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def get_filtering_args_from_filterset(filterset_class, type):
3939
registry = type._meta.registry
4040
for name, filter_field in six.iteritems(filterset_class.base_filters):
4141
filter_type = filter_field.lookup_expr
42+
required = filter_field.extra.get("required", False)
4243
field_type = None
4344
form_field = None
4445

@@ -49,8 +50,6 @@ def get_filtering_args_from_filterset(filterset_class, type):
4950
or isinstance(filter_field, ArrayFilter)
5051
):
5152
# Get the filter field for filters that are no explicitly declared.
52-
53-
required = filter_field.extra.get("required", False)
5453
if filter_type == "isnull":
5554
field = graphene.Boolean(required=required)
5655
else:

0 commit comments

Comments
 (0)