diff options
Diffstat (limited to 'tuskar_ui/infrastructure/parameters/forms.py')
-rw-r--r-- | tuskar_ui/infrastructure/parameters/forms.py | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/tuskar_ui/infrastructure/parameters/forms.py b/tuskar_ui/infrastructure/parameters/forms.py index cefba145..b94dc00e 100644 --- a/tuskar_ui/infrastructure/parameters/forms.py +++ b/tuskar_ui/infrastructure/parameters/forms.py @@ -46,6 +46,10 @@ CINDER_ISCSI_HELPER_CHOICES = [ ] +class ParameterAwareMixin(object): + parameter = None + + def parameter_fields(request, prefix=None, read_only=False): fields = SortedDict() plan = api.tuskar.Plan.get_the_plan(request) @@ -54,18 +58,17 @@ def parameter_fields(request, prefix=None, read_only=False): for p in parameters: if prefix and not p.name.startswith(prefix): continue - kwargs = {} + Field = django.forms.CharField + field_kwargs = {} + widget = None if read_only: if p.hidden: - kwargs['widget'] = tuskar_ui.forms.StaticTextPasswordWidget + widget = tuskar_ui.forms.StaticTextPasswordWidget else: - kwargs['widget'] = tuskar_ui.forms.StaticTextWidget - Field = django.forms.CharField + widget = tuskar_ui.forms.StaticTextWidget else: if p.hidden: - Field = django.forms.CharField - kwargs['widget'] = ( - django.forms.PasswordInput(render_value=True)) + widget = django.forms.PasswordInput(render_value=True) elif p.type == 'number': Field = django.forms.IntegerField elif p.type == 'boolean': @@ -73,18 +76,22 @@ def parameter_fields(request, prefix=None, read_only=False): elif (p.type == 'string' and p.constraints['allowed_values']['definition']): Field = django.forms.ChoiceField - kwargs['choices'] = ( + field_kwargs['choices'] = ( p.constraints['allowed_values']['definition']) - else: - if (p.type in ['json', 'comma_delimited_list'] or - 'Certificate' in p.name): - kwargs['widget'] = django.forms.Textarea - Field = django.forms.CharField - - fields[p.name] = Field(required=False, - label=_parameter_label(p), - initial=p.value, - **kwargs) + elif (p.type in ['json', 'comma_delimited_list'] or + 'Certificate' in p.name): + widget = django.forms.Textarea + + fields[p.name] = Field( + required=False, + label=_parameter_label(p), + initial=p.value, + widget=widget, + **field_kwargs + ) + fields[p.name].__class__ = type('ParameterAwareField', + (ParameterAwareMixin, Field), {}) + fields[p.name].parameter = p return fields |