Il est définitivement possible d'implémenter les propriétés D-Bus en Python! Les propriétés D-Bus ne sont que des méthodes sur une interface particulière, à savoir org.freedesktop.DBus.Properties
. L'interface est définie in the D-Bus specification; vous pouvez l'appliquer à votre classe comme vous implémentez une autre interface D-Bus:
# Untested, just off the top of my head
import dbus
MY_INTERFACE = 'com.example.Foo'
class Foo(dbus.service.object):
# …
@dbus.service.method(interface=dbus.PROPERTIES_IFACE,
in_signature='ss', out_signature='v')
def Get(self, interface_name, property_name):
return self.GetAll(interface_name)[property_name]
@dbus.service.method(interface=dbus.PROPERTIES_IFACE,
in_signature='s', out_signature='a{sv}')
def GetAll(self, interface_name):
if interface_name == MY_INTERFACE:
return { 'Blah': self.blah,
# …
}
else:
raise dbus.exceptions.DBusException(
'com.example.UnknownInterface',
'The Foo object does not implement the %s interface'
% interface_name)
@dbus.service.method(interface=dbus.PROPERTIES_IFACE,
in_signature='ssv'):
def Set(self, interface_name, property_name, new_value):
# validate the property name and value, update internal state…
self.PropertiesChanged(interface_name,
{ property_name: new_value }, [])
@dbus.service.signal(interface=dbus.PROPERTIES_IFACE,
signature='sa{sv}as')
def PropertiesChanged(self, interface_name, changed_properties,
invalidated_properties):
pass
dbus-python devrait faciliter la mise en œuvre de propriétés, mais il est actuellement très légèrement maintenu au mieux.
Si quelqu'un avait envie de plonger et d'aider à réparer des choses comme ça, il serait le bienvenu. Même l'ajout d'une version étendue de cette documentation à la documentation serait un début, car il s'agit d'une question assez fréquemment posée. Si vous êtes intéressé, les correctifs peuvent être envoyés au D-Bus mailing list ou attachés aux bogues filed against dbus-python on the FreeDesktop bugtracker.
Que voulez-vous dire par "propriété d'interface d'exportation"? – detly
Je voulais simplement créer une propriété Dbus. Mais récemment, j'ai trouvé qu'il n'est pas possible de faire avec python. – deimus