comparison src/bridge/DBus.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 ca2cae6b2c6d
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"
504 class DBusBridge(Bridge): 505 class DBusBridge(Bridge):
505 def __init__(self): 506 def __init__(self):
506 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) 507 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
507 Bridge.__init__(self) 508 Bridge.__init__(self)
508 info("Init DBus...") 509 info("Init DBus...")
509 self.session_bus = dbus.SessionBus() 510 try:
511 self.session_bus = dbus.SessionBus()
512 except dbus.DBusException as e:
513 if e._dbus_error_name == 'org.freedesktop.DBus.Error.NotSupported':
514 print u"D-Bus is not launched, please see README to see instructions on how to launch it"
515 raise BridgeInitError
510 self.dbus_name = dbus.service.BusName(const_INT_PREFIX, self.session_bus) 516 self.dbus_name = dbus.service.BusName(const_INT_PREFIX, self.session_bus)
511 self.dbus_bridge = DbusObject(self.session_bus, const_OBJ_PATH) 517 self.dbus_bridge = DbusObject(self.session_bus, const_OBJ_PATH)
512 518
513 def actionResult(self, answer_type, id, data, profile): 519 def actionResult(self, answer_type, id, data, profile):
514 self.dbus_bridge.actionResult(answer_type, id, data, profile) 520 self.dbus_bridge.actionResult(answer_type, id, data, profile)