From b17ecef76796810d6074f3e1fa33e2c7f286e003 Mon Sep 17 00:00:00 2001 From: John Schember Date: Thu, 21 Apr 2011 07:43:44 -0400 Subject: [PATCH] Store: Documentation. Return value for get_details. Formats for more stores. --- src/calibre/gui2/store/__init__.py | 9 +++++++-- src/calibre/gui2/store/amazon_plugin.py | 1 + src/calibre/gui2/store/bewrite_plugin.py | 4 +++- src/calibre/gui2/store/diesel_ebooks_plugin.py | 1 + src/calibre/gui2/store/ebooks_com_plugin.py | 1 + src/calibre/gui2/store/eharlequin_plugin.py | 1 + src/calibre/gui2/store/feedbooks_plugin.py | 4 ++++ src/calibre/gui2/store/gutenberg_plugin.py | 9 +++++++++ src/calibre/gui2/store/kobo_plugin.py | 1 + 9 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/store/__init__.py b/src/calibre/gui2/store/__init__.py index ddce2f5ec4..43909e9d8b 100644 --- a/src/calibre/gui2/store/__init__.py +++ b/src/calibre/gui2/store/__init__.py @@ -96,7 +96,7 @@ class StorePlugin(object): # {{{ :param query: The string query search with. :param max_results: The maximum number of results to return. - :param timeout: The maximum amount of time in seconds to spend download the search results. + :param timeout: The maximum amount of time in seconds to spend downloading data for search results. :return: :class:`calibre.gui2.store.search_result.SearchResult` objects item_data is plugin specific and is used in :meth:`open` to open to a specifc place in the store. @@ -116,8 +116,13 @@ class StorePlugin(object): # {{{ take extra time to load. Splitting retrieving data that takes longer to load into a separate function will give the illusion of the search being faster. + + :param search_result: A search result that need details set. + :param timeout: The maximum amount of time in seconds to spend downloading details. + + :return: True if the search_result was modified otherwise False ''' - pass + return False def get_settings(self): ''' diff --git a/src/calibre/gui2/store/amazon_plugin.py b/src/calibre/gui2/store/amazon_plugin.py index fe9d9c81c6..d5d8b54600 100644 --- a/src/calibre/gui2/store/amazon_plugin.py +++ b/src/calibre/gui2/store/amazon_plugin.py @@ -185,5 +185,6 @@ class AmazonKindleStore(StorePlugin): search_result.drm = SearchResult.DRM_UNKNOWN else: search_result.drm = SearchResult.DRM_LOCKED + return True \ No newline at end of file diff --git a/src/calibre/gui2/store/bewrite_plugin.py b/src/calibre/gui2/store/bewrite_plugin.py index 716e147bbc..8cc4a2745f 100644 --- a/src/calibre/gui2/store/bewrite_plugin.py +++ b/src/calibre/gui2/store/bewrite_plugin.py @@ -98,4 +98,6 @@ class BeWriteStore(BasicStoreConfig, StorePlugin): formats.add('PDF') if idata.xpath('boolean(//div[@id="content"]//td[contains(text(), "MOBI")])'): formats.add('MOBI') - search_result.formats = ', '.join(list(formats)) + search_result.formats = ', '.join(list(formats)) + + return True diff --git a/src/calibre/gui2/store/diesel_ebooks_plugin.py b/src/calibre/gui2/store/diesel_ebooks_plugin.py index 9cea376341..b33bad15f9 100644 --- a/src/calibre/gui2/store/diesel_ebooks_plugin.py +++ b/src/calibre/gui2/store/diesel_ebooks_plugin.py @@ -99,3 +99,4 @@ class DieselEbooksStore(BasicStoreConfig, StorePlugin): search_result.drm = SearchResult.DRM_UNLOCKED else: search_result.drm = SearchResult.DRM_LOCKED + return True diff --git a/src/calibre/gui2/store/ebooks_com_plugin.py b/src/calibre/gui2/store/ebooks_com_plugin.py index 3131cd0621..1597cc89ca 100644 --- a/src/calibre/gui2/store/ebooks_com_plugin.py +++ b/src/calibre/gui2/store/ebooks_com_plugin.py @@ -117,3 +117,4 @@ class EbookscomStore(BasicStoreConfig, StorePlugin): search_result.formats = fdata search_result.price = price.strip() + return True diff --git a/src/calibre/gui2/store/eharlequin_plugin.py b/src/calibre/gui2/store/eharlequin_plugin.py index 325cb2f237..4f54508c80 100644 --- a/src/calibre/gui2/store/eharlequin_plugin.py +++ b/src/calibre/gui2/store/eharlequin_plugin.py @@ -101,3 +101,4 @@ class EHarlequinStore(BasicStoreConfig, StorePlugin): else: drm = SearchResult.DRM_UNLOCKED search_result.drm = drm + return True diff --git a/src/calibre/gui2/store/feedbooks_plugin.py b/src/calibre/gui2/store/feedbooks_plugin.py index 67de97126e..e56964b339 100644 --- a/src/calibre/gui2/store/feedbooks_plugin.py +++ b/src/calibre/gui2/store/feedbooks_plugin.py @@ -72,8 +72,10 @@ class FeedbooksStore(BasicStoreConfig, StorePlugin): title = ''.join(data.xpath('//h5//a/text()')) author = ''.join(data.xpath('//h6//a/text()')) price = ''.join(data.xpath('//a[@class="buy"]/text()')) + formats = 'EPUB' if not price: price = '$0.00' + formats = 'EPUB, MOBI, PDF' cover_url = '' cover_url_img = data.xpath('//img') if cover_url_img: @@ -88,6 +90,7 @@ class FeedbooksStore(BasicStoreConfig, StorePlugin): s.author = author.strip() s.price = price.replace(' ', '').strip() s.detail_item = id.strip() + s.formats = formats yield s @@ -101,3 +104,4 @@ class FeedbooksStore(BasicStoreConfig, StorePlugin): search_result.drm = SearchResult.DRM_LOCKED else: search_result.drm = SearchResult.DRM_UNLOCKED + return True diff --git a/src/calibre/gui2/store/gutenberg_plugin.py b/src/calibre/gui2/store/gutenberg_plugin.py index 0551c1b40b..04fe4da0fb 100644 --- a/src/calibre/gui2/store/gutenberg_plugin.py +++ b/src/calibre/gui2/store/gutenberg_plugin.py @@ -82,3 +82,12 @@ class GutenbergStore(BasicStoreConfig, StorePlugin): s.drm = SearchResult.DRM_UNLOCKED yield s + + def get_details(self, search_result, timeout): + url = 'http://m.gutenberg.org/' + + br = browser() + with closing(br.open(url + search_result.detail_item, timeout=timeout)) as nf: + idata = html.fromstring(nf.read()) + search_result.formats = ', '.join(idata.xpath('//a[@type!="application/atom+xml"]//span[@class="title"]/text()')) + return True \ No newline at end of file diff --git a/src/calibre/gui2/store/kobo_plugin.py b/src/calibre/gui2/store/kobo_plugin.py index e08094adf0..421348d210 100644 --- a/src/calibre/gui2/store/kobo_plugin.py +++ b/src/calibre/gui2/store/kobo_plugin.py @@ -82,5 +82,6 @@ class KoboStore(BasicStoreConfig, StorePlugin): s.price = price.strip() s.detail_item = '?url=http://www.kobobooks.com/' + id.strip() s.drm = SearchResult.DRM_LOCKED if drm else SearchResult.DRM_UNLOCKED + s.formats = 'EPUB' yield s