Op 12/27/2016 om 05:32 PM schreef infirit: > Op 12/13/2016 om 04:31 PM schreef infirit: >> Op 12/12/2016 om 11:49 PM schreef Christoph Reiter: >>> On Sun, Dec 11, 2016 at 6:12 PM, infirit <infi...@gmail.com> wrote: >>>> Hi all, >>>> >>>> I subclassed Gio.DBusProxy and overridden the do_g_properties_changed >>>> virtual function. In there I emit my own signal that consumers of the >>>> proxy can connect to. I have created a minimal example of what I am >>>> doing which you can find on [1]. >>>> >>>> The code from [1] runs perfectly fine under python2.7 with no >>>> UnicodeDecodeError at any point, the situation under Python 3.4 however >>>> is different. See below an example error. I narrowed it down to >>>> overriding do_g_properties_changed, without that the error goes away. >>>> >>>> *connected function* /org/bluez/hci0/dev_7C_2F_80_3B_AF_AB RSSI -64 >>>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position >>>> 0: invalid start byte >>>> >>>> The strange thing is that it does not generate a traceback so I am not >>>> entirely sure how to proceed with this. It also does not seem to result >>>> in issues however my gut tells me not to ignore it. Anyone know what is >>>> going on with this? >>> Under Python 2 text gets passed to Python as is (utf-8 encoded) while >>> under Python 3 things get decoded to unicode code points. I suspect >>> there is some invalid utf-8 involved which you should see in data >>> getting passed to do_g_properties_changed under py2. >>> >>> I've tested your code (with adjusting the device path) and it seems to >>> work fine under py3 here. >> The problem is printing both properties changed and invalidated >> properties is identical between the two python versions. The only >> difference is with Python3 at the end I see the error. I monitored the >> object from the command line (below) and I see all events back in my >> proxy output. However there is something strange with the invalidated >> properties, more on that down below. >> >> #gdbus -y -d "org.bluez" -o "/org/bluez/hci0/dev_7C_2F_80_3B_AF_AB" >> /org/bluez/hci0/dev_7C_2F_80_3B_AF_AB: >> org.freedesktop.DBus.Properties.PropertiesChanged ('org.bluez.Device1', >> {'RSSI': <int16 -61>}, @as []) >> /org/bluez/hci0/dev_7C_2F_80_3B_AF_AB: >> org.freedesktop.DBus.Properties.PropertiesChanged ('org.bluez.Device1', >> @a{sv} {}, ['RSSI']) >> >> Corresponding output from my code under python3 >> >> *<class '__main__.MyProxy'> : changed* >> /org/bluez/hci0/dev_7C_2F_80_3B_AF_AB RSSI -61 >> *connected function* /org/bluez/hci0/dev_7C_2F_80_3B_AF_AB RSSI -61 >> *invalidated* <class 'str'> '' >> UnicodeDecodeError: 'utf-8' codec can't decode byte 0x90 in position 2: >> invalid start byte >> >> and python2 >> >> ("*<class '__main__.MyProxy'> : changed*", >> '/org/bluez/hci0/dev_7C_2F_80_3B_AF_AB', 'RSSI', -61) >> ('*connected function*', '/org/bluez/hci0/dev_7C_2F_80_3B_AF_AB', >> 'RSSI', -61) >> ('*invalidated*', <type 'str'>, "''", '') >> >> Now on the invalidated properties. I personally have need for them but I >> did notice the virtual do_g_properties_changed is not handling them >> properly. Take the second line from gdbus, it has no changed properties >> and one invalidated property. Looking at what I get in >> do_g_properties_changed I noticed I always get an empty *string* >> (instead of a list). This looks like a bug as it is definitely on the >> bus but never shows up in do_g_properties_changed. When I connect >> directly (without using the virtual function) to g_properties_changed I >> do see the invalidated properties correctly as a *list* of strings. >> >> My guess is that the two are related but I am not sure where to go from >> here. >> > Should I open a bug report?
There is already a bug report on it, see https://bugzilla.gnome.org/show_bug.cgi?id=756009 but unfortunately the bug is over a year old already :(. ~infirit _______________________________________________ python-hackers-list mailing list python-hackers-list@gnome.org https://mail.gnome.org/mailman/listinfo/python-hackers-list