diff --git a/setup/commands.py b/setup/commands.py index a993a42ac9..ff86033b13 100644 --- a/setup/commands.py +++ b/setup/commands.py @@ -13,7 +13,7 @@ __all__ = [ 'git_version', 'develop', 'install', 'kakasi', 'coffee', 'rapydscript', 'cacerts', 'recent_uas', 'resources', - 'check', 'to3', 'unicode_check', 'test', + 'check', 'to3', 'unicode_check', 'iterators_check', 'test', 'sdist', 'bootstrap', 'manual', 'tag_release', 'upload_to_server', @@ -55,9 +55,10 @@ gui = GUI() from setup.check import Check check = Check() -from setup.port import To3, UnicodeCheck +from setup.port import To3, UnicodeCheck, IteratorsCheck to3 = To3() unicode_check = UnicodeCheck() +iterators_check = IteratorsCheck() from setup.test import Test test = Test() diff --git a/setup/port.py b/setup/port.py index 11f6343124..ef81146ac7 100644 --- a/setup/port.py +++ b/setup/port.py @@ -131,6 +131,12 @@ class To3(Base): return re.search(r'^RefactoringTool: No changes to ' + f, output, flags=re.M) is None +def edit_file(f): + subprocess.Popen([ + 'vim', '-S', os.path.join(Command.SRC, '../session.vim'), '-f', f + ]).wait() + + class UnicodeCheck(Base): description = 'Check for unicode porting status' @@ -169,9 +175,63 @@ class UnicodeCheck(Base): return self.get_error_statement(f) is not None def report_file_error(self, f, num_left): - subprocess.Popen([ - 'vim', '-S', os.path.join(self.SRC, '../session.vim'), '-f', f - ]).wait() + edit_file(f) + self.info('%d files left to check' % num_left) if self.file_has_errors(f): raise SystemExit(self.get_error_statement(f)) + + +def has_import(text, module, name): + pat = re.compile(r'^from\s+{}\s+import\s+.*\b{}\b'.format(module, name), re.MULTILINE) + if pat.search(text) is not None: + return True + pat = re.compile(r'^from\s+{}\s+import\s+\([^)]*\b{}\b'.format(module, name), re.MULTILINE | re.DOTALL) + if pat.search(text) is not None: + return True + return False + + +class IteratorsCheck(Base): + + description = 'Check for builtins changed to return iterators porting status' + CACHE = 'check_iterators.json' + + def get_errors_in_file(self, f): + pat = re.compile(r'\b(range|map|filter|zip)\(') + text = open(f, 'rb').read().decode('utf-8') + matches = tuple(pat.finditer(text)) + if not matches: + return [] + ans = [] + names = {m.group(1) for m in matches} + imported_names = {n for n in names if has_import(text, 'polyglot.builtins', n)} + safe_funcs = 'list|tuple|set|frozenset|join' + func_pat = r'({})\('.format(safe_funcs) + for_pat = re.compile(r'\bfor\s+.+?\s+\bin\b') + for i, line in enumerate(text.splitlines()): + m = pat.search(line) + if m is not None: + itname = m.group(1) + if itname in imported_names: + continue + start = m.start() + if start > 0: + if line[start-1] == '*': + continue + if line[start-1] == '(': + if re.search(func_pat + itname, line) is not None: + continue + fm = for_pat.search(line) + if fm is not None and fm.start() < start: + continue + ans.append('%s:%s' % (i, itname)) + return ans + + def file_has_errors(self, f): + return bool(self.get_errors_in_file(f)) + + def report_file_error(self, f, num_left): + edit_file(f) self.info('%d files left to check' % num_left) + if self.file_has_errors(f): + raise SystemExit('\n'.join(self.get_errors_in_file(f))) diff --git a/src/calibre/db/cli/cmd_list.py b/src/calibre/db/cli/cmd_list.py index a5de2ccc19..2ca97ee016 100644 --- a/src/calibre/db/cli/cmd_list.py +++ b/src/calibre/db/cli/cmd_list.py @@ -13,7 +13,7 @@ from calibre import prints from calibre.db.cli.utils import str_width from calibre.ebooks.metadata import authors_to_string from calibre.utils.date import isoformat -from polyglot.builtins import iteritems, unicode_type +from polyglot.builtins import iteritems, unicode_type, map readonly = True version = 0 # change this if you change signature of implementation() @@ -183,7 +183,7 @@ def do_list( if not screen_width: screen_width = 80 field_width = screen_width // len(fields) - base_widths = map(lambda x: min(x + 1, field_width), widths) + base_widths = list(map(lambda x: min(x + 1, field_width), widths)) while sum(base_widths) < screen_width: adjusted = False diff --git a/src/calibre/db/cli/cmd_list_categories.py b/src/calibre/db/cli/cmd_list_categories.py index 6165c50877..ef193165e4 100644 --- a/src/calibre/db/cli/cmd_list_categories.py +++ b/src/calibre/db/cli/cmd_list_categories.py @@ -10,7 +10,7 @@ from textwrap import TextWrapper from io import BytesIO from calibre import prints -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, map readonly = True version = 0 # change this if you change signature of implementation() @@ -86,7 +86,7 @@ def do_list(fields, data, opts): if not screen_width: screen_width = 80 field_width = screen_width // len(fields) - base_widths = map(lambda x: min(x + 1, field_width), widths) + base_widths = list(map(lambda x: min(x + 1, field_width), widths)) while sum(base_widths) < screen_width: adjusted = False @@ -107,7 +107,7 @@ def do_list(fields, data, opts): with ColoredStream(sys.stdout, fg='green'): prints(''.join(titles)) - wrappers = map(lambda x: TextWrapper(x - 1), widths) + wrappers = list(map(lambda x: TextWrapper(x - 1), widths)) for record in data: text = [ diff --git a/src/calibre/db/cli/utils.py b/src/calibre/db/cli/utils.py index c09014486a..56eb5f15ea 100644 --- a/src/calibre/db/cli/utils.py +++ b/src/calibre/db/cli/utils.py @@ -4,6 +4,8 @@ from __future__ import absolute_import, division, print_function, unicode_literals +from polyglot.builtins import map + import unicodedata eaw = unicodedata.east_asian_width diff --git a/src/calibre/db/tests/legacy.py b/src/calibre/db/tests/legacy.py index 31b5eb519c..4246f94286 100644 --- a/src/calibre/db/tests/legacy.py +++ b/src/calibre/db/tests/legacy.py @@ -13,7 +13,7 @@ from operator import itemgetter from calibre.library.field_metadata import fm_as_dict from calibre.db.tests.base import BaseTest -from polyglot.builtins import iteritems, range +from polyglot.builtins import iteritems, range, zip from polyglot import reprlib # Utils {{{ diff --git a/src/calibre/devices/__init__.py b/src/calibre/devices/__init__.py index 3e6f59d6b6..a9a7e184a7 100644 --- a/src/calibre/devices/__init__.py +++ b/src/calibre/devices/__init__.py @@ -8,6 +8,7 @@ Device drivers. import sys, time, pprint from functools import partial +from polyglot.builtins import zip DAY_MAP = dict(Sun=0, Mon=1, Tue=2, Wed=3, Thu=4, Fri=5, Sat=6) MONTH_MAP = dict(Jan=1, Feb=2, Mar=3, Apr=4, May=5, Jun=6, Jul=7, Aug=8, Sep=9, Oct=10, Nov=11, Dec=12) diff --git a/src/calibre/devices/jetbook/driver.py b/src/calibre/devices/jetbook/driver.py index e6fedf3589..aefa076788 100644 --- a/src/calibre/devices/jetbook/driver.py +++ b/src/calibre/devices/jetbook/driver.py @@ -14,7 +14,7 @@ import sys from calibre.devices.usbms.driver import USBMS from calibre.ebooks.metadata import string_to_authors -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, map class JETBOOK(USBMS): @@ -79,7 +79,7 @@ class JETBOOK(USBMS): if match is not None: mi.title = check_unicode(match.group('title')) authors = string_to_authors(match.group('authors')) - mi.authors = map(check_unicode, authors) + mi.authors = list(map(check_unicode, authors)) return mi diff --git a/src/calibre/devices/prs505/sony_cache.py b/src/calibre/devices/prs505/sony_cache.py index 9984b1316f..fb6f358137 100644 --- a/src/calibre/devices/prs505/sony_cache.py +++ b/src/calibre/devices/prs505/sony_cache.py @@ -16,6 +16,7 @@ from calibre.ebooks.chardet import xml_to_unicode from calibre.ebooks.metadata import authors_to_string, title_sort, \ authors_to_sort_string from polyglot.binary import from_base64_bytes +from polyglot.builtins import zip ''' cahceExt.xml diff --git a/src/calibre/devices/usbms/device.py b/src/calibre/devices/usbms/device.py index 7b8dd203a4..f663898839 100644 --- a/src/calibre/devices/usbms/device.py +++ b/src/calibre/devices/usbms/device.py @@ -23,7 +23,7 @@ from calibre.devices.errors import DeviceError from calibre.devices.usbms.deviceconfig import DeviceConfig from calibre.constants import iswindows, islinux, isosx, isfreebsd, plugins from calibre.utils.filenames import ascii_filename as sanitize -from polyglot.builtins import iteritems, string_or_bytes +from polyglot.builtins import iteritems, string_or_bytes, map if isosx: usbobserver, usbobserver_err = plugins['usbobserver'] @@ -355,7 +355,7 @@ class Device(DeviceConfig, DevicePlugin): g = m.groupdict() if g['p'] is None: g['p'] = 0 - return map(int, (g.get('m'), g.get('p'))) + return list(map(int, (g.get('m'), g.get('p')))) def cmp_key(x): ''' diff --git a/src/calibre/devices/usbms/driver.py b/src/calibre/devices/usbms/driver.py index 5b204904ee..3fcb27ee30 100644 --- a/src/calibre/devices/usbms/driver.py +++ b/src/calibre/devices/usbms/driver.py @@ -20,7 +20,7 @@ from calibre.devices.usbms.cli import CLI from calibre.devices.usbms.device import Device from calibre.devices.usbms.books import BookList, Book from calibre.ebooks.metadata.book.json_codec import JsonCodec -from polyglot.builtins import itervalues, unicode_type, string_or_bytes +from polyglot.builtins import itervalues, unicode_type, string_or_bytes, zip BASE_TIME = None @@ -335,7 +335,7 @@ class USBMS(CLI, Device): self.report_progress(1.0, _('Transferring books to device...')) debug_print('USBMS: finished uploading %d books'%(len(files))) - return zip(paths, cycle([on_card])) + return list(zip(paths, cycle([on_card]))) def upload_cover(self, path, filename, metadata, filepath): ''' diff --git a/src/calibre/ebooks/comic/input.py b/src/calibre/ebooks/comic/input.py index fb6db0d152..25ff18572f 100755 --- a/src/calibre/ebooks/comic/input.py +++ b/src/calibre/ebooks/comic/input.py @@ -15,7 +15,7 @@ from calibre.ptempfile import PersistentTemporaryDirectory from calibre.utils.icu import numeric_sort_key from calibre.utils.ipc.server import Server from calibre.utils.ipc.job import ParallelJob -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, map from polyglot.queue import Empty # If the specified screen has either dimension larger than this value, no image diff --git a/src/calibre/ebooks/conversion/plugins/comic_input.py b/src/calibre/ebooks/conversion/plugins/comic_input.py index 75ed0e03be..13301d96f8 100644 --- a/src/calibre/ebooks/conversion/plugins/comic_input.py +++ b/src/calibre/ebooks/conversion/plugins/comic_input.py @@ -12,7 +12,7 @@ import shutil, textwrap, codecs, os from calibre.customize.conversion import InputFormatPlugin, OptionRecommendation from calibre import CurrentDir from calibre.ptempfile import PersistentTemporaryDirectory -from polyglot.builtins import getcwd +from polyglot.builtins import getcwd, map class ComicInput(InputFormatPlugin): diff --git a/src/calibre/ebooks/conversion/plugins/epub_output.py b/src/calibre/ebooks/conversion/plugins/epub_output.py index ec1a1fc540..7af7f9ed4c 100644 --- a/src/calibre/ebooks/conversion/plugins/epub_output.py +++ b/src/calibre/ebooks/conversion/plugins/epub_output.py @@ -12,7 +12,7 @@ from calibre.customize.conversion import (OutputFormatPlugin, OptionRecommendation) from calibre.ptempfile import TemporaryDirectory from calibre import CurrentDir -from polyglot.builtins import unicode_type, filter +from polyglot.builtins import unicode_type, filter, map, zip block_level_tags = ( 'address', diff --git a/src/calibre/ebooks/conversion/plumber.py b/src/calibre/ebooks/conversion/plumber.py index 2b532cc0e0..6b1920c0d4 100644 --- a/src/calibre/ebooks/conversion/plumber.py +++ b/src/calibre/ebooks/conversion/plumber.py @@ -18,7 +18,7 @@ from calibre.utils.zipfile import ZipFile from calibre import (extract, walk, isbytestring, filesystem_encoding, get_types_map) from calibre.constants import __version__ -from polyglot.builtins import unicode_type, string_or_bytes +from polyglot.builtins import unicode_type, string_or_bytes, map DEBUG_README=u''' This debug directory contains snapshots of the e-book as it passes through the @@ -1172,7 +1172,7 @@ OptionRecommendation(name='search_replace', fkey = self.opts.dest.fkey else: try: - fkey = map(float, fkey.split(',')) + fkey = list(map(float, fkey.split(','))) except: self.log.error('Invalid font size key: %r ignoring'%fkey) fkey = self.opts.dest.fkey diff --git a/src/calibre/ebooks/docx/to_html.py b/src/calibre/ebooks/docx/to_html.py index 8141e6a4f2..782ed7cd48 100644 --- a/src/calibre/ebooks/docx/to_html.py +++ b/src/calibre/ebooks/docx/to_html.py @@ -29,7 +29,7 @@ from calibre.ebooks.docx.fields import Fields from calibre.ebooks.docx.settings import Settings from calibre.ebooks.metadata.opf2 import OPFCreator from calibre.utils.localization import canonicalize_lang, lang_as_iso639_1 -from polyglot.builtins import iteritems, itervalues, filter, getcwd +from polyglot.builtins import iteritems, itervalues, filter, getcwd, map NBSP = '\xa0' @@ -183,7 +183,7 @@ class Convert(object): indent = float(style.text_indent[:-2]) + indent style.text_indent = '%.3gpt' % indent parent.text = tabs[-1].tail or '' - map(parent.remove, tabs) + list(map(parent.remove, tabs)) self.images.rid_map = orig_rid_map diff --git a/src/calibre/ebooks/docx/writer/container.py b/src/calibre/ebooks/docx/writer/container.py index 9dd894db8b..0b11ae5521 100644 --- a/src/calibre/ebooks/docx/writer/container.py +++ b/src/calibre/ebooks/docx/writer/container.py @@ -19,7 +19,7 @@ from calibre.utils.date import utcnow from calibre.utils.localization import canonicalize_lang, lang_as_iso639_1 from calibre.utils.zipfile import ZipFile from calibre.ebooks.pdf.render.common import PAPER_SIZES -from polyglot.builtins import iteritems +from polyglot.builtins import iteritems, map def xml2str(root, pretty_print=False, with_tail=False): diff --git a/src/calibre/ebooks/lrf/input.py b/src/calibre/ebooks/lrf/input.py index 81b2a72ef3..77d43335da 100644 --- a/src/calibre/ebooks/lrf/input.py +++ b/src/calibre/ebooks/lrf/input.py @@ -12,7 +12,7 @@ from copy import deepcopy, copy from lxml import etree from calibre import guess_type -from polyglot.builtins import as_bytes +from polyglot.builtins import as_bytes, map class Canvas(etree.XSLTExtension): diff --git a/src/calibre/ebooks/metadata/book/base.py b/src/calibre/ebooks/metadata/book/base.py index 26bec6ab96..edd7ae9557 100644 --- a/src/calibre/ebooks/metadata/book/base.py +++ b/src/calibre/ebooks/metadata/book/base.py @@ -14,7 +14,7 @@ from calibre.ebooks.metadata.book import (SC_COPYABLE_FIELDS, TOP_LEVEL_IDENTIFIERS, ALL_METADATA_FIELDS) from calibre.library.field_metadata import FieldMetadata from calibre.utils.icu import sort_key -from polyglot.builtins import iteritems, unicode_type, filter +from polyglot.builtins import iteritems, unicode_type, filter, map # Special sets used to optimize the performance of getting and setting # attributes on Metadata objects diff --git a/src/calibre/ebooks/metadata/sources/ozon.py b/src/calibre/ebooks/metadata/sources/ozon.py index 1e84428b77..e597e01f4a 100644 --- a/src/calibre/ebooks/metadata/sources/ozon.py +++ b/src/calibre/ebooks/metadata/sources/ozon.py @@ -207,8 +207,9 @@ class Ozon(Source): title = type(u'')(title).upper() if title else '' if reRemoveFromTitle: title = reRemoveFromTitle.sub('', title) - authors = map(_normalizeAuthorNameWithInitials, - map(type(u'').upper, map(type(u''), authors))) if authors else None + authors = [ + _normalizeAuthorNameWithInitials(type(u'')(a).upper()) for a in authors + ] if authors else None ozon_id = identifiers.get('ozon', None) # log.debug(u'ozonid: ', ozon_id) @@ -246,7 +247,7 @@ class Ozon(Source): relevance += 1 if authors: - miauthors = map(type(u'').upper, map(type(u''), mi.authors)) if mi.authors else [] + miauthors = [type(u'')(a).upper() for a in mi.authors or ()] # log.debug('Authors %s vs miauthors %s'%(','.join(authors), ','.join(miauthors))) if (in_authors(authors, miauthors)): @@ -332,7 +333,7 @@ class Ozon(Source): author = type(u'')(entry.xpath(u'normalize-space(.//div[contains(@class, "mPerson")])')) # log.debug(u'Author: -----> %s' % author) - norm_authors = map(_normalizeAuthorNameWithInitials, map(type(u'').strip, type(u'')(author).split(u','))) + norm_authors = [_normalizeAuthorNameWithInitials(a.strip()) for a in type(u'')(author).split(u',')] mi = Metadata(title, norm_authors) ozon_id = entry.get('data-href').split('/')[-2] diff --git a/src/calibre/ebooks/metadata/sources/search_engines.py b/src/calibre/ebooks/metadata/sources/search_engines.py index 52741842ca..aba9467c4d 100644 --- a/src/calibre/ebooks/metadata/sources/search_engines.py +++ b/src/calibre/ebooks/metadata/sources/search_engines.py @@ -128,8 +128,7 @@ def wayback_url_processor(url): def ddg_search(terms, site=None, br=None, log=prints, safe_search=False, dump_raw=None, timeout=60): # https://duck.co/help/results/syntax - terms = map(ddg_term, terms) - terms = [quote_term(t) for t in terms] + terms = [quote_term(ddg_term(t)) for t in terms] if site is not None: terms.append(quote_term(('site:' + site))) q = '+'.join(terms) @@ -170,8 +169,7 @@ def bing_url_processor(url): def bing_search(terms, site=None, br=None, log=prints, safe_search=False, dump_raw=None, timeout=60): # http://vlaurie.com/computers2/Articles/bing_advanced_search.htm - terms = map(bing_term, terms) - terms = [quote_term(t) for t in terms] + terms = [quote_term(bing_term(t)) for t in terms] if site is not None: terms.append(quote_term(('site:' + site))) q = '+'.join(terms) @@ -226,8 +224,7 @@ def google_url_processor(url): def google_search(terms, site=None, br=None, log=prints, safe_search=False, dump_raw=None, timeout=60): - terms = map(google_term, terms) - terms = [quote_term(t) for t in terms] + terms = [quote_term(google_term(t)) for t in terms] if site is not None: terms.append(quote_term(('site:' + site))) q = '+'.join(terms) diff --git a/src/calibre/ebooks/mobi/reader/index.py b/src/calibre/ebooks/mobi/reader/index.py index b489dd2e6e..96ba504d5b 100644 --- a/src/calibre/ebooks/mobi/reader/index.py +++ b/src/calibre/ebooks/mobi/reader/index.py @@ -12,7 +12,7 @@ from collections import OrderedDict, namedtuple from calibre.ebooks.mobi.utils import (decint, count_set_bits, decode_string) -from polyglot.builtins import iteritems, range +from polyglot.builtins import iteritems, range, zip TagX = namedtuple('TagX', 'tag num_of_values bitmask eof') PTagX = namedtuple('PTagX', 'tag value_count value_bytes num_of_values') diff --git a/src/calibre/ebooks/mobi/reader/mobi6.py b/src/calibre/ebooks/mobi/reader/mobi6.py index 04ca535c44..bda6f97dc6 100644 --- a/src/calibre/ebooks/mobi/reader/mobi6.py +++ b/src/calibre/ebooks/mobi/reader/mobi6.py @@ -23,7 +23,7 @@ from calibre.ebooks.metadata.toc import TOC from calibre.ebooks.mobi.reader.headers import BookHeader from calibre.utils.img import save_cover_data_to from calibre.utils.imghdr import what -from polyglot.builtins import iteritems, unicode_type, range +from polyglot.builtins import iteritems, unicode_type, range, map class TopazError(ValueError): diff --git a/src/calibre/ebooks/mobi/utils.py b/src/calibre/ebooks/mobi/utils.py index 854c2b4395..e678cbebcd 100644 --- a/src/calibre/ebooks/mobi/utils.py +++ b/src/calibre/ebooks/mobi/utils.py @@ -14,7 +14,7 @@ from io import BytesIO from calibre.utils.img import save_cover_data_to, scale_image, image_to_data, image_from_data, resize_image from calibre.utils.imghdr import what from calibre.ebooks import normalize -from polyglot.builtins import unicode_type, range, as_bytes +from polyglot.builtins import unicode_type, range, as_bytes, map from tinycss.color3 import parse_color_string IMAGE_MAX_SIZE = 10 * 1024 * 1024 diff --git a/src/calibre/ebooks/oeb/parse_utils.py b/src/calibre/ebooks/oeb/parse_utils.py index 86874a93ba..ba1a64b3dd 100644 --- a/src/calibre/ebooks/oeb/parse_utils.py +++ b/src/calibre/ebooks/oeb/parse_utils.py @@ -14,7 +14,7 @@ from lxml import etree, html from calibre import xml_replace_entities, force_unicode from calibre.constants import filesystem_encoding from calibre.ebooks.chardet import xml_to_unicode, strip_encoding_declarations -from polyglot.builtins import iteritems, itervalues, unicode_type, string_or_bytes +from polyglot.builtins import iteritems, itervalues, unicode_type, string_or_bytes, map RECOVER_PARSER = etree.XMLParser(recover=True, no_network=True) XHTML_NS = 'http://www.w3.org/1999/xhtml' @@ -65,7 +65,7 @@ def merge_multiple_html_heads_and_bodies(root, log=None): for b in bodies: for x in b: body.append(x) - map(root.append, (head, body)) + tuple(map(root.append, (head, body))) if log is not None: log.warn('Merging multiple and sections') return root diff --git a/src/calibre/ebooks/oeb/polish/container.py b/src/calibre/ebooks/oeb/polish/container.py index 2a3175632f..e1927786ab 100644 --- a/src/calibre/ebooks/oeb/polish/container.py +++ b/src/calibre/ebooks/oeb/polish/container.py @@ -14,7 +14,7 @@ import time import unicodedata import uuid from collections import defaultdict -from polyglot.builtins import iteritems, unicode_type, zip, as_bytes +from polyglot.builtins import iteritems, unicode_type, zip, as_bytes, map from io import BytesIO from itertools import count @@ -801,7 +801,7 @@ class Container(ContainerBase): # {{{ imap = {name:item_id for item_id, name in iteritems(imap)} items = [item for item, name, linear in self.spine_iter] tail, last_tail = (items[0].tail, items[-1].tail) if items else ('\n ', '\n ') - map(self.remove_from_xml, items) + tuple(map(self.remove_from_xml, items)) spine = self.opf_xpath('//opf:spine')[0] spine.text = tail for name, linear in spine_items: diff --git a/src/calibre/ebooks/oeb/polish/utils.py b/src/calibre/ebooks/oeb/polish/utils.py index af0688bddb..8eff3652d1 100644 --- a/src/calibre/ebooks/oeb/polish/utils.py +++ b/src/calibre/ebooks/oeb/polish/utils.py @@ -10,6 +10,7 @@ import re, os from bisect import bisect from calibre import guess_type as _guess_type, replace_entities +from polyglot.builtins import filter def guess_type(x): diff --git a/src/calibre/ebooks/oeb/transforms/flatcss.py b/src/calibre/ebooks/oeb/transforms/flatcss.py index 81edf67604..ebe07e16f4 100644 --- a/src/calibre/ebooks/oeb/transforms/flatcss.py +++ b/src/calibre/ebooks/oeb/transforms/flatcss.py @@ -21,7 +21,7 @@ from calibre.ebooks.oeb.base import (XHTML, XHTML_NS, CSS_MIME, OEB_STYLES, from calibre.ebooks.oeb.stylizer import Stylizer from calibre.utils.filenames import ascii_filename, ascii_text from calibre.utils.icu import numeric_sort_key -from polyglot.builtins import iteritems, unicode_type, string_or_bytes +from polyglot.builtins import iteritems, unicode_type, string_or_bytes, map COLLAPSE = re.compile(r'[ \t\r\n\v]+') STRIPNUM = re.compile(r'[-0-9]+$') diff --git a/src/calibre/ebooks/oeb/transforms/jacket.py b/src/calibre/ebooks/oeb/transforms/jacket.py index cff11f0f6f..23abb83193 100644 --- a/src/calibre/ebooks/oeb/transforms/jacket.py +++ b/src/calibre/ebooks/oeb/transforms/jacket.py @@ -21,7 +21,7 @@ from calibre.utils.date import is_date_undefined, as_local_time from calibre.utils.icu import sort_key from calibre.ebooks.chardet import strip_encoding_declarations from calibre.ebooks.metadata import fmt_sidx, rating_to_stars -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, map JACKET_XPATH = '//h:meta[@name="calibre-content" and @content="jacket"]' @@ -104,8 +104,8 @@ class Jacket(Base): self.log('Inserting metadata into book...') try: - tags = map(unicode_type, self.oeb.metadata.subject) - except: + tags = list(map(unicode_type, self.oeb.metadata.subject)) + except Exception: tags = [] try: diff --git a/src/calibre/ebooks/oeb/transforms/metadata.py b/src/calibre/ebooks/oeb/transforms/metadata.py index e6b03f78cd..90e1ca2e84 100644 --- a/src/calibre/ebooks/oeb/transforms/metadata.py +++ b/src/calibre/ebooks/oeb/transforms/metadata.py @@ -9,7 +9,8 @@ __docformat__ = 'restructuredtext en' import os, re from calibre.utils.date import isoformat, now from calibre import guess_type -from polyglot.builtins import iteritems, unicode_type +from polyglot.builtins import iteritems, unicode_type, filter +filter def meta_info_to_oeb_metadata(mi, m, log, override_input_metadata=False): diff --git a/src/calibre/ebooks/oeb/transforms/split.py b/src/calibre/ebooks/oeb/transforms/split.py index 7dea7e2b58..4de590465d 100644 --- a/src/calibre/ebooks/oeb/transforms/split.py +++ b/src/calibre/ebooks/oeb/transforms/split.py @@ -20,7 +20,7 @@ from calibre.ebooks.epub import rules from calibre.ebooks.oeb.base import (OEB_STYLES, XPNSMAP as NAMESPACES, urldefrag, rewrite_links, urlunquote, XHTML, urlnormalize) from calibre.ebooks.oeb.polish.split import do_split -from polyglot.builtins import iteritems, unicode_type, range +from polyglot.builtins import iteritems, unicode_type, range, map from css_selectors import Select, SelectorError XPath = functools.partial(_XPath, namespaces=NAMESPACES) diff --git a/src/calibre/ebooks/pdb/ereader/reader132.py b/src/calibre/ebooks/pdb/ereader/reader132.py index 8bf5387573..e650da2806 100644 --- a/src/calibre/ebooks/pdb/ereader/reader132.py +++ b/src/calibre/ebooks/pdb/ereader/reader132.py @@ -18,7 +18,7 @@ from calibre.ebooks import DRMError from calibre.ebooks.metadata.opf2 import OPFCreator from calibre.ebooks.pdb.ereader import EreaderError from calibre.ebooks.pdb.formatreader import FormatReader -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, range class HeaderRecord(object): @@ -99,7 +99,7 @@ class Reader132(FormatReader): assumed to be encoded as Windows-1252. The encoding is part of the eReader file spec and should always be this encoding. ''' - if number not in range(1, self.header_record.num_text_pages + 1): + if not (1 <= number <= self.header_record.num_text_pages): return '' return self.decompress_text(number) diff --git a/src/calibre/ebooks/pdb/ereader/reader202.py b/src/calibre/ebooks/pdb/ereader/reader202.py index 9d98a6d640..c3197f6cd6 100644 --- a/src/calibre/ebooks/pdb/ereader/reader202.py +++ b/src/calibre/ebooks/pdb/ereader/reader202.py @@ -14,7 +14,7 @@ from calibre import CurrentDir from calibre.ebooks.metadata.opf2 import OPFCreator from calibre.ebooks.pdb.formatreader import FormatReader from calibre.ebooks.pdb.ereader import EreaderError -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, range class HeaderRecord(object): @@ -76,7 +76,7 @@ class Reader202(FormatReader): assumed to be encoded as Windows-1252. The encoding is part of the eReader file spec and should always be this encoding. ''' - if number not in range(1, self.header_record.num_text_pages + 1): + if not (1 <= number <= self.header_record.num_text_pages): return '' return self.decompress_text(number) diff --git a/src/calibre/ebooks/pdb/haodoo/reader.py b/src/calibre/ebooks/pdb/haodoo/reader.py index cdacf7881e..1be279c882 100644 --- a/src/calibre/ebooks/pdb/haodoo/reader.py +++ b/src/calibre/ebooks/pdb/haodoo/reader.py @@ -16,6 +16,7 @@ from calibre import prepare_string_for_xml from calibre.ebooks.pdb.formatreader import FormatReader from calibre.ebooks.metadata import MetaInformation from calibre.ebooks.txt.processor import opf_writer, HTML_TEMPLATE +from polyglot.builtins import range, map BPDB_IDENT = b'BOOKMTIT' UPDB_IDENT = b'BOOKMTIU' @@ -62,9 +63,9 @@ class LegacyHeaderRecord(object): fields = raw.lstrip().replace(b'\x1b\x1b\x1b', b'\x1b').split(b'\x1b') self.title = fix_punct(fields[0].decode('cp950', 'replace')) self.num_records = int(fields[1]) - self.chapter_titles = map( + self.chapter_titles = list(map( lambda x: fix_punct(x.decode('cp950', 'replace').rstrip(b'\x00')), - fields[2:]) + fields[2:])) class UnicodeHeaderRecord(object): @@ -74,9 +75,9 @@ class UnicodeHeaderRecord(object): b'\x1b\x00').split(b'\x1b\x00') self.title = fix_punct(fields[0].decode('utf_16_le', 'ignore')) self.num_records = int(fields[1]) - self.chapter_titles = map( + self.chapter_titles = list(map( lambda x: fix_punct(x.decode('utf_16_le', 'replace').rstrip(b'\x00')), - fields[2].split(b'\r\x00\n\x00')) + fields[2].split(b'\r\x00\n\x00'))) class Reader(FormatReader): diff --git a/src/calibre/ebooks/pdb/header.py b/src/calibre/ebooks/pdb/header.py index efd0a1c3aa..80905cdb1f 100644 --- a/src/calibre/ebooks/pdb/header.py +++ b/src/calibre/ebooks/pdb/header.py @@ -35,7 +35,7 @@ class PdbHeaderReader(object): return re.sub(b'[^-A-Za-z0-9 ]+', b'_', self.stream.read(32).replace(b'\x00', b'')) def full_section_info(self, number): - if number not in range(0, self.num_sections): + if not (0 <= number < self.num_sections): raise ValueError('Not a valid section number %i' % number) self.stream.seek(78 + number * 8) @@ -44,14 +44,14 @@ class PdbHeaderReader(object): return (offset, flags, val) def section_offset(self, number): - if number not in range(0, self.num_sections): + if not (0 <= number < self.num_sections): raise ValueError('Not a valid section number %i' % number) self.stream.seek(78 + number * 8) return struct.unpack('>LBBBB', self.stream.read(8))[0] def section_data(self, number): - if number not in range(0, self.num_sections): + if not (0 <= number < self.num_sections): raise ValueError('Not a valid section number %i' % number) start = self.section_offset(number) diff --git a/src/calibre/ebooks/pdf/reflow.py b/src/calibre/ebooks/pdf/reflow.py index 105587e3e1..0367a2fd4e 100644 --- a/src/calibre/ebooks/pdf/reflow.py +++ b/src/calibre/ebooks/pdf/reflow.py @@ -11,7 +11,7 @@ from itertools import count from lxml import etree -from polyglot.builtins import unicode_type, range +from polyglot.builtins import unicode_type, range, map class Font(object): diff --git a/src/calibre/ebooks/rtf2xml/tokenize.py b/src/calibre/ebooks/rtf2xml/tokenize.py index 4247299b41..be7d6b2b00 100755 --- a/src/calibre/ebooks/rtf2xml/tokenize.py +++ b/src/calibre/ebooks/rtf2xml/tokenize.py @@ -16,7 +16,7 @@ import os, re from calibre.ebooks.rtf2xml import copy from calibre.utils.mreplace import MReplace from calibre.ptempfile import better_mktemp -from polyglot.builtins import codepoint_to_chr, range, filter +from polyglot.builtins import codepoint_to_chr, range, filter, map from . import open_for_read, open_for_write diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index a3cb32d8e0..2b94b5fb9b 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -35,7 +35,7 @@ from calibre.utils.date import UNDEFINED_DATE from calibre.utils.file_type_icons import EXT_MAP from calibre.utils.localization import get_lang from polyglot.builtins import (iteritems, itervalues, unicode_type, - string_or_bytes, range) + string_or_bytes, range, map) from polyglot import queue try: @@ -321,7 +321,7 @@ def default_author_link(): def available_heights(): desktop = QCoreApplication.instance().desktop() - return map(lambda x: x.height(), map(desktop.availableGeometry, range(desktop.screenCount()))) + return list(map(lambda x: x.height(), map(desktop.availableGeometry, range(desktop.screenCount())))) def available_height(): diff --git a/src/calibre/gui2/actions/annotate.py b/src/calibre/gui2/actions/annotate.py index 5be9babace..711ede7ccd 100644 --- a/src/calibre/gui2/actions/annotate.py +++ b/src/calibre/gui2/actions/annotate.py @@ -12,7 +12,7 @@ from calibre.gui2 import error_dialog from calibre.gui2.actions import InterfaceAction from calibre.devices.usbms.device import Device from calibre.gui2.dialogs.progress import ProgressDialog -from polyglot.builtins import iteritems, range +from polyglot.builtins import iteritems, range, map class Updater(QThread): # {{{ @@ -76,7 +76,7 @@ class FetchAnnotationsAction(InterfaceAction): rows = self.gui.library_view.selectionModel().selectedRows() if not rows or len(rows) < 2: rows = range(self.gui.library_view.model().rowCount(QModelIndex())) - ids = map(self.gui.library_view.model().id, rows) + ids = list(map(self.gui.library_view.model().id, rows)) return ids def get_formats(id): diff --git a/src/calibre/gui2/actions/device.py b/src/calibre/gui2/actions/device.py index ee8c4fb402..99769c5cba 100644 --- a/src/calibre/gui2/actions/device.py +++ b/src/calibre/gui2/actions/device.py @@ -12,7 +12,7 @@ from calibre.gui2.actions import InterfaceAction from calibre.gui2.dialogs.smartdevice import SmartdeviceDialog from calibre.utils.icu import primary_sort_key from calibre.utils.smtp import config as email_config -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, map class ShareConnMenu(QMenu): # {{{ @@ -111,7 +111,7 @@ class ShareConnMenu(QMenu): # {{{ (alias or account) + ' ' + _('(delete from library)')) self.email_to_menu.addAction(action1) self.email_to_and_delete_menu.addAction(action2) - map(self.memory.append, (action1, action2)) + tuple(map(self.memory.append, (action1, action2))) if default: ac = DeviceAction(dest, False, False, I('mail.png'), _('Email to') + ' ' +(alias or @@ -127,7 +127,7 @@ class ShareConnMenu(QMenu): # {{{ _('Select recipients') + ' ' + _('(delete from library)')) self.email_to_menu.addAction(action1) self.email_to_and_delete_menu.addAction(action2) - map(self.memory.append, (action1, action2)) + tuple(map(self.memory.append, (action1, action2))) tac1 = DeviceAction('choosemail:', False, False, I('mail.png'), _('Email to selected recipients...')) self.addAction(tac1) diff --git a/src/calibre/gui2/actions/edit_metadata.py b/src/calibre/gui2/actions/edit_metadata.py index 90d84e7d47..85d917c21f 100644 --- a/src/calibre/gui2/actions/edit_metadata.py +++ b/src/calibre/gui2/actions/edit_metadata.py @@ -26,7 +26,7 @@ from calibre.db.errors import NoSuchFormat from calibre.library.comments import merge_comments from calibre.ebooks.metadata.sources.prefs import msprefs from calibre.gui2.actions.show_quickview import get_quickview_action_plugin -from polyglot.builtins import iteritems, unicode_type +from polyglot.builtins import iteritems, unicode_type, map class EditMetadataAction(InterfaceAction): @@ -614,7 +614,7 @@ class EditMetadataAction(InterfaceAction): def formats_for_books(self, rows): m = self.gui.library_view.model() - return self.formats_for_ids(map(m.id, rows)) + return self.formats_for_ids(list(map(m.id, rows))) def books_to_merge(self, rows): src_ids = [] diff --git a/src/calibre/gui2/bars.py b/src/calibre/gui2/bars.py index 5abf4ce42f..f9f1eb73d3 100644 --- a/src/calibre/gui2/bars.py +++ b/src/calibre/gui2/bars.py @@ -19,7 +19,7 @@ except ImportError: from calibre.constants import isosx from calibre.gui2 import gprefs, native_menubar_defaults, config from calibre.gui2.throbber import ThrobbingButton -from polyglot.builtins import itervalues, unicode_type +from polyglot.builtins import itervalues, unicode_type, map, range class RevealBar(QWidget): # {{{ @@ -578,8 +578,7 @@ class BarsManager(QObject): QObject.__init__(self, parent) self.location_manager = location_manager - bars = [ToolBar(donate_action, location_manager, parent) for i in - range(3)] + bars = [ToolBar(donate_action, location_manager, parent) for i in range(3)] self.main_bars = tuple(bars[:2]) self.child_bars = tuple(bars[2:]) self.reveal_bar = RevealBar(parent) diff --git a/src/calibre/gui2/convert/xpath_wizard.py b/src/calibre/gui2/convert/xpath_wizard.py index 97f80e1c81..092a04e773 100644 --- a/src/calibre/gui2/convert/xpath_wizard.py +++ b/src/calibre/gui2/convert/xpath_wizard.py @@ -12,7 +12,7 @@ from PyQt5.Qt import QDialog, QWidget, Qt, QDialogButtonBox, QVBoxLayout from calibre.gui2.convert.xpath_wizard_ui import Ui_Form from calibre.gui2.convert.xexp_edit_ui import Ui_Form as Ui_Edit from calibre.utils.localization import localize_user_manual_link -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, map class WizardWidget(QWidget, Ui_Form): diff --git a/src/calibre/gui2/dialogs/scheduler.py b/src/calibre/gui2/dialogs/scheduler.py index 67a835a1fc..b7d50f2c52 100644 --- a/src/calibre/gui2/dialogs/scheduler.py +++ b/src/calibre/gui2/dialogs/scheduler.py @@ -26,7 +26,7 @@ from calibre.utils.date import utcnow from calibre.utils.network import internet_connected from calibre import force_unicode from calibre.utils.localization import get_lang, canonicalize_lang -from polyglot.builtins import iteritems, unicode_type, range +from polyglot.builtins import iteritems, unicode_type, range, map def convert_day_time_schedule(val): diff --git a/src/calibre/gui2/dialogs/search.py b/src/calibre/gui2/dialogs/search.py index b764b09ad3..625750b49f 100644 --- a/src/calibre/gui2/dialogs/search.py +++ b/src/calibre/gui2/dialogs/search.py @@ -19,7 +19,7 @@ from calibre.utils.icu import sort_key from calibre.utils.config import tweaks from calibre.utils.date import now from calibre.utils.localization import localize_user_manual_link -from polyglot.builtins import unicode_type, range +from polyglot.builtins import unicode_type, range, map box_values = {} last_matchkind = CONTAINS_MATCH diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index d058e396e0..94eb87506d 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -30,7 +30,7 @@ from calibre.constants import filesystem_encoding, DEBUG, config_dir from calibre.gui2.library import DEFAULT_SORT from calibre.utils.localization import calibre_langcode_to_name from calibre.library.coloring import color_row_key -from polyglot.builtins import iteritems, itervalues, unicode_type, string_or_bytes, range +from polyglot.builtins import iteritems, itervalues, unicode_type, string_or_bytes, range, map Counts = namedtuple('Counts', 'library_total total current') @@ -407,7 +407,7 @@ class BooksModel(QAbstractTableModel): # {{{ self.beginResetModel(), self.endResetModel() def delete_books(self, indices, permanent=False): - ids = map(self.id, indices) + ids = list(map(self.id, indices)) self.delete_books_by_id(ids, permanent=permanent) return ids diff --git a/src/calibre/gui2/metadata/diff.py b/src/calibre/gui2/metadata/diff.py index 9fdc166282..2c18ec8161 100644 --- a/src/calibre/gui2/metadata/diff.py +++ b/src/calibre/gui2/metadata/diff.py @@ -9,7 +9,7 @@ __copyright__ = '2013, Kovid Goyal ' import os, weakref from collections import OrderedDict, namedtuple from functools import partial -from polyglot.builtins import iteritems, itervalues, zip, unicode_type, range +from polyglot.builtins import iteritems, itervalues, zip, unicode_type, range, map from PyQt5.Qt import ( QDialog, QWidget, QGridLayout, QLabel, QToolButton, QIcon, @@ -692,7 +692,7 @@ if __name__ == '__main__': ids = sorted(db.all_ids(), reverse=True) ids = tuple(zip(ids[0::2], ids[1::2])) gm = partial(db.get_metadata, index_is_id=True, get_cover=True, cover_as_data=True) - get_metadata = lambda x:map(gm, ids[x]) + get_metadata = lambda x:list(map(gm, ids[x])) d = CompareMany(list(range(len(ids))), get_metadata, db.field_metadata, db=db) if d.exec_() == d.Accepted: for changed, mi in itervalues(d.accepted): diff --git a/src/calibre/gui2/preferences/behavior.py b/src/calibre/gui2/preferences/behavior.py index badbbbff24..fdc1b4499d 100644 --- a/src/calibre/gui2/preferences/behavior.py +++ b/src/calibre/gui2/preferences/behavior.py @@ -18,7 +18,7 @@ from calibre.ebooks import BOOK_EXTENSIONS from calibre.ebooks.oeb.iterator import is_supported from calibre.constants import iswindows from calibre.utils.icu import sort_key -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, range class OutputFormatSetting(Setting): diff --git a/src/calibre/gui2/preferences/columns.py b/src/calibre/gui2/preferences/columns.py index 8ee807c087..654c4bcdd4 100644 --- a/src/calibre/gui2/preferences/columns.py +++ b/src/calibre/gui2/preferences/columns.py @@ -14,7 +14,7 @@ from calibre.gui2.preferences import ConfigWidgetBase, test_widget from calibre.gui2.preferences.columns_ui import Ui_Form from calibre.gui2.preferences.create_custom_column import CreateCustomColumn from calibre.gui2 import error_dialog, question_dialog, ALL_COLUMNS -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, range, map class ConfigWidget(ConfigWidgetBase, Ui_Form): diff --git a/src/calibre/gui2/preferences/create_custom_column.py b/src/calibre/gui2/preferences/create_custom_column.py index 765a366c93..38fd20a80c 100644 --- a/src/calibre/gui2/preferences/create_custom_column.py +++ b/src/calibre/gui2/preferences/create_custom_column.py @@ -16,7 +16,7 @@ from PyQt5.Qt import ( ) from calibre.gui2 import error_dialog -from polyglot.builtins import iteritems, unicode_type +from polyglot.builtins import iteritems, unicode_type, range, map class CreateCustomColumn(QDialog): diff --git a/src/calibre/gui2/preferences/look_feel.py b/src/calibre/gui2/preferences/look_feel.py index 258ffcdc15..78a6828240 100644 --- a/src/calibre/gui2/preferences/look_feel.py +++ b/src/calibre/gui2/preferences/look_feel.py @@ -36,7 +36,7 @@ from calibre.gui2.preferences.coloring import EditRules from calibre.gui2.library.alternate_views import auto_height, CM_TO_INCH from calibre.gui2.widgets2 import Dialog from calibre.gui2.actions.show_quickview import get_quickview_action_plugin -from polyglot.builtins import iteritems, unicode_type +from polyglot.builtins import iteritems, unicode_type, map class BusyCursor(object): diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index a92ef4a1a1..013a45a902 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -20,7 +20,7 @@ from calibre.gui2.dialogs.confirm_delete import confirm from calibre.gui2.dialogs.saved_search_editor import SavedSearchEditor from calibre.gui2.dialogs.search import SearchDialog from calibre.utils.icu import primary_sort_key -from polyglot.builtins import unicode_type, string_or_bytes +from polyglot.builtins import unicode_type, string_or_bytes, map, range QT_HIDDEN_CLEAR_ACTION = '_q_qlineeditclearaction' diff --git a/src/calibre/gui2/store/config/chooser/adv_search_builder.py b/src/calibre/gui2/store/config/chooser/adv_search_builder.py index e9ffea2316..51f361d9d8 100644 --- a/src/calibre/gui2/store/config/chooser/adv_search_builder.py +++ b/src/calibre/gui2/store/config/chooser/adv_search_builder.py @@ -13,7 +13,7 @@ from PyQt5.Qt import (QDialog, QDialogButtonBox) from calibre.gui2.store.config.chooser.adv_search_builder_ui import Ui_Dialog from calibre.library.caches import CONTAINS_MATCH, EQUALS_MATCH from calibre.utils.localization import localize_user_manual_link -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, map class AdvSearchBuilderDialog(QDialog, Ui_Dialog): diff --git a/src/calibre/gui2/store/search/adv_search_builder.py b/src/calibre/gui2/store/search/adv_search_builder.py index 770ba2f53e..9ef2feb4e8 100644 --- a/src/calibre/gui2/store/search/adv_search_builder.py +++ b/src/calibre/gui2/store/search/adv_search_builder.py @@ -78,9 +78,9 @@ class AdvSearchBuilderDialog(QDialog, Ui_Dialog): self.mc = '=' else: self.mc = '~' - all, any, phrase, none = map(lambda x: unicode_type(x.text()), - (self.all, self.any, self.phrase, self.none)) - all, any, none = map(self.tokens, (all, any, none)) + all, any, phrase, none = list(map(lambda x: unicode_type(x.text()), + (self.all, self.any, self.phrase, self.none))) + all, any, none = list(map(self.tokens, (all, any, none))) phrase = phrase.strip() all = ' and '.join(all) any = ' or '.join(any) diff --git a/src/calibre/gui2/store/stores/mobileread/adv_search_builder.py b/src/calibre/gui2/store/stores/mobileread/adv_search_builder.py index 42b4b5f3b7..3faee1b094 100644 --- a/src/calibre/gui2/store/stores/mobileread/adv_search_builder.py +++ b/src/calibre/gui2/store/stores/mobileread/adv_search_builder.py @@ -67,9 +67,9 @@ class AdvSearchBuilderDialog(QDialog, Ui_Dialog): self.mc = '=' else: self.mc = '~' - all, any, phrase, none = map(lambda x: type(u'')(x.text()), - (self.all, self.any, self.phrase, self.none)) - all, any, none = map(self.tokens, (all, any, none)) + all, any, phrase, none = list(map(lambda x: type(u'')(x.text()), + (self.all, self.any, self.phrase, self.none))) + all, any, none = list(map(self.tokens, (all, any, none))) phrase = phrase.strip() all = ' and '.join(all) any = ' or '.join(any) diff --git a/src/calibre/gui2/tweak_book/boss.py b/src/calibre/gui2/tweak_book/boss.py index 27dc8af7aa..5856c50182 100644 --- a/src/calibre/gui2/tweak_book/boss.py +++ b/src/calibre/gui2/tweak_book/boss.py @@ -69,7 +69,7 @@ from calibre.utils.config import JSONConfig from calibre.utils.icu import numeric_sort_key from calibre.utils.imghdr import identify from calibre.utils.tdir_in_cache import tdir_in_cache -from polyglot.builtins import iteritems, itervalues, string_or_bytes +from polyglot.builtins import iteritems, itervalues, string_or_bytes, map from polyglot.urllib import urlparse _diff_dialogs = [] @@ -378,7 +378,7 @@ class Boss(QObject): if ef: if isinstance(ef, type('')): ef = [ef] - map(self.gui.file_list.request_edit, ef) + tuple(map(self.gui.file_list.request_edit, ef)) else: if tprefs['restore_book_state']: self.restore_book_edit_state() diff --git a/src/calibre/gui2/tweak_book/char_select.py b/src/calibre/gui2/tweak_book/char_select.py index f3528a950d..338d206734 100644 --- a/src/calibre/gui2/tweak_book/char_select.py +++ b/src/calibre/gui2/tweak_book/char_select.py @@ -22,7 +22,7 @@ from calibre.gui2.tweak_book import tprefs from calibre.gui2.tweak_book.widgets import Dialog, BusyCursor from calibre.utils.icu import safe_chr as chr from calibre.utils.unicode_names import character_name_from_code, points_for_word -from polyglot.builtins import unicode_type, range +from polyglot.builtins import unicode_type, range, map ROOT = QModelIndex() @@ -529,7 +529,7 @@ class CharModel(QAbstractListModel): def dropMimeData(self, md, action, row, column, parent): if action != Qt.MoveAction or not md.hasFormat('application/calibre_charcode_indices') or row < 0 or column != 0: return False - indices = map(int, bytes(md.data('application/calibre_charcode_indices')).decode('ascii').split(',')) + indices = list(map(int, bytes(md.data('application/calibre_charcode_indices')).decode('ascii').split(','))) codes = [self.chars[x] for x in indices] for x in indices: self.chars[x] = None diff --git a/src/calibre/gui2/tweak_book/diff/main.py b/src/calibre/gui2/tweak_book/diff/main.py index 86a7fe099d..70ffc188d2 100644 --- a/src/calibre/gui2/tweak_book/diff/main.py +++ b/src/calibre/gui2/tweak_book/diff/main.py @@ -24,7 +24,7 @@ from calibre.gui2.tweak_book.widgets import Dialog from calibre.gui2.widgets2 import HistoryLineEdit2 from calibre.utils.filenames import samefile from calibre.utils.icu import numeric_sort_key -from polyglot.builtins import iteritems, unicode_type +from polyglot.builtins import iteritems, unicode_type, map class BusyWidget(QWidget): # {{{ diff --git a/src/calibre/gui2/tweak_book/diff/view.py b/src/calibre/gui2/tweak_book/diff/view.py index ad84e45825..264a576b91 100644 --- a/src/calibre/gui2/tweak_book/diff/view.py +++ b/src/calibre/gui2/tweak_book/diff/view.py @@ -12,7 +12,7 @@ from math import ceil from functools import partial from collections import namedtuple, OrderedDict from difflib import SequenceMatcher -from polyglot.builtins import iteritems, unicode_type, zip, range, as_bytes +from polyglot.builtins import iteritems, unicode_type, zip, range, as_bytes, map import regex from PyQt5.Qt import ( diff --git a/src/calibre/gui2/tweak_book/editor/themes.py b/src/calibre/gui2/tweak_book/editor/themes.py index 46e1163814..7e7e0077b7 100644 --- a/src/calibre/gui2/tweak_book/editor/themes.py +++ b/src/calibre/gui2/tweak_book/editor/themes.py @@ -18,7 +18,7 @@ from calibre.gui2 import error_dialog from calibre.gui2.tweak_book import tprefs from calibre.gui2.tweak_book.editor import syntax_text_char_format from calibre.gui2.tweak_book.widgets import Dialog -from polyglot.builtins import iteritems, unicode_type, range +from polyglot.builtins import iteritems, unicode_type, range, map underline_styles = {'single', 'dash', 'dot', 'dash_dot', 'dash_dot_dot', 'wave', 'spell'} diff --git a/src/calibre/gui2/tweak_book/file_list.py b/src/calibre/gui2/tweak_book/file_list.py index 1cc0eb4222..a5716f644b 100644 --- a/src/calibre/gui2/tweak_book/file_list.py +++ b/src/calibre/gui2/tweak_book/file_list.py @@ -38,7 +38,7 @@ from calibre.gui2.tweak_book import ( from calibre.gui2.tweak_book.editor import syntax_from_mime from calibre.gui2.tweak_book.templates import template_for from calibre.utils.icu import numeric_sort_key -from polyglot.builtins import iteritems, itervalues, unicode_type, range, filter +from polyglot.builtins import iteritems, itervalues, unicode_type, range, filter, map from polyglot.binary import as_hex_unicode try: @@ -990,7 +990,7 @@ class MergeDialog(QDialog): # {{{ buttons = self.buttons = [QRadioButton(n) for n in names] buttons[0].setChecked(True) - map(w.l.addWidget, buttons) + tuple(map(w.l.addWidget, buttons)) sa.setWidget(w) self.resize(self.sizeHint() + QSize(150, 20)) diff --git a/src/calibre/gui2/tweak_book/search.py b/src/calibre/gui2/tweak_book/search.py index d83997b051..99e9caa239 100644 --- a/src/calibre/gui2/tweak_book/search.py +++ b/src/calibre/gui2/tweak_book/search.py @@ -34,7 +34,7 @@ from calibre.gui2.tweak_book.widgets import BusyCursor from calibre.gui2.widgets2 import FlowLayout, HistoryComboBox from calibre.utils.icu import primary_contains from calibre.ebooks.conversion.search_replace import REGEX_FLAGS, compile_regular_expression -from polyglot.builtins import iteritems, unicode_type, range, error_message, filter +from polyglot.builtins import iteritems, unicode_type, range, error_message, filter, map # The search panel {{{ diff --git a/src/calibre/gui2/tweak_book/widgets.py b/src/calibre/gui2/tweak_book/widgets.py index 2539c835f4..cbb122033f 100644 --- a/src/calibre/gui2/tweak_book/widgets.py +++ b/src/calibre/gui2/tweak_book/widgets.py @@ -27,10 +27,11 @@ from calibre.gui2.widgets2 import Dialog as BaseDialog, HistoryComboBox from calibre.utils.icu import primary_sort_key, sort_key, primary_contains, numeric_sort_key from calibre.utils.matcher import get_char, Matcher from calibre.gui2.complete2 import EditWithComplete -from polyglot.builtins import iteritems, unicode_type, zip, getcwd +from polyglot.builtins import iteritems, unicode_type, zip, getcwd, filter as ignore_me ROOT = QModelIndex() PARAGRAPH_SEPARATOR = '\u2029' +ignore_me class BusyCursor(object): diff --git a/src/calibre/gui2/viewer/gestures.py b/src/calibre/gui2/viewer/gestures.py index 027090e9ce..756a2eca49 100644 --- a/src/calibre/gui2/viewer/gestures.py +++ b/src/calibre/gui2/viewer/gestures.py @@ -13,7 +13,7 @@ from PyQt5.Qt import ( QContextMenuEvent, QDialog, QDialogButtonBox, QLabel, QVBoxLayout) from calibre.constants import iswindows -from polyglot.builtins import itervalues +from polyglot.builtins import itervalues, map touch_supported = False if iswindows and sys.getwindowsversion()[:2] >= (6, 2): # At least windows 7 diff --git a/src/calibre/gui2/wizard/__init__.py b/src/calibre/gui2/wizard/__init__.py index e137babbbe..8f4a4472d5 100644 --- a/src/calibre/gui2/wizard/__init__.py +++ b/src/calibre/gui2/wizard/__init__.py @@ -25,7 +25,7 @@ from calibre.utils.localization import localize_user_manual_link from calibre.utils.config import dynamic, prefs from calibre.gui2 import choose_dir, error_dialog -from polyglot.builtins import iteritems, unicode_type +from polyglot.builtins import iteritems, unicode_type, map if iswindows: winutil = plugins['winutil'][0] diff --git a/src/calibre/library/catalogs/epub_mobi_builder.py b/src/calibre/library/catalogs/epub_mobi_builder.py index f2d93c17e7..e6e4ebfb22 100644 --- a/src/calibre/library/catalogs/epub_mobi_builder.py +++ b/src/calibre/library/catalogs/epub_mobi_builder.py @@ -42,7 +42,7 @@ from calibre.utils.icu import capitalize, collation_order, sort_key from calibre.utils.img import scale_image from calibre.utils.localization import get_lang, lang_as_iso639_1 from calibre.utils.zipfile import ZipFile -from polyglot.builtins import unicode_type, iteritems +from polyglot.builtins import unicode_type, iteritems, map, zip NBSP = u'\u00a0' @@ -602,7 +602,7 @@ class CatalogBuilder(object): for rule in self.prefix_rules: # Literal comparison for Tags field if rule['field'].lower() == 'tags' or rule['field'] == _('Tags'): - if rule['pattern'].lower() in map(unicode_type.lower, record['tags']): + if rule['pattern'].lower() in tuple(map(unicode_type.lower, record['tags'])): if self.DEBUG and self.opts.verbose: self.opts.log.info(" %s '%s' by %s (%s: Tags includes '%s')" % (rule['prefix'], record['title'], diff --git a/src/calibre/library/database.py b/src/calibre/library/database.py index 7a898d566c..e2fd47390a 100644 --- a/src/calibre/library/database.py +++ b/src/calibre/library/database.py @@ -12,7 +12,7 @@ from calibre.ebooks.metadata import MetaInformation from calibre.ebooks.metadata import string_to_authors from calibre.utils.serialize import pickle_loads, pickle_dumps from calibre import isbytestring -from polyglot.builtins import unicode_type, filter +from polyglot.builtins import unicode_type, filter, map class Concatenate(object): @@ -868,7 +868,7 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; self.conn.commit() def refresh_ids(self, ids): - indices = map(self.index, ids) + indices = list(map(self.index, ids)) for id, idx in zip(ids, indices): row = self.conn.get('SELECT * from meta WHERE id=?', (id,), all=False) self.data[idx] = row diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index a5a7ce4b49..0a43ae247e 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -47,7 +47,7 @@ from calibre.db.lazy import FormatMetadata, FormatsList from calibre.db.categories import Tag, CATEGORY_SORTS from calibre.utils.localization import (canonicalize_lang, calibre_langcode_to_name) -from polyglot.builtins import iteritems, unicode_type, string_or_bytes +from polyglot.builtins import iteritems, unicode_type, string_or_bytes, map copyfile = os.link if hasattr(os, 'link') else shutil.copyfile SPOOL_SIZE = 30*1024*1024 diff --git a/src/calibre/srv/ajax.py b/src/calibre/srv/ajax.py index f4f3b68b61..340a7f0e6f 100644 --- a/src/calibre/srv/ajax.py +++ b/src/calibre/srv/ajax.py @@ -7,7 +7,7 @@ __license__ = 'GPL v3' __copyright__ = '2015, Kovid Goyal ' from functools import partial -from polyglot.builtins import iteritems, itervalues, unicode_type, zip, string_or_bytes +from polyglot.builtins import iteritems, itervalues, unicode_type, zip, string_or_bytes, map from itertools import cycle from calibre import force_unicode diff --git a/src/calibre/srv/books.py b/src/calibre/srv/books.py index 50dbada744..61bfee301e 100644 --- a/src/calibre/srv/books.py +++ b/src/calibre/srv/books.py @@ -22,7 +22,7 @@ from calibre.srv.render_book import RENDER_VERSION from calibre.srv.routes import endpoint, json from calibre.srv.utils import get_db, get_library_data from calibre.utils.serialize import json_dumps -from polyglot.builtins import as_unicode +from polyglot.builtins import as_unicode, map cache_lock = RLock() queued_jobs = {} diff --git a/src/calibre/srv/tests/auth.py b/src/calibre/srv/tests/auth.py index f839030f4f..801287a077 100644 --- a/src/calibre/srv/tests/auth.py +++ b/src/calibre/srv/tests/auth.py @@ -17,7 +17,7 @@ from calibre.ptempfile import TemporaryDirectory from calibre.srv.errors import HTTPForbidden from calibre.srv.tests.base import BaseTest, TestServer from calibre.srv.routes import endpoint, Router -from polyglot.builtins import iteritems, itervalues +from polyglot.builtins import iteritems, itervalues, map from polyglot import http_client from polyglot.http_cookie import CookieJar from polyglot.urllib import (build_opener, HTTPBasicAuthHandler, diff --git a/src/calibre/srv/tests/loop.py b/src/calibre/srv/tests/loop.py index 540958538a..9dbb707c97 100644 --- a/src/calibre/srv/tests/loop.py +++ b/src/calibre/srv/tests/loop.py @@ -18,7 +18,7 @@ from calibre.srv.tests.base import BaseTest, TestServer from calibre.ptempfile import TemporaryDirectory from calibre.utils.certgen import create_server_cert from calibre.utils.monotonic import monotonic -from polyglot.builtins import range, unicode_type +from polyglot.builtins import range, unicode_type, map from polyglot import http_client is_ci = os.environ.get('CI', '').lower() == 'true' diff --git a/src/calibre/utils/dbus_service.py b/src/calibre/utils/dbus_service.py index 8b26029788..e29d79c3ed 100644 --- a/src/calibre/utils/dbus_service.py +++ b/src/calibre/utils/dbus_service.py @@ -25,7 +25,7 @@ # from __future__ import absolute_import -from polyglot.builtins import itervalues +from polyglot.builtins import itervalues, zip __all__ = ('BusName', 'Object', 'PropertiesInterface', 'method', 'dbus_property', 'signal') __docformat__ = 'restructuredtext' diff --git a/src/calibre/utils/fonts/sfnt/subset.py b/src/calibre/utils/fonts/sfnt/subset.py index fdb391e885..4134674958 100644 --- a/src/calibre/utils/fonts/sfnt/subset.py +++ b/src/calibre/utils/fonts/sfnt/subset.py @@ -15,7 +15,7 @@ from functools import partial from calibre.utils.icu import safe_chr, ord_string from calibre.utils.fonts.sfnt.container import Sfnt from calibre.utils.fonts.sfnt.errors import UnsupportedFont, NoGlyphs -from polyglot.builtins import unicode_type, range, iteritems, itervalues +from polyglot.builtins import unicode_type, range, iteritems, itervalues, map # TrueType outlines {{{ @@ -265,7 +265,7 @@ def main(args): raise SystemExit(1) if opts.codes: parts = tuple(map(conv_code, parts)) - map(not_single, parts) + tuple(map(not_single, parts)) ranges.add(tuple(parts)) else: if opts.codes: diff --git a/src/calibre/utils/rapydscript.py b/src/calibre/utils/rapydscript.py index 6a79bd304d..25dc3810fe 100644 --- a/src/calibre/utils/rapydscript.py +++ b/src/calibre/utils/rapydscript.py @@ -22,7 +22,7 @@ from calibre.utils.filenames import atomic_rename from calibre.utils.terminal import ANSIStream from duktape import Context, JSError, to_python from lzma.xz import compress, decompress -from polyglot.builtins import itervalues, range, exec_path, raw_input, error_message, filter, getcwd +from polyglot.builtins import itervalues, range, exec_path, raw_input, error_message, filter, getcwd, zip from polyglot.queue import Empty, Queue COMPILER_PATH = 'rapydscript/compiler.js.xz' diff --git a/src/calibre/utils/zipfile.py b/src/calibre/utils/zipfile.py index be913a4ff8..d9c8d09806 100644 --- a/src/calibre/utils/zipfile.py +++ b/src/calibre/utils/zipfile.py @@ -11,7 +11,7 @@ from tempfile import SpooledTemporaryFile from calibre import sanitize_file_name from calibre.constants import filesystem_encoding from calibre.ebooks.chardet import detect -from polyglot.builtins import unicode_type, string_or_bytes, getcwd +from polyglot.builtins import unicode_type, string_or_bytes, getcwd, map try: import zlib # We may need its compression method @@ -1061,7 +1061,7 @@ class ZipFile: # or the MSB of the file time depending on the header type # and is used to check the correctness of the password. bytes = zef_file.read(12) - h = map(zd, bytes[0:12]) + h = list(map(zd, bytes[0:12])) if zinfo.flag_bits & 0x8: # compare against the file type from extended local headers check_byte = (zinfo._raw_time >> 8) & 0xff diff --git a/src/calibre/web/feeds/__init__.py b/src/calibre/web/feeds/__init__.py index 3a58c9470d..825cd5466f 100644 --- a/src/calibre/web/feeds/__init__.py +++ b/src/calibre/web/feeds/__init__.py @@ -12,7 +12,7 @@ from calibre.utils.logging import default_log from calibre import entity_to_unicode, strftime, force_unicode from calibre.utils.date import dt_factory, utcnow, local_tz from calibre.utils.cleantext import clean_ascii_chars, clean_xml_chars -from polyglot.builtins import unicode_type, string_or_bytes +from polyglot.builtins import unicode_type, string_or_bytes, map class Article(object): @@ -296,7 +296,7 @@ class FeedCollection(list): return None print('#feeds', len(self)) - print(map(len, self)) + print(list(map(len, self))) for f in self: dups = [] for a in f: @@ -311,7 +311,7 @@ class FeedCollection(list): self.duplicates = duplicates print(len(duplicates)) - print(map(len, self)) + print(list(map(len, self))) # raise def find_article(self, article):