Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On 04/12/11 05:34, Phil Thompson wrote: On Fri, 02 Dec 2011 17:37:50 +, Chris Mayo cjm...@users.sourceforge.net wrote: On 02/12/11 01:42, Phil Thompson wrote: On Thu, 01 Dec 2011 20:20:34 +, Chris Mayo cjm...@users.sourceforge.net wrote: 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. This might have been due to a build problem. Try downloading the snapshot again (even though it has the same name). Phil After downloading again a lot of different errors, just the first few: Sorry about that - it isn't triggered the way I normally build. Current snapshot should be Ok. No luck with 65564eb2fcf4 either: x86_64-pc-linux-gnu-g++ -c -march=core2 -msse4.1 -ftree-vectorize -O2 -pipe -fPIC -Wall -W -D_REENTRANT -DNDEBUG -DSIP_PROTECTED_IS_PUBLIC -Dprotected=public -DQT_NO_DEBUG -DQT_CORE_LIB -I. -I/var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/qpy/QtDBus -I/usr/include/python2.7 -I/usr/mkspecs/linux-g++ -I/usr/include/qt4/QtDBus -I/usr/include/qt4/QtCore -I/usr/include/qt4 -o sipQtDBusQDBusObjectPath.o sipQtDBusQDBusObjectPath.cpp /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp: In function ‘PyObject* meth_QDBusVariant_variant(PyObject*, PyObject*)’: /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp:45:15: error: ‘QDBusVariant’ does not name a type /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp:47:87: error: ‘sipCpp’ was not declared in this scope ... Chris ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On Sun, 04 Dec 2011 12:52:47 +, Chris Mayo cjm...@users.sourceforge.net wrote: On 04/12/11 05:34, Phil Thompson wrote: On Fri, 02 Dec 2011 17:37:50 +, Chris Mayo cjm...@users.sourceforge.net wrote: On 02/12/11 01:42, Phil Thompson wrote: On Thu, 01 Dec 2011 20:20:34 +, Chris Mayo cjm...@users.sourceforge.net wrote: 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. This might have been due to a build problem. Try downloading the snapshot again (even though it has the same name). Phil After downloading again a lot of different errors, just the first few: Sorry about that - it isn't triggered the way I normally build. Current snapshot should be Ok. No luck with 65564eb2fcf4 either: x86_64-pc-linux-gnu-g++ -c -march=core2 -msse4.1 -ftree-vectorize -O2 -pipe -fPIC -Wall -W -D_REENTRANT -DNDEBUG -DSIP_PROTECTED_IS_PUBLIC -Dprotected=public -DQT_NO_DEBUG -DQT_CORE_LIB -I. -I/var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/qpy/QtDBus -I/usr/include/python2.7 -I/usr/mkspecs/linux-g++ -I/usr/include/qt4/QtDBus -I/usr/include/qt4/QtCore -I/usr/include/qt4 -o sipQtDBusQDBusObjectPath.o sipQtDBusQDBusObjectPath.cpp /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp: In function ‘PyObject* meth_QDBusVariant_variant(PyObject*, PyObject*)’: /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp:45:15: error: ‘QDBusVariant’ does not name a type /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp:47:87: error: ‘sipCpp’ was not declared in this scope ... I can't reproduce this. This is with Qt v4.8.0rc but I don't think QDBusVariant or qdbusextratypes.h has changed recently. Phil ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
No luck with 65564eb2fcf4 either: x86_64-pc-linux-gnu-g++ -c -march=core2 -msse4.1 -ftree-vectorize -O2 -pipe -fPIC -Wall -W -D_REENTRANT -DNDEBUG -DSIP_PROTECTED_IS_PUBLIC -Dprotected=public -DQT_NO_DEBUG -DQT_CORE_LIB -I. -I/var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/qpy/QtDBus -I/usr/include/python2.7 -I/usr/mkspecs/linux-g++ -I/usr/include/qt4/QtDBus -I/usr/include/qt4/QtCore -I/usr/include/qt4 -o sipQtDBusQDBusObjectPath.o sipQtDBusQDBusObjectPath.cpp /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp: In function ‘PyObject* meth_QDBusVariant_variant(PyObject*, PyObject*)’: /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp:45:15: error: ‘QDBusVariant’ does not name a type /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp:47:87: error: ‘sipCpp’ was not declared in this scope ... I can't reproduce this. This is with Qt v4.8.0rc but I don't think QDBusVariant or qdbusextratypes.h has changed recently. The only includes at the top of the generated PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp are: #include sipAPIQtDBus.h #line 241 /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/sip/QtCore/qvariant.sip #include qvariant.h #line 35 /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp If I manually add: #include qdbusextratypes.h make appears to complete. Chris ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
The only includes at the top of the generated PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp are: #include sipAPIQtDBus.h #line 241 /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/sip/QtCore/qvariant.sip #include qvariant.h #line 35 /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp If I manually add: #include qdbusextratypes.h make appears to complete. All my mistake. In trying to investigate the first compilation problem I was zapping out the #include qdbusextratypes.h in qdbusextratypes.sip and forget to remove it when trying out the newer snapshots. Sorry for wasting your time. I now have working arrays of object paths. Chris ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On Sun, 04 Dec 2011 20:06:35 +, Chris Mayo cjm...@users.sourceforge.net wrote: The only includes at the top of the generated PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp are: #include sipAPIQtDBus.h #line 241 /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/sip/QtCore/qvariant.sip #include qvariant.h #line 35 /var/tmp/portage/dev-python/PyQt4-4.9_pre20111204/work/PyQt-x11-gpl-snapshot-4.9-65564eb2fcf4-2.7/QtDBus/sipQtDBusQDBusVariant.cpp If I manually add: #include qdbusextratypes.h make appears to complete. All my mistake. In trying to investigate the first compilation problem I was zapping out the #include qdbusextratypes.h in qdbusextratypes.sip and forget to remove it when trying out the newer snapshots. Sorry for wasting your time. I now have working arrays of object paths. Chris Excellent. Let me know if anything else feels wrong or if there might be a better way to do things. Phil ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On Fri, 02 Dec 2011 17:37:50 +, Chris Mayo cjm...@users.sourceforge.net wrote: On 02/12/11 01:42, Phil Thompson wrote: On Thu, 01 Dec 2011 20:20:34 +, Chris Mayo cjm...@users.sourceforge.net wrote: 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. This might have been due to a build problem. Try downloading the snapshot again (even though it has the same name). Phil After downloading again a lot of different errors, just the first few: Sorry about that - it isn't triggered the way I normally build. Current snapshot should be Ok. I've implemented the changes I was proposing so, for example, an object path is demarshalled to a string rather than a QDBusObjectPath instance. Also I've implemented QDBusArgument.write() (which I will rename to add()) as a way of adding arguments with explicitly specified types. Phil ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On 02/12/11 01:42, Phil Thompson wrote: On Thu, 01 Dec 2011 20:20:34 +, Chris Mayo cjm...@users.sourceforge.net wrote: 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. This might have been due to a build problem. Try downloading the snapshot again (even though it has the same name). Phil After downloading again a lot of different errors, just the first few: x86_64-pc-linux-gnu-g++ -c -march=core2 -msse4.1 -ftree-vectorize -O2 -pipe -fPIC -Wall -W -D_REENTRANT -DNDEBUG -DSIP_PROTECTED_IS_PUBLIC -Dprotected=public -DQT_NO_DEBUG -DQT_CORE_LIB -I. -I/var/tmp/portage/dev-python/PyQt4-4.9_pre20111201/work/PyQt-x11-gpl-snapshot-4.9-ee8b9c7eb565-2.7/qpy/QtDBus -I/usr/include/python2.7 -I/usr/mkspecs/linux-g++ -I/usr/include/qt4/QtDBus -I/usr/include/qt4/QtCore -I/usr/include/qt4 -o sipQtDBusQDBusObjectPath.o sipQtDBusQDBusObjectPath.cpp /var/tmp/portage/dev-python/PyQt4-4.9_pre20111201/work/PyQt-x11-gpl-snapshot-4.9-ee8b9c7eb565-2.7/QtDBus/sipQtDBusQDBusVariant.cpp: In function ‘PyObject* meth_QDBusVariant_variant(PyObject*, PyObject*)’: /var/tmp/portage/dev-python/PyQt4-4.9_pre20111201/work/PyQt-x11-gpl-snapshot-4.9-ee8b9c7eb565-2.7/QtDBus/sipQtDBusQDBusVariant.cpp:45:15: error: ‘QDBusVariant’ does not name a type /var/tmp/portage/dev-python/PyQt4-4.9_pre20111201/work/PyQt-x11-gpl-snapshot-4.9-ee8b9c7eb565-2.7/QtDBus/sipQtDBusQDBusVariant.cpp:47:87: error: ‘sipCpp’ was not declared in this scope /var/tmp/portage/dev-python/PyQt4-4.9_pre20111201/work/PyQt-x11-gpl-snapshot-4.9-ee8b9c7eb565-2.7/QtDBus/sipQtDBusQDBusVariant.cpp: In function ‘PyObject* meth_QDBusVariant_setVariant(PyObject*, PyObject*)’: ... This is with sip-4.13.1-snapshot-98421b9cc511. Chris ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On 30/11/11 16:37, Phil Thompson wrote: On Sun, 27 Nov 2011 12:58:27 +, Chris Mayo cjm...@users.sourceforge.net wrote: On 27/11/11 12:51, Phil Thompson wrote: On Sun, 27 Nov 2011 12:47:09 +, 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: :00:1f.2-scsi-5:0:0:0-part2', '/dev/fd0']] Traceback (most recent call last): File ./objectpath.py, line 10, inmodule 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. 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. 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. Thoughts? Phil ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On Thu, 01 Dec 2011 20:20:34 +, Chris Mayo cjm...@users.sourceforge.net wrote: On 30/11/11 16:37, Phil Thompson wrote: On Sun, 27 Nov 2011 12:58:27 +, Chris Mayo cjm...@users.sourceforge.net wrote: On 27/11/11 12:51, Phil Thompson wrote: On Sun, 27 Nov 2011 12:47:09 +, 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: :00:1f.2-scsi-5:0:0:0-part2', '/dev/fd0']] Traceback (most recent call last): File ./objectpath.py, line 10, inmodule 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 listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On Thu, 01 Dec 2011 20:20:34 +, Chris Mayo cjm...@users.sourceforge.net wrote: 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. This might have been due to a build problem. Try downloading the snapshot again (even though it has the same name). Phil ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On Sun, 27 Nov 2011 12:58:27 +, Chris Mayo cjm...@users.sourceforge.net wrote: On 27/11/11 12:51, Phil Thompson wrote: On Sun, 27 Nov 2011 12:47:09 +, 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: :00:1f.2-scsi-5:0:0:0-part2', '/dev/fd0']] Traceback (most recent call last): File ./objectpath.py, line 10, inmodule 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. 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? 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. Thoughts? Phil ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[PyQt] QtDBus: Unable to convert Array of Object Paths
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: :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 Chris ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On Sun, 27 Nov 2011 12:47:09 +, 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: :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 ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt
Re: [PyQt] QtDBus: Unable to convert Array of Object Paths
On 27/11/11 12:51, Phil Thompson wrote: On Sun, 27 Nov 2011 12:47:09 +, 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: :00:1f.2-scsi-5:0:0:0-part2', '/dev/fd0']] Traceback (most recent call last): File ./objectpath.py, line 10, inmodule 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()) Chris ___ PyQt mailing listPyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt