[PATCH 5/7] Network TUI: don't traceback when applying config to device without link.

Radek Vykydal rvykydal at redhat.com
Fri Sep 13 13:32:19 UTC 2013


---
 pyanaconda/nm.py                    | 30 +++++++++++++++++++++++-------
 pyanaconda/ui/tui/spokes/network.py |  7 +++++--
 2 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/pyanaconda/nm.py b/pyanaconda/nm.py
index ae0b9cd..268b8b5 100644
--- a/pyanaconda/nm.py
+++ b/pyanaconda/nm.py
@@ -42,6 +42,11 @@ class UnknownDeviceError(ValueError):
     def __str__(self):
         return self.__repr__()
 
+class UnmanagedDeviceError(Exception):
+    """Device of specified name is not managed by NM or unavailable"""
+    def __str__(self):
+        return self.__repr__()
+
 class PropertyNotFoundError(ValueError):
     """Property of NM object was not found"""
     def __str__(self):
@@ -195,7 +200,7 @@ def nm_device_property(name, prop):
                                   Gio.DBusCallFlags.NONE,
                                   DEFAULT_DBUS_TIMEOUT,
                                   None)
-    except Exception as e:
+    except GLib.GError as e:
         if "org.freedesktop.NetworkManager.UnknownDevice" in e.message:
             raise UnknownDeviceError(name, e)
         raise
@@ -515,6 +520,12 @@ def nm_device_setting_value(name, key1, key2):
     return value
 
 def nm_activate_device_connection(dev_name, con_uuid):
+    """Activate device with specified connection.
+
+       Exceptions:
+       UnknownDeviceError - device was not found
+
+    """
 
     proxy = _get_proxy()
     args = GLib.Variant('(s)', (dev_name,))
@@ -524,7 +535,7 @@ def nm_activate_device_connection(dev_name, con_uuid):
                                   Gio.DBusCallFlags.NONE,
                                   DEFAULT_DBUS_TIMEOUT,
                                   None)
-    except Exception as e:
+    except GLib.GError as e:
         if "org.freedesktop.NetworkManager.UnknownDevice" in e.message:
             raise UnknownDeviceError(dev_name, e)
         raise
@@ -535,11 +546,16 @@ def nm_activate_device_connection(dev_name, con_uuid):
 
     args = GLib.Variant('(ooo)', (con_path, device_path, "/"))
     nm_proxy = _get_proxy()
-    nm_proxy.call_sync("ActivateConnection",
-                        args,
-                        Gio.DBusCallFlags.NONE,
-                        DEFAULT_DBUS_TIMEOUT,
-                        None)
+    try:
+        nm_proxy.call_sync("ActivateConnection",
+                            args,
+                            Gio.DBusCallFlags.NONE,
+                            DEFAULT_DBUS_TIMEOUT,
+                            None)
+    except GLib.GError as e:
+        if "org.freedesktop.NetworkManager.UnmanagedDevice" in e.message:
+            raise UnmanagedDeviceError(dev_name, e)
+        raise
 
 def nm_update_settings_of_device(name, new_values):
     """Update setting of device.
diff --git a/pyanaconda/ui/tui/spokes/network.py b/pyanaconda/ui/tui/spokes/network.py
index 91aa369..95432bc 100644
--- a/pyanaconda/ui/tui/spokes/network.py
+++ b/pyanaconda/ui/tui/spokes/network.py
@@ -27,7 +27,7 @@ from pyanaconda.ui.tui.spokes import EditTUISpokeEntry as Entry
 from pyanaconda.ui.tui.simpleline import TextWidget, ColumnWidget
 from pyanaconda.i18n import _
 from pyanaconda import network
-from pyanaconda.nm import nm_activated_devices, nm_state, nm_devices, nm_device_type_is_ethernet, nm_device_ip_config, nm_activate_device_connection, nm_device_setting_value
+from pyanaconda.nm import nm_activated_devices, nm_state, nm_devices, nm_device_type_is_ethernet, nm_device_ip_config, nm_activate_device_connection, nm_device_setting_value, UnmanagedDeviceError
 
 from pyanaconda.regexes import IPV4_PATTERN_WITHOUT_ANCHORS
 from pyanaconda.constants_text import INPUT_PROCESSED
@@ -217,7 +217,10 @@ class NetworkSpoke(EditTUISpoke):
 
             if ndata._apply:
                 uuid = nm_device_setting_value(devname, "connection", "uuid")
-                nm_activate_device_connection(devname, uuid)
+                try:
+                    nm_activate_device_connection(devname, uuid)
+                except UnmanagedDeviceError:
+                    self.errors.append(_("Can't apply configuration, device activation failed."))
 
             self.apply()
             return INPUT_PROCESSED
-- 
1.7.11.7



More information about the anaconda-patches mailing list