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

Reply via email to