From 79a380f28fff16ed0d4a8de1fbad979419599f20 Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Wed, 27 Jun 2018 10:32:38 +1200 Subject: [PATCH] initialize manual form fields --- subiquitycore/ui/form.py | 5 +++ subiquitycore/ui/views/network.py | 31 ++++++++++++++++--- .../network_configure_manual_interface.py | 4 +-- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/subiquitycore/ui/form.py b/subiquitycore/ui/form.py index c92f4489..932cbb16 100644 --- a/subiquitycore/ui/form.py +++ b/subiquitycore/ui/form.py @@ -361,6 +361,11 @@ class Form(object, metaclass=MetaForm): bf.validate(show_error=False) self.validated() + def enter_data(self, data): + for bf in self._fields: + if bf.field.name in data: + bf.field.value = data[bf.field.name] + def _click_done(self, sender): emit_signal(self, 'submit', self) diff --git a/subiquitycore/ui/views/network.py b/subiquitycore/ui/views/network.py index eeb27ae5..59145e8d 100644 --- a/subiquitycore/ui/views/network.py +++ b/subiquitycore/ui/views/network.py @@ -19,6 +19,7 @@ Provides network device listings and extended network information """ +import ipaddress import logging import textwrap @@ -26,7 +27,6 @@ from urwid import ( connect_signal, LineBox, ProgressBar, - RadioButton, Text, WidgetPlaceholder, ) @@ -140,13 +140,13 @@ network_choices = { 4: [ (_("Automatic (DHCP)"), True, "dhcp"), (_("Manual"), True, "manual"), - (_("Disable"), True, "disable"), + (_("Disabled"), True, "disable"), ], 6: [ (_("Automatic"), True, "accept-ra"), (_("Automatic (DHCP)"), True, "dhcp"), (_("Manual"), True, "manual"), - (_("Disable"), True, "disable"), + (_("Disabled"), True, "disable"), ], } @@ -165,12 +165,33 @@ class EditNetworkStretchy(Stretchy): self.method_form = NetworkMethodForm() self.method_form.method.caption = _("IPv{ip_version} Method: ").format(ip_version=ip_version) + manual_initial = {} + if len(device.configured_ip_addresses_for_version(ip_version)) > 0: + method = 'manual' + addr = ipaddress.ip_interface( + device.configured_ip_addresses_for_version(ip_version)[0]) + manual_initial = { + 'subnet': str(addr.network), + 'address': str(addr.ip), + 'nameservers': ', '.join(device.configured_nameservers), + 'searchdomains': ', '.join(device.configured_searchdomains), + } + gw = device.configured_gateway_for_version(ip_version) + if gw: + manual_initial['gateway'] = str(gw) + elif self.device.dhcp_for_version(ip_version): + method = 'dhcp' + else: + method = 'disable' + + self.method_form.method.value = method self.method_form.method.widget.options = list(map(Option, network_choices[ip_version])) connect_signal(self.method_form.method.widget, 'select', self._select_method) - self.manual_form = NetworkConfigForm(ip_version) + log.debug("manual_initial %s", manual_initial) + self.manual_form = NetworkConfigForm(ip_version, manual_initial) connect_signal(self.method_form, 'submit', self.done_method) connect_signal(self.manual_form, 'submit', self.done_manual) @@ -181,6 +202,8 @@ class EditNetworkStretchy(Stretchy): self.bp = WidgetPlaceholder(self.method_form.buttons) + self._select_method(None, method) + widgets = [self.form_pile, Text(""), self.bp] super().__init__( "Edit {device} IPv{ip_version} configuration".format(device=device.name, ip_version=ip_version), diff --git a/subiquitycore/ui/views/network_configure_manual_interface.py b/subiquitycore/ui/views/network_configure_manual_interface.py index d6ede634..83611a62 100644 --- a/subiquitycore/ui/views/network_configure_manual_interface.py +++ b/subiquitycore/ui/views/network_configure_manual_interface.py @@ -57,12 +57,12 @@ class IPField(FormField): class NetworkConfigForm(Form): - def __init__(self, ip_version): + def __init__(self, ip_version, initial={}): self.ip_version = ip_version fam = ip_families[ip_version] self.ip_address_cls = fam['address_cls'] self.ip_network_cls = fam['network_cls'] - super().__init__() + super().__init__(initial) ok_label = _("Save")