Пример #1
0
 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() ]
Пример #2
0
    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
Пример #3
0
    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)
Пример #4
0
 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
Пример #6
0
 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)
Пример #7
0
 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()')
Пример #8
0
    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))
Пример #9
0
    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)
Пример #10
0
    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
Пример #11
0
    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))
Пример #12
0
    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))
Пример #13
0
    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)
Пример #15
0
    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)
Пример #16
0
    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)
Пример #17
0
 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))
Пример #18
0
 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))
Пример #19
0
    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
Пример #20
0
 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)))
Пример #21
0
 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))
Пример #22
0
 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))
Пример #23
0
 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)))
Пример #24
0
 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)
Пример #25
0
 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))
Пример #26
0
    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
Пример #27
0
 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"))
Пример #28
0
 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))
Пример #29
0
 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("")),
         ]))
Пример #30
0
 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))