Source code for mpris2.decorator.signal

from .base import Decorator, ATTR_KEY


[docs]class DbusSignal(Decorator): ''' https://docs.python.org/2/howto/descriptor.html#properties ''' def __init__(self, meth=None, iface=None): self.attr = meth self.handler = None self.iface = iface self._update_me(meth) def __call__(self, meth): self.attr = meth self._update_me(meth) return self def __get__(self, obj, objtype=None): if obj: return self.handler #static call return self def __set__(self, obj, value): if obj: _dbus = getattr(obj, ATTR_KEY) interface = _dbus.interface def handle(*args, **kwds): h = self.handler h and h(*args, **kwds) if not self.handler: interface.connect_to_signal(self.attr.__name__, handle, dbus_interface=self.iface) self.handler = value else: #static call self.attr = value def __delete__(self, obj): self.handler = None
if __name__ == '__main__': from .interface import DbusInterface from .utils import get_mainloop mainloop = get_mainloop() print('mainloop', mainloop) @DbusInterface('org.mpris.MediaPlayer2.player', '/org/mpris/MediaPlayer2') class Example(object): @DbusSignal def Seeked(self): pass d = Example( dbus_interface_info={ 'dbus_uri': 'org.mpris.MediaPlayer2.gmusicbrowser'}) def handler(self, *args): print(args) d.Seeked = handler mainloop and mainloop.run()