core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:

- new BridgeInitError and BridgeExceptionNoService are in core.exceptions
    - D-Bus NotSupported is catched in bridge, and launch a BridgeInitError
    - BridgeInitError stop SàT core, jp, and quick_frontends with an explanation message.
fix bug 27
This commit is contained in:
Goffi 2013-06-21 02:00:37 +02:00
commit 8e2f394b5b
3 changed files with 55 additions and 26 deletions

View file

@ -24,6 +24,7 @@ import dbus.mainloop.glib
import inspect
from logging import debug, info, error
from twisted.internet.defer import Deferred
from sat.core.exceptions import BridgeInitError
const_INT_PREFIX = "org.goffi.SAT" # Interface prefix
const_ERROR_PREFIX = const_INT_PREFIX + ".error"
@ -506,7 +507,12 @@ class DBusBridge(Bridge):
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
Bridge.__init__(self)
info("Init DBus...")
self.session_bus = dbus.SessionBus()
try:
self.session_bus = dbus.SessionBus()
except dbus.DBusException as e:
if e._dbus_error_name == 'org.freedesktop.DBus.Error.NotSupported':
print u"D-Bus is not launched, please see README to see instructions on how to launch it"
raise BridgeInitError
self.dbus_name = dbus.service.BusName(const_INT_PREFIX, self.session_bus)
self.dbus_bridge = DbusObject(self.session_bus, const_OBJ_PATH)

View file

@ -24,6 +24,7 @@ import dbus.mainloop.glib
import inspect
from logging import debug, info, error
from twisted.internet.defer import Deferred
from sat.core.exceptions import BridgeInitError
const_INT_PREFIX = "org.goffi.SAT" # Interface prefix
const_ERROR_PREFIX = const_INT_PREFIX + ".error"
@ -204,7 +205,12 @@ class DBusBridge(Bridge):
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
Bridge.__init__(self)
info("Init DBus...")
self.session_bus = dbus.SessionBus()
try:
self.session_bus = dbus.SessionBus()
except dbus.DBusException as e:
if e._dbus_error_name == 'org.freedesktop.DBus.Error.NotSupported':
print u"D-Bus is not launched, please see README to see instructions on how to launch it"
raise BridgeInitError
self.dbus_name = dbus.service.BusName(const_INT_PREFIX, self.session_bus)
self.dbus_bridge = DbusObject(self.session_bus, const_OBJ_PATH)

View file

@ -20,6 +20,7 @@
from bridge_frontend import BridgeFrontend
import dbus
from logging import debug, error
from sat.core.exceptions import BridgeExceptionNoService, BridgeInitError
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
@ -31,10 +32,6 @@ const_CORE_SUFFIX = ".core"
const_PLUGIN_SUFFIX = ".plugin"
class BridgeExceptionNoService(Exception):
pass
class DBusBridgeFrontend(BridgeFrontend):
def __init__(self):
try:
@ -48,6 +45,9 @@ class DBusBridgeFrontend(BridgeFrontend):
except dbus.exceptions.DBusException, e:
if e._dbus_error_name == 'org.freedesktop.DBus.Error.ServiceUnknown':
raise BridgeExceptionNoService
elif e._dbus_error_name == 'org.freedesktop.DBus.Error.NotSupported':
print u"D-Bus is not launched, please see README to see instructions on how to launch it"
raise BridgeInitError
else:
raise e
#props = self.db_core_iface.getProperties()