4
4
from functools import singledispatch
5
5
6
6
from django .conf import settings
7
- from django .contrib .contenttypes .fields import GenericForeignKey , GenericRel , GenericRelation
7
+ from django .contrib .contenttypes .fields import (
8
+ GenericForeignKey ,
9
+ GenericRel ,
10
+ GenericRelation ,
11
+ )
8
12
from django .db import models
9
13
from django .utils .encoding import force_str
10
- from graphene import ID , UUID , Boolean , Dynamic , Enum , Field , Float , Int , List , NonNull , String
14
+ from graphene import (
15
+ ID ,
16
+ UUID ,
17
+ Boolean ,
18
+ Dynamic ,
19
+ Enum ,
20
+ Field ,
21
+ Float ,
22
+ Int ,
23
+ List ,
24
+ NonNull ,
25
+ String ,
26
+ )
11
27
from graphene .types .json import JSONString
12
28
from graphene .utils .str_converters import to_camel_case
13
29
from graphene_django .compat import ArrayField , HStoreField , JSONField , RangeField
30
46
31
47
def assert_valid_name (name ):
32
48
"""Helper to assert that provided names are valid."""
33
- assert COMPILED_NAME_PATTERN .match (name ), 'Names must match /{}/ but "{}" does not.' . format (
34
- NAME_PATTERN , name
35
- )
49
+ assert COMPILED_NAME_PATTERN .match (
50
+ name
51
+ ), 'Names must match /{}/ but "{}" does not.' . format ( NAME_PATTERN , name )
36
52
37
53
38
54
def convert_choice_name (name ):
@@ -59,7 +75,9 @@ def get_choices(choices):
59
75
yield name , value , description
60
76
61
77
62
- def convert_django_field_with_choices (field , registry = None , input_flag = None , nested_field = False ):
78
+ def convert_django_field_with_choices (
79
+ field , registry = None , input_flag = None , nested_field = False
80
+ ):
63
81
choices = getattr (field , "choices" , None )
64
82
if choices :
65
83
meta = field .model ._meta
@@ -109,14 +127,18 @@ def construct_fields(
109
127
110
128
if settings .DEBUG :
111
129
if input_flag == "create" :
112
- _model_fields = sorted (_model_fields , key = lambda f : (not is_required (f [1 ]), f [0 ]))
130
+ _model_fields = sorted (
131
+ _model_fields , key = lambda f : (not is_required (f [1 ]), f [0 ])
132
+ )
113
133
elif not input_flag :
114
134
_model_fields = sorted (_model_fields , key = lambda f : f [0 ])
115
135
116
136
fields = OrderedDict ()
117
137
118
138
if input_flag == "delete" :
119
- converted = convert_django_field_with_choices (dict (_model_fields )["id" ], registry )
139
+ converted = convert_django_field_with_choices (
140
+ dict (_model_fields )["id" ], registry
141
+ )
120
142
fields ["id" ] = converted
121
143
else :
122
144
for name , field in _model_fields :
@@ -126,7 +148,9 @@ def construct_fields(
126
148
nested_field = name in nested_fields
127
149
is_not_in_only = only_fields and name not in only_fields
128
150
# is_already_created = name in options.fields
129
- is_excluded = exclude_fields and name in exclude_fields # or is_already_created
151
+ is_excluded = (
152
+ exclude_fields and name in exclude_fields
153
+ ) # or is_already_created
130
154
# https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ForeignKey.related_query_name
131
155
is_no_backref = str (name ).endswith ("+" )
132
156
# if is_not_in_only or is_excluded or is_no_backref:
@@ -144,15 +168,19 @@ def construct_fields(
144
168
):
145
169
continue
146
170
147
- converted = convert_django_field_with_choices (field , registry , input_flag , nested_field )
171
+ converted = convert_django_field_with_choices (
172
+ field , registry , input_flag , nested_field
173
+ )
148
174
fields [name ] = converted
149
175
return fields
150
176
151
177
152
178
@singledispatch
153
179
def convert_django_field (field , registry = None , input_flag = None , nested_field = False ):
154
180
raise Exception (
155
- "Don't know how to convert the Django field {} ({})" .format (field , field .__class__ )
181
+ "Don't know how to convert the Django field {} ({})" .format (
182
+ field , field .__class__
183
+ )
156
184
)
157
185
158
186
@@ -212,7 +240,9 @@ def convert_field_to_boolean(field, registry=None, input_flag=None, nested_field
212
240
213
241
214
242
@convert_django_field .register (models .NullBooleanField )
215
- def convert_field_to_nullboolean (field , registry = None , input_flag = None , nested_field = False ):
243
+ def convert_field_to_nullboolean (
244
+ field , registry = None , input_flag = None , nested_field = False
245
+ ):
216
246
return Boolean (
217
247
description = field .help_text or field .verbose_name ,
218
248
required = is_required (field ) and input_flag == "create" ,
@@ -246,7 +276,9 @@ def convert_date_to_string(field, registry=None, input_flag=None, nested_field=F
246
276
247
277
248
278
@convert_django_field .register (models .DateTimeField )
249
- def convert_datetime_to_string (field , registry = None , input_flag = None , nested_field = False ):
279
+ def convert_datetime_to_string (
280
+ field , registry = None , input_flag = None , nested_field = False
281
+ ):
250
282
return CustomDateTime (
251
283
description = field .help_text or field .verbose_name ,
252
284
required = is_required (field ) and input_flag == "create" ,
@@ -279,7 +311,9 @@ def dynamic_type():
279
311
280
312
281
313
@convert_django_field .register (models .ManyToManyField )
282
- def convert_field_to_list_or_connection (field , registry = None , input_flag = None , nested_field = False ):
314
+ def convert_field_to_list_or_connection (
315
+ field , registry = None , input_flag = None , nested_field = False
316
+ ):
283
317
model = get_related_model (field )
284
318
285
319
def dynamic_type ():
@@ -315,7 +349,9 @@ def dynamic_type():
315
349
@convert_django_field .register (GenericRel )
316
350
@convert_django_field .register (models .ManyToManyRel )
317
351
@convert_django_field .register (models .ManyToOneRel )
318
- def convert_many_rel_to_djangomodel (field , registry = None , input_flag = None , nested_field = False ):
352
+ def convert_many_rel_to_djangomodel (
353
+ field , registry = None , input_flag = None , nested_field = False
354
+ ):
319
355
model = field .related_model
320
356
321
357
def dynamic_type ():
@@ -343,12 +379,16 @@ def dynamic_type():
343
379
344
380
@convert_django_field .register (models .OneToOneField )
345
381
@convert_django_field .register (models .ForeignKey )
346
- def convert_field_to_djangomodel (field , registry = None , input_flag = None , nested_field = False ):
382
+ def convert_field_to_djangomodel (
383
+ field , registry = None , input_flag = None , nested_field = False
384
+ ):
347
385
model = get_related_model (field )
348
386
349
387
def dynamic_type ():
350
388
# Avoid create field for auto generate OneToOneField product of an inheritance
351
- if isinstance (field , models .OneToOneField ) and issubclass (field .model , field .related_model ):
389
+ if isinstance (field , models .OneToOneField ) and issubclass (
390
+ field .model , field .related_model
391
+ ):
352
392
return
353
393
if input_flag and not nested_field :
354
394
return ID (
@@ -433,7 +473,9 @@ def dynamic_type():
433
473
434
474
435
475
@convert_django_field .register (ArrayField )
436
- def convert_postgres_array_to_list (field , registry = None , input_flag = None , nested_field = False ):
476
+ def convert_postgres_array_to_list (
477
+ field , registry = None , input_flag = None , nested_field = False
478
+ ):
437
479
base_type = convert_django_field (field .base_field )
438
480
if not isinstance (base_type , (List , NonNull )):
439
481
base_type = type (base_type )
@@ -446,15 +488,19 @@ def convert_postgres_array_to_list(field, registry=None, input_flag=None, nested
446
488
447
489
@convert_django_field .register (HStoreField )
448
490
@convert_django_field .register (JSONField )
449
- def convert_postgres_field_to_string (field , registry = None , input_flag = None , nested_field = False ):
491
+ def convert_postgres_field_to_string (
492
+ field , registry = None , input_flag = None , nested_field = False
493
+ ):
450
494
return JSONString (
451
495
description = field .help_text or field .verbose_name ,
452
496
required = is_required (field ) and input_flag == "create" ,
453
497
)
454
498
455
499
456
500
@convert_django_field .register (RangeField )
457
- def convert_postgres_range_to_string (field , registry = None , input_flag = None , nested_field = False ):
501
+ def convert_postgres_range_to_string (
502
+ field , registry = None , input_flag = None , nested_field = False
503
+ ):
458
504
inner_type = convert_django_field (field .base_field )
459
505
if not isinstance (inner_type , (List , NonNull )):
460
506
inner_type = type (inner_type )
0 commit comments