mirror of
https://github.com/graphql-python/graphene-django.git
synced 2024-11-10 19:57:15 +03:00
fix(converter): wrap field with NonNull if it is required (#545)
Co-authored-by: Jonathan Kim <jkimbo@gmail.com>
This commit is contained in:
parent
56f1db80cf
commit
48bfc395ee
|
@ -255,10 +255,14 @@ def convert_field_to_djangomodel(field, registry=None):
|
|||
|
||||
@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)
|
||||
|
@ -271,5 +275,9 @@ def convert_postgres_field_to_string(field, registry=None):
|
|||
def convert_postgres_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)
|
||||
|
|
|
@ -310,6 +310,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
|
||||
|
||||
|
||||
|
@ -321,6 +329,17 @@ 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
|
||||
|
||||
|
||||
|
@ -341,7 +360,8 @@ 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
|
||||
|
||||
|
||||
def test_generate_enum_name(graphene_settings):
|
||||
|
|
Loading…
Reference in New Issue
Block a user