diff --git a/src/calibre/ebooks/metadata/search_internet.py b/src/calibre/ebooks/metadata/search_internet.py index 2b45caba0d..bb962e83eb 100644 --- a/src/calibre/ebooks/metadata/search_internet.py +++ b/src/calibre/ebooks/metadata/search_internet.py @@ -5,7 +5,7 @@ from __future__ import absolute_import, division, print_function, unicode_literals from polyglot.builtins import iteritems -from polyglot.urllib import quote_plus +from polyglot.urllib import quote, quote_plus AUTHOR_SEARCHES = { 'goodreads': @@ -48,17 +48,21 @@ all_book_searches = BOOK_SEARCHES.__iter__ all_author_searches = AUTHOR_SEARCHES.__iter__ -def qquote(val): +def qquote(val, use_plus=True): if not isinstance(val, bytes): val = val.encode('utf-8') - ans = quote_plus(val) + ans = quote_plus(val) if use_plus else quote(val) if isinstance(ans, bytes): ans = ans.decode('utf-8') return ans +def specialised_quote(template, val): + return qquote(val, 'goodreads.com' not in template) + + def url_for(template, data): - return template.format(**{k: qquote(v) for k, v in iteritems(data)}) + return template.format(**{k: specialised_quote(template, v) for k, v in iteritems(data)}) def url_for_author_search(key, **kw):