1*85362594SBenjamin Kietzman# Copyright (c) Benjamin Kietzman (github.com/bkietz) 2*85362594SBenjamin Kietzman# 3*85362594SBenjamin Kietzman# Distributed under the Boost Software License, Version 1.0. (See accompanying 4*85362594SBenjamin Kietzman# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5*85362594SBenjamin Kietzman 6*85362594SBenjamin Kietzmanimport dbus 7*85362594SBenjamin Kietzmanimport dbus.service 8*85362594SBenjamin Kietzmanfrom dbus.mainloop.glib import DBusGMainLoop 9*85362594SBenjamin Kietzmanfrom gobject import MainLoop 10*85362594SBenjamin Kietzman 11*85362594SBenjamin Kietzmanbus_name = 'com.example.Sample' 12*85362594SBenjamin Kietzman 13*85362594SBenjamin Kietzmanclass Example(dbus.service.Object): 14*85362594SBenjamin Kietzman def __init__(self, connection, path): 15*85362594SBenjamin Kietzman dbus.service.Object.__init__(self, connection, path) 16*85362594SBenjamin Kietzman self._last_input = None 17*85362594SBenjamin Kietzman 18*85362594SBenjamin Kietzman @dbus.service.method(bus_name+'.Iface', in_signature='v', out_signature='s') 19*85362594SBenjamin Kietzman def StringifyVariant(self, var): 20*85362594SBenjamin Kietzman self.LastInputChanged(var) # emits the signal 21*85362594SBenjamin Kietzman return str(var) 22*85362594SBenjamin Kietzman 23*85362594SBenjamin Kietzman @dbus.service.signal(bus_name+'.Iface', signature='v') 24*85362594SBenjamin Kietzman def LastInputChanged(self, var): 25*85362594SBenjamin Kietzman # run just before the signal is actually emitted 26*85362594SBenjamin Kietzman # just put "pass" if nothing should happen 27*85362594SBenjamin Kietzman self._last_input = var 28*85362594SBenjamin Kietzman 29*85362594SBenjamin Kietzman @dbus.service.method(bus_name+'.Iface', in_signature='', out_signature='v') 30*85362594SBenjamin Kietzman def GetLastInput(self): 31*85362594SBenjamin Kietzman return self._last_input 32*85362594SBenjamin Kietzman 33*85362594SBenjamin Kietzmanbus = dbus.SessionBus(mainloop=DBusGMainLoop()) 34*85362594SBenjamin Kietzmanbus.request_name(bus_name) 35*85362594SBenjamin Kietzman 36*85362594SBenjamin Kietzmanexample = Example(bus, '/path/to/obj') 37*85362594SBenjamin Kietzman 38*85362594SBenjamin Kietzmanprint bus.get_name_owner(bus_name) 39*85362594SBenjamin KietzmanMainLoop().run() 40