Skip to content

Commit

Permalink
fix(converter): wrap field with NonNull if it is required
Browse files Browse the repository at this point in the history
  • Loading branch information
helloqiu committed May 22, 2019
1 parent b0cba39 commit 437b263
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
10 changes: 5 additions & 5 deletions graphene_django/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,10 +211,10 @@ def dynamic_type():

@convert_django_field.register(ArrayField)
def convert_postgres_array_to_list(field, registry=None):
base_type = convert_django_field(field.base_field)
if not isinstance(base_type, (List, NonNull)):
base_type = type(base_type)
return List(base_type, description=field.help_text, required=not field.null)
inner_type = convert_django_field(field.base_field)
if not isinstance(inner_type, (List, NonNull)):
inner_type = NonNull(type(inner_type)) if inner_type.kwargs['required'] else type(inner_type)
return List(inner_type, description=field.help_text, required=not field.null)


@convert_django_field.register(HStoreField)
Expand All @@ -227,5 +227,5 @@ def convert_posgres_field_to_string(field, registry=None):
def convert_posgres_range_to_string(field, registry=None):
inner_type = convert_django_field(field.base_field)
if not isinstance(inner_type, (List, NonNull)):
inner_type = type(inner_type)
inner_type = NonNull(type(inner_type)) if inner_type.kwargs['required'] else type(inner_type)
return List(inner_type, description=field.help_text, required=not field.null)
20 changes: 19 additions & 1 deletion graphene_django/tests/test_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,14 @@ def test_should_postgres_array_convert_list():
)
assert isinstance(field.type, graphene.NonNull)
assert isinstance(field.type.of_type, graphene.List)
assert isinstance(field.type.of_type.of_type, graphene.NonNull)
assert field.type.of_type.of_type.of_type == graphene.String

field = assert_conversion(
ArrayField, graphene.List, models.CharField(max_length=100, null=True)
)
assert isinstance(field.type, graphene.NonNull)
assert isinstance(field.type.of_type, graphene.List)
assert field.type.of_type.of_type == graphene.String


Expand All @@ -279,6 +287,15 @@ def test_should_postgres_array_multiple_convert_list():
assert isinstance(field.type, graphene.NonNull)
assert isinstance(field.type.of_type, graphene.List)
assert isinstance(field.type.of_type.of_type, graphene.List)
assert isinstance(field.type.of_type.of_type.of_type, graphene.NonNull)
assert field.type.of_type.of_type.of_type.of_type == graphene.String

field = assert_conversion(
ArrayField, graphene.List, ArrayField(models.CharField(max_length=100, null=True))
)
assert isinstance(field.type, graphene.NonNull)
assert isinstance(field.type.of_type, graphene.List)
assert isinstance(field.type.of_type.of_type, graphene.List)
assert field.type.of_type.of_type.of_type == graphene.String


Expand All @@ -299,4 +316,5 @@ def test_should_postgres_range_convert_list():
field = assert_conversion(IntegerRangeField, graphene.List)
assert isinstance(field.type, graphene.NonNull)
assert isinstance(field.type.of_type, graphene.List)
assert field.type.of_type.of_type == graphene.Int
assert isinstance(field.type.of_type.of_type, graphene.NonNull)
assert field.type.of_type.of_type.of_type == graphene.Int

0 comments on commit 437b263

Please sign in to comment.