Ticket #1403: 0001-fail-gracefully-if-system-DBus-unreachable-1403.3.patch
File 0001-fail-gracefully-if-system-DBus-unreachable-1403.3.patch, 8.6 KB (added by sascha_silbe, 14 years ago) |
---|
-
extensions/cpsection/network/model.py
From 03c89b67d2aff1a638e77ebd6fd41c368b108db4 Mon Sep 17 00:00:00 2001 From: Sascha Silbe <sascha@silbe.org> Date: Sun, 20 Sep 2009 21:15:30 +0200 Subject: [PATCH] fail gracefully if system DBus unreachable (#1403) --- extensions/cpsection/network/model.py | 6 +- src/jarabe/desktop/meshbox.py | 75 ++++++++++++++++++-------------- src/jarabe/model/session.py | 12 +++--- 3 files changed, 51 insertions(+), 42 deletions(-) diff --git a/extensions/cpsection/network/model.py b/extensions/cpsection/network/model.py index 87db6d9..e1c3dab 100644
a b def _restart_jabber(): 65 65 ps.RestartServerConnection() 66 66 67 67 def get_radio(): 68 bus = dbus.SystemBus()69 68 try: 69 bus = dbus.SystemBus() 70 70 obj = bus.get_object(_NM_SERVICE, _NM_PATH) 71 71 nm_props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties') 72 72 except dbus.DBusException: … … def set_radio(state): 86 86 state : 'on/off' 87 87 """ 88 88 if state == 'on' or state == 1: 89 bus = dbus.SystemBus()90 89 try: 90 bus = dbus.SystemBus() 91 91 obj = bus.get_object(_NM_SERVICE, _NM_PATH) 92 92 nm_props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties') 93 93 except dbus.DBusException: 94 94 raise ReadError('%s service not available' % _NM_SERVICE) 95 95 nm_props.Set(_NM_IFACE, 'WirelessEnabled', True) 96 96 elif state == 'off' or state == 0: 97 bus = dbus.SystemBus()98 97 try: 98 bus = dbus.SystemBus() 99 99 obj = bus.get_object(_NM_SERVICE, _NM_PATH) 100 100 nm_props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties') 101 101 except dbus.DBusException: -
src/jarabe/desktop/meshbox.py
diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py index 2ba23d5..30ad259 100644
a b class AccessPointView(CanvasPulsingIcon): 64 64 def __init__(self, device, model): 65 65 CanvasPulsingIcon.__init__(self, size=style.STANDARD_ICON_SIZE, 66 66 cache=True) 67 self._bus = dbus.SystemBus()68 67 self._device = device 69 68 self._model = model 70 69 self._palette_icon = None … … class AccessPointView(CanvasPulsingIcon): 82 81 self._connection = None 83 82 self._active = True 84 83 self._color = None 84 self._bus = None 85 85 86 86 self.connect('button-release-event', self.__button_release_event_cb) 87 87 … … class AccessPointView(CanvasPulsingIcon): 92 92 self._palette = self._create_palette() 93 93 self.set_palette(self._palette) 94 94 95 model_props = dbus.Interface(model, 'org.freedesktop.DBus.Properties') 96 model_props.GetAll(_NM_ACCESSPOINT_IFACE, byte_arrays=True, 97 reply_handler=self.__get_all_props_reply_cb, 98 error_handler=self.__get_all_props_error_cb) 99 100 self._bus.add_signal_receiver(self.__ap_properties_changed_cb, 101 signal_name='PropertiesChanged', 102 path=model.object_path, 103 dbus_interface=_NM_ACCESSPOINT_IFACE, 104 byte_arrays=True) 105 106 interface_props = dbus.Interface(self._device, 107 'org.freedesktop.DBus.Properties') 108 interface_props.Get(_NM_DEVICE_IFACE, 'State', 109 reply_handler=self.__get_device_state_reply_cb, 110 error_handler=self.__get_device_state_error_cb) 111 interface_props.Get(_NM_WIRELESS_IFACE, 'WirelessCapabilities', 112 reply_handler=self.__get_device_caps_reply_cb, 113 error_handler=self.__get_device_caps_error_cb) 114 interface_props.Get(_NM_WIRELESS_IFACE, 'ActiveAccessPoint', 115 reply_handler=self.__get_active_ap_reply_cb, 116 error_handler=self.__get_active_ap_error_cb) 117 118 self._bus.add_signal_receiver(self.__device_state_changed_cb, 119 signal_name='StateChanged', 120 path=device.object_path, 121 dbus_interface=_NM_DEVICE_IFACE) 122 self._bus.add_signal_receiver(self.__wireless_properties_changed_cb, 123 signal_name='PropertiesChanged', 124 path=device.object_path, 125 dbus_interface=_NM_WIRELESS_IFACE) 95 self._find_network_manager() 96 97 def _find_network_manager(self): 98 try: 99 self._bus = dbus.SystemBus() 100 model_props = dbus.Interface(model, 'org.freedesktop.DBus.Properties') 101 model_props.GetAll(_NM_ACCESSPOINT_IFACE, byte_arrays=True, 102 reply_handler=self.__get_all_props_reply_cb, 103 error_handler=self.__get_all_props_error_cb) 104 105 self._bus.add_signal_receiver(self.__ap_properties_changed_cb, 106 signal_name='PropertiesChanged', 107 path=model.object_path, 108 dbus_interface=_NM_ACCESSPOINT_IFACE, 109 byte_arrays=True) 110 111 interface_props = dbus.Interface(self._device, 112 'org.freedesktop.DBus.Properties') 113 interface_props.Get(_NM_DEVICE_IFACE, 'State', 114 reply_handler=self.__get_device_state_reply_cb, 115 error_handler=self.__get_device_state_error_cb) 116 interface_props.Get(_NM_WIRELESS_IFACE, 'WirelessCapabilities', 117 reply_handler=self.__get_device_caps_reply_cb, 118 error_handler=self.__get_device_caps_error_cb) 119 interface_props.Get(_NM_WIRELESS_IFACE, 'ActiveAccessPoint', 120 reply_handler=self.__get_active_ap_reply_cb, 121 error_handler=self.__get_active_ap_error_cb) 122 123 self._bus.add_signal_receiver(self.__device_state_changed_cb, 124 signal_name='StateChanged', 125 path=device.object_path, 126 dbus_interface=_NM_DEVICE_IFACE) 127 self._bus.add_signal_receiver(self.__wireless_properties_changed_cb, 128 signal_name='PropertiesChanged', 129 path=device.object_path, 130 dbus_interface=_NM_WIRELESS_IFACE) 131 132 except dbus.DBusException, err: 133 _logger.exception('Error finding NetworkManager: %s', err) 126 134 127 135 def _create_palette(self): 128 136 icon_name = get_icon_state(_ICON_NAME, self._strength) … … class DeviceObserver(object): 653 661 class NetworkManagerObserver(object): 654 662 def __init__(self, box): 655 663 self._box = box 656 self._bus = dbus.SystemBus()657 664 self._devices = {} 658 665 self._netmgr = None 666 self._bus = None 659 667 660 668 def listen(self): 661 669 try: 670 self._bus = dbus.SystemBus() 662 671 obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) 663 672 self._netmgr = dbus.Interface(obj, _NM_IFACE) 664 673 except dbus.DBusException: -
src/jarabe/model/session.py
diff --git a/src/jarabe/model/session.py b/src/jarabe/model/session.py index 1c9c6db..7efcb04 100644
a b class SessionManager(session.SessionManager): 49 49 def shutdown_completed(self): 50 50 session.SessionManager.shutdown_completed(self) 51 51 52 bus = dbus.SystemBus()53 proxy = bus.get_object('org.freedesktop.Hal',54 '/org/freedesktop/Hal/devices/computer')55 pm = dbus.Interface(proxy, \56 'org.freedesktop.Hal.Device.SystemPowerManagement')57 58 52 if env.is_emulator(): 59 53 self._close_emulator() 60 54 else: 55 bus = dbus.SystemBus() 56 proxy = bus.get_object('org.freedesktop.Hal', 57 '/org/freedesktop/Hal/devices/computer') 58 pm = dbus.Interface(proxy, \ 59 'org.freedesktop.Hal.Device.SystemPowerManagement') 60 61 61 if self._logout_mode == self.MODE_SHUTDOWN: 62 62 pm.Shutdown() 63 63 elif self._logout_mode == self.MODE_REBOOT: