initialize manual form fields

This commit is contained in:
Michael Hudson-Doyle 2018-06-27 10:32:38 +12:00
parent 58fd656aed
commit 79a380f28f
3 changed files with 34 additions and 6 deletions

View File

@ -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)

View File

@ -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),

View File

@ -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")