Returning struct with Qt DBus?
Gottfried Müller
gottfried.mueller at gmx.de
Thu Mar 25 05:55:49 GMT 2021
Hello Florian,
I made some experiments with DBus and Python three years ago. I encoded
the message data. I used it to transfer a python dictionary.
import pickle
import binascii
def pyDBusEncode(dataToSend):
pickledData = pickle.dumps(dataToSend)
return str(binascii.hexlify(pickledData), 'utf-8')
def pyDBusDecode(dataReceived):
binData = bytearray(dataReceived, 'utf-8')
pickledData = binascii.unhexlify(binData)
return pickle.loads(pickledData)
Maybe it is an answer and it works today too
Gottfried
Am 24.03.21 um 18:31 schrieb Florian Bruhin:
> Hey,
>
> I'm currently trying to write a simple DBus notification server for end
> to end tests.
>
> If I run the attached server (after killing my usual notification
> daemon), invoking e.g. GetCapabilities (which returns a list of strings)
> works fine:
>
> $ dbus-send --session --print-reply --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.GetCapabilities
> method return time=1616606628.700096 sender=:1.451 -> destination=:1.457 serial=16 reply_serial=2
> array [
> string "actions"
> ]
>
> However, I can't figure out how to get GetServerInformation to work,
> which is supposed to return a struct of four strings ("ssss" as DBus
> signature). I've tried returning a QDBusArgument and using:
>
> @pyqtSlot(QDBusMessage, result="QDBusArgument")
> def GetServerInformation(self, message):
> arg = QDBusArgument()
> arg.beginStructure()
> arg.add("qutebrowser")
> arg.add("notification test server")
> arg.add("v13.37")
> arg.add("1.2")
> arg.endStructure()
> return arg
>
> But that doesn't seem to work:
>
> $ dbus-send --session --print-reply --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.GetServerInformation
> Error org.freedesktop.DBus.Error.UnknownMethod: No such method 'GetServerInformation' in interface 'org.freedesktop.Notifications' at object path '/org/freedesktop/Notifications' (signature '')
>
> If possible, I'd prefer using Qt DBus only rather than the python-dbus
> integration.
>
> Any idea how I can get this to work? Or is this just not possible
> without being able to register Qt metatypes or something?
>
> Thanks,
> Florian
>
More information about the PyQt
mailing list