Skip to content

Commit

Permalink
Merge form converter modules
Browse files Browse the repository at this point in the history
  • Loading branch information
Grant McConnaughey committed Oct 2, 2017
1 parent f5083cb commit 666ddb2
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 121 deletions.
2 changes: 1 addition & 1 deletion graphene_django/filter/utils.py
Expand Up @@ -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):
Expand Down
75 changes: 0 additions & 75 deletions graphene_django/form_converter.py

This file was deleted.

100 changes: 56 additions & 44 deletions 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()

Expand All @@ -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
"""
@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(description=field.help_text, required=field.required)

graphql_type = get_graphene_type_from_form_field(field)

kwargs = {
'description': field.help_text,
'required': is_input and field.required,
}
@convert_form_field.register(UUIDField)
def convert_form_field_to_uuid(field):
return graphene.UUID(description=field.help_text, required=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)
@convert_form_field.register(forms.IntegerField)
@convert_form_field.register(forms.NumberInput)
def convert_form_field_to_int(field):
return graphene.Int(description=field.help_text, required=field.required)


@get_graphene_type_from_form_field.register(forms.CharField)
@get_graphene_type_from_form_field.register(forms.ChoiceField)
def convert_form_field_to_string(field):
return graphene.String
@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.IntegerField)
def convert_form_field_to_int(field):
return graphene.Int
@convert_form_field.register(forms.NullBooleanField)
def convert_form_field_to_nullboolean(field):
return graphene.Boolean(description=field.help_text)


@get_graphene_type_from_form_field.register(forms.BooleanField)
def convert_form_field_to_bool(field):
return graphene.Boolean
@convert_form_field.register(forms.DecimalField)
@convert_form_field.register(forms.FloatField)
def convert_form_field_to_float(field):
return graphene.Float(description=field.help_text, required=field.required)


@get_graphene_type_from_form_field.register(forms.FloatField)
@get_graphene_type_from_form_field.register(forms.DecimalField)
def convert_form_field_to_float(field):
return graphene.Float
@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)


@get_graphene_type_from_form_field.register(forms.DateField)
@get_graphene_type_from_form_field.register(forms.DateTimeField)
def convert_form_field_to_datetime(field):
return graphene.types.datetime.DateTime
@convert_form_field.register(forms.ModelChoiceField)
@convert_form_field.register(GlobalIDFormField)
def convert_form_field_to_id(field):
return graphene.ID(required=field.required)


@get_graphene_type_from_form_field.register(forms.TimeField)
def convert_form_field_to_time(field):
return graphene.types.datetime.Time
@convert_form_field.register(forms.DateField)
@convert_form_field.register(forms.DateTimeField)
def convert_form_field_to_datetime(field):
return graphene.types.datetime.DateTime(description=field.help_text, required=field.required)


@get_graphene_type_from_form_field.register(forms.MultipleChoiceField)
def convert_form_field_to_list_of_string(field):
return (graphene.List, graphene.String)
@convert_form_field.register(forms.TimeField)
def convert_form_field_to_time(field):
return graphene.types.datetime.Time(description=field.help_text, required=field.required)
Expand Up @@ -4,7 +4,7 @@
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


Expand Down

0 comments on commit 666ddb2

Please sign in to comment.