From d3abf336ee91d2284d6b5d9cbcd99a2a0f481bb1 Mon Sep 17 00:00:00 2001 From: Andy Chong Date: Wed, 21 Mar 2012 12:02:33 +0800 Subject: [PATCH] updating image should redirect back to original page * fix bug 960448 * syspanel inherits nova UpdateImage view/form * add completion_view to form base object, and get_success_url() that reverse the proper url for redirection on success handling * syspanel AdminEditImage was pointless because it didn't override the 'url', now fixed Change-Id: Ia8f24c7a895b397f11978a59232ab00da3e8813d --- .../nova/images_and_snapshots/images/forms.py | 4 ++- .../images_and_snapshots/images/_update.html | 2 +- horizon/dashboards/syspanel/images/forms.py | 30 +++++++++++++++++++ horizon/dashboards/syspanel/images/tables.py | 2 ++ horizon/dashboards/syspanel/images/views.py | 2 ++ .../templates/syspanel/images/_update.html | 4 +-- horizon/forms/base.py | 11 +++++++ 7 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 horizon/dashboards/syspanel/images/forms.py diff --git a/horizon/dashboards/nova/images_and_snapshots/images/forms.py b/horizon/dashboards/nova/images_and_snapshots/images/forms.py index 7ab12e1b3..319ceb54b 100644 --- a/horizon/dashboards/nova/images_and_snapshots/images/forms.py +++ b/horizon/dashboards/nova/images_and_snapshots/images/forms.py @@ -39,6 +39,8 @@ LOG = logging.getLogger(__name__) class UpdateImageForm(forms.SelfHandlingForm): + completion_view = 'horizon:nova:images_and_snapshots:index' + image_id = forms.CharField(widget=forms.HiddenInput()) name = forms.CharField(max_length="255", label=_("Name")) kernel = forms.CharField(max_length="36", label=_("Kernel ID"), @@ -86,7 +88,7 @@ class UpdateImageForm(forms.SelfHandlingForm): messages.success(request, _('Image was successfully updated.')) except: exceptions.handle(request, error_updating % image_id) - return shortcuts.redirect('horizon:nova:images_and_snapshots:index') + return shortcuts.redirect(self.get_success_url()) class LaunchForm(forms.SelfHandlingForm): diff --git a/horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_update.html b/horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_update.html index eee6bb941..5b001d08a 100644 --- a/horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_update.html +++ b/horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_update.html @@ -4,7 +4,7 @@ {% block form_id %}update_image_form{% endblock %} {% block form_action %}{% url horizon:nova:images_and_snapshots:images:update image.id %}{% endblock %} -{% block modal-header %}Update Image{% endblock %} +{% block modal-header %}{% trans "Update Image" %}{% endblock %} {% block modal-body %}
diff --git a/horizon/dashboards/syspanel/images/forms.py b/horizon/dashboards/syspanel/images/forms.py new file mode 100644 index 000000000..4064959e0 --- /dev/null +++ b/horizon/dashboards/syspanel/images/forms.py @@ -0,0 +1,30 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2012 United States Government as represented by the +# Administrator of the National Aeronautics and Space Administration. +# All Rights Reserved. +# +# Copyright 2012 Nebula, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import logging + +from horizon.dashboards.nova.images_and_snapshots.images import forms + + +LOG = logging.getLogger(__name__) + + +class AdminUpdateImageForm(forms.UpdateImageForm): + completion_view = 'horizon:syspanel:images:index' diff --git a/horizon/dashboards/syspanel/images/tables.py b/horizon/dashboards/syspanel/images/tables.py index d4cfe2100..d7f22c481 100644 --- a/horizon/dashboards/syspanel/images/tables.py +++ b/horizon/dashboards/syspanel/images/tables.py @@ -26,6 +26,8 @@ class AdminDeleteImage(DeleteImage): class AdminEditImage(EditImage): + url = "horizon:syspanel:images:update" + def allowed(self, request, image=None): return True diff --git a/horizon/dashboards/syspanel/images/views.py b/horizon/dashboards/syspanel/images/views.py index bf422ad7d..d4821c52c 100644 --- a/horizon/dashboards/syspanel/images/views.py +++ b/horizon/dashboards/syspanel/images/views.py @@ -27,6 +27,7 @@ from horizon import exceptions from horizon import tables from horizon.dashboards.nova.images_and_snapshots.images import views from .tables import AdminImagesTable +from .forms import AdminUpdateImageForm LOG = logging.getLogger(__name__) @@ -48,3 +49,4 @@ class IndexView(tables.DataTableView): class UpdateView(views.UpdateView): template_name = 'syspanel/images/update.html' + form_class = AdminUpdateImageForm diff --git a/horizon/dashboards/syspanel/templates/syspanel/images/_update.html b/horizon/dashboards/syspanel/templates/syspanel/images/_update.html index 49d63b431..80e661c29 100644 --- a/horizon/dashboards/syspanel/templates/syspanel/images/_update.html +++ b/horizon/dashboards/syspanel/templates/syspanel/images/_update.html @@ -1,8 +1,8 @@ {% extends "horizon/common/_modal_form.html" %} {% load i18n %} -{% block form_id %}udate_image_form{% endblock %} -{% block form_action %}{% url horizon:syspanel:images:update %}{% endblock %} +{% block form_id %}update_image_form{% endblock %} +{% block form_action %}{% url horizon:syspanel:images:update image.id %}{% endblock %} {% block modal_id %}update_image_modal{% endblock %} {% block modal-header %}{% trans "Update Image" %}{% endblock %} diff --git a/horizon/forms/base.py b/horizon/forms/base.py index d48e8f278..faec9af94 100644 --- a/horizon/forms/base.py +++ b/horizon/forms/base.py @@ -22,6 +22,7 @@ from datetime import date import logging from django import forms +from django.core.urlresolvers import reverse from django.utils import dates from horizon import exceptions @@ -54,6 +55,16 @@ class SelfHandlingForm(forms.Form): kwargs['initial'] = initial super(SelfHandlingForm, self).__init__(*args, **kwargs) + def get_success_url(self, request=None): + """ + Returns the URL to redirect to after a successful handling. + """ + if self.completion_view: + return reverse(self.completion_view) + if self.completion_url: + return self.completion_url + return request.get_full_path() + @classmethod def _instantiate(cls, request, *args, **kwargs): """ Instantiates the form. Allows customization in subclasses. """