1
1
from django import forms
2
2
from django .core .exceptions import ImproperlyConfigured
3
- from graphene_django . utils import import_single_dispatch
3
+
4
4
import graphene
5
5
6
+ from .forms import GlobalIDFormField , GlobalIDMultipleChoiceField
7
+ from .utils import import_single_dispatch
8
+
9
+ try :
10
+ UUIDField = forms .UUIDField
11
+ except AttributeError :
12
+ class UUIDField (object ):
13
+ pass
14
+
6
15
7
16
singledispatch = import_single_dispatch ()
8
17
@@ -23,68 +32,71 @@ def convert_form_to_input_type(form_class):
23
32
24
33
25
34
@singledispatch
26
- def get_graphene_type_from_form_field (field ):
35
+ def convert_form_field (field ):
27
36
raise ImproperlyConfigured (
28
- "Don't know how to convert the form field %s (%s) "
29
- "to Graphene type" % (field , field .__class__ )
37
+ "Don't know how to convert the Django form field %s (%s) "
38
+ "to Graphene type" %
39
+ (field , field .__class__ )
30
40
)
31
41
32
42
33
- def convert_form_field (field , is_input = True ):
34
- """
35
- Converts a Django form field to a graphql field and marks the field as
36
- required if we are creating an input type and the field itself is required
37
- """
43
+ @convert_form_field .register (forms .BaseTemporalField )
44
+ @convert_form_field .register (forms .CharField )
45
+ @convert_form_field .register (forms .EmailField )
46
+ @convert_form_field .register (forms .SlugField )
47
+ @convert_form_field .register (forms .URLField )
48
+ @convert_form_field .register (forms .ChoiceField )
49
+ @convert_form_field .register (forms .RegexField )
50
+ @convert_form_field .register (forms .Field )
51
+ def convert_form_field_to_string (field ):
52
+ return graphene .String (description = field .help_text , required = field .required )
38
53
39
- graphql_type = get_graphene_type_from_form_field (field )
40
54
41
- kwargs = {
42
- 'description' : field .help_text ,
43
- 'required' : is_input and field .required ,
44
- }
55
+ @convert_form_field .register (UUIDField )
56
+ def convert_form_field_to_uuid (field ):
57
+ return graphene .UUID (description = field .help_text , required = field .required )
45
58
46
- # if it is a tuple or a list it means that we are returning
47
- # the graphql type and the child type
48
- if isinstance (graphql_type , (list , tuple )):
49
- kwargs ['of_type' ] = graphql_type [1 ]
50
- graphql_type = graphql_type [0 ]
51
59
52
- return graphql_type (** kwargs )
60
+ @convert_form_field .register (forms .IntegerField )
61
+ @convert_form_field .register (forms .NumberInput )
62
+ def convert_form_field_to_int (field ):
63
+ return graphene .Int (description = field .help_text , required = field .required )
53
64
54
65
55
- @get_graphene_type_from_form_field .register (forms .CharField )
56
- @get_graphene_type_from_form_field .register (forms .ChoiceField )
57
- def convert_form_field_to_string (field ):
58
- return graphene .String
66
+ @convert_form_field .register (forms .BooleanField )
67
+ def convert_form_field_to_boolean (field ):
68
+ return graphene .Boolean (description = field .help_text , required = True )
59
69
60
70
61
- @get_graphene_type_from_form_field .register (forms .IntegerField )
62
- def convert_form_field_to_int (field ):
63
- return graphene .Int
71
+ @convert_form_field .register (forms .NullBooleanField )
72
+ def convert_form_field_to_nullboolean (field ):
73
+ return graphene .Boolean ( description = field . help_text )
64
74
65
75
66
- @get_graphene_type_from_form_field .register (forms .BooleanField )
67
- def convert_form_field_to_bool (field ):
68
- return graphene .Boolean
76
+ @convert_form_field .register (forms .DecimalField )
77
+ @convert_form_field .register (forms .FloatField )
78
+ def convert_form_field_to_float (field ):
79
+ return graphene .Float (description = field .help_text , required = field .required )
69
80
70
81
71
- @get_graphene_type_from_form_field .register (forms .FloatField )
72
- @get_graphene_type_from_form_field .register (forms . DecimalField )
73
- def convert_form_field_to_float (field ):
74
- return graphene .Float
82
+ @convert_form_field .register (forms .ModelMultipleChoiceField )
83
+ @convert_form_field .register (GlobalIDMultipleChoiceField )
84
+ def convert_form_field_to_list (field ):
85
+ return graphene .List ( graphene . ID , required = field . required )
75
86
76
87
77
- @get_graphene_type_from_form_field .register (forms .DateField )
78
- @get_graphene_type_from_form_field .register (forms . DateTimeField )
79
- def convert_form_field_to_datetime (field ):
80
- return graphene .types . datetime . DateTime
88
+ @convert_form_field .register (forms .ModelChoiceField )
89
+ @convert_form_field .register (GlobalIDFormField )
90
+ def convert_form_field_to_id (field ):
91
+ return graphene .ID ( required = field . required )
81
92
82
93
83
- @get_graphene_type_from_form_field .register (forms .TimeField )
84
- def convert_form_field_to_time (field ):
85
- return graphene .types .datetime .Time
94
+ @convert_form_field .register (forms .DateField )
95
+ @convert_form_field .register (forms .DateTimeField )
96
+ def convert_form_field_to_datetime (field ):
97
+ return graphene .types .datetime .DateTime (description = field .help_text , required = field .required )
86
98
87
99
88
- @get_graphene_type_from_form_field .register (forms .MultipleChoiceField )
89
- def convert_form_field_to_list_of_string (field ):
90
- return ( graphene .List , graphene . String )
100
+ @convert_form_field .register (forms .TimeField )
101
+ def convert_form_field_to_time (field ):
102
+ return graphene .types . datetime . Time ( description = field . help_text , required = field . required )
0 commit comments