From 666ddb2ff38eae171ed20ef8b467cd2cb0eaa8e0 Mon Sep 17 00:00:00 2001 From: Grant McConnaughey Date: Mon, 2 Oct 2017 09:42:57 -0500 Subject: [PATCH] Merge form converter modules --- graphene_django/filter/utils.py | 2 +- graphene_django/form_converter.py | 75 ------------- graphene_django/forms/converter.py | 106 ++++++++++-------- .../tests/test_converter.py} | 2 +- 4 files changed, 61 insertions(+), 124 deletions(-) delete mode 100644 graphene_django/form_converter.py rename graphene_django/{tests/test_form_converter.py => forms/tests/test_converter.py} (98%) diff --git a/graphene_django/filter/utils.py b/graphene_django/filter/utils.py index 6b938ce..cfa5621 100644 --- a/graphene_django/filter/utils.py +++ b/graphene_django/filter/utils.py @@ -8,7 +8,7 @@ def get_filtering_args_from_filterset(filterset_class, type): a Graphene Field. These arguments will be available to filter against in the GraphQL """ - from ..form_converter import convert_form_field + from ..forms.converter import convert_form_field args = {} for name, filter_field in six.iteritems(filterset_class.base_filters): diff --git a/graphene_django/form_converter.py b/graphene_django/form_converter.py deleted file mode 100644 index 46a38b3..0000000 --- a/graphene_django/form_converter.py +++ /dev/null @@ -1,75 +0,0 @@ -from django import forms -from django.forms.fields import BaseTemporalField - -from graphene import ID, Boolean, Float, Int, List, String, UUID - -from .forms import GlobalIDFormField, GlobalIDMultipleChoiceField -from .utils import import_single_dispatch - -singledispatch = import_single_dispatch() - -try: - UUIDField = forms.UUIDField -except AttributeError: - class UUIDField(object): - pass - - -@singledispatch -def convert_form_field(field): - raise Exception( - "Don't know how to convert the Django form field %s (%s) " - "to Graphene type" % - (field, field.__class__) - ) - - -@convert_form_field.register(BaseTemporalField) -@convert_form_field.register(forms.CharField) -@convert_form_field.register(forms.EmailField) -@convert_form_field.register(forms.SlugField) -@convert_form_field.register(forms.URLField) -@convert_form_field.register(forms.ChoiceField) -@convert_form_field.register(forms.RegexField) -@convert_form_field.register(forms.Field) -def convert_form_field_to_string(field): - return String(description=field.help_text, required=field.required) - - -@convert_form_field.register(UUIDField) -def convert_form_field_to_uuid(field): - return UUID(description=field.help_text, required=field.required) - - -@convert_form_field.register(forms.IntegerField) -@convert_form_field.register(forms.NumberInput) -def convert_form_field_to_int(field): - return Int(description=field.help_text, required=field.required) - - -@convert_form_field.register(forms.BooleanField) -def convert_form_field_to_boolean(field): - return Boolean(description=field.help_text, required=True) - - -@convert_form_field.register(forms.NullBooleanField) -def convert_form_field_to_nullboolean(field): - return Boolean(description=field.help_text) - - -@convert_form_field.register(forms.DecimalField) -@convert_form_field.register(forms.FloatField) -def convert_form_field_to_float(field): - return Float(description=field.help_text, required=field.required) - - -@convert_form_field.register(forms.ModelMultipleChoiceField) -@convert_form_field.register(GlobalIDMultipleChoiceField) -def convert_form_field_to_list(field): - return List(ID, required=field.required) - - -@convert_form_field.register(forms.ModelChoiceField) -@convert_form_field.register(GlobalIDFormField) -def convert_form_field_to_id(field): - return ID(required=field.required) diff --git a/graphene_django/forms/converter.py b/graphene_django/forms/converter.py index 9d7b242..7e816d6 100644 --- a/graphene_django/forms/converter.py +++ b/graphene_django/forms/converter.py @@ -1,8 +1,17 @@ from django import forms from django.core.exceptions import ImproperlyConfigured -from graphene_django.utils import import_single_dispatch + import graphene +from .forms import GlobalIDFormField, GlobalIDMultipleChoiceField +from .utils import import_single_dispatch + +try: + UUIDField = forms.UUIDField +except AttributeError: + class UUIDField(object): + pass + singledispatch = import_single_dispatch() @@ -23,68 +32,71 @@ def convert_form_to_input_type(form_class): @singledispatch -def get_graphene_type_from_form_field(field): +def convert_form_field(field): raise ImproperlyConfigured( - "Don't know how to convert the form field %s (%s) " - "to Graphene type" % (field, field.__class__) + "Don't know how to convert the Django form field %s (%s) " + "to Graphene type" % + (field, field.__class__) ) -def convert_form_field(field, is_input=True): - """ - Converts a Django form field to a graphql field and marks the field as - required if we are creating an input type and the field itself is required - """ - - graphql_type = get_graphene_type_from_form_field(field) - - kwargs = { - 'description': field.help_text, - 'required': is_input and field.required, - } - - # if it is a tuple or a list it means that we are returning - # the graphql type and the child type - if isinstance(graphql_type, (list, tuple)): - kwargs['of_type'] = graphql_type[1] - graphql_type = graphql_type[0] - - return graphql_type(**kwargs) - - -@get_graphene_type_from_form_field.register(forms.CharField) -@get_graphene_type_from_form_field.register(forms.ChoiceField) +@convert_form_field.register(forms.BaseTemporalField) +@convert_form_field.register(forms.CharField) +@convert_form_field.register(forms.EmailField) +@convert_form_field.register(forms.SlugField) +@convert_form_field.register(forms.URLField) +@convert_form_field.register(forms.ChoiceField) +@convert_form_field.register(forms.RegexField) +@convert_form_field.register(forms.Field) def convert_form_field_to_string(field): - return graphene.String + return graphene.String(description=field.help_text, required=field.required) -@get_graphene_type_from_form_field.register(forms.IntegerField) +@convert_form_field.register(UUIDField) +def convert_form_field_to_uuid(field): + return graphene.UUID(description=field.help_text, required=field.required) + + +@convert_form_field.register(forms.IntegerField) +@convert_form_field.register(forms.NumberInput) def convert_form_field_to_int(field): - return graphene.Int + return graphene.Int(description=field.help_text, required=field.required) -@get_graphene_type_from_form_field.register(forms.BooleanField) -def convert_form_field_to_bool(field): - return graphene.Boolean +@convert_form_field.register(forms.BooleanField) +def convert_form_field_to_boolean(field): + return graphene.Boolean(description=field.help_text, required=True) -@get_graphene_type_from_form_field.register(forms.FloatField) -@get_graphene_type_from_form_field.register(forms.DecimalField) +@convert_form_field.register(forms.NullBooleanField) +def convert_form_field_to_nullboolean(field): + return graphene.Boolean(description=field.help_text) + + +@convert_form_field.register(forms.DecimalField) +@convert_form_field.register(forms.FloatField) def convert_form_field_to_float(field): - return graphene.Float + return graphene.Float(description=field.help_text, required=field.required) -@get_graphene_type_from_form_field.register(forms.DateField) -@get_graphene_type_from_form_field.register(forms.DateTimeField) +@convert_form_field.register(forms.ModelMultipleChoiceField) +@convert_form_field.register(GlobalIDMultipleChoiceField) +def convert_form_field_to_list(field): + return graphene.List(graphene.ID, required=field.required) + + +@convert_form_field.register(forms.ModelChoiceField) +@convert_form_field.register(GlobalIDFormField) +def convert_form_field_to_id(field): + return graphene.ID(required=field.required) + + +@convert_form_field.register(forms.DateField) +@convert_form_field.register(forms.DateTimeField) def convert_form_field_to_datetime(field): - return graphene.types.datetime.DateTime + return graphene.types.datetime.DateTime(description=field.help_text, required=field.required) -@get_graphene_type_from_form_field.register(forms.TimeField) +@convert_form_field.register(forms.TimeField) def convert_form_field_to_time(field): - return graphene.types.datetime.Time - - -@get_graphene_type_from_form_field.register(forms.MultipleChoiceField) -def convert_form_field_to_list_of_string(field): - return (graphene.List, graphene.String) + return graphene.types.datetime.Time(description=field.help_text, required=field.required) diff --git a/graphene_django/tests/test_form_converter.py b/graphene_django/forms/tests/test_converter.py similarity index 98% rename from graphene_django/tests/test_form_converter.py rename to graphene_django/forms/tests/test_converter.py index 5a13554..ec66f8f 100644 --- a/graphene_django/tests/test_form_converter.py +++ b/graphene_django/forms/tests/test_converter.py @@ -4,7 +4,7 @@ from py.test import raises import graphene from graphene import ID, List, NonNull -from ..form_converter import convert_form_field +from ..converter import convert_form_field from .models import Reporter