Refactor converter

This commit is contained in:
Patrick Arminio 2017-06-26 11:36:48 +01:00
parent c3899248af
commit d10895d9ce

View File

@ -24,49 +24,45 @@ def convert_serializer_to_input_type(serializer_class):
@singledispatch @singledispatch
def convert_serializer_field(field): def get_graphene_type_from_serializer_field(field):
raise ImproperlyConfigured( raise ImproperlyConfigured(
"Don't know how to convert the serializer field %s (%s) " "Don't know how to convert the serializer field %s (%s) "
"to Graphene type" % (field, field.__class__) "to Graphene type" % (field, field.__class__)
) )
def required_if_input_and_required(func): def convert_serializer_field(field, is_input=True):
""" """
Marks the field as required if we are creating an input type Converts a django rest frameworks field to a graphql field
and marks the field as required if we are creating an input type
and the field itself is required and the field itself is required
""" """
def wrap(field, is_input=True): # TODO: sub types? kwargs
graphql_type = func(field)
return graphql_type( graphql_type = get_graphene_type_from_serializer_field(field)
description=field.help_text, required=is_input and field.required
)
return wrap return graphql_type(
description=field.help_text, required=is_input and field.required
)
@convert_serializer_field.register(serializers.Field) @get_graphene_type_from_serializer_field.register(serializers.Field)
@required_if_input_and_required
def convert_serializer_field_to_string(field): def convert_serializer_field_to_string(field):
return graphene.String return graphene.String
@convert_serializer_field.register(serializers.IntegerField) @get_graphene_type_from_serializer_field.register(serializers.IntegerField)
@required_if_input_and_required
def convert_serializer_field_to_int(field): def convert_serializer_field_to_int(field):
return graphene.Int return graphene.Int
@convert_serializer_field.register(serializers.BooleanField) @get_graphene_type_from_serializer_field.register(serializers.BooleanField)
@required_if_input_and_required
def convert_serializer_field_to_bool(field): def convert_serializer_field_to_bool(field):
return graphene.Boolean return graphene.Boolean
@convert_serializer_field.register(serializers.FloatField) @get_graphene_type_from_serializer_field.register(serializers.FloatField)
@convert_serializer_field.register(serializers.DecimalField) @get_graphene_type_from_serializer_field.register(serializers.DecimalField)
@required_if_input_and_required
def convert_serializer_field_to_float(field): def convert_serializer_field_to_float(field):
return graphene.Float return graphene.Float