getsenic / gatt-python

Bluetooth GATT SDK for Python
MIT License
318 stars 86 forks source link

remove_all_devices raises a DBusException #48

Open ashesman opened 5 years ago

ashesman commented 5 years ago

A DBusException can be propagated out of remove_all_devices. I would expect that the user would never see DBus exceptions as are platform specific...

self._manager.remove_all_devices() File "/usr/local/lib/python3.6/dist-packages/gatt/gatt_linux.py", line 221, in remove_all_devices self._adapter.RemoveDevice(path) File "/usr/lib/python3/dist-packages/dbus/proxies.py", line 70, in call return self._proxy_method(*args, keywords) File "/usr/lib/python3/dist-packages/dbus/proxies.py", line 145, in call keywords) File "/usr/lib/python3/dist-packages/dbus/connection.py", line 651, in call_blocking message, timeout) dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownMethod: Method "RemoveDevice" with signature "s" on interface "org.bluez.Adapter1" doesn't exist

larsblumberg commented 5 years ago

This error can happen when your bluez library is too old. Which version are you using?

ashesman commented 5 years ago

I am using V5.48. My thoughts on this were that a DBusException should never propagate as far as user code. Should be caught inside the library.

larsblumberg commented 5 years ago

Exactly, user code should not receive such exceptions - with that thought in mind I wrote this library. I am surprised you're getting this error, that's why I was asking for your bluez version. I wrote this library when bluez 4.43 was the latest version but I can only hardly imagine that they removed the "RemoveDevice" from the bluez API in the version you're using.

ashesman commented 5 years ago

Over the past few weeks, I have received a heap of exceptions due to missing attributes. Mostly using the Adafruit BluefruitLE library. That was the reason I switched to this library, which has been 100 time more robust! RemoveDevice is there normally and works fine, just at that point in time it decided not to be!