On Thu, 01 Dec 2011 20:20:34 +0000, Chris Mayo <cjm...@users.sourceforge.net> wrote: > On 30/11/11 16:37, Phil Thompson wrote: >> On Sun, 27 Nov 2011 12:58:27 +0000, Chris Mayo >> <cjm...@users.sourceforge.net> wrote: >>> On 27/11/11 12:51, Phil Thompson wrote: >>>> On Sun, 27 Nov 2011 12:47:09 +0000, Chris Mayo >>>> <cjm...@users.sourceforge.net> wrote: >>>>> With PyQt-x11-gpl-snapshot-4.9-e8284ed41e49, >>>>> sip-4.13.1-snapshot-3b44dc2f0efd and: >>>>> >>>>> bus = QtDBus.QDBusConnection.systemBus() >>>>> iface = QtDBus.QDBusInterface('org.freedesktop.UDisks', >>>>> '/org/freedesktop/UDisks', 'org.freedesktop.UDisks', bus) >>>>> >>>>> print(iface.call('EnumerateDeviceFiles').arguments()) >>>>> print(iface.call('EnumerateDevices').arguments()) >>>>> >>>>> >>>>> the end of the output is: >>>>> >>>>> 0000:00:1f.2-scsi-5:0:0:0-part2', '/dev/fd0']] >>>>> Traceback (most recent call last): >>>>> File "./objectpath.py", line 10, in<module> >>>>> print(iface.call('EnumerateDevices').arguments()) >>>>> TypeError: unable to convert a C++ 'QDBusArgument' instance to a >> Python >>>>> object >>>>> >>>>> >>>>> EnumerateDeviceFiles returns an Array of Strings, but EnumerateDevices >>>>> returns an Array of Object Paths >>>>> >>>> >> http://hal.freedesktop.org/docs/udisks/UDisks.html#UDisks.EnumerateDevices >>>>> >>>>> Python 3.2.2, Qt 4.7.4, udisks 1.0.4, dbus 1.4.16 on amd64 Linux >>>> >>>> Can you send me a complete test case? >>>> >>>> Thanks, >>>> Phil >>> >>> That was it! Nearly anyway, in full: >>> >>> #!/usr/bin/python >>> >>> from PyQt4 import QtDBus >>> >>> bus = QtDBus.QDBusConnection.systemBus() >>> iface = QtDBus.QDBusInterface('org.freedesktop.UDisks', >>> '/org/freedesktop/UDisks', 'org.freedesktop.UDisks', bus) >>> >>> print(iface.call('EnumerateDeviceFiles').arguments()) >>> print(iface.call('EnumerateDevices').arguments()) >> >> Tonight's snapshot will fix this. However there needs to be some >> discussion about the best way to (de)marshall arguments. > > Can't get ee8b9c7eb565 to compile: > > Generating the C++ source for the QtDBus module... > sip: > /var/tmp/portage/dev-python/PyQt4-4.9_pre20111201/work/PyQt-x11-gpl-snapshot-4.9-ee8b9c7eb565-2.7/sip/QtDBus/qdbusextratypes.sip:95: > > A class, exception, namespace or mapped type has already been defined > with the same name > Error: Unable to create the C++ code.
Make sure you are using the latest SIP snapshot. >> I propose that marshalling of composite types uses QDBusArgument (as you >> do in C++). However I propose that demarshalling is done automatically, >> because... >> >> 1. It is Pythonic. >> 2. The QDBusArgument API will need changing in Python if it is to support >> both marshalling and demarshalling. >> >> There remains a question of how far to demarshall automatically. At the >> moment your example will return a Python list of QDBusObjectPath >> instances. >> As QDBusObjectPath is just a thin wrapper around QString should this be >> removed and just the string returned? The same would apply to >> QDBusSignature and QDBusVariant. Is it important to be able to >> distinguish >> between a return value that is a simple string and one that is an object >> path? > > I'm no dbus expert but certainly I would use the QDBusObjectPath > instances just as plain strings. Looks like the only advantage is when > creating QDBusObjectPath it will do some checking for you. QDBusObjectPath would still be used when marshalling arguments. >> As far as marshalling with QDBusArgument is concerned, I'm inclined to >> ignore the shift operators and to implement explicit writeInt32(), >> writeUInt32() etc methods - as happens with QDataStream. > > Bit beyond me. N.B. if you're not following it there has been some > activity on > https://bugs.freedesktop.org/show_bug.cgi?id=26420 > still a bit of a long shot in terms of dbus-python being resurrected for > Python 3 maybe but some discussion on types. The other question I forgot to ask is so you have an examples of methods that return a map and a structure? Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt