From 0efc3c6dc52cb4aca8f73f1af58206ccca5bb36a Mon Sep 17 00:00:00 2001 From: Pierre-Alexandre Bardina Date: Tue, 31 Jan 2017 14:46:46 +0000 Subject: [PATCH] Add module priority in the dashboard Change-Id: Ia1836357352eb07ecda4449b101200b282c427eb --- .../dashboards/admin/modules/forms.py | 33 ++++++++++++++++++ .../dashboards/admin/modules/tables.py | 16 ++++++++- .../dashboards/admin/modules/urls.py | 4 ++- .../dashboards/admin/modules/views.py | 34 +++++++++++++++++++ 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 cloudkittydashboard/dashboards/admin/modules/forms.py diff --git a/cloudkittydashboard/dashboards/admin/modules/forms.py b/cloudkittydashboard/dashboards/admin/modules/forms.py new file mode 100644 index 0000000..ad08dbd --- /dev/null +++ b/cloudkittydashboard/dashboards/admin/modules/forms.py @@ -0,0 +1,33 @@ +# Copyright 2017 Objectif Libre +# +# 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 django.utils.translation import ugettext_lazy as _ +from horizon import forms + +from cloudkittydashboard.api import cloudkitty as api + +LOG = logging.getLogger(__name__) + + +class EditPriorityForm(forms.SelfHandlingForm): + priority = forms.IntegerField(label=_("Priority"), required=True) + + def handle(self, request, data): + ck_client = api.cloudkittyclient(request) + return ck_client.modules.update( + module_id=self.initial["module_id"], + priority=data["priority"] + ) diff --git a/cloudkittydashboard/dashboards/admin/modules/tables.py b/cloudkittydashboard/dashboards/admin/modules/tables.py index efb3042..2e234ab 100644 --- a/cloudkittydashboard/dashboards/admin/modules/tables.py +++ b/cloudkittydashboard/dashboards/admin/modules/tables.py @@ -22,6 +22,19 @@ ENABLE = 0 DISABLE = 1 +class EditModulePriority(tables.LinkAction): + name = "editmodulepriority" + verbose_name = _("Edit module priority") + icon = "edit" + ajax = True + classes = ("ajax-modal",) + + def get_link_url(self, datum): + if datum.module_id: + url = "horizon:admin:rating_modules:edit_priority" + return reverse(url, kwargs={'module_id': datum.module_id}) + + class ToggleEnabledModule(tables.BatchAction): name = "toggle_module" action_present = (_("Enable"), _("Disable")) @@ -59,9 +72,10 @@ class ModulesTable(tables.DataTable): name = tables.Column('name', verbose_name=_("Name"), link=get_details_link) description = tables.Column('description', verbose_name=_("Description")) hot_config = tables.Column('hot-config', verbose_name=_("Configurable")) + priority = tables.Column('priority', verbose_name=_("Priority")) enabled = tables.Column('enabled', verbose_name=_("Enabled")) class Meta(object): name = "modules" verbose_name = _("Modules") - row_actions = (ToggleEnabledModule,) + row_actions = (ToggleEnabledModule, EditModulePriority) diff --git a/cloudkittydashboard/dashboards/admin/modules/urls.py b/cloudkittydashboard/dashboards/admin/modules/urls.py index 6366dfa..01eca35 100644 --- a/cloudkittydashboard/dashboards/admin/modules/urls.py +++ b/cloudkittydashboard/dashboards/admin/modules/urls.py @@ -22,5 +22,7 @@ urlpatterns = patterns( url(r'^$', views.IndexView.as_view(), name='index'), url(r'^(?P[^/]+)/?$', views.ModuleDetailsView.as_view(), name="module_details"), - + url(r'^edit_priority/(?P[^/]+)/?$', + views.PriorityModuleEditView.as_view(), + name="edit_priority"), ) diff --git a/cloudkittydashboard/dashboards/admin/modules/views.py b/cloudkittydashboard/dashboards/admin/modules/views.py index 7fac21f..14b300b 100644 --- a/cloudkittydashboard/dashboards/admin/modules/views.py +++ b/cloudkittydashboard/dashboards/admin/modules/views.py @@ -12,11 +12,15 @@ # License for the specific language governing permissions and limitations # under the License. +from django.core.urlresolvers import reverse +from django.core.urlresolvers import reverse_lazy from django.utils.translation import ugettext_lazy as _ +from horizon import forms from horizon import tables from horizon import views from cloudkittydashboard.api import cloudkitty as api +from cloudkittydashboard.dashboards.admin.modules import forms as module_forms from cloudkittydashboard.dashboards.admin.modules import tables as admin_tables @@ -48,3 +52,33 @@ class ModuleDetailsView(views.APIView): context['hotconfig'] = module._info['hot-config'] context['module'] = module return context + + +class PriorityModuleEditView(forms.ModalFormView): + form_class = module_forms.EditPriorityForm + form_id = "edit_priority" + modal_header = _("Edit Priority Module") + page_title = _("Edit priority module") + submit_url = "horizon:admin:rating_modules:edit_priority" + success_url = "horizon:admin:rating_modules:edit_priority" + template_name = "horizon/common/modal_form.html" + + def get_initial(self): + module = api.cloudkittyclient(self.request).modules.get( + module_id=self.kwargs['module_id']) + self.initial = module.to_dict() + return self.initial + + def get_object_id(self, obj): + return obj.module_id + + def get_context_data(self, **kwargs): + context = super( + PriorityModuleEditView, self).get_context_data(**kwargs) + context['module_id'] = self.kwargs.get('module_id') + context['submit_url'] = reverse_lazy(self.submit_url, + args=(context['module_id'], )) + return context + + def get_success_url(self, **kwargs): + return reverse('horizon:admin:rating_modules:index')