class MachinesColumn(WidgetWrap): """Shows machines or a link to MAAS to add more""" def __init__(self, display_controller, placement_controller, placement_view): self.display_controller = display_controller self.placement_controller = placement_controller self.placement_view = placement_view w = self.build_widgets() super().__init__(w) self.update() def selectable(self): return True def build_widgets(self): self.machines_list = MachinesList(self.placement_controller, self.display_controller, None, show_hardware=True, show_assignments=False, show_placeholders=False, show_only_ready=True, title_widgets=[]) self.machines_list.update() self.machines_list_pile = Pile([self.machines_list, Divider()]) return self.machines_list_pile def update(self): self.machines_list.update() maasinfo = self.placement_controller.maasinfo empty_maas_msg = ("There are no available machines.\n" "Open {} to add machines to " "'{}':".format(maasinfo['server_name'], maasinfo['server_hostname'])) self.empty_maas_widgets = Pile([Text([('error_icon', "\N{WARNING SIGN} "), empty_maas_msg], align='center')]) # 2 machines is the subordinate placeholder + juju default: opts = self.machines_list_pile.options() if len(self.placement_controller.machines()) == 2: self.machines_list_pile.contents[0] = (self.empty_maas_widgets, opts) else: self.machines_list_pile.contents[0] = (self.machines_list, opts) def clear_selections(self): for mw in self.machines_list.machine_widgets: mw.is_selected = False def focus_prev_or_top(self): self.update() try: self.machines_list_pile.focus_position = 0 self.machines_list.focus_prev_or_top() except IndexError: log.debug("caught indexerror in machinesColumn focus_prev_or_top") pass
class MachinesColumn(WidgetWrap): """Shows machines or a link to MAAS to add more""" def __init__(self, display_controller, placement_controller, placement_view): self.display_controller = display_controller self.placement_controller = placement_controller self.placement_view = placement_view w = self.build_widgets() super().__init__(w) self.update() def selectable(self): return True def build_widgets(self): self.machines_list = MachinesList(self.placement_controller, self.display_controller, None, show_hardware=True, show_assignments=False, show_placeholders=False, show_only_ready=True, title_widgets=[]) self.machines_list.update() self.machines_list_pile = Pile([self.machines_list, Divider()]) return self.machines_list_pile def update(self): self.machines_list.update() maasinfo = self.placement_controller.maasinfo empty_maas_msg = ("There are no available machines.\n" "Open {} to add machines to " "'{}':".format(maasinfo['server_name'], maasinfo['server_hostname'])) self.empty_maas_widgets = Pile([ Text([('error_icon', "\N{WARNING SIGN} "), empty_maas_msg], align='center') ]) # 2 machines is the subordinate placeholder + juju default: opts = self.machines_list_pile.options() if len(self.placement_controller.machines()) == 2: self.machines_list_pile.contents[0] = (self.empty_maas_widgets, opts) else: self.machines_list_pile.contents[0] = (self.machines_list, opts) def clear_selections(self): for mw in self.machines_list.machine_widgets: mw.is_selected = False def focus_prev_or_top(self): self.update() try: self.machines_list_pile.focus_position = 0 self.machines_list.focus_prev_or_top() except IndexError: log.debug("caught indexerror in machinesColumn focus_prev_or_top") pass