def refresh_model_inputs(self): widgets = self._build_model_inputs() + [ Padding.center_79(self.additional_options), Padding.line_break(""), ] self.listbox.body[:] = widgets self.additional_options.contents = [ (obj, ('pack', None)) for obj in self._build_additional_options() ]
def _build_iface_inputs(self): visible_ssids = self.dev_info.wlan.visible_ssids if len(visible_ssids) > 0: networks_btn = menu_btn("Choose a visible network", on_press=self.show_ssid_list) else: networks_btn = disabled(menu_btn("No visible networks")) scan_state = self.dev_info.wlan.scan_state if not scan_state: scan_btn = menu_btn("Scan for networks", on_press=self.start_scan) elif scan_state.startswith('error'): self.error.set_text('scan failed: %s' % (scan_state, )) scan_btn = disabled(menu_btn("Scanning for networks failed")) else: scan_btn = disabled(menu_btn("Scanning for networks")) warning = ( "Only open or WPA2/PSK networks are supported at this time.") col = [ Text(warning), Text(""), self.ssid_row, Text(""), Padding.fixed_32(networks_btn), Padding.fixed_32(scan_btn), Text(""), self.psk_row, ] return col
def __init__(self, model, controller): self.model = model self.controller = controller self.dev_to_row = {} self.cur_netdevs = [] self.error = Text("", align='center') self.device_table = TablePile(self._build_model_inputs(), spacing=2, colspecs={ 0: ColSpec(rpad=1), 4: ColSpec(can_shrink=True, rpad=1), }) self._create_bond_btn = menu_btn(_("Create bond"), on_press=self._create_bond) bp = button_pile([self._create_bond_btn]) bp.align = 'left' self.listbox = ListBox([self.device_table] + [ bp, ]) self.bottom = Pile([ Text(""), self._build_buttons(), Text(""), ]) self.error_showing = False self.frame = Pile([('pack', Text("")), ('pack', Padding.center_79(Text(_(self.excerpt)))), ('pack', Text("")), Padding.center_90(self.listbox), ('pack', self.bottom)]) self.frame.set_focus(self.bottom) super().__init__(self.frame)
def __init__(self, model, controller): self.model = model self.controller = controller self.items = [] self.error = Text("", align='center') self.model_inputs = Pile(self._build_model_inputs()) self.additional_options = Pile(self._build_additional_options()) self.body = [ self.model_inputs, Padding.center_79(self.additional_options), Padding.line_break(""), ] self.lb = Padding.center_90(ListBox(self.body)) self.footer = Pile([ Text(""), self._build_buttons(), Text(""), ]) self.error_showing = False self.frame = Pile([ ('pack', Text("")), self.lb, ('pack', self.footer)]) self.lb.original_widget._select_last_selectable() self.frame.focus_position = 2 super().__init__(self.frame)
def _build_iface_inputs(self): if len(self.dev.actual_ssids) > 0: networks_btn = menu_btn("Choose a visible network", on_press=self.show_ssid_list) else: networks_btn = Color.info_minor( Columns([('fixed', 1, Text("")), Text("No visible networks"), ('fixed', 1, Text(">"))], dividechars=1)) if not self.dev.scan_state: scan_btn = menu_btn("Scan for networks", on_press=self.start_scan) else: scan_btn = Color.info_minor( Columns([('fixed', 1, Text("")), Text("Scanning for networks"), ('fixed', 1, Text(">"))], dividechars=1)) col = [ Padding.center_79( Color.info_minor( Text( "Only open or WPA2/PSK networks are supported at this time." ))), Padding.line_break(""), self.ssid_row, Padding.fixed_30(networks_btn), Padding.fixed_30(scan_btn), self.psk_row, ] return col
def __init__(self, model, controller): self.model = model self.controller = controller cancel = cancel_btn(_("Cancel"), on_press=self.cancel) disks = [] for disk in self.model.all_disks(): label = "%-42s %s" % (disk.label, humanize_size( disk.size).rjust(9)) if disk.size >= model.lower_size_limit: disk_btn = forward_btn(label, on_press=self.choose_disk, user_arg=disk) else: disk_btn = Color.info_minor(Text(" " + label)) disks.append(disk_btn) body = Pile([ ('pack', Text("")), ('pack', Padding.center_70(Text(_("Choose the disk to install to:")))), ('pack', Text("")), Padding.center_70(ListBox(disks)), ('pack', Text("")), ('pack', button_pile([cancel])), ('pack', Text("")), ]) super().__init__(body)
def __init__(self, model, controller): log.debug('FileSystemView init start()') self.model = model self.controller = controller self.items = [] self.body = [ Text(_("FILE SYSTEM SUMMARY")), Text(""), Padding.push_4(self._build_filesystem_list()), Text(""), Text(_("AVAILABLE DEVICES")), Text(""), Padding.push_4(self._build_available_inputs()), #self._build_menu(), #Text(""), #Text("USED DISKS"), #Text(""), #self._build_used_disks(), #Text(""), ] self.lb = Padding.center_95(ListBox(self.body)) self.footer = Pile([ Text(""), self._build_buttons(), Text(""), ]) self.frame = Pile([ ('pack', Text("")), self.lb, ('pack', self.footer)]) if self.model.can_install(): self.lb.original_widget._select_last_selectable() self.frame.focus_position = 2 super().__init__(self.frame) log.debug('FileSystemView init complete()')
def __init__(self, model, controller, opts, loop): self.model = model self.controller = controller self.opts = opts self.loop = loop self.items = [] self.email = EmailEditor() self.error = Text("", align="center") self.progress = Text("", align="center") body = [ ('pack', Text("")), ListBox([ self._build_model_inputs(), Padding.line_break(""), Padding.center_79( Color.info_minor( Text("If you do not have an account, visit " "https://login.ubuntu.com to create one."))), Padding.line_break(""), Padding.center_90(Color.info_error(self.error)), Padding.center_90(self.progress), ]), ('pack', Pile([ ('pack', Text("")), button_pile(self._build_buttons()), ('pack', Text("")), ])), ] super().__init__(Pile(body))
def __init__(self, model, signal, selected_disk): log.debug('AddPartitionView: selected_disk=[{}]'.format(selected_disk)) self.model = model self.signal = signal self.selected_disk = selected_disk self.disk_obj = self.model.get_disk(selected_disk) self.partnum = IntegerEditor(caption="", default=self.disk_obj.lastpartnumber + 1) self.size_str = _humanize_size(self.disk_obj.freespace) self.size = StringEditor(caption="".format(self.size_str)) self.mountpoint = MountEditor(caption="", edit_text="/") self.fstype = Selector(opts=self.model.supported_filesystems) body = [ Columns([ ("weight", 0.2, Text("Adding partition to {}".format(self.disk_obj.devpath), align="right")), ("weight", 0.3, Text("")) ]), Padding.line_break(""), self._container(), Padding.line_break(""), Padding.fixed_10(self._build_buttons()) ] partition_box = Padding.center_50(ListBox(body)) super().__init__(partition_box)
def _build_iface_inputs(self): if len(self.device.info.wlan['visible_ssids']) > 0: networks_btn = menu_btn("Choose a visible network", on_press=self.show_ssid_list) else: networks_btn = disabled(menu_btn("No visible networks")) if not self.device.info.wlan['scan_state']: scan_btn = menu_btn("Scan for networks", on_press=self.start_scan) else: scan_btn = disabled(menu_btn("Scanning for networks")) warning = ( "Only open or WPA2/PSK networks are supported at this time.") col = [ Text(warning), Text(""), self.ssid_row, Text(""), Padding.fixed_32(networks_btn), Padding.fixed_32(scan_btn), Text(""), self.psk_row, ] return col
def __init__(self, model, controller, name): self.model = model self.controller = controller self.dev = self.model.get_netdev_by_name(name) self.form = WLANForm() connect_signal(self.form, 'submit', self.done) connect_signal(self.form, 'cancel', self.cancel) if self.dev.configured_ssid is not None: self.form.ssid.value = self.dev.configured_ssid if self.dev.configured_wifi_psk is not None: self.form.psk.value = self.dev.configured_wifi_psk self.ssid_row = self.form.ssid.as_row(self, self.form.longest_caption) self.psk_row = self.form.psk.as_row(self, self.form.longest_caption) self.inputs = Pile(self._build_iface_inputs()) self.error = Text("") self.body = [ Padding.center_79(self.inputs), Padding.line_break(""), Padding.center_79(Color.info_error(self.error)), Padding.line_break(""), Padding.fixed_10(Pile([self.form.done_btn, self.form.cancel_btn])), ] self.orig_w = None super().__init__(ListBox(self.body))
def __init__(self, model, controller, name): self.model = model self.controller = controller self.dev = self.model.get_netdev_by_name(name) self.is_gateway = False self.form = NetworkConfigForm(self.ip_version) connect_signal(self.form, 'submit', self.done) connect_signal(self.form, 'cancel', self.cancel) self.form.subnet.help = "CIDR e.g. %s"%(self.example_address,) configured_addresses = self.dev.configured_ip_addresses_for_version(self.ip_version) if configured_addresses: addr = ipaddress.ip_interface(configured_addresses[0]) self.form.subnet.value = str(addr.network) self.form.address.value = str(addr.ip) configured_gateway = self.dev.configured_gateway_for_version(self.ip_version) if configured_gateway: self.form.gateway.value = configured_gateway self.form.nameservers.value = ', '.join(self.dev.configured_nameservers) self.form.searchdomains.value = ', '.join(self.dev.configured_searchdomains) self.error = Text("", align='center') #self.set_as_default_gw_button = Pile(self._build_set_as_default_gw_button()) body = [ Padding.center_79(self.form.as_rows(self)), #Padding.line_break(""), #Padding.center_79(self.set_as_default_gw_button), Padding.line_break(""), Padding.fixed_10(self.form.buttons) ] super().__init__(ListBox(body))
def __init__(self, model, controller): log.debug('FileSystemView init start()') self.model = model self.controller = controller self.mount_list = MountList(self) self.avail_list = DeviceList(self, True) self.used_list = DeviceList(self, False) self.avail_list.table.bind(self.used_list.table) body = [ Text(_("FILE SYSTEM SUMMARY")), Text(""), Padding.push_2(self.mount_list), Text(""), Text(""), Text(_("AVAILABLE DEVICES")), Text(""), Padding.push_2(self.avail_list), Text(""), Text(""), Text(_("USED DEVICES")), Text(""), Padding.push_2(self.used_list), Text(""), ] self.lb = ListBox(body) frame = screen(self.lb, self._build_buttons(), focus_buttons=self.model.can_install()) frame.width = ('relative', 95) super().__init__(frame) log.debug('FileSystemView init complete()')
def __init__(self, model, controller, name): self.model = model self.controller = controller self.dev = self.model.get_netdev_by_name(name) self.title = _("Network interface {} WIFI configuration").format(name) self.form = WLANForm() connect_signal(self.form, 'submit', self.done) connect_signal(self.form, 'cancel', self.cancel) if self.dev.configured_ssid is not None: self.form.ssid.value = self.dev.configured_ssid if self.dev.configured_wifi_psk is not None: self.form.psk.value = self.dev.configured_wifi_psk self.ssid_row = self.form.ssid.as_row(self.form.longest_caption) self.psk_row = self.form.psk.as_row(self.form.longest_caption) self.inputs = Pile(self._build_iface_inputs()) self.error = Text("") self.body = Pile([ ('pack', Text("")), ListBox([Padding.center_79(self.inputs)]), ('pack', Pile([ ('pack', Text("")), Padding.center_79(Color.info_error(self.error)), self.form.buttons, ('pack', Text("")), ])), ]) self.orig_w = None super().__init__(self.body)
def _build_model_inputs(self): local_tpl = ("This device is registered to {realname}.") remote_tpl = ( "\n\nRemote access was enabled via authentication with SSO user" " <{username}>.\nPublic SSH keys were added to the device " "for remote access.\n\n{realname} can connect remotely to this " "device via SSH:") sl = [] ssh = [] user = self.model.user login_info = { 'realname': user.realname, 'username': user.username, } login_text = local_tpl.format(**login_info) login_text += remote_tpl.format(**login_info) ips = [] for iface in self.ifaces: for addr in iface.dhcp4_addresses: try: ip = str(addr[0]).split("/")[0] except IndexError: ip = None if ip is not None: ips.append(ip) for addr in iface.ipv4_addresses: try: ip = str(addr).split("/")[0] except IndexError: ip = None if ip is not None: ips.append(ip) for addr in iface.dhcp6_addresses: try: ip = str(addr[0]).split("/")[0] except IndexError: ip = None if ip is not None: ips.append(ip) for addr in iface.ipv6_addresses: try: ip = str(addr).split("/")[0] except IndexError: ip = None if ip is not None: ips.append(ip) for ip in ips: ssh_iface = " ssh %s@%s" % (user.username, ip) ssh += [Padding.center_50(Text(ssh_iface))] sl += [Text(login_text), Padding.line_break("")] + ssh return Pile(sl)
def _build_model_inputs(self): """ This device is registered to Ryan Harper. Ryan Harper added a user, raharper, to the device for local access on the console. Remote access was enabled via authentication with Launchpad as lp:raharper and public ssh keys were added to the system for remote access. Ryan Harper can remotely connect to this system via SSH: ssh [email protected] ssh [email protected] """ local_tpl = ( "This device is registered to {realname}. {realname} added a" " user, <{username}> to the device for access.") remote_tpl = ( "\n\nRemote access was enabled via authentication with {auth} user" " <{ssh_import_id}>.\nPublic SSH keys were added to the device " "for remote access.\n\n{realname} can connect remotely to this " "device via SSH:") sl = [] ssh = [] user = self.model.user login_info = { 'realname': user.realname, 'username': user.username, } login_text = local_tpl.format(**login_info) if user.ssh_import_id: login_info.update({ 'auth': self.auth_name(user.ssh_import_id), 'ssh_import_id': user.ssh_import_id.split(":")[-1] }) login_text += remote_tpl.format(**login_info) ips = [] for dev in self.ifaces: for addr in dev.actual_ip_addresses: ips.append(addr) for ip in ips: ssh_iface = " ssh %s@%s" % (user.username, ip) ssh += [Padding.center_50(Text(ssh_iface))] print(login_info) sl += [Text(login_text), Padding.line_break("")] + ssh return Pile(sl)
def __init__(self, signal): self.signal = signal self.body = [ Padding.center_79(Text("This view is not yet implemented.")), Padding.line_break(""), Padding.center_79(Color.info_minor(Text("A place holder widget"))), Padding.line_break(""), Padding.center_79(self._build_buttons()) ] super().__init__(ListBox(self.body))
def __init__(self, model, signal): self.model = model self.signal = signal self.items = [] self.body = [ Padding.center_79(self._build_model_inputs()), Padding.line_break(""), Padding.fixed_10(self._build_buttons()), ] super().__init__(ListBox(self.body))
def _build_default_routes(self): ''' iterate through interfaces collecting any uniq provider (aka, gateway) and associate the interface name with the gateway then generate a line per key in the gateway dict and display the keys. Upon selection of the gateway entry (ip) then we set model.set_default_gateway(ip) if manual is selected, then we update the second entry into a IPAddressEditor and accept the value, submitting it to the model. ''' providers = {} for iface in self.model.get_all_interfaces(): if self.family == netifaces.AF_INET: ip_providers = iface.ip4_providers elif self.family == netifaces.AF_INET6: ip_providers = iface.ip6_providers for provider in ip_providers: log.debug('ipv4 provider: {}'.format(provider)) gw = provider if gw in providers: providers[gw].append(iface.ifname) else: providers[gw] = [iface.ifname] log.debug('gateway providers: {}'.format(providers)) items = [] items.append( Padding.center_79( Color.menu_button(menu_btn(label="None", on_press=self.done), focus_map="menu_button focus"))) for (gw, ifaces) in providers.items(): if gw is None: continue items.append( Padding.center_79( Color.menu_button(menu_btn(label="{gw} ({ifaces})".format( gw=gw, ifaces=(",".join(ifaces))), on_press=self.done), focus_map="menu_button focus"))) items.append( Padding.center_79( Color.menu_button(menu_btn( label="Specify the default route manually", on_press=self.show_edit_default_route), focus_map="menu_button focus"))) return items
def __init__(self, model, signal, selected_device, hdinfo): log.debug('DiskInfoView: {}'.format(selected_device)) self.model = model self.signal = signal self.selected_device = selected_device hdinfo = hdinfo.split("\n") body = [] for h in hdinfo: body.append(Text(h)) body.append(Padding.fixed_10(self._build_buttons())) super().__init__(Padding.center_79(SimpleList(body)))
def __init__(self, title=None, excerpt=None): widgets = [Text("")] if title is not None: widgets.append( Padding.center_79(Color.body(Text(title)))) widgets.append(Text("")) if excerpt is not None: widgets.append( Padding.center_79(Color.body(Text(excerpt)))) widgets.append(Text("")) super().__init__(Pile(widgets))
def __init__(self, opts, model, controller, netdevs): self.opts = opts self.model = model self.controller = controller self.netdevs = netdevs self.items = [] self.body = [ Padding.center_79(self._build_model_inputs()), Padding.line_break(""), Padding.fixed_10(self._build_buttons()) ] super().__init__(ListBox(self.body))
def __init__(self, message, current, complete): message_widget = Padding.center_79(Text(message)) progress_bar = Padding.center_60( StepsProgressBar(normal='progress_incomplete', complete='progress_complete', current=current, done=complete)) status = [ progress_bar, Padding.line_break(""), message_widget, ] super().__init__(Color.frame_footer(Pile(status)))
def __init__(self, controller): self.controller = controller guided = ok_btn(_("Use An Entire Disk"), on_press=self.guided) manual = ok_btn(_("Manual"), on_press=self.manual) back = back_btn(_("Back"), on_press=self.cancel) lb = ListBox([ Padding.center_70(Text("")), Padding.center_70(Text(text)), Padding.center_70(Text("")), button_pile([guided, manual, back]), ]) super().__init__(lb)
def __init__(self, title=None, excerpt=None): widgets = [Text("")] if title is not None: widgets.append(Padding.center_79(Text(title))) widgets.append(Text("")) widgets = [Color.frame_header(Pile(widgets))] if excerpt is not None: widgets.extend([ Text(""), Padding.center_79(Text(excerpt)), ]) super().__init__(Pile(widgets))
def show_finished_button(self): w = Padding.fixed_20( Color.button(confirm_btn(label="Reboot now", on_press=self.reboot), focus_map='button focus')) z = Padding.fixed_20( Color.button(confirm_btn(label="Quit Installer", on_press=self.quit), focus_map='button focus')) self.pile.contents.append((w, self.pile.options())) self.pile.contents.append((z, self.pile.options())) self.pile.focus_position = 2
def __init__(self, model, signal): """ :param output_w: Filler widget to display updated status text """ self.model = model self.signal = signal self.text = Text("Wait for it ...", align="left") self.body = [ Padding.center_79(self.text), Padding.line_break(""), ] self.pile = Pile(self.body) super().__init__(Filler(self.pile, valign="middle"))
def __init__(self, model, signal): self.model = model self.signal = signal self.volgroup = UsernameEditor() self.selected_disks = [] body = [ Padding.center_50(self._build_disk_selection()), Padding.line_break(""), Padding.center_50(self._build_lvm_configuration()), Padding.line_break(""), Padding.fixed_10(self._build_buttons()) ] super().__init__(ListBox(body))
def __init__(self, model, controller): self.model = model self.controller = controller super().__init__( Pile([ ('pack', Text("")), ('pack', Padding.center_79( Text(_("Please choose your preferred language")))), ('pack', Text("")), Padding.center_50(self._build_model_inputs()), ('pack', Text("")), ]))
def __init__(self, model, signal): self.model = model self.signal = signal self.ceph_mon = StringEditor() self.username = StringEditor() self.ceph_key = StringEditor() self.pool = [] body = [ Padding.center_50(self._build_model_inputs()), Padding.line_break(""), Padding.fixed_10(self._build_buttons()) ] super().__init__(ListBox(body))