# 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 import template from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ungettext_lazy from horizon import tables from openstack_dashboard import api LOG = logging.getLogger(__name__) class CreateBoardLink(tables.LinkAction): name = "create" verbose_name = _("Create Board") url = "horizon:iot:boards:create" classes = ("ajax-modal",) icon = "plus" # policy_rules = (("iot", "iot:create_board"),) class EditBoardLink(tables.LinkAction): name = "edit" verbose_name = _("Edit") url = "horizon:iot:boards:update" classes = ("ajax-modal",) icon = "pencil" # policy_rules = (("iot", "iot:update_board"),) """ def allowed(self, request, role): return api.keystone.keystone_can_edit_role() """ class RestoreServices(tables.BatchAction): name = "restoreservices" @staticmethod def action_present(count): return u"Restore ALL Services" @staticmethod def action_past(count): return u"Restored ALL Services" def allowed(self, request, board=None): return True def action(self, request, board_id): api.iotronic.restore_services(request, board_id) class EnableServiceLink(tables.LinkAction): name = "enableservice" verbose_name = _("Enable Service(s)") url = "horizon:iot:boards:enableservice" classes = ("ajax-modal",) # icon = "plus" # policy_rules = (("iot", "iot:service_action"),) class DisableServiceLink(tables.LinkAction): name = "disableservice" verbose_name = _("Disable Service(s)") url = "horizon:iot:boards:disableservice" classes = ("ajax-modal",) # icon = "plus" # policy_rules = (("iot", "iot:service_action"),) class RemovePluginsLink(tables.LinkAction): name = "removeplugins" verbose_name = _("Remove Plugin(s)") url = "horizon:iot:boards:removeplugins" classes = ("ajax-modal",) icon = "plus" # policy_rules = (("iot", "iot:remove_plugins"),) class AttachPortLink(tables.LinkAction): name = "attachport" verbose_name = _("Attach Port") url = "horizon:iot:boards:attachport" classes = ("ajax-modal",) icon = "plus" class DetachPortLink(tables.LinkAction): name = "detachport" verbose_name = _("Detach Port") url = "horizon:iot:boards:detachport" classes = ("ajax-modal",) icon = "plus" class EnableWebServiceLink(tables.LinkAction): name = "enablewebservice" verbose_name = _("Enable Web Services Manager") url = "horizon:iot:boards:enablewebservice" classes = ("ajax-modal",) icon = "plus" class DisableWebServiceLink(tables.LinkAction): name = "disablewebservice" verbose_name = _("Disable Web Services Manager") url = "horizon:iot:boards:disablewebservice" classes = ("ajax-modal",) icon = "plus" class DeleteBoardsAction(tables.DeleteAction): @staticmethod def action_present(count): return ungettext_lazy( u"Delete Board", u"Delete Boards", count ) @staticmethod def action_past(count): return ungettext_lazy( u"Deleted Board", u"Deleted Boards", count ) # policy_rules = (("iot", "iot:delete_board"),) """ def allowed(self, request, role): return api.keystone.keystone_can_edit_role() """ def delete(self, request, board_id): api.iotronic.board_delete(request, board_id) class BoardFilterAction(tables.FilterAction): # If uncommented it will appear the select menu list of fields # and filter button """ filter_type = "server" filter_choices = (("name", _("Board Name ="), True), ("type", _("Type ="), True), ("status", _("Status ="), True)) """ def filter(self, table, boards, filter_string): """Naive case-insensitive search.""" q = filter_string.lower() return [board for board in boards if q in board.name.lower()] def show_services(board_info): template_name = 'iot/boards/_cell_services.html' context = board_info._info # LOG.debug("CONTEXT: %s", context) return template.loader.render_to_string(template_name, context) class BoardsTable(tables.DataTable): name = tables.WrappingColumn('name', link="horizon:iot:boards:detail", verbose_name=_('Board Name')) type = tables.Column('type', verbose_name=_('Type')) # mobile = tables.Column('mobile', verbose_name=_('Mobile')) lr_version = tables.Column('lr_version', verbose_name=_('LR version')) # fleet = tables.Column('fleet', verbose_name=_('Fleet ID')) fleet_name = tables.Column('fleet_name', verbose_name=_('Fleet Name')) # code = tables.Column('code', verbose_name=_('Code')) status = tables.Column('status', verbose_name=_('Status')) uuid = tables.Column('uuid', verbose_name=_('Board ID')) # location = tables.Column('location', verbose_name=_('Geo')) services = tables.Column(show_services, verbose_name=_('Services')) # extra = tables.Column('extra', verbose_name=_('Extra')) # Overriding get_object_id method because in IoT service the "id" is # identified by the field UUID def get_object_id(self, datum): return datum.uuid class Meta(object): name = "boards" verbose_name = _("boards") row_actions = (EditBoardLink, EnableServiceLink, DisableServiceLink, RestoreServices, AttachPortLink, DetachPortLink, EnableWebServiceLink, DisableWebServiceLink, RemovePluginsLink, DeleteBoardsAction) table_actions = (BoardFilterAction, CreateBoardLink, DeleteBoardsAction)