summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lumens <clumens@redhat.com>2006-06-07 17:51:06 +0000
committerChris Lumens <clumens@redhat.com>2006-06-07 17:51:06 +0000
commit6bc5cb7cc41dca020f92af46a2920a04963f0379 (patch)
treead279099d2769f18a067683aa811b4dd22fae789
parent3fdc96e374e869699a5f3946c673c893a2657c93 (diff)
downloadanaconda-6bc5cb7cc41dca020f92af46a2920a04963f0379.tar.gz
anaconda-6bc5cb7cc41dca020f92af46a2920a04963f0379.tar.xz
anaconda-6bc5cb7cc41dca020f92af46a2920a04963f0379.zip
Move from IPEditors to gtk.Entrys. This will help when people can enter
IPv6 addresses so we don't have a thousand little boxes on the screen.
-rw-r--r--ChangeLog9
-rw-r--r--iw/ipwidget.py150
-rw-r--r--iw/iscsi_gui.py20
-rw-r--r--iw/network_gui.py47
-rw-r--r--network.py28
5 files changed, 55 insertions, 199 deletions
diff --git a/ChangeLog b/ChangeLog
index 2367335ba..b4b69d339 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-06-07 Chris Lumens <clumens@redhat.com>
+
+ * network.py (IPError, IPMissing): Moved here from iw/ipwidget.py.
+ (sanityCheckIPString): Simplified to just check the string, so we can
+ complicate it up later for IPv6.
+ * iw/ipwidget.py: Removed.
+ * iw/iscsi_gui.py: Use a gtk.Entry instead of an IPEditor.
+ * iw/network_gui.py: Likewise.
+
2006-06-07 David Cantrell <dcantrell@redhat.com>
* anaconda.spec: Require libdhcp-devel, libdhcp4client-devel, and
diff --git a/iw/ipwidget.py b/iw/ipwidget.py
deleted file mode 100644
index eab91da77..000000000
--- a/iw/ipwidget.py
+++ /dev/null
@@ -1,150 +0,0 @@
-#
-# class to create an IP address entry widget and to sanity check entered values
-#
-# Jonathan Blandford <jrb@redhat.com>
-# Michael Fulbright <msf@redhat.com>
-#
-# Copyright 2002 Red Hat, Inc.
-#
-# This software may be freely redistributed under the terms of the GNU
-# library public license.
-#
-# You should have received a copy of the GNU Library Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-
-import re
-import string
-import gettext
-import gtk
-import gobject
-import gui
-import network
-from rhpl.translate import _, N_
-
-ip_fields = ['entry1', 'entry2', 'entry3', 'entry4']
-
-# Includes an error message, and the widget with problems
-class IPError(Exception):
- pass
-
-class IPMissing(Exception):
- pass
-
-class IPEditor:
- def __init__ (self):
- self.entrys = {}
- for name in ip_fields:
- self.entrys[name] = gtk.Entry(3)
- self.entrys[name].set_size_request(50,-1)
- self.entrys[name].set_max_length(3)
-
- for i in range(0, len(ip_fields)):
- name = ip_fields[i]
- if name != 'entry4':
- nname = self.entrys[ip_fields[i+1]]
- else:
- nname = None
-
- self.entrys[name].connect('insert_text', self.entry_insert_text_cb, nname)
-
- hbox = gtk.HBox()
- for name in ip_fields:
- hbox.pack_start(self.entrys[name], False, False)
- if name != 'entry4':
- hbox.pack_start(gtk.Label('.'), False, False)
-
- self.widget = hbox
-
- def getWidget(self):
- return self.widget
-
- def getFocusableWidget(self):
- return self.entrys['entry1']
-
- def clear_entries (self):
- for name in ip_fields:
- self.entrys[name].set_text('')
-
- def hydrate (self, ip_string):
- self.clear_entries()
-
- octets = network.sanityCheckIPString(ip_string)
- if octets is None:
- return
-
- i = 0
- for name in ip_fields:
- self.entrys[name].set_text(octets[i])
- i = i + 1
-
- def dehydrate (self):
- widget = None
- # test if empty
- empty = 1
- for e in ['entry1', 'entry2', 'entry3', 'entry4']:
- if len(string.strip(self.entrys[e].get_text())) > 0:
- empty = 0
- break
-
- if empty:
- raise IPMissing, (_("IP Address is missing"), widget)
-
- try:
- widget = self.entrys['entry1']
- if int(widget.get_text()) > 255 or int(widget.get_text()) <= 0:
- raise IPError, (_("IP Addresses must contain numbers between 1 and 255"), widget)
-
- for ent in ['entry2', 'entry3', 'entry4']:
- widget = self.entrys[ent]
- if int(widget.get_text()) > 255:
- raise IPError, (_("IP Addresses must contain numbers between 0 and 255"), widget)
- except ValueError, msg:
- raise IPError, (_("IP Addresses must contain numbers between 0 and 255"), widget)
-
- ents = []
- for ent in (self.entrys['entry1'].get_text(),
- self.entrys['entry2'].get_text(),
- self.entrys['entry3'].get_text(),
- self.entrys['entry4'].get_text()):
- if ent != "0":
- ents.append(ent.lstrip("0"))
- else:
- ents.append(ent)
-
- return "%s.%s.%s.%s" %(ents[0], ents[1], ents[2], ents[3])
-
- def entry_insert_text_cb(self, entry, text, length, pos, next):
- if text == '.':
- entry.emit_stop_by_name ("insert_text")
- if next:
- next.grab_focus()
- return
- reg = re.compile ("[^0-9]+")
- if reg.match (text):
- entry.emit_stop_by_name ("insert_text")
-
-
-
-if __name__ == "__main__":
- def output(xxx, data):
- try:
- print data.dehydrate()
- except:
- print "oops errors"
- gtk.mainquit()
-
- win = gtk.Window()
- win.connect('destroy', gtk.mainquit)
- vbox = gtk.VBox()
- ip = IPEditor()
- vbox = gtk.VBox()
- vbox.pack_start(ip.getWidget())
- button = gtk.Button("Quit")
- button.connect("pressed", output, ip)
- vbox.pack_start(button, False, False)
- win.add(vbox)
- win.show_all()
-
- gtk.main()
diff --git a/iw/iscsi_gui.py b/iw/iscsi_gui.py
index ee2e54e4e..f58ab874b 100644
--- a/iw/iscsi_gui.py
+++ b/iw/iscsi_gui.py
@@ -11,14 +11,13 @@
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
-
import gtk
import gobject
import gui
import iutil
+import network
from rhpl.translate import _, N_
from iw_gui import *
-import ipwidget
class iscsiWindow(InstallWindow):
def __init__(self, ics):
@@ -28,12 +27,13 @@ class iscsiWindow(InstallWindow):
def getNext(self):
try:
- self.iscsi.ipaddr = self.ip_widget.dehydrate()
- except ipwidget.IPMissing, msg:
+ network.sanityCheckIPString(self.ip_widget.get_text())
+ self.iscsi.ipaddr = self.ip_widget.get_text()
+ except network.IPMissing, msg:
self.intf.messageWindow(_("Error with Data"),
_("No IP address entered, skipping iSCSI setup"))
- except ipwidget.IPError, msg:
- self.intf.messageWindow(_("Error with Data"), _("%s") % (msg[0],))
+ except network.IPError, msg:
+ self.intf.messageWindow(_("Error with Data"), _("%s") % (msg,))
raise gui.StayOnScreen
self.iscsi.port = self.port.get_text()
@@ -49,8 +49,8 @@ class iscsiWindow(InstallWindow):
(self.xml, widget) = gui.getGladeWidget("iscsi-config.glade", "iscsiRows")
self.ip_table = self.xml.get_widget("iscsiTable")
- self.ip_widget = ipwidget.IPEditor()
- self.ip_widget.hydrate(self.iscsi.ipaddr)
+ self.ip_widget = gtk.Entry()
+ self.ip_widget.set_text(self.iscsi.ipaddr)
self.port = self.xml.get_widget("iscsiPort")
if self.iscsi.port:
@@ -65,8 +65,8 @@ class iscsiWindow(InstallWindow):
# XXX there is too much space around the IP address. Using this
# variant had no affect:
- # self.ip_table.attach(self.ip_widget.getWidget(), 1, 2, 0, 1, gtk.FILL|gtk.EXPAND)
- self.ip_table.attach(self.ip_widget.getWidget(), 1, 2, 0, 1)
+ # self.ip_table.attach(self.ip_widget, 1, 2, 0, 1, gtk.FILL|gtk.EXPAND)
+ self.ip_table.attach(self.ip_widget, 1, 2, 0, 1)
return widget
# vim:tw=78:ts=4:et:sw=4
diff --git a/iw/network_gui.py b/iw/network_gui.py
index 25b731197..f91bd2e4b 100644
--- a/iw/network_gui.py
+++ b/iw/network_gui.py
@@ -22,7 +22,6 @@ import gui
from rhpl.translate import _, N_
import network
import checklist
-import ipwidget
global_options = [_("Gateway"), _("Primary DNS"),
_("Secondary DNS"), _("Tertiary DNS")]
@@ -71,8 +70,9 @@ class NetworkWindow(InstallWindow):
tmpvals = {}
for t in range(len(global_options)):
try:
- tmpvals[t] = self.globals[global_options[t]].dehydrate()
- except ipwidget.IPMissing, msg:
+ network.sanityCheckIPString(self.globals[global_options[t]].get_text())
+ tmpvals[t] = self.globals[global_options[t]].get_text()
+ except network.IPMissing, msg:
if t < 2 and self.getNumberActiveDevices() > 0:
if self.handleMissingOptionalIP(global_options[t]):
raise gui.StayOnScreen
@@ -81,8 +81,8 @@ class NetworkWindow(InstallWindow):
else:
tmpvals[t] = None
- except ipwidget.IPError, msg:
- self.handleIPError(global_options[t], msg[0])
+ except network.IPError, msg:
+ self.handleIPError(global_options[t], msg)
raise gui.StayOnScreen
self.network.gateway = tmpvals[0]
@@ -190,9 +190,6 @@ class NetworkWindow(InstallWindow):
def handleNoActiveDevices(self):
return self.intf.messageWindow(_("Error With Data"), _("You have no active network devices. Your system will not be able to communicate over a network by default without at least one device active.\n\nNOTE: If you have a PCMCIA-based network adapter you should leave it inactive at this point. When you reboot your system the adapter will be activated automatically."), type="custom", custom_buttons=["gtk-cancel", _("C_ontinue")])
- def setHostnameRadioState(self):
- pass
-
def editDevice(self, data):
if self.ignoreEvents:
return
@@ -266,11 +263,10 @@ class NetworkWindow(InstallWindow):
label.set_property("use-underline", True)
ipTable.attach(label, 0, 1, t+1, t+2, gtk.FILL, 0, 10)
- entry = ipwidget.IPEditor()
- entry.hydrate(self.devices[dev].get(options[t][1]))
+ entry = gtk.Entry()
entrys[t] = entry
- label.set_mnemonic_widget(entry.getFocusableWidget())
- ipTable.attach(entry.getWidget(), 1, 2, t+1, t+2, 0, gtk.FILL|gtk.EXPAND)
+ label.set_mnemonic_widget(entry)
+ ipTable.attach(entry, 1, 2, t+1, t+2, 0, gtk.FILL|gtk.EXPAND)
devbox.pack_start(ipTable, False, False, 6)
devbox.set_border_width(6)
@@ -336,13 +332,14 @@ class NetworkWindow(InstallWindow):
tmpvals = {}
for t in range(len(options)):
try:
- tmpvals[t] = entrys[t].dehydrate()
- except ipwidget.IPMissing, msg:
+ network.sanityCheckIPString(entrys[t].get_text())
+ tmpvals[t] = entrys[t].get_text()
+ except network.IPMissing, msg:
self.handleIPMissing(options[t][0])
valsgood = 0
break
- except ipwidget.IPError, msg:
- self.handleIPError(options[t][0], msg[0])
+ except network.IPError, msg:
+ self.handleIPError(options[t][0], msg)
valsgood = 0
break
@@ -588,9 +585,9 @@ class NetworkWindow(InstallWindow):
label.set_alignment(0.0, 0.0)
self.ipTable.attach(label, 0, 1, i, i+1, gtk.FILL, 0)
align = gtk.Alignment(0, 0.5)
- options[i] = ipwidget.IPEditor()
- align.add(options[i].getWidget())
- label.set_mnemonic_widget(options[i].getFocusableWidget())
+ options[i] = gtk.Entry()
+ align.add(options[i])
+ label.set_mnemonic_widget(options[i])
self.ipTable.attach(align, 1, 2, i, i+1, gtk.FILL, 0)
@@ -604,13 +601,17 @@ class NetworkWindow(InstallWindow):
if not self.anyUsingDHCP():
if self.network.gateway:
- self.globals[_("Gateway")].hydrate(self.network.gateway)
+ self.globals[_("Gateway")] = self.network.gateway
+ options[0].set_text(self.network.gateway)
if self.network.primaryNS:
- self.globals[_("Primary DNS")].hydrate(self.network.primaryNS)
+ self.globals[_("Primary DNS")] = self.network.primaryNS
+ options[1].set_text(self.network.primaryNS)
if self.network.secondaryNS:
- self.globals[_("Secondary DNS")].hydrate(self.network.secondaryNS)
+ self.globals[_("Secondary DNS")] = self.network.secondaryNS
+ options[2].set_text(self.network.secondaryNS)
if self.network.ternaryNS:
- self.globals[_("Tertiary DNS")].hydrate(self.network.ternaryNS)
+ self.globals[_("Tertiary DNS")] = self.network.ternaryNS
+ options[3].set_text(self.network.ternaryNS)
self.ipTable.set_border_width(6)
diff --git a/network.py b/network.py
index 755d0dd17..c386e6b9a 100644
--- a/network.py
+++ b/network.py
@@ -32,6 +32,12 @@ from rhpl.simpleconfig import SimpleConfigFile
import logging
log = logging.getLogger("anaconda")
+class IPError(Exception):
+ pass
+
+class IPMissing(Exception):
+ pass
+
def inStrRange(v, s):
if string.find(s, v) == -1:
return 0
@@ -78,25 +84,15 @@ def anyUsingDHCP(devices):
return 1
return 0
-# sanity check an IP string. if valid, returns octets, if invalid, return None
+# sanity check an IP string.
def sanityCheckIPString(ip_string):
ip_re = re.compile('^([0-2]?[0-9]?[0-9])\\.([0-2]?[0-9]?[0-9])\\.([0-2]?[0-9]?[0-9])\\.([0-2]?[0-9]?[0-9])$')
-
- #Sanity check the string
- m = ip_re.match (ip_string)
- try:
- if not m:
- return None
- octets = m.groups()
- if len(octets) != 4:
- return None
- for octet in octets:
- if (int(octet) < 0) or (int(octet) > 255):
- return None
- except TypeError:
- return None
- return octets
+ if ip_string.strip() == "":
+ raise IPMissing, _("IP Address is missing.")
+
+ if not ip_re.match(ip_string):
+ raise IPError, _("IP Addresses must contain four numbers between 0 and 255, separated by periods.")
def hasActiveNetDev():
# try to load /tmp/netinfo and see if we can sniff out network info