comparison src/bridge/bridge_constructor/dbus_core_template.py @ 627:d207c2186519

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
author Goffi <goffi@goffi.org>
date Fri, 21 Jun 2013 02:00:37 +0200
parents 84a6e83157c2
children 1def5b7edf9f
comparison
equal deleted inserted replaced
626:190ccc6dc36c 627:d207c2186519
22 import dbus.service 22 import dbus.service
23 import dbus.mainloop.glib 23 import dbus.mainloop.glib
24 import inspect 24 import inspect
25 from logging import debug, info, error 25 from logging import debug, info, error
26 from twisted.internet.defer import Deferred 26 from twisted.internet.defer import Deferred
27 from sat.core.exceptions import BridgeInitError
27 28
28 const_INT_PREFIX = "org.goffi.SAT" # Interface prefix 29 const_INT_PREFIX = "org.goffi.SAT" # Interface prefix
29 const_ERROR_PREFIX = const_INT_PREFIX + ".error" 30 const_ERROR_PREFIX = const_INT_PREFIX + ".error"
30 const_OBJ_PATH = '/org/goffi/SAT/bridge' 31 const_OBJ_PATH = '/org/goffi/SAT/bridge'
31 const_CORE_SUFFIX = ".core" 32 const_CORE_SUFFIX = ".core"
202 class DBusBridge(Bridge): 203 class DBusBridge(Bridge):
203 def __init__(self): 204 def __init__(self):
204 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) 205 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
205 Bridge.__init__(self) 206 Bridge.__init__(self)
206 info("Init DBus...") 207 info("Init DBus...")
207 self.session_bus = dbus.SessionBus() 208 try:
209 self.session_bus = dbus.SessionBus()
210 except dbus.DBusException as e:
211 if e._dbus_error_name == 'org.freedesktop.DBus.Error.NotSupported':
212 print u"D-Bus is not launched, please see README to see instructions on how to launch it"
213 raise BridgeInitError
208 self.dbus_name = dbus.service.BusName(const_INT_PREFIX, self.session_bus) 214 self.dbus_name = dbus.service.BusName(const_INT_PREFIX, self.session_bus)
209 self.dbus_bridge = DbusObject(self.session_bus, const_OBJ_PATH) 215 self.dbus_bridge = DbusObject(self.session_bus, const_OBJ_PATH)
210 216
211 ##DIRECT_CALLS## 217 ##DIRECT_CALLS##
212 def register(self, name, callback): 218 def register(self, name, callback):