Explicitly cast help_text used as description to str to resolve lazy translation

Before graphql-core had issues processing descriptions generated from
translatable help_text during schema generation. Involved graphql-core
utilities expect descriptions to be of type `str`, however, the generated
descriptions were of type `django.utils.functional.__proxy__` which caused
concatination with actual strings to fail.
This commit is contained in:
DoctorJohn 2020-06-04 20:46:53 +02:00
parent fb90cb78b3
commit cd8074b06a
3 changed files with 25 additions and 25 deletions

View File

@ -108,7 +108,7 @@ def convert_django_field_with_choices(
if choices and convert_choices_to_enum: if choices and convert_choices_to_enum:
enum = convert_choice_field_to_enum(field) enum = convert_choice_field_to_enum(field)
required = not (field.blank or field.null) required = not (field.blank or field.null)
converted = enum(description=field.help_text, required=required) converted = enum(description=str(field.help_text), required=required)
else: else:
converted = convert_django_field(field, registry) converted = convert_django_field(field, registry)
if registry is not None: if registry is not None:
@ -132,17 +132,17 @@ def convert_django_field(field, registry=None):
@convert_django_field.register(models.FileField) @convert_django_field.register(models.FileField)
@convert_django_field.register(models.FilePathField) @convert_django_field.register(models.FilePathField)
def convert_field_to_string(field, registry=None): def convert_field_to_string(field, registry=None):
return String(description=field.help_text, required=not field.null) return String(description=str(field.help_text), required=not field.null)
@convert_django_field.register(models.AutoField) @convert_django_field.register(models.AutoField)
def convert_field_to_id(field, registry=None): def convert_field_to_id(field, registry=None):
return ID(description=field.help_text, required=not field.null) return ID(description=str(field.help_text), required=not field.null)
@convert_django_field.register(models.UUIDField) @convert_django_field.register(models.UUIDField)
def convert_field_to_uuid(field, registry=None): def convert_field_to_uuid(field, registry=None):
return UUID(description=field.help_text, required=not field.null) return UUID(description=str(field.help_text), required=not field.null)
@convert_django_field.register(models.PositiveIntegerField) @convert_django_field.register(models.PositiveIntegerField)
@ -151,35 +151,35 @@ def convert_field_to_uuid(field, registry=None):
@convert_django_field.register(models.BigIntegerField) @convert_django_field.register(models.BigIntegerField)
@convert_django_field.register(models.IntegerField) @convert_django_field.register(models.IntegerField)
def convert_field_to_int(field, registry=None): def convert_field_to_int(field, registry=None):
return Int(description=field.help_text, required=not field.null) return Int(description=str(field.help_text), required=not field.null)
@convert_django_field.register(models.NullBooleanField) @convert_django_field.register(models.NullBooleanField)
@convert_django_field.register(models.BooleanField) @convert_django_field.register(models.BooleanField)
def convert_field_to_boolean(field, registry=None): def convert_field_to_boolean(field, registry=None):
return Boolean(description=field.help_text, required=not field.null) return Boolean(description=str(field.help_text), required=not field.null)
@convert_django_field.register(models.DecimalField) @convert_django_field.register(models.DecimalField)
@convert_django_field.register(models.FloatField) @convert_django_field.register(models.FloatField)
@convert_django_field.register(models.DurationField) @convert_django_field.register(models.DurationField)
def convert_field_to_float(field, registry=None): def convert_field_to_float(field, registry=None):
return Float(description=field.help_text, required=not field.null) return Float(description=str(field.help_text), required=not field.null)
@convert_django_field.register(models.DateTimeField) @convert_django_field.register(models.DateTimeField)
def convert_datetime_to_string(field, registry=None): def convert_datetime_to_string(field, registry=None):
return DateTime(description=field.help_text, required=not field.null) return DateTime(description=str(field.help_text), required=not field.null)
@convert_django_field.register(models.DateField) @convert_django_field.register(models.DateField)
def convert_date_to_string(field, registry=None): def convert_date_to_string(field, registry=None):
return Date(description=field.help_text, required=not field.null) return Date(description=str(field.help_text), required=not field.null)
@convert_django_field.register(models.TimeField) @convert_django_field.register(models.TimeField)
def convert_time_to_string(field, registry=None): def convert_time_to_string(field, registry=None):
return Time(description=field.help_text, required=not field.null) return Time(description=str(field.help_text), required=not field.null)
@convert_django_field.register(models.OneToOneRel) @convert_django_field.register(models.OneToOneRel)
@ -250,7 +250,7 @@ def convert_field_to_djangomodel(field, registry=None):
if not _type: if not _type:
return return
return Field(_type, description=field.help_text, required=not field.null) return Field(_type, description=str(field.help_text), required=not field.null)
return Dynamic(dynamic_type) return Dynamic(dynamic_type)
@ -260,13 +260,13 @@ def convert_postgres_array_to_list(field, registry=None):
base_type = convert_django_field(field.base_field) base_type = convert_django_field(field.base_field)
if not isinstance(base_type, (List, NonNull)): if not isinstance(base_type, (List, NonNull)):
base_type = type(base_type) base_type = type(base_type)
return List(base_type, description=field.help_text, required=not field.null) return List(base_type, description=str(field.help_text), required=not field.null)
@convert_django_field.register(HStoreField) @convert_django_field.register(HStoreField)
@convert_django_field.register(JSONField) @convert_django_field.register(JSONField)
def convert_postgres_field_to_string(field, registry=None): def convert_postgres_field_to_string(field, registry=None):
return JSONString(description=field.help_text, required=not field.null) return JSONString(description=str(field.help_text), required=not field.null)
@convert_django_field.register(RangeField) @convert_django_field.register(RangeField)
@ -274,7 +274,7 @@ def convert_postgres_range_to_string(field, registry=None):
inner_type = convert_django_field(field.base_field) inner_type = convert_django_field(field.base_field)
if not isinstance(inner_type, (List, NonNull)): if not isinstance(inner_type, (List, NonNull)):
inner_type = type(inner_type) inner_type = type(inner_type)
return List(inner_type, description=field.help_text, required=not field.null) return List(inner_type, description=str(field.help_text), required=not field.null)
# Register Django lazy()-wrapped values as GraphQL description/help_text. # Register Django lazy()-wrapped values as GraphQL description/help_text.

View File

@ -30,7 +30,7 @@ def get_filtering_args_from_filterset(filterset_class, type):
form_field = filter_field.field form_field = filter_field.field
field_type = convert_form_field(form_field).Argument() field_type = convert_form_field(form_field).Argument()
field_type.description = filter_field.label field_type.description = str(filter_field.label)
args[name] = field_type args[name] = field_type
return args return args

View File

@ -25,39 +25,39 @@ def convert_form_field(field):
@convert_form_field.register(forms.RegexField) @convert_form_field.register(forms.RegexField)
@convert_form_field.register(forms.Field) @convert_form_field.register(forms.Field)
def convert_form_field_to_string(field): def convert_form_field_to_string(field):
return String(description=field.help_text, required=field.required) return String(description=str(field.help_text), required=field.required)
@convert_form_field.register(forms.UUIDField) @convert_form_field.register(forms.UUIDField)
def convert_form_field_to_uuid(field): def convert_form_field_to_uuid(field):
return UUID(description=field.help_text, required=field.required) return UUID(description=str(field.help_text), required=field.required)
@convert_form_field.register(forms.IntegerField) @convert_form_field.register(forms.IntegerField)
@convert_form_field.register(forms.NumberInput) @convert_form_field.register(forms.NumberInput)
def convert_form_field_to_int(field): def convert_form_field_to_int(field):
return Int(description=field.help_text, required=field.required) return Int(description=str(field.help_text), required=field.required)
@convert_form_field.register(forms.BooleanField) @convert_form_field.register(forms.BooleanField)
def convert_form_field_to_boolean(field): def convert_form_field_to_boolean(field):
return Boolean(description=field.help_text, required=field.required) return Boolean(description=str(field.help_text), required=field.required)
@convert_form_field.register(forms.NullBooleanField) @convert_form_field.register(forms.NullBooleanField)
def convert_form_field_to_nullboolean(field): def convert_form_field_to_nullboolean(field):
return Boolean(description=field.help_text) return Boolean(description=str(field.help_text))
@convert_form_field.register(forms.DecimalField) @convert_form_field.register(forms.DecimalField)
@convert_form_field.register(forms.FloatField) @convert_form_field.register(forms.FloatField)
def convert_form_field_to_float(field): def convert_form_field_to_float(field):
return Float(description=field.help_text, required=field.required) return Float(description=str(field.help_text), required=field.required)
@convert_form_field.register(forms.MultipleChoiceField) @convert_form_field.register(forms.MultipleChoiceField)
def convert_form_field_to_string_list(field): def convert_form_field_to_string_list(field):
return List(String, description=field.help_text, required=field.required) return List(String, description=str(field.help_text), required=field.required)
@convert_form_field.register(forms.ModelMultipleChoiceField) @convert_form_field.register(forms.ModelMultipleChoiceField)
@ -68,17 +68,17 @@ def convert_form_field_to_id_list(field):
@convert_form_field.register(forms.DateField) @convert_form_field.register(forms.DateField)
def convert_form_field_to_date(field): def convert_form_field_to_date(field):
return Date(description=field.help_text, required=field.required) return Date(description=str(field.help_text), required=field.required)
@convert_form_field.register(forms.DateTimeField) @convert_form_field.register(forms.DateTimeField)
def convert_form_field_to_datetime(field): def convert_form_field_to_datetime(field):
return DateTime(description=field.help_text, required=field.required) return DateTime(description=str(field.help_text), required=field.required)
@convert_form_field.register(forms.TimeField) @convert_form_field.register(forms.TimeField)
def convert_form_field_to_time(field): def convert_form_field_to_time(field):
return Time(description=field.help_text, required=field.required) return Time(description=str(field.help_text), required=field.required)
@convert_form_field.register(forms.ModelChoiceField) @convert_form_field.register(forms.ModelChoiceField)