[PATCH rhel7-branch 7/9] Network TUI: don't traceback when applying config to device without link (#1011866)

Radek Vykydal rvykydal at redhat.com
Wed Sep 25 12:54:27 UTC 2013


Resolves: rhbz#1011866

Port of commit 447dae925704d43ebb74b090f6eafb22f3836a1f
---
 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 57d4dc4..b65eec9 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
@@ -543,6 +548,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,))
@@ -552,7 +563,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
@@ -563,11 +574,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 f717ac5..5589188 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
 
 # pylint: disable-msg=E0611
 from gi.repository import NetworkManager
@@ -213,7 +213,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 True
-- 
1.7.11.7



More information about the anaconda-patches mailing list