Change the way 'do_redirect' flag is passed into WizardView

This change eliminates the need to have a specific url for each
combination of optional parameters passed to WizardView, thus making
possible to pass more than optional parameter to WizardView.

Change-Id: Id5a636d006a3a1170d76c617083f8641aaf1a3eb
This commit is contained in:
Timur Sufiev 2014-04-23 15:42:41 +04:00
parent 3269374769
commit 9f0fc0331d
4 changed files with 20 additions and 18 deletions

View File

@ -33,9 +33,6 @@ urlpatterns = patterns(
url(r'^add/(?P<environment_id>[^/]+)/(?P<app_id>[^/]+)$',
env_views.Wizard.as_view(services.get_app_forms),
name='add'),
url(r'^add_redirect/(?P<environment_id>[^/]+)/(?P<app_id>[^/]+)$',
env_views.Wizard.as_view(services.get_app_forms, do_redirect=True),
name='add_redirect'),
url(r'^quick-add/(?P<app_id>[^/]+)$',
'quick_deploy',
name='quick_add'),

View File

@ -99,8 +99,8 @@ def create_quick_environment(request):
def quick_deploy(request, app_id):
env = create_quick_environment(request)
try:
return views.Wizard.as_view(services.get_app_forms, do_redirect=True)(
request, app_id=app_id, environment_id=env.id)
return views.Wizard.as_view(services.get_app_forms)(
request, app_id=app_id, environment_id=env.id, do_redirect=True)
except:
api.environment_delete(request, env.id)
raise

View File

@ -133,7 +133,7 @@ class Wizard(hz_views.ModalFormMixin, LazyWizard):
messages.success(self.request, message)
if self.do_redirect:
if self._get_wizard_flag('do_redirect'):
return HttpResponseRedirect(url)
else:
srv_id = getattr(srv, '?')['id']
@ -151,14 +151,22 @@ class Wizard(hz_views.ModalFormMixin, LazyWizard):
return HttpResponse('Done')
def get_form_initial(self, step):
init_dict = {}
if step != 'service_choice':
init_dict.update({
'request': self.request,
'environment_id': self.kwargs.get('environment_id')
})
init_dict = {'request': self.request,
'environment_id': self.kwargs.get('environment_id')}
return self.initial_dict.get(step, init_dict)
def _get_wizard_param(self, key):
param = self.kwargs.get(key)
return param if param is not None else self.request.POST.get(key)
def _get_wizard_flag(self, key):
value = self._get_wizard_param(key)
if isinstance(value, basestring):
return value.lower() == 'true'
else:
return value
def get_context_data(self, form, **kwargs):
context = super(Wizard, self).get_context_data(form=form, **kwargs)
app_id = self.kwargs.get('app_id')
@ -169,8 +177,8 @@ class Wizard(hz_views.ModalFormMixin, LazyWizard):
'service_name': app.name,
'app_id': app_id,
'environment_id': self.kwargs.get('environment_id'),
'do_redirect': self._get_wizard_flag('do_redirect'),
'prefix': self.prefix,
'do_redirect': self.do_redirect
})
return context

View File

@ -6,11 +6,7 @@
{% load i18n humanize %}
{% load url from future %} {# fix for django 1.4.9 on CentOS #}
{% block form_action %}
{% if do_redirect %}
{% url 'horizon:murano:catalog:add_redirect' environment_id app_id %}
{% else %}
{% url 'horizon:murano:catalog:add' environment_id app_id %}
{% endif %}
{% url 'horizon:murano:catalog:add' environment_id app_id %}
{% endblock %}
{% block form_id %}create_service_form{% endblock %}
{% block modal_id %}create_service{% endblock %}
@ -61,6 +57,7 @@
{{ wizard.form.media }}
<input type="hidden" name="wizard_goto_step" id="{{ prefix }}_val"/>
<input type="hidden" name="do_redirect" value="{{ do_redirect }}"/>
{% if wizard.steps.next %}
{% trans "Next" as next %}
{% else %}