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, 15 years ago)

fail gracefully if system DBus unreachable

  • 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(): 
    6565    ps.RestartServerConnection()
    6666
    6767def get_radio():
    68     bus = dbus.SystemBus()
    6968    try:
     69        bus = dbus.SystemBus()
    7070        obj = bus.get_object(_NM_SERVICE, _NM_PATH)
    7171        nm_props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
    7272    except dbus.DBusException:
    def set_radio(state): 
    8686    state : 'on/off'
    8787    """   
    8888    if state == 'on' or state == 1:
    89         bus = dbus.SystemBus()
    9089        try:
     90            bus = dbus.SystemBus()
    9191            obj = bus.get_object(_NM_SERVICE, _NM_PATH)
    9292            nm_props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
    9393        except dbus.DBusException:
    9494            raise ReadError('%s service not available' % _NM_SERVICE)
    9595        nm_props.Set(_NM_IFACE, 'WirelessEnabled', True)
    9696    elif state == 'off' or state == 0:
    97         bus = dbus.SystemBus()
    9897        try:
     98            bus = dbus.SystemBus()
    9999            obj = bus.get_object(_NM_SERVICE, _NM_PATH)
    100100            nm_props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
    101101        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): 
    6464    def __init__(self, device, model):
    6565        CanvasPulsingIcon.__init__(self, size=style.STANDARD_ICON_SIZE,
    6666                                   cache=True)
    67         self._bus = dbus.SystemBus()
    6867        self._device = device
    6968        self._model = model
    7069        self._palette_icon = None
    class AccessPointView(CanvasPulsingIcon): 
    8281        self._connection = None
    8382        self._active = True
    8483        self._color = None
     84        self._bus = None
    8585
    8686        self.connect('button-release-event', self.__button_release_event_cb)
    8787
    class AccessPointView(CanvasPulsingIcon): 
    9292        self._palette = self._create_palette()
    9393        self.set_palette(self._palette)
    9494
    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)
    126134
    127135    def _create_palette(self):
    128136        icon_name = get_icon_state(_ICON_NAME, self._strength)
    class DeviceObserver(object): 
    653661class NetworkManagerObserver(object):
    654662    def __init__(self, box):
    655663        self._box = box
    656         self._bus = dbus.SystemBus()
    657664        self._devices = {}
    658665        self._netmgr = None
     666        self._bus = None
    659667
    660668    def listen(self):
    661669        try:
     670            self._bus = dbus.SystemBus()
    662671            obj = self._bus.get_object(_NM_SERVICE, _NM_PATH)
    663672            self._netmgr = dbus.Interface(obj, _NM_IFACE)
    664673        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): 
    4949    def shutdown_completed(self):
    5050        session.SessionManager.shutdown_completed(self)
    5151
    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 
    5852        if env.is_emulator():
    5953            self._close_emulator()
    6054        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
    6161            if self._logout_mode == self.MODE_SHUTDOWN:
    6262                pm.Shutdown()
    6363            elif self._logout_mode == self.MODE_REBOOT: