From 7270eaa91f197a9584bde163ae2661f2bc53118b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 23 Apr 2019 11:00:49 +0530 Subject: [PATCH] Apparently python 3.4+ removes the __func__ attribute, sigh --- src/calibre/devices/interface.py | 1 + src/calibre/devices/usbms/device.py | 3 +-- src/calibre/web/feeds/news.py | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/calibre/devices/interface.py b/src/calibre/devices/interface.py index 1b3b7cb654..d8f1ebd5f7 100644 --- a/src/calibre/devices/interface.py +++ b/src/calibre/devices/interface.py @@ -251,6 +251,7 @@ class DevicePlugin(Plugin): ''' return True + can_handle.is_base_class_implementation = True def open(self, connected_device, library_uuid): ''' diff --git a/src/calibre/devices/usbms/device.py b/src/calibre/devices/usbms/device.py index 6b73ffb788..7b8dd203a4 100644 --- a/src/calibre/devices/usbms/device.py +++ b/src/calibre/devices/usbms/device.py @@ -211,8 +211,7 @@ class Device(DeviceConfig, DevicePlugin): return drives def can_handle_windows(self, usbdevice, debug=False): - from calibre.devices.interface import DevicePlugin - if self.can_handle.__func__ is DevicePlugin.can_handle.__func__: + if hasattr(self.can_handle, 'is_base_class_implementation'): # No custom can_handle implementation return True # Delegate to the unix can_handle function, creating a unix like diff --git a/src/calibre/web/feeds/news.py b/src/calibre/web/feeds/news.py index cfddeeb300..dc7d9ce883 100644 --- a/src/calibre/web/feeds/news.py +++ b/src/calibre/web/feeds/news.py @@ -1117,7 +1117,7 @@ class BasicNewsRecipe(Recipe): def _fetch_article(self, url, dir_, f, a, num_of_feeds): br = self.browser - if self.get_browser.__func__ is BasicNewsRecipe.get_browser.__func__: + if hasattr(self.get_browser, 'is_base_class_implementation'): # We are using the default get_browser, which means no need to # clone br = BasicNewsRecipe.get_browser(self) @@ -1787,6 +1787,7 @@ class CalibrePeriodical(BasicNewsRecipe): ' the calibre Periodicals service.')) return br + get_browser.is_base_class_implementation = True def download(self): self.log('Fetching downloaded recipe')