Source code for mpris2.decorator.attribute

'''
This is not part of specification

Helper class to make it work as python lib
'''

from .base import Decorator, ATTR_KEY


[docs]class DbusAttr(Decorator): ''' https://docs.python.org/2/howto/descriptor.html#properties ''' def __init__(self, meth=None, produces=lambda resp: resp): self.attr = meth self.produces = produces self._update_me(meth) def __call__(self, meth): self.attr = meth self._update_me(meth) return self def __get__(self, obj, objtype=None): #static call if not obj: return self _dbus = getattr(obj, ATTR_KEY) props = _dbus.properties iface = _dbus.iface result = props.Get(iface, self.attr.__name__) produces = self.produces return produces(result) def __set__(self, obj, value): if obj: _dbus = getattr(obj, ATTR_KEY) props = _dbus.properties iface = _dbus.iface props.Set(iface, self.attr.__name__, value) else: #static call self.attr = value def __delete__(self, obj): raise AttributeError('can not delete attribute')
if __name__ == '__main__': # examples from .interface import DbusInterface @DbusInterface('org.mpris.MediaPlayer2', '/org/mpris/MediaPlayer2') class Example(object): @DbusAttr def Identity(self): pass d = Example( dbus_interface_info={ 'dbus_uri': 'org.mpris.MediaPlayer2.vlc'}) assert d.Identity == 'VLC media player'