Пример #1
0
class TabHostname(object):

    def __init__(self, main_loop):
        self.main_loop = main_loop
        self.name = u"Hosts Config"
        self.hosts_file = "/etc/hosts"
        self.w_entries = self.load_entries()
        self.widget = SimplePopupLauncher(self.get_entry_widget())

    def load_entries(self):
        widget_lines = []
        with open(self.hosts_file) as f:
            for line in f.readlines():
                items = line.split()
                widget_items = [urwid.Edit("IP: ", items[0]), urwid.Edit("Hostname: ", items[1])]
                widget_items.append(urwid.Button("Delete", on_press=self.delete_line, user_data=widget_items))
                widget_lines.append(widget_items)
        return widget_lines

    def delete_line(self, button, line):
        # button参数没有用到
        self.w_entries.remove(line)
        self.widget.original_widget = self.get_entry_widget()
        self.widget.original_widget.focus_position = max(0, len(self.w_entries)-1)

    def get_entry_widget(self):
        pile = urwid.Pile([
            urwid.Columns(entry) for entry in self.w_entries
        ])
        pile.contents.append((urwid.Button("New", on_press=self.new), ('pack', None)))
        pile.contents.append((urwid.Button("Save", on_press=self.save), ('pack', None)))
        return pile

    def new(self, button):
        # button参数没有用到
        widget_items = [urwid.Edit("IP: ", ""), urwid.Edit("Hostname: ", "")]
        widget_items.append(urwid.Button("Delete", on_press=self.delete_line, user_data=widget_items))
        self.w_entries.append(widget_items)
        self.widget.original_widget = self.get_entry_widget()
        self.widget.original_widget.focus_position = len(self.w_entries)

    def save(self, button):
        # button参数没有用到
        f = open(self.hosts_file, "w")
        # 可以用with语句,下面就不用f.close了
        for entry in self.w_entries:
            if entry[0].edit_text.strip() and entry[1].edit_text.strip():
                f.write("%s %s\n" % (entry[0].edit_text, entry[1].edit_text))
        f.close()
        self.widget.set_popup_text("Save success.")
        self.widget.open_pop_up()
Пример #2
0
    def __init__(self, main_loop):
        self.main_loop = main_loop
        self.name = u"NetWork"
        self.widget_list = []

        self.hostname = urwid.Edit(u"Hostname: ", socket.gethostname())
        self.hostname_popup = SimplePopupLauncher(
            urwid.Columns(([self.hostname, urwid.Button(u"Save", on_press=self.save_hostname)])))
        self.widget_list.extend([
            urwid.Divider("-"),
            self.hostname_popup,
        ])

        ifs_widgets = self.get_ifs_widgets()
        bridge_widgets = self.get_bridge_widgets()
        if ifs_widgets:
            self.widget_list.extend(ifs_widgets)
        if bridge_widgets:
            self.widget_list.extend(bridge_widgets)
        #上面两个判断多余,直接self.widget_list.extend,只要保证ifs_widgets和bridge_widgets类型始终上list
        self.widget = WidgetWithSaveNicPopup(urwid.Pile(self.widget_list))
