graphene-django/graphene_django/forms/converter.py

118 lines
3.4 KiB
Python
Raw Normal View History

from functools import singledispatch
2017-07-18 18:15:25 +03:00
from django import forms
from django.core.exceptions import ImproperlyConfigured
2017-10-02 17:42:57 +03:00
from graphene import (
ID,
UUID,
Boolean,
Date,
DateTime,
Decimal,
Float,
Int,
List,
String,
Time,
)
2017-07-18 18:15:25 +03:00
2017-10-02 17:42:57 +03:00
from .forms import GlobalIDFormField, GlobalIDMultipleChoiceField
2017-07-18 18:15:25 +03:00
def get_form_field_description(field):
return str(field.help_text) if field.help_text else None
2017-07-18 18:15:25 +03:00
@singledispatch
2017-10-02 17:42:57 +03:00
def convert_form_field(field):
2017-07-18 18:15:25 +03:00
raise ImproperlyConfigured(
"Don't know how to convert the Django form field {} ({}) "
"to Graphene type".format(field, field.__class__)
2017-07-18 18:15:25 +03:00
)
2017-10-02 21:03:20 +03:00
@convert_form_field.register(forms.fields.BaseTemporalField)
2017-10-02 17:42:57 +03:00
@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=get_form_field_description(field), required=field.required
)
2017-07-18 18:15:25 +03:00
2017-12-10 08:53:13 +03:00
@convert_form_field.register(forms.UUIDField)
2017-10-02 17:42:57 +03:00
def convert_form_field_to_uuid(field):
return UUID(description=get_form_field_description(field), required=field.required)
2017-07-18 18:15:25 +03:00
2017-10-02 17:42:57 +03:00
@convert_form_field.register(forms.IntegerField)
@convert_form_field.register(forms.NumberInput)
def convert_form_field_to_int(field):
return Int(description=get_form_field_description(field), required=field.required)
2017-07-18 18:15:25 +03:00
2017-10-02 17:42:57 +03:00
@convert_form_field.register(forms.BooleanField)
def convert_form_field_to_boolean(field):
return Boolean(
description=get_form_field_description(field), required=field.required
)
2017-07-18 18:15:25 +03:00
2017-10-02 17:42:57 +03:00
@convert_form_field.register(forms.NullBooleanField)
def convert_form_field_to_nullboolean(field):
return Boolean(description=get_form_field_description(field))
2017-07-18 18:15:25 +03:00
2017-10-02 17:42:57 +03:00
@convert_form_field.register(forms.FloatField)
def convert_form_field_to_float(field):
return Float(description=get_form_field_description(field), required=field.required)
2017-07-18 18:15:25 +03:00
@convert_form_field.register(forms.DecimalField)
def convert_form_field_to_decimal(field):
return Decimal(
description=get_form_field_description(field), required=field.required
)
@convert_form_field.register(forms.MultipleChoiceField)
def convert_form_field_to_string_list(field):
return List(
String, description=get_form_field_description(field), required=field.required
)
2017-10-02 17:42:57 +03:00
@convert_form_field.register(forms.ModelMultipleChoiceField)
@convert_form_field.register(GlobalIDMultipleChoiceField)
def convert_form_field_to_id_list(field):
return List(ID, required=field.required)
@convert_form_field.register(forms.DateField)
def convert_form_field_to_date(field):
return Date(description=get_form_field_description(field), required=field.required)
@convert_form_field.register(forms.DateTimeField)
def convert_form_field_to_datetime(field):
return DateTime(
description=get_form_field_description(field), required=field.required
)
@convert_form_field.register(forms.TimeField)
def convert_form_field_to_time(field):
return Time(description=get_form_field_description(field), required=field.required)
2017-07-18 18:15:25 +03:00
2017-10-02 17:42:57 +03:00
@convert_form_field.register(forms.ModelChoiceField)
@convert_form_field.register(GlobalIDFormField)
def convert_form_field_to_id(field):
return ID(required=field.required)