Skip to content

Commit b320b94

Browse files
authored
(v3) Cast potentially translated strings used as descriptions (#976)
1 parent fb90cb7 commit b320b94

File tree

3 files changed

+73
-25
lines changed

3 files changed

+73
-25
lines changed

graphene_django/converter.py

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,20 @@ def convert_django_field_with_choices(
108108
if choices and convert_choices_to_enum:
109109
enum = convert_choice_field_to_enum(field)
110110
required = not (field.blank or field.null)
111-
converted = enum(description=field.help_text, required=required)
111+
converted = enum(
112+
description=get_django_field_description(field), required=required
113+
)
112114
else:
113115
converted = convert_django_field(field, registry)
114116
if registry is not None:
115117
registry.register_converted_field(field, converted)
116118
return converted
117119

118120

121+
def get_django_field_description(field):
122+
return None if field.help_text is None else str(field.help_text)
123+
124+
119125
@singledispatch
120126
def convert_django_field(field, registry=None):
121127
raise Exception(
@@ -132,17 +138,21 @@ def convert_django_field(field, registry=None):
132138
@convert_django_field.register(models.FileField)
133139
@convert_django_field.register(models.FilePathField)
134140
def convert_field_to_string(field, registry=None):
135-
return String(description=field.help_text, required=not field.null)
141+
return String(
142+
description=get_django_field_description(field), required=not field.null
143+
)
136144

137145

138146
@convert_django_field.register(models.AutoField)
139147
def convert_field_to_id(field, registry=None):
140-
return ID(description=field.help_text, required=not field.null)
148+
return ID(description=get_django_field_description(field), required=not field.null)
141149

142150

143151
@convert_django_field.register(models.UUIDField)
144152
def convert_field_to_uuid(field, registry=None):
145-
return UUID(description=field.help_text, required=not field.null)
153+
return UUID(
154+
description=get_django_field_description(field), required=not field.null
155+
)
146156

147157

148158
@convert_django_field.register(models.PositiveIntegerField)
@@ -151,35 +161,45 @@ def convert_field_to_uuid(field, registry=None):
151161
@convert_django_field.register(models.BigIntegerField)
152162
@convert_django_field.register(models.IntegerField)
153163
def convert_field_to_int(field, registry=None):
154-
return Int(description=field.help_text, required=not field.null)
164+
return Int(description=get_django_field_description(field), required=not field.null)
155165

156166

157167
@convert_django_field.register(models.NullBooleanField)
158168
@convert_django_field.register(models.BooleanField)
159169
def convert_field_to_boolean(field, registry=None):
160-
return Boolean(description=field.help_text, required=not field.null)
170+
return Boolean(
171+
description=get_django_field_description(field), required=not field.null
172+
)
161173

162174

163175
@convert_django_field.register(models.DecimalField)
164176
@convert_django_field.register(models.FloatField)
165177
@convert_django_field.register(models.DurationField)
166178
def convert_field_to_float(field, registry=None):
167-
return Float(description=field.help_text, required=not field.null)
179+
return Float(
180+
description=get_django_field_description(field), required=not field.null
181+
)
168182

169183

170184
@convert_django_field.register(models.DateTimeField)
171185
def convert_datetime_to_string(field, registry=None):
172-
return DateTime(description=field.help_text, required=not field.null)
186+
return DateTime(
187+
description=get_django_field_description(field), required=not field.null
188+
)
173189

174190

175191
@convert_django_field.register(models.DateField)
176192
def convert_date_to_string(field, registry=None):
177-
return Date(description=field.help_text, required=not field.null)
193+
return Date(
194+
description=get_django_field_description(field), required=not field.null
195+
)
178196

179197

180198
@convert_django_field.register(models.TimeField)
181199
def convert_time_to_string(field, registry=None):
182-
return Time(description=field.help_text, required=not field.null)
200+
return Time(
201+
description=get_django_field_description(field), required=not field.null
202+
)
183203

184204

185205
@convert_django_field.register(models.OneToOneRel)
@@ -250,7 +270,11 @@ def dynamic_type():
250270
if not _type:
251271
return
252272

253-
return Field(_type, description=field.help_text, required=not field.null)
273+
return Field(
274+
_type,
275+
description=get_django_field_description(field),
276+
required=not field.null,
277+
)
254278

255279
return Dynamic(dynamic_type)
256280

@@ -260,21 +284,31 @@ def convert_postgres_array_to_list(field, registry=None):
260284
base_type = convert_django_field(field.base_field)
261285
if not isinstance(base_type, (List, NonNull)):
262286
base_type = type(base_type)
263-
return List(base_type, description=field.help_text, required=not field.null)
287+
return List(
288+
base_type,
289+
description=get_django_field_description(field),
290+
required=not field.null,
291+
)
264292

265293

266294
@convert_django_field.register(HStoreField)
267295
@convert_django_field.register(JSONField)
268296
def convert_postgres_field_to_string(field, registry=None):
269-
return JSONString(description=field.help_text, required=not field.null)
297+
return JSONString(
298+
description=get_django_field_description(field), required=not field.null
299+
)
270300

271301

272302
@convert_django_field.register(RangeField)
273303
def convert_postgres_range_to_string(field, registry=None):
274304
inner_type = convert_django_field(field.base_field)
275305
if not isinstance(inner_type, (List, NonNull)):
276306
inner_type = type(inner_type)
277-
return List(inner_type, description=field.help_text, required=not field.null)
307+
return List(
308+
inner_type,
309+
description=get_django_field_description(field),
310+
required=not field.null,
311+
)
278312

279313

280314
# Register Django lazy()-wrapped values as GraphQL description/help_text.

graphene_django/filter/utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ def get_filtering_args_from_filterset(filterset_class, type):
3030
form_field = filter_field.field
3131

3232
field_type = convert_form_field(form_field).Argument()
33-
field_type.description = filter_field.label
33+
field_type.description = (
34+
None if filter_field.label is None else str(filter_field.label)
35+
)
3436
args[name] = field_type
3537

3638
return args

graphene_django/forms/converter.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
from .forms import GlobalIDFormField, GlobalIDMultipleChoiceField
99

1010

11+
def get_form_field_description(field):
12+
return None if field.help_text is None else str(field.help_text)
13+
14+
1115
@singledispatch
1216
def convert_form_field(field):
1317
raise ImproperlyConfigured(
@@ -25,39 +29,45 @@ def convert_form_field(field):
2529
@convert_form_field.register(forms.RegexField)
2630
@convert_form_field.register(forms.Field)
2731
def convert_form_field_to_string(field):
28-
return String(description=field.help_text, required=field.required)
32+
return String(
33+
description=get_form_field_description(field), required=field.required
34+
)
2935

3036

3137
@convert_form_field.register(forms.UUIDField)
3238
def convert_form_field_to_uuid(field):
33-
return UUID(description=field.help_text, required=field.required)
39+
return UUID(description=get_form_field_description(field), required=field.required)
3440

3541

3642
@convert_form_field.register(forms.IntegerField)
3743
@convert_form_field.register(forms.NumberInput)
3844
def convert_form_field_to_int(field):
39-
return Int(description=field.help_text, required=field.required)
45+
return Int(description=get_form_field_description(field), required=field.required)
4046

4147

4248
@convert_form_field.register(forms.BooleanField)
4349
def convert_form_field_to_boolean(field):
44-
return Boolean(description=field.help_text, required=field.required)
50+
return Boolean(
51+
description=get_form_field_description(field), required=field.required
52+
)
4553

4654

4755
@convert_form_field.register(forms.NullBooleanField)
4856
def convert_form_field_to_nullboolean(field):
49-
return Boolean(description=field.help_text)
57+
return Boolean(description=get_form_field_description(field))
5058

5159

5260
@convert_form_field.register(forms.DecimalField)
5361
@convert_form_field.register(forms.FloatField)
5462
def convert_form_field_to_float(field):
55-
return Float(description=field.help_text, required=field.required)
63+
return Float(description=get_form_field_description(field), required=field.required)
5664

5765

5866
@convert_form_field.register(forms.MultipleChoiceField)
5967
def convert_form_field_to_string_list(field):
60-
return List(String, description=field.help_text, required=field.required)
68+
return List(
69+
String, description=get_form_field_description(field), required=field.required
70+
)
6171

6272

6373
@convert_form_field.register(forms.ModelMultipleChoiceField)
@@ -68,17 +78,19 @@ def convert_form_field_to_id_list(field):
6878

6979
@convert_form_field.register(forms.DateField)
7080
def convert_form_field_to_date(field):
71-
return Date(description=field.help_text, required=field.required)
81+
return Date(description=get_form_field_description(field), required=field.required)
7282

7383

7484
@convert_form_field.register(forms.DateTimeField)
7585
def convert_form_field_to_datetime(field):
76-
return DateTime(description=field.help_text, required=field.required)
86+
return DateTime(
87+
description=get_form_field_description(field), required=field.required
88+
)
7789

7890

7991
@convert_form_field.register(forms.TimeField)
8092
def convert_form_field_to_time(field):
81-
return Time(description=field.help_text, required=field.required)
93+
return Time(description=get_form_field_description(field), required=field.required)
8294

8395

8496
@convert_form_field.register(forms.ModelChoiceField)

0 commit comments

Comments
 (0)