From d10895d9ce0ad81a976d7795b8d7252eac1a20e7 Mon Sep 17 00:00:00 2001 From: Patrick Arminio Date: Mon, 26 Jun 2017 11:36:48 +0100 Subject: [PATCH] Refactor converter --- .../rest_framework/serializer_converter.py | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/graphene_django/rest_framework/serializer_converter.py b/graphene_django/rest_framework/serializer_converter.py index df208d7..dd93135 100644 --- a/graphene_django/rest_framework/serializer_converter.py +++ b/graphene_django/rest_framework/serializer_converter.py @@ -24,49 +24,45 @@ def convert_serializer_to_input_type(serializer_class): @singledispatch -def convert_serializer_field(field): +def get_graphene_type_from_serializer_field(field): raise ImproperlyConfigured( "Don't know how to convert the serializer field %s (%s) " "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 """ - def wrap(field, is_input=True): - graphql_type = func(field) + # TODO: sub types? kwargs - return graphql_type( - description=field.help_text, required=is_input and field.required - ) + graphql_type = get_graphene_type_from_serializer_field(field) - return wrap + return graphql_type( + description=field.help_text, required=is_input and field.required + ) -@convert_serializer_field.register(serializers.Field) -@required_if_input_and_required +@get_graphene_type_from_serializer_field.register(serializers.Field) def convert_serializer_field_to_string(field): return graphene.String -@convert_serializer_field.register(serializers.IntegerField) -@required_if_input_and_required +@get_graphene_type_from_serializer_field.register(serializers.IntegerField) def convert_serializer_field_to_int(field): return graphene.Int -@convert_serializer_field.register(serializers.BooleanField) -@required_if_input_and_required +@get_graphene_type_from_serializer_field.register(serializers.BooleanField) def convert_serializer_field_to_bool(field): return graphene.Boolean -@convert_serializer_field.register(serializers.FloatField) -@convert_serializer_field.register(serializers.DecimalField) -@required_if_input_and_required +@get_graphene_type_from_serializer_field.register(serializers.FloatField) +@get_graphene_type_from_serializer_field.register(serializers.DecimalField) def convert_serializer_field_to_float(field): return graphene.Float