mirror of
https://github.com/ansible/awx.git
synced 2026-03-09 05:29:26 -02:30
Merge pull request #1325 from cchurch/fix-help-text-for-common-fields
Fix help text in OPTIONS for common, read-only fields.
This commit is contained in:
@@ -6,7 +6,7 @@ from collections import OrderedDict
|
|||||||
# Django
|
# Django
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_text, smart_text
|
||||||
|
|
||||||
# Django REST Framework
|
# Django REST Framework
|
||||||
from rest_framework import exceptions
|
from rest_framework import exceptions
|
||||||
@@ -37,6 +37,25 @@ class Metadata(metadata.SimpleMetadata):
|
|||||||
if value is not None and value != '':
|
if value is not None and value != '':
|
||||||
field_info[attr] = force_text(value, strings_only=True)
|
field_info[attr] = force_text(value, strings_only=True)
|
||||||
|
|
||||||
|
# Update help text for common fields.
|
||||||
|
serializer = getattr(field, 'parent', None)
|
||||||
|
if serializer:
|
||||||
|
field_help_text = {
|
||||||
|
'id': 'Database ID for this {}.',
|
||||||
|
'name': 'Name of this {}.',
|
||||||
|
'description': 'Optional description of this {}.',
|
||||||
|
'type': 'Data type for this {}.',
|
||||||
|
'url': 'URL for this {}.',
|
||||||
|
'related': 'Data structure with URLs of related resources.',
|
||||||
|
'summary_fields': 'Data structure with name/description for related resources.',
|
||||||
|
'created': 'Timestamp when this {} was created.',
|
||||||
|
'modified': 'Timestamp when this {} was last modified.',
|
||||||
|
}
|
||||||
|
if field.field_name in field_help_text:
|
||||||
|
opts = serializer.Meta.model._meta.concrete_model._meta
|
||||||
|
verbose_name = smart_text(opts.verbose_name)
|
||||||
|
field_info['help_text'] = field_help_text[field.field_name].format(verbose_name)
|
||||||
|
|
||||||
# Indicate if a field has a default value.
|
# Indicate if a field has a default value.
|
||||||
# FIXME: Still isn't showing all default values?
|
# FIXME: Still isn't showing all default values?
|
||||||
try:
|
try:
|
||||||
@@ -77,7 +96,7 @@ class Metadata(metadata.SimpleMetadata):
|
|||||||
|
|
||||||
# Update type of fields returned...
|
# Update type of fields returned...
|
||||||
if field.field_name == 'type':
|
if field.field_name == 'type':
|
||||||
field_info['type'] = 'multiple choice'
|
field_info['type'] = 'choice'
|
||||||
elif field.field_name == 'url':
|
elif field.field_name == 'url':
|
||||||
field_info['type'] = 'string'
|
field_info['type'] = 'string'
|
||||||
elif field.field_name in ('related', 'summary_fields'):
|
elif field.field_name in ('related', 'summary_fields'):
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from django.core.urlresolvers import reverse
|
|||||||
from django.core.exceptions import ObjectDoesNotExist, ValidationError as DjangoValidationError
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError as DjangoValidationError
|
||||||
from django.db import models
|
from django.db import models
|
||||||
# from django.utils.translation import ugettext_lazy as _
|
# from django.utils.translation import ugettext_lazy as _
|
||||||
from django.utils.encoding import force_text, smart_text
|
from django.utils.encoding import force_text
|
||||||
from django.utils.text import capfirst
|
from django.utils.text import capfirst
|
||||||
|
|
||||||
# Django REST Framework
|
# Django REST Framework
|
||||||
@@ -326,7 +326,6 @@ class BaseSerializer(serializers.ModelSerializer):
|
|||||||
return obj.active
|
return obj.active
|
||||||
|
|
||||||
def build_standard_field(self, field_name, model_field):
|
def build_standard_field(self, field_name, model_field):
|
||||||
|
|
||||||
# DRF 3.3 serializers.py::build_standard_field() -> utils/field_mapping.py::get_field_kwargs() short circuits
|
# DRF 3.3 serializers.py::build_standard_field() -> utils/field_mapping.py::get_field_kwargs() short circuits
|
||||||
# when a Model's editable field is set to False. The short circuit skips choice rendering.
|
# when a Model's editable field is set to False. The short circuit skips choice rendering.
|
||||||
#
|
#
|
||||||
@@ -343,27 +342,6 @@ class BaseSerializer(serializers.ModelSerializer):
|
|||||||
if was_editable is False:
|
if was_editable is False:
|
||||||
field_kwargs['read_only'] = True
|
field_kwargs['read_only'] = True
|
||||||
|
|
||||||
# Update help text for common fields.
|
|
||||||
opts = self.Meta.model._meta.concrete_model._meta
|
|
||||||
if field_name == 'id':
|
|
||||||
field_kwargs.setdefault('help_text', 'Database ID for this %s.' % smart_text(opts.verbose_name))
|
|
||||||
elif field_name == 'name':
|
|
||||||
field_kwargs['help_text'] = 'Name of this %s.' % smart_text(opts.verbose_name)
|
|
||||||
elif field_name == 'description':
|
|
||||||
field_kwargs['help_text'] = 'Optional description of this %s.' % smart_text(opts.verbose_name)
|
|
||||||
elif field_name == 'type':
|
|
||||||
field_kwargs['help_text'] = 'Data type for this %s.' % smart_text(opts.verbose_name)
|
|
||||||
elif field_name == 'url':
|
|
||||||
field_kwargs['help_text'] = 'URL for this %s.' % smart_text(opts.verbose_name)
|
|
||||||
elif field_name == 'related':
|
|
||||||
field_kwargs['help_text'] = 'Data structure with URLs of related resources.'
|
|
||||||
elif field_name == 'summary_fields':
|
|
||||||
field_kwargs['help_text'] = 'Data structure with name/description for related resources.'
|
|
||||||
elif field_name == 'created':
|
|
||||||
field_kwargs['help_text'] = 'Timestamp when this %s was created.' % smart_text(opts.verbose_name)
|
|
||||||
elif field_name == 'modified':
|
|
||||||
field_kwargs['help_text'] = 'Timestamp when this %s was last modified.' % smart_text(opts.verbose_name)
|
|
||||||
|
|
||||||
# Pass model field default onto the serializer field if field is not read-only.
|
# Pass model field default onto the serializer field if field is not read-only.
|
||||||
if model_field.has_default() and not field_kwargs.get('read_only', False):
|
if model_field.has_default() and not field_kwargs.get('read_only', False):
|
||||||
field_kwargs['default'] = field_kwargs['initial'] = model_field.get_default()
|
field_kwargs['default'] = field_kwargs['initial'] = model_field.get_default()
|
||||||
@@ -389,6 +367,7 @@ class BaseSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
# Update the message used for the unique validator to use capitalized
|
# Update the message used for the unique validator to use capitalized
|
||||||
# verbose name; keeps unique message the same as with DRF 2.x.
|
# verbose name; keeps unique message the same as with DRF 2.x.
|
||||||
|
opts = self.Meta.model._meta.concrete_model._meta
|
||||||
for validator in field_kwargs.get('validators', []):
|
for validator in field_kwargs.get('validators', []):
|
||||||
if isinstance(validator, validators.UniqueValidator):
|
if isinstance(validator, validators.UniqueValidator):
|
||||||
unique_error_message = model_field.error_messages.get('unique', None)
|
unique_error_message = model_field.error_messages.get('unique', None)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{% for fn, fm in serializer_fields.items %}{% spaceless %}
|
{% for fn, fm in serializer_fields.items %}{% spaceless %}
|
||||||
{% if not write_only or not fm.read_only %}
|
{% if not write_only or not fm.read_only %}
|
||||||
* `{{ fn }}`: {{ fm.help_text|capfirst }} ({{ fm.type }}{% if write_only and fm.required %}, required{% endif %}{% if write_only and fm.read_only %}, read-only{% endif %}{% if write_only and not fm.choices and not fm.required %}, default=`{% if fm.type == "string" or fm.type == "email" %}"{% firstof fm.default "" %}"{% else %}{{ fm.default }}{% endif %}`{% endif %}){% if fm.choices %}{% for c in fm.choices %}
|
* `{{ fn }}`: {{ fm.help_text|capfirst }} ({{ fm.type }}{% if write_only and fm.required %}, required{% endif %}{% if write_only and fm.read_only %}, read-only{% endif %}{% if write_only and not fm.choices and not fm.required %}, default=`{% if fm.type == "string" or fm.type == "email" %}"{% firstof fm.default "" %}"{% else %}{% if fm.type == "field" and not fm.default %}None{% else %}{{ fm.default }}{% endif %}{% endif %}`{% endif %}){% if fm.choices %}{% for c in fm.choices %}
|
||||||
- `{% if c.0 == "" %}""{% else %}{{ c.0 }}{% endif %}`{% if c.1 != c.0 %}: {{ c.1 }}{% endif %}{% if write_only and c.0 == fm.default %} (default){% endif %}{% endfor %}{% endif %}{% endif %}
|
- `{% if c.0 == "" %}""{% else %}{{ c.0 }}{% endif %}`{% if c.1 != c.0 %}: {{ c.1 }}{% endif %}{% if write_only and c.0 == fm.default %} (default){% endif %}{% endfor %}{% endif %}{% endif %}
|
||||||
{% endspaceless %}
|
{% endspaceless %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
Reference in New Issue
Block a user