Пример #3
0
class TabNetwork(object):

    def __init__(self, main_loop):
        self.main_loop = main_loop
        self.name = u"NetWork"
        self.widget_list = []

        self.hostname = urwid.Edit(u"Hostname: ", socket.gethostname())
        self.hostname_popup = SimplePopupLauncher(
            urwid.Columns(([self.hostname, urwid.Button(u"Save", on_press=self.save_hostname)])),
            "Save success.")
        self.widget_list.extend([
            urwid.Divider("-"),
            self.hostname_popup,
        ])

        ifs_widgets = self.get_ifs_widgets()
        bridge_widgets = self.get_bridge_widgets()
        if ifs_widgets:
            self.widget_list.extend(ifs_widgets)
        if bridge_widgets:
            self.widget_list.extend(bridge_widgets)
        #上面两个判断多余,直接self.widget_list.extend,只要保证ifs_widgets和bridge_widgets类型始终上list
        self.widget = WidgetWithSaveNicPopup(urwid.Pile(self.widget_list))

    def save_hostname(self, button):
        os.system("hostname %s" % self.hostname.edit_text)
        os.system("echo 'hostname %s' > /etc/sysconfig/network" % self.hostname.edit_text)
        self.hostname_popup.open_pop_up()

    def get_bridge_widgets(self):
        bridge_info_widgets = []
        for bridge in ifconfig.iterifs(bridge=True):
            try:
                if_name = subprocess.check_output(
                    "brctl show %s|grep %s" % (bridge.name, bridge.name),
                    shell=True).split("\t")[-1].strip()
                bridge_info_widgets.append(urwid.Pile([
                    urwid.Divider("-"),
                    urwid.Columns([
                        ("weight", 1, urwid.Pile([
                            urwid.Text(u"Name: %s" % if_name),
                            urwid.Text(u"Status: %s" % ("up" if ifconfig.Interface(if_name).is_up() else "down")),
                        ])),
                        ("weight", 2, urwid.Pile([
                            urwid.Text(u"Bridge: %s" % bridge.name),
                            urwid.Text(u"Address: %s" % bridge.get_ip()),
                            urwid.Text(u"Netmask: %s" % bridge.get_netmask()),
                            urwid.Text(u"Gateway: %s" % self.config_gateway(bridge.name)),
                        ])),
                    ])
                ]))
            except subprocess.CalledProcessError:
                continue
        return bridge_info_widgets

    def get_ifs_widgets(self):
        ifs_info_widget = []
        for interface in ifconfig.iterifs(physical=True):
            try:
                subprocess.check_output("brctl show|grep %s" % interface.name, shell=True)
                continue
            except subprocess.CalledProcessError:
                pass
            address_edit = urwid.Edit(u"Adress: ", str(interface.get_ip()))
            netmask_edit = urwid.Edit(u"Netmask: ", str(interface.get_netmask()))
            gateway_edit = urwid.Edit(u"Gateway: ", self.config_gateway(interface.name))
            apply_button = urwid.Button(u"Apply")
            ifs_info_widget.append(urwid.Pile([
                urwid.Divider("-"),
                urwid.Text(u"Name: " + interface.name),
                address_edit,
                netmask_edit,
                gateway_edit,
                urwid.Text(u"Status: " + ("up" if interface.is_up() else "down")),
                apply_button,
            ]))
            urwid.connect_signal(
                apply_button,
                "click",
                self.on_if_apply,
                user_arg=(interface.name, address_edit, netmask_edit, gateway_edit))
        return ifs_info_widget

    def config_gateway(self, name):
        try:
            gateway = subprocess.check_output(
                "cat /etc/sysconfig/network-scripts/ifcfg-%s|grep -i gateway" % name,
                shell=True)
            gateway = gateway.split("=")[1].replace("\"", "").replace("'", "").strip()
        except subprocess.CalledProcessError:
            gateway = ""
        return gateway

    def on_if_apply(self, button, if_info):
        self.widget.set_if_info(if_info)
        self.widget.open_pop_up()
        thread.start_new_thread(self.post_on_if_apply, (if_info,))

    def post_on_if_apply(self, if_info):
        interface = ifconfig.findif(if_info[0])
        with open('/etc/sysconfig/network-scripts/ifcfg-' + if_info[0], 'w') as out:
            out.write('HWADDR={}\n'.format(interface.get_mac())
                    + 'BOOTPROTO=static\n'
                    + 'IPADDR={}\n'.format(if_info[1].get_edit_text())
                    + 'PREFIX={}\n'.format(int(if_info[2].get_edit_text()))
                    + 'GATEWAY={}\n'.format(if_info[3].get_edit_text())
                    + 'ONBOOT=yes\n'
            )
        os.system('/etc/init.d/network restart &>/dev/null')
        self.widget.if_update_finish()
        self.main_loop.draw_screen()
Пример #4
0
 def __init__(self, main_loop):
     self.main_loop = main_loop
     self.name = u"Hosts Config"
     self.hosts_file = "/etc/hosts"
     self.w_entries = self.load_entries()
     self.widget = SimplePopupLauncher(self.get_entry_widget())