py3: port uses of builtin functions that were changed to return iterators

This commit is contained in:
Kovid Goyal 2019-05-23 06:57:33 +05:30
parent b8832d5a31
commit 50af7ba51f
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
77 changed files with 191 additions and 125 deletions

View file

@ -13,7 +13,7 @@
'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 @@
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()

View file

@ -131,6 +131,12 @@ def file_has_errors(self, f):
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 @@ def file_has_errors(self, f):
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)))

View file

@ -13,7 +13,7 @@
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

View file

@ -10,7 +10,7 @@
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 = [

View file

@ -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

View file

@ -13,7 +13,7 @@
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 {{{

View file

@ -8,6 +8,7 @@
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)

View file

@ -14,7 +14,7 @@
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 @@ def check_unicode(txt):
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

View file

@ -16,6 +16,7 @@
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

View file

@ -23,7 +23,7 @@
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 @@ def nums(x):
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):
'''

View file

@ -20,7 +20,7 @@
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 @@ def upload_books(self, files, names, on_card=None, end_session=True,
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):
'''

View file

@ -15,7 +15,7 @@
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

View file

@ -12,7 +12,7 @@
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):

View file

@ -12,7 +12,7 @@
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',

View file

@ -18,7 +18,7 @@
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 @@ def run(self):
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

View file

@ -29,7 +29,7 @@
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 @@ def __call__(self):
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

View file

@ -19,7 +19,7 @@
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):

View file

@ -12,7 +12,7 @@
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):

View file

@ -14,7 +14,7 @@
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

View file

@ -207,8 +207,9 @@ def get_metadata(self, log, entries, title, authors, identifiers): # {{{
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 @@ def calc_source_relevance(mi): # {{{
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 @@ def to_metadata(self, log, entry): # {{{
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]

View file

@ -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)

View file

@ -12,7 +12,7 @@
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')

View file

@ -23,7 +23,7 @@
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):

View file

@ -14,7 +14,7 @@
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

View file

@ -14,7 +14,7 @@
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 <head> and <body> sections')
return root

View file

@ -14,7 +14,7 @@
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 @@ def set_spine(self, spine_items):
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:

View file

@ -10,6 +10,7 @@
from bisect import bisect
from calibre import guess_type as _guess_type, replace_entities
from polyglot.builtins import filter
def guess_type(x):

View file

@ -21,7 +21,7 @@
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]+$')

View file

@ -21,7 +21,7 @@
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 @@ def insert_metadata(self, mi):
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:

View file

@ -9,7 +9,8 @@
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):

View file

@ -20,7 +20,7 @@
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)

View file

@ -18,7 +18,7 @@
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 @@ def get_text_page(self, number):
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)

View file

@ -14,7 +14,7 @@
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 @@ def get_text_page(self, number):
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)

View file

@ -16,6 +16,7 @@
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 @@ def __init__(self, raw):
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 @@ def __init__(self, raw):
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):

View file

@ -35,7 +35,7 @@ def name(self):
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 @@ def full_section_info(self, number):
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)

View file

@ -11,7 +11,7 @@
from lxml import etree
from polyglot.builtins import unicode_type, range
from polyglot.builtins import unicode_type, range, map
class Font(object):

View file

@ -16,7 +16,7 @@
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

View file

@ -35,7 +35,7 @@
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():

View file

@ -12,7 +12,7 @@
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 @@ def get_ids_from_selected_rows():
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):

View file

@ -12,7 +12,7 @@
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 @@ def sk(account):
(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 @@ def sk(account):
_('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)

View file

@ -26,7 +26,7 @@
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 @@ def formats_for_ids(self, ids):
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 = []

View file

@ -19,7 +19,7 @@
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 @@ def __init__(self, donate_action, location_manager, parent):
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)

View file

@ -12,7 +12,7 @@
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):

View file

@ -26,7 +26,7 @@
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):

View file

@ -19,7 +19,7 @@
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

View file

@ -30,7 +30,7 @@
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 @@ def books_deleted(self):
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

View file

@ -9,7 +9,7 @@
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 @@ def keyPressEvent(self, ev):
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):

View file

@ -18,7 +18,7 @@
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):

View file

@ -14,7 +14,7 @@
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):

View file

@ -16,7 +16,7 @@
)
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):

View file

@ -36,7 +36,7 @@
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):

View file

@ -20,7 +20,7 @@
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'

View file

@ -13,7 +13,7 @@
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):

View file

@ -78,9 +78,9 @@ def adv_search_string(self):
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)

View file

@ -67,9 +67,9 @@ def adv_search_string(self):
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)

View file

@ -69,7 +69,7 @@
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 @@ def book_opened(self, job):
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()

View file

@ -22,7 +22,7 @@
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 @@ def mimeData(self, indexes):
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

View file

@ -24,7 +24,7 @@
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): # {{{

View file

@ -12,7 +12,7 @@
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 (

View file

@ -18,7 +18,7 @@
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'}

View file

@ -38,7 +38,7 @@
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 @@ def __init__(self, names, parent=None):
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))

View file

@ -34,7 +34,7 @@
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 {{{

View file

@ -27,10 +27,11 @@
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):

View file

@ -13,7 +13,7 @@
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

View file

@ -25,7 +25,7 @@
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]

View file

@ -42,7 +42,7 @@
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 @@ def _log_prefix_rule_match_info(rule, record, matched):
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'],

View file

@ -12,7 +12,7 @@
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 @@ def refresh(self, sort_field, ascending):
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

View file

@ -47,7 +47,7 @@
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

View file

@ -7,7 +7,7 @@
__copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
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

View file

@ -22,7 +22,7 @@
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 = {}

View file

@ -17,7 +17,7 @@
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,

View file

@ -18,7 +18,7 @@
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'

View file

@ -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'

View file

@ -15,7 +15,7 @@
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 conv_code(c):
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:

View file

@ -22,7 +22,7 @@
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'

View file

@ -11,7 +11,7 @@
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 @@ def open(self, name, mode="r", pwd=None):
# 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

View file

@ -12,7 +12,7 @@
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 @@ def in_set(s, a):
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 @@ def in_set(s, a):
self.duplicates = duplicates
print(len(duplicates))
print(map(len, self))
print(list(map(len, self)))
# raise
def find_article(self, article):