py3: port filter()

This commit is contained in:
Kovid Goyal 2019-04-10 16:46:50 +05:30
parent 7f4728e29c
commit 34b86d8227
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
63 changed files with 109 additions and 103 deletions

View File

@ -64,7 +64,7 @@ class ElPais(BasicNewsRecipe):
def preprocess_html(self, soup): def preprocess_html(self, soup):
for img in soup.findAll('img', srcset=True): for img in soup.findAll('img', srcset=True):
try: try:
img['src'] = filter(None, img['srcset'].split())[0] img['src'] = list(filter(None, img['srcset'].split()))[0]
except IndexError: except IndexError:
continue continue
return soup return soup

View File

@ -102,7 +102,7 @@ class HurriyetDailyNews_en(BasicNewsRecipe):
regex = re.compile('rmRootLink', re.IGNORECASE) regex = re.compile('rmRootLink', re.IGNORECASE)
links = soup.findAll('a', {'class': regex}) links = soup.findAll('a', {'class': regex})
filtered_links = filter(include_link, links) filtered_links = list(filter(include_link, links))
self._p(' all sections: ' + ', '.join(map(self.text, links))) self._p(' all sections: ' + ', '.join(map(self.text, links)))
self._p(' filtered sections: ' + self._p(' filtered sections: ' +
', '.join(map(self.text, filtered_links))) ', '.join(map(self.text, filtered_links)))

View File

@ -5,7 +5,7 @@ __docformat__ = 'restructuredtext en'
import sys, os, re, time, random, warnings import sys, os, re, time, random, warnings
from polyglot.builtins import (builtins, codepoint_to_chr, iteritems, from polyglot.builtins import (builtins, codepoint_to_chr, iteritems,
itervalues, unicode_type, range) itervalues, unicode_type, range, filter)
builtins.__dict__['dynamic_property'] = lambda func: func(None) builtins.__dict__['dynamic_property'] = lambda func: func(None)
from math import floor from math import floor
from functools import partial from functools import partial
@ -376,9 +376,9 @@ USER_AGENT_MOBILE = 'Mozilla/5.0 (Windows; U; Windows CE 5.1; rv:1.8.1a3) Gecko/
def random_user_agent(choose=None, allow_ie=True): def random_user_agent(choose=None, allow_ie=True):
from calibre.utils.random_ua import common_user_agents from calibre.utils.random_ua import common_user_agents
ua_list = common_user_agents() ua_list = common_user_agents()
ua_list = filter(lambda x: 'Mobile/' not in x, ua_list) ua_list = list(filter(lambda x: 'Mobile/' not in x, ua_list))
if not allow_ie: if not allow_ie:
ua_list = filter(lambda x: 'Trident/' not in x and 'Edge/' not in x, ua_list) ua_list = list(filter(lambda x: 'Trident/' not in x and 'Edge/' not in x, ua_list))
return random.choice(ua_list) if choose is None else ua_list[choose] return random.choice(ua_list) if choose is None else ua_list[choose]

View File

@ -11,7 +11,7 @@ import os, traceback, random, shutil, operator
from io import BytesIO from io import BytesIO
from collections import defaultdict, Set, MutableSet from collections import defaultdict, Set, MutableSet
from functools import wraps, partial from functools import wraps, partial
from polyglot.builtins import iteritems, itervalues, unicode_type, zip, string_or_bytes, cmp from polyglot.builtins import iteritems, itervalues, unicode_type, zip, string_or_bytes, cmp, filter
from time import time from time import time
from calibre import isbytestring, as_unicode from calibre import isbytestring, as_unicode

View File

@ -16,7 +16,7 @@ from calibre.db.cache import Cache
from calibre.constants import filesystem_encoding from calibre.constants import filesystem_encoding
from calibre.utils.date import utcfromtimestamp from calibre.utils.date import utcfromtimestamp
from calibre import isbytestring, force_unicode from calibre import isbytestring, force_unicode
from polyglot.builtins import iteritems from polyglot.builtins import iteritems, filter
NON_EBOOK_EXTENSIONS = frozenset([ NON_EBOOK_EXTENSIONS = frozenset([
'jpg', 'jpeg', 'gif', 'png', 'bmp', 'jpg', 'jpeg', 'gif', 'png', 'bmp',
@ -184,7 +184,7 @@ class Restore(Thread):
def process_dir(self, dirpath, filenames, book_id): def process_dir(self, dirpath, filenames, book_id):
book_id = int(book_id) book_id = int(book_id)
formats = filter(self.is_ebook_file, filenames) formats = list(filter(self.is_ebook_file, filenames))
fmts = [os.path.splitext(x)[1][1:].upper() for x in formats] fmts = [os.path.splitext(x)[1][1:].upper() for x in formats]
sizes = [os.path.getsize(os.path.join(dirpath, x)) for x in formats] sizes = [os.path.getsize(os.path.join(dirpath, x)) for x in formats]
names = [os.path.splitext(x)[0] for x in formats] names = [os.path.splitext(x)[0] for x in formats]

View File

@ -9,7 +9,7 @@ __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
import os, errno, sys, re import os, errno, sys, re
from locale import localeconv from locale import localeconv
from collections import OrderedDict, namedtuple from collections import OrderedDict, namedtuple
from polyglot.builtins import iteritems, itervalues, map, unicode_type, string_or_bytes from polyglot.builtins import iteritems, itervalues, map, unicode_type, string_or_bytes, filter
from threading import Lock from threading import Lock
from calibre import as_unicode, prints from calibre import as_unicode, prints

View File

@ -15,7 +15,7 @@ from ctypes import (
) )
from ctypes.wintypes import DWORD, WORD, ULONG, LPCWSTR, HWND, BOOL, LPWSTR, UINT, BYTE, HANDLE, USHORT from ctypes.wintypes import DWORD, WORD, ULONG, LPCWSTR, HWND, BOOL, LPWSTR, UINT, BYTE, HANDLE, USHORT
from pprint import pprint, pformat from pprint import pprint, pformat
from polyglot.builtins import iteritems, itervalues, map from polyglot.builtins import iteritems, itervalues, map, filter
from calibre import prints, as_unicode from calibre import prints, as_unicode
@ -677,7 +677,7 @@ def get_volume_pathnames(volume_id, buf=None):
continue continue
raise raise
ans = wstring_at(buf, bufsize.value) ans = wstring_at(buf, bufsize.value)
return buf, filter(None, ans.split('\0')) return buf, list(filter(None, ans.split('\0')))
# }}} # }}}
@ -979,7 +979,7 @@ def get_device_languages(hub_handle, device_port, buf=None):
if dtype != 0x03: if dtype != 0x03:
raise WindowsError('Invalid datatype for string descriptor: 0x%x' % dtype) raise WindowsError('Invalid datatype for string descriptor: 0x%x' % dtype)
data = cast(data.String, POINTER(USHORT*(sz//2))) data = cast(data.String, POINTER(USHORT*(sz//2)))
return buf, filter(None, data.contents) return buf, list(filter(None, data.contents))
# }}} # }}}

View File

@ -12,7 +12,7 @@ from calibre.customize.conversion import (OutputFormatPlugin,
OptionRecommendation) OptionRecommendation)
from calibre.ptempfile import TemporaryDirectory from calibre.ptempfile import TemporaryDirectory
from calibre import CurrentDir from calibre import CurrentDir
from polyglot.builtins import unicode_type from polyglot.builtins import unicode_type, filter
block_level_tags = ( block_level_tags = (
'address', 'address',
@ -432,7 +432,7 @@ class EPUBOutput(OutputFormatPlugin):
br.tag = XHTML('p') br.tag = XHTML('p')
br.text = u'\u00a0' br.text = u'\u00a0'
style = br.get('style', '').split(';') style = br.get('style', '').split(';')
style = filter(None, map(lambda x: x.strip(), style)) style = list(filter(None, map(lambda x: x.strip(), style)))
style.append('margin:0pt; border:0pt') style.append('margin:0pt; border:0pt')
# If the prior tag is a block (including a <br> we replaced) # If the prior tag is a block (including a <br> we replaced)
# then this <br> replacement should have a 1-line height. # then this <br> replacement should have a 1-line height.

View File

@ -5,7 +5,7 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
import os, glob, re, textwrap import os, glob, re, textwrap
from calibre.customize.conversion import InputFormatPlugin, OptionRecommendation from calibre.customize.conversion import InputFormatPlugin, OptionRecommendation
from polyglot.builtins import iteritems from polyglot.builtins import iteritems, filter
border_style_map = { border_style_map = {
'single' : 'solid', 'single' : 'solid',

View File

@ -11,7 +11,7 @@ from operator import itemgetter
from lxml import etree from lxml import etree
from calibre.utils.icu import partition_by_first_letter, sort_key from calibre.utils.icu import partition_by_first_letter, sort_key
from polyglot.builtins import iteritems, unicode_type from polyglot.builtins import iteritems, unicode_type, filter
def get_applicable_xe_fields(index, xe_fields, XPath, expand): def get_applicable_xe_fields(index, xe_fields, XPath, expand):
@ -249,7 +249,7 @@ def polish_index_markup(index, blocks):
if a: if a:
text = etree.tostring(a[0], method='text', with_tail=False, encoding=unicode_type).strip() text = etree.tostring(a[0], method='text', with_tail=False, encoding=unicode_type).strip()
if ':' in text: if ':' in text:
path_map[block] = parts = filter(None, (x.strip() for x in text.split(':'))) path_map[block] = parts = list(filter(None, (x.strip() for x in text.split(':'))))
if len(parts) > 1: if len(parts) > 1:
split_up_block(block, a[0], text, parts, ldict) split_up_block(block, a[0], text, parts, ldict)
else: else:

View File

@ -10,7 +10,7 @@ from lxml.html.builder import TABLE, TR, TD
from calibre.ebooks.docx.block_styles import inherit, read_shd as rs, read_border, binary_property, border_props, ParagraphStyle, border_to_css from calibre.ebooks.docx.block_styles import inherit, read_shd as rs, read_border, binary_property, border_props, ParagraphStyle, border_to_css
from calibre.ebooks.docx.char_styles import RunStyle from calibre.ebooks.docx.char_styles import RunStyle
from polyglot.builtins import iteritems, itervalues, range from polyglot.builtins import iteritems, itervalues, range, filter
# Read from XML {{{ # Read from XML {{{
read_shd = rs read_shd = rs

View File

@ -29,7 +29,7 @@ from calibre.ebooks.docx.fields import Fields
from calibre.ebooks.docx.settings import Settings from calibre.ebooks.docx.settings import Settings
from calibre.ebooks.metadata.opf2 import OPFCreator from calibre.ebooks.metadata.opf2 import OPFCreator
from calibre.utils.localization import canonicalize_lang, lang_as_iso639_1 from calibre.utils.localization import canonicalize_lang, lang_as_iso639_1
from polyglot.builtins import iteritems, itervalues from polyglot.builtins import iteritems, itervalues, filter
NBSP = '\xa0' NBSP = '\xa0'

View File

@ -15,7 +15,7 @@ from lxml import etree
from calibre.ebooks import parse_css_length from calibre.ebooks import parse_css_length
from calibre.ebooks.docx.writer.utils import convert_color, int_or_zero from calibre.ebooks.docx.writer.utils import convert_color, int_or_zero
from calibre.utils.localization import lang_as_iso639_1 from calibre.utils.localization import lang_as_iso639_1
from polyglot.builtins import iteritems, unicode_type from polyglot.builtins import iteritems, unicode_type, filter
from tinycss.css21 import CSS21Parser from tinycss.css21 import CSS21Parser
css_parser = CSS21Parser() css_parser = CSS21Parser()
@ -702,7 +702,7 @@ class StylesManager(object):
counts[s] += sum(1 for b in blocks if not b.is_empty()) counts[s] += sum(1 for b in blocks if not b.is_empty())
for i, heading_tag in enumerate(sorted(heading_styles)): for i, heading_tag in enumerate(sorted(heading_styles)):
styles = sorted((smap[k] for k in heading_styles[heading_tag]), key=counts.__getitem__) styles = sorted((smap[k] for k in heading_styles[heading_tag]), key=counts.__getitem__)
styles = filter(lambda s:s.outline_level is None, styles) styles = list(filter(lambda s:s.outline_level is None, styles))
if styles: if styles:
heading_style = styles[-1] heading_style = styles[-1]
heading_style.outline_level = i heading_style.outline_level = i

View File

@ -11,7 +11,7 @@ import time
from calibre.constants import __appname__, __version__ from calibre.constants import __appname__, __version__
from calibre import strftime, prepare_string_for_xml as xml from calibre import strftime, prepare_string_for_xml as xml
from calibre.utils.date import parse_date from calibre.utils.date import parse_date
from polyglot.builtins import unicode_type from polyglot.builtins import unicode_type, filter
SONY_METADATA = u'''\ SONY_METADATA = u'''\
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>

View File

@ -10,6 +10,7 @@ import os
from contextlib import closing from contextlib import closing
from calibre.customize import FileTypePlugin from calibre.customize import FileTypePlugin
from polyglot.builtins import filter
def is_comic(list_of_names): def is_comic(list_of_names):

View File

@ -8,6 +8,7 @@ import re
from collections import deque from collections import deque
from calibre.utils.icu import capitalize, lower, upper from calibre.utils.icu import capitalize, lower, upper
from polyglot.builtins import filter
def cap_author_token(token): def cap_author_token(token):
@ -142,7 +143,7 @@ def map_authors(authors, rules=()):
ans = [] ans = []
for a in authors: for a in authors:
ans.extend(apply_rules(a, rules)) ans.extend(apply_rules(a, rules))
return uniq(filter(None, ans)) return uniq(list(filter(None, ans)))
def find_tests(): def find_tests():

View File

@ -14,7 +14,7 @@ from calibre.ebooks.metadata.book import (SC_COPYABLE_FIELDS,
TOP_LEVEL_IDENTIFIERS, ALL_METADATA_FIELDS) TOP_LEVEL_IDENTIFIERS, ALL_METADATA_FIELDS)
from calibre.library.field_metadata import FieldMetadata from calibre.library.field_metadata import FieldMetadata
from calibre.utils.icu import sort_key from calibre.utils.icu import sort_key
from polyglot.builtins import iteritems, unicode_type from polyglot.builtins import iteritems, unicode_type, filter
# Special sets used to optimize the performance of getting and setting # Special sets used to optimize the performance of getting and setting
# attributes on Metadata objects # attributes on Metadata objects

View File

@ -20,7 +20,7 @@ from calibre.utils.formatter import EvalFormatter
from calibre.utils.date import is_date_undefined from calibre.utils.date import is_date_undefined
from calibre.utils.localization import calibre_langcode_to_name from calibre.utils.localization import calibre_langcode_to_name
from calibre.utils.serialize import json_dumps from calibre.utils.serialize import json_dumps
from polyglot.builtins import unicode_type from polyglot.builtins import unicode_type, filter
from polyglot.binary import as_hex_unicode from polyglot.binary import as_hex_unicode
default_sort = ('title', 'title_sort', 'authors', 'author_sort', 'series', 'rating', 'pubdate', 'tags', 'publisher', 'identifiers') default_sort = ('title', 'title_sort', 'authors', 'author_sort', 'series', 'rating', 'pubdate', 'tags', 'publisher', 'identifiers')

View File

@ -18,7 +18,7 @@ from calibre.utils.config_base import tweaks
from calibre.utils.date import parse_only_date from calibre.utils.date import parse_only_date
from calibre.utils.localization import canonicalize_lang from calibre.utils.localization import canonicalize_lang
from calibre.utils.imghdr import identify from calibre.utils.imghdr import identify
from polyglot.builtins import unicode_type from polyglot.builtins import unicode_type, filter
from polyglot.binary import as_base64_bytes, from_base64_bytes from polyglot.binary import as_base64_bytes, from_base64_bytes

View File

@ -8,7 +8,7 @@ import json
import re import re
from collections import defaultdict, namedtuple from collections import defaultdict, namedtuple
from functools import wraps from functools import wraps
from polyglot.builtins import iteritems, map from polyglot.builtins import iteritems, map, filter
from lxml import etree from lxml import etree
@ -411,7 +411,7 @@ def set_languages(root, prefixes, refines, languages):
val = (lang.text or '').strip() val = (lang.text or '').strip()
if val: if val:
opf_languages.append(val) opf_languages.append(val)
languages = filter(lambda x: x and x != 'und', normalize_languages(opf_languages, languages)) languages = list(filter(lambda x: x and x != 'und', normalize_languages(opf_languages, languages)))
if not languages: if not languages:
# EPUB spec says dc:language is required # EPUB spec says dc:language is required
languages = ['und'] languages = ['und']
@ -688,7 +688,7 @@ def read_tags(root, prefixes, refines):
for dc in XPath('./opf:metadata/dc:subject')(root): for dc in XPath('./opf:metadata/dc:subject')(root):
if dc.text: if dc.text:
ans.extend(map(normalize_whitespace, dc.text.split(','))) ans.extend(map(normalize_whitespace, dc.text.split(',')))
return uniq(filter(None, ans)) return uniq(list(filter(None, ans)))
def set_tags(root, prefixes, refines, val): def set_tags(root, prefixes, refines, val):
@ -696,7 +696,7 @@ def set_tags(root, prefixes, refines, val):
remove_element(dc, refines) remove_element(dc, refines)
m = XPath('./opf:metadata')(root)[0] m = XPath('./opf:metadata')(root)[0]
if val: if val:
val = uniq(filter(None, val)) val = uniq(list(filter(None, val)))
for x in val: for x in val:
c = m.makeelement(DC('subject')) c = m.makeelement(DC('subject'))
c.text = normalize_whitespace(x) c.text = normalize_whitespace(x)

View File

@ -11,7 +11,7 @@ import re
from calibre import force_unicode from calibre import force_unicode
from calibre.ebooks.metadata import MetaInformation from calibre.ebooks.metadata import MetaInformation
from polyglot.builtins import codepoint_to_chr, string_or_bytes, unicode_type, int_to_byte from polyglot.builtins import codepoint_to_chr, string_or_bytes, unicode_type, int_to_byte, filter
title_pat = re.compile(br'\{\\info.*?\{\\title(.*?)(?<!\\)\}', re.DOTALL) title_pat = re.compile(br'\{\\info.*?\{\\title(.*?)(?<!\\)\}', re.DOTALL)
author_pat = re.compile(br'\{\\info.*?\{\\author(.*?)(?<!\\)\}', re.DOTALL) author_pat = re.compile(br'\{\\info.*?\{\\author(.*?)(?<!\\)\}', re.DOTALL)

View File

@ -5,6 +5,7 @@
from __future__ import (unicode_literals, division, absolute_import, from __future__ import (unicode_literals, division, absolute_import,
print_function) print_function)
from collections import deque from collections import deque
from polyglot.builtins import filter
def compile_pat(pat): def compile_pat(pat):
@ -88,7 +89,7 @@ def apply_rules(tag, rules):
ans.append(icu_upper(tag)) ans.append(icu_upper(tag))
break break
if ac == 'split': if ac == 'split':
stags = filter(None, [x.strip() for x in tag.split(rule['replace'])]) stags = list(filter(None, (x.strip() for x in tag.split(rule['replace']))))
if stags: if stags:
if stags[0] == tag: if stags[0] == tag:
ans.append(tag) ans.append(tag)
@ -121,7 +122,7 @@ def map_tags(tags, rules=()):
ans = [] ans = []
for t in tags: for t in tags:
ans.extend(apply_rules(t, rules)) ans.extend(apply_rules(t, rules))
return uniq(filter(None, ans)) return uniq(list(filter(None, ans)))
def find_tests(): def find_tests():
@ -167,6 +168,7 @@ def find_tests():
run(rule('split', 'a b', ' ', 'has'), 'a b', 'a,b') run(rule('split', 'a b', ' ', 'has'), 'a b', 'a,b')
return unittest.defaultTestLoader.loadTestsFromTestCase(TestTagMapper) return unittest.defaultTestLoader.loadTestsFromTestCase(TestTagMapper)
if __name__ == '__main__': if __name__ == '__main__':
from calibre.utils.run_tests import run_cli from calibre.utils.run_tests import run_cli
run_cli(find_tests()) run_cli(find_tests())

View File

@ -14,6 +14,7 @@ from calibre.ebooks.oeb.base import OPF
from calibre.ebooks.oeb.polish.utils import guess_type from calibre.ebooks.oeb.polish.utils import guess_type
from calibre.spell import parse_lang_code from calibre.spell import parse_lang_code
from calibre.utils.localization import lang_as_iso639_1 from calibre.utils.localization import lang_as_iso639_1
from polyglot.builtins import filter
PARSER = etree.XMLParser(recover=True, no_network=True) PARSER = etree.XMLParser(recover=True, no_network=True)

View File

@ -19,7 +19,7 @@ from calibre.ebooks.metadata.book.base import Metadata
from calibre.ebooks.metadata.opf2 import dump_dict from calibre.ebooks.metadata.opf2 import dump_dict
from calibre.utils.date import parse_date, isoformat, now from calibre.utils.date import parse_date, isoformat, now
from calibre.utils.localization import canonicalize_lang, lang_as_iso639_1 from calibre.utils.localization import canonicalize_lang, lang_as_iso639_1
from polyglot.builtins import iteritems, string_or_bytes from polyglot.builtins import iteritems, string_or_bytes, filter
_xml_declaration = re.compile(r'<\?xml[^<>]+encoding\s*=\s*[\'"](.*?)[\'"][^<>]*>', re.IGNORECASE) _xml_declaration = re.compile(r'<\?xml[^<>]+encoding\s*=\s*[\'"](.*?)[\'"][^<>]*>', re.IGNORECASE)

View File

@ -9,6 +9,7 @@ __copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>'
from struct import unpack_from from struct import unpack_from
from calibre.ebooks.mobi.debug.headers import EXTHHeader from calibre.ebooks.mobi.debug.headers import EXTHHeader
from polyglot.builtins import filter
class ContainerHeader(object): class ContainerHeader(object):
@ -43,7 +44,7 @@ class ContainerHeader(object):
def add_hrefs(self, data): def add_hrefs(self, data):
# kindlegen inserts a trailing | after the last href # kindlegen inserts a trailing | after the last href
self.hrefs = filter(None, data.decode('utf-8').split('|')) self.hrefs = list(filter(None, data.decode('utf-8').split('|')))
def __str__(self): def __str__(self):
ans = [('*'*10) + ' Container Header ' + ('*'*10)] ans = [('*'*10) + ' Container Header ' + ('*'*10)]
@ -64,4 +65,3 @@ class ContainerHeader(object):
if len(self.bytes_after_exth) != self.null_bytes_after_exth: if len(self.bytes_after_exth) != self.null_bytes_after_exth:
a('Non-null bytes present after EXTH header!!!!') a('Non-null bytes present after EXTH header!!!!')
return '\n'.join(ans) + '\n\n' + str(self.exth) + '\n\n' + ('Title: %s' % self.title) return '\n'.join(ans) + '\n\n' + str(self.exth) + '\n\n' + ('Title: %s' % self.title)

View File

@ -19,7 +19,7 @@ from odf.namespaces import TEXTNS as odTEXTNS
from calibre import CurrentDir, walk from calibre import CurrentDir, walk
from calibre.ebooks.oeb.base import _css_logger from calibre.ebooks.oeb.base import _css_logger
from polyglot.builtins import unicode_type, string_or_bytes from polyglot.builtins import unicode_type, string_or_bytes, filter
class Extract(ODF2XHTML): class Extract(ODF2XHTML):
@ -129,8 +129,8 @@ class Extract(ODF2XHTML):
if (len(div1), len(div2)) != (1, 1): if (len(div1), len(div2)) != (1, 1):
continue continue
cls = div1.get('class', '') cls = div1.get('class', '')
first_rules = filter(None, [self.get_css_for_class(x) for x in first_rules = list(filter(None, [self.get_css_for_class(x) for x in
cls.split()]) cls.split()]))
has_align = False has_align = False
for r in first_rules: for r in first_rules:
if r.style.getProperty(u'text-align') is not None: if r.style.getProperty(u'text-align') is not None:
@ -139,8 +139,8 @@ class Extract(ODF2XHTML):
if not has_align: if not has_align:
aval = None aval = None
cls = div2.get(u'class', u'') cls = div2.get(u'class', u'')
rules = filter(None, [self.get_css_for_class(x) for x in rules = list(filter(None, [self.get_css_for_class(x) for x in
cls.split()]) cls.split()]))
for r in rules: for r in rules:
ml = r.style.getPropertyCSSValue(u'margin-left') or ml ml = r.style.getPropertyCSSValue(u'margin-left') or ml
mr = r.style.getPropertyCSSValue(u'margin-right') or mr mr = r.style.getPropertyCSSValue(u'margin-right') or mr

View File

@ -22,7 +22,7 @@ from calibre.ebooks.oeb.parse_utils import (barename, XHTML_NS, RECOVER_PARSER,
namespace, XHTML, parse_html, NotHTML) namespace, XHTML, parse_html, NotHTML)
from calibre.utils.cleantext import clean_xml_chars from calibre.utils.cleantext import clean_xml_chars
from calibre.utils.short_uuid import uuid4 from calibre.utils.short_uuid import uuid4
from polyglot.builtins import iteritems, unicode_type, string_or_bytes, range, itervalues from polyglot.builtins import iteritems, unicode_type, string_or_bytes, range, itervalues, filter
from polyglot.urllib import unquote, urldefrag, urljoin, urlparse, urlunparse from polyglot.urllib import unquote, urldefrag, urljoin, urlparse, urlunparse
from calibre.utils.icu import numeric_sort_key from calibre.utils.icu import numeric_sort_key
@ -2008,7 +2008,7 @@ def rel_href(base_href, href):
return href return href
if '/' not in base_href: if '/' not in base_href:
return href return href
base = filter(lambda x: x and x != '.', os.path.dirname(os.path.normpath(base_href)).replace(os.sep, '/').split('/')) base = list(filter(lambda x: x and x != '.', os.path.dirname(os.path.normpath(base_href)).replace(os.sep, '/').split('/')))
while True: while True:
try: try:
idx = base.index('..') idx = base.index('..')

View File

@ -18,7 +18,7 @@ from calibre.ebooks.oeb.normalize_css import normalize_filter_css, normalizers
from calibre.ebooks.oeb.polish.pretty import pretty_script_or_style, pretty_xml_tree, serialize from calibre.ebooks.oeb.polish.pretty import pretty_script_or_style, pretty_xml_tree, serialize
from calibre.utils.icu import numeric_sort_key from calibre.utils.icu import numeric_sort_key
from css_selectors import Select, SelectorError from css_selectors import Select, SelectorError
from polyglot.builtins import iteritems, itervalues, unicode_type from polyglot.builtins import iteritems, itervalues, unicode_type, filter
def filter_used_rules(rules, log, select): def filter_used_rules(rules, log, select):
@ -325,8 +325,7 @@ def remove_property_value(prop, predicate):
values of the property would be removed, the property is removed from its values of the property would be removed, the property is removed from its
parent instead. Note that this means the property must have a parent (a parent instead. Note that this means the property must have a parent (a
CSSStyleDeclaration). ''' CSSStyleDeclaration). '''
removed_vals = [] removed_vals = list(filter(predicate, prop.propertyValue))
removed_vals = filter(predicate, prop.propertyValue)
if len(removed_vals) == len(prop.propertyValue): if len(removed_vals) == len(prop.propertyValue):
prop.parent.removeProperty(prop.name) prop.parent.removeProperty(prop.name)
else: else:

View File

@ -9,7 +9,7 @@ __copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>'
from calibre.ebooks.oeb.polish.container import OEB_STYLES, OEB_DOCS from calibre.ebooks.oeb.polish.container import OEB_STYLES, OEB_DOCS
from calibre.ebooks.oeb.normalize_css import normalize_font from calibre.ebooks.oeb.normalize_css import normalize_font
from tinycss.fonts3 import parse_font_family, parse_font, serialize_font_family, serialize_font from tinycss.fonts3 import parse_font_family, parse_font, serialize_font_family, serialize_font
from polyglot.builtins import iteritems from polyglot.builtins import iteritems, filter
def unquote(x): def unquote(x):
@ -68,7 +68,7 @@ def change_font_in_declaration(style, old_name, new_name=None):
ff = style.getProperty('font-family') ff = style.getProperty('font-family')
if ff is not None: if ff is not None:
fams = parse_font_family(ff.propertyValue.cssText) fams = parse_font_family(ff.propertyValue.cssText)
nfams = filter(None, [new_name if x == old_name else x for x in fams]) nfams = list(filter(None, [new_name if x == old_name else x for x in fams]))
if fams != nfams: if fams != nfams:
if nfams: if nfams:
ff.propertyValue.cssText = serialize_font_family(nfams) ff.propertyValue.cssText = serialize_font_family(nfams)
@ -79,7 +79,7 @@ def change_font_in_declaration(style, old_name, new_name=None):
if ff is not None: if ff is not None:
props = parse_font(ff.propertyValue.cssText) props = parse_font(ff.propertyValue.cssText)
fams = props.get('font-family') or [] fams = props.get('font-family') or []
nfams = filter(None, [new_name if x == old_name else x for x in fams]) nfams = list(filter(None, [new_name if x == old_name else x for x in fams]))
if fams != nfams: if fams != nfams:
props['font-family'] = nfams props['font-family'] = nfams
if nfams: if nfams:

View File

@ -17,7 +17,7 @@ from calibre.ebooks.oeb.polish.container import OPF_NAMESPACES, get_container
from calibre.ebooks.oeb.polish.parsing import parse from calibre.ebooks.oeb.polish.parsing import parse
from calibre.ebooks.oeb.polish.toc import find_existing_ncx_toc, find_existing_nav_toc from calibre.ebooks.oeb.polish.toc import find_existing_ncx_toc, find_existing_nav_toc
from calibre.utils.icu import ord_string from calibre.utils.icu import ord_string
from polyglot.builtins import iteritems, unicode_type from polyglot.builtins import iteritems, unicode_type, filter
_patterns = None _patterns = None
@ -86,7 +86,7 @@ def get_words(text, lang):
ans = split_into_words(unicode_type(text), lang) ans = split_into_words(unicode_type(text), lang)
except (TypeError, ValueError): except (TypeError, ValueError):
return () return ()
return filter(filter_words, ans) return list(filter(filter_words, ans))
def add_words(text, node, words, file_name, locale, node_item): def add_words(text, node, words, file_name, locale, node_item):

View File

@ -20,7 +20,7 @@ from calibre.ebooks import unit_convert
from calibre.ebooks.oeb.base import XHTML, XHTML_NS, CSS_MIME, OEB_STYLES, xpath, urlnormalize from calibre.ebooks.oeb.base import XHTML, XHTML_NS, CSS_MIME, OEB_STYLES, xpath, urlnormalize
from calibre.ebooks.oeb.normalize_css import DEFAULTS, normalizers from calibre.ebooks.oeb.normalize_css import DEFAULTS, normalizers
from css_selectors import Select, SelectorError, INAPPROPRIATE_PSEUDO_CLASSES from css_selectors import Select, SelectorError, INAPPROPRIATE_PSEUDO_CLASSES
from polyglot.builtins import iteritems, unicode_type from polyglot.builtins import iteritems, unicode_type, filter
from tinycss.media3 import CSSMedia3Parser from tinycss.media3 import CSSMedia3Parser
css_parser_log.setLevel(logging.WARN) css_parser_log.setLevel(logging.WARN)

View File

@ -15,7 +15,7 @@ import os, re
from calibre.ebooks.rtf2xml import copy from calibre.ebooks.rtf2xml import copy
from calibre.utils.mreplace import MReplace from calibre.utils.mreplace import MReplace
from calibre.ptempfile import better_mktemp from calibre.ptempfile import better_mktemp
from polyglot.builtins import codepoint_to_chr, range from polyglot.builtins import codepoint_to_chr, range, filter
class Tokenize: class Tokenize:
@ -124,7 +124,7 @@ class Tokenize:
# split # split
tokens = re.split(self.__splitexp, input_file) tokens = re.split(self.__splitexp, input_file)
# remove empty tokens and \n # remove empty tokens and \n
return filter(lambda x: len(x) > 0 and x != '\n', tokens) return list(filter(lambda x: len(x) > 0 and x != '\n', tokens))
def __compile_expressions(self): def __compile_expressions(self):
SIMPLE_RPL = { SIMPLE_RPL = {
@ -184,7 +184,7 @@ class Tokenize:
# correct unicode # correct unicode
tokens = map(self.__unicode_process, tokens) tokens = map(self.__unicode_process, tokens)
# remove empty items created by removing \uc # remove empty items created by removing \uc
tokens = filter(lambda x: len(x) > 0, tokens) tokens = list(filter(lambda x: len(x) > 0, tokens))
# write # write
with open(self.__write_to, 'wb') as write_obj: with open(self.__write_to, 'wb') as write_obj:

View File

@ -15,7 +15,7 @@ from PyQt5.Qt import (
from calibre.ebooks.metadata import check_isbn from calibre.ebooks.metadata import check_isbn
from calibre.constants import iswindows from calibre.constants import iswindows
from calibre.gui2 import gprefs, question_dialog, error_dialog from calibre.gui2 import gprefs, question_dialog, error_dialog
from polyglot.builtins import unicode_type from polyglot.builtins import unicode_type, filter
class AddFromISBN(QDialog): class AddFromISBN(QDialog):

View File

@ -32,7 +32,7 @@ from calibre.utils.date import qt_to_dt, internal_iso_format_string
from calibre.utils.icu import capitalize, sort_key from calibre.utils.icu import capitalize, sort_key
from calibre.utils.titlecase import titlecase from calibre.utils.titlecase import titlecase
from calibre.gui2.widgets import LineEditECM from calibre.gui2.widgets import LineEditECM
from polyglot.builtins import iteritems, itervalues, unicode_type, error_message from polyglot.builtins import iteritems, itervalues, unicode_type, error_message, filter
Settings = namedtuple('Settings', Settings = namedtuple('Settings',
'remove_all remove add au aus do_aus rating pub do_series do_autonumber ' 'remove_all remove add au aus do_aus rating pub do_series do_autonumber '
@ -186,7 +186,7 @@ class MyBlockingBusy(QDialog): # {{{
self.progress_next_step_range.emit(len(self.ids)) self.progress_next_step_range.emit(len(self.ids))
for book_id in self.ids: for book_id in self.ids:
fmts = db.formats(book_id, verify_formats=False) fmts = db.formats(book_id, verify_formats=False)
paths = filter(None, [db.format_abspath(book_id, fmt) for fmt in fmts]) paths = list(filter(None, [db.format_abspath(book_id, fmt) for fmt in fmts]))
if paths: if paths:
ret = worker( ret = worker(
'calibre.ebooks.metadata.worker', 'read_metadata_bulk', 'calibre.ebooks.metadata.worker', 'read_metadata_bulk',

View File

@ -24,7 +24,7 @@ from calibre.gui2 import error_dialog, question_dialog, info_dialog, open_url, g
from calibre.gui2.preferences.plugins import ConfigWidget from calibre.gui2.preferences.plugins import ConfigWidget
from calibre.utils.date import UNDEFINED_DATE, format_date from calibre.utils.date import UNDEFINED_DATE, format_date
from calibre.utils.https import get_https_resource_securely from calibre.utils.https import get_https_resource_securely
from polyglot.builtins import itervalues, unicode_type from polyglot.builtins import itervalues, unicode_type, filter
SERVER = 'https://code.calibre-ebook.com/plugins/' SERVER = 'https://code.calibre-ebook.com/plugins/'
INDEX_URL = '%splugins.json.bz2' % SERVER INDEX_URL = '%splugins.json.bz2' % SERVER

View File

@ -35,7 +35,7 @@ from calibre.utils.img import image_from_data, Canvas, optimize_png, optimize_jp
from calibre.utils.zipfile import ZipFile, ZIP_STORED from calibre.utils.zipfile import ZipFile, ZIP_STORED
from calibre.utils.filenames import atomic_rename from calibre.utils.filenames import atomic_rename
from lzma.xz import compress, decompress from lzma.xz import compress, decompress
from polyglot.builtins import iteritems, map, range, reraise from polyglot.builtins import iteritems, map, range, reraise, filter
from polyglot import http_client from polyglot import http_client
from polyglot.queue import Queue, Empty from polyglot.queue import Queue, Empty

View File

@ -31,7 +31,7 @@ from calibre.ebooks.metadata.book.base import Metadata
from calibre.utils.localization import canonicalize_lang from calibre.utils.localization import canonicalize_lang
from calibre.utils.date import local_tz from calibre.utils.date import local_tz
from calibre.library.comments import merge_comments as merge_two_comments from calibre.library.comments import merge_comments as merge_two_comments
from polyglot.builtins import iteritems, unicode_type from polyglot.builtins import iteritems, unicode_type, filter
BASE_TITLE = _('Edit Metadata') BASE_TITLE = _('Edit Metadata')
fetched_fields = ('title', 'title_sort', 'authors', 'author_sort', 'series', fetched_fields = ('title', 'title_sort', 'authors', 'author_sort', 'series',

View File

@ -20,7 +20,7 @@ from calibre.gui2.ui import get_gui
from calibre.gui2.widgets2 import Dialog from calibre.gui2.widgets2 import Dialog
from calibre.utils.config import JSONConfig from calibre.utils.config import JSONConfig
from calibre.utils.localization import localize_user_manual_link from calibre.utils.localization import localize_user_manual_link
from polyglot.builtins import iteritems, unicode_type, range from polyglot.builtins import iteritems, unicode_type, range, filter
tag_maps = JSONConfig('tag-map-rules') tag_maps = JSONConfig('tag-map-rules')
@ -154,7 +154,7 @@ class RuleEdit(QWidget):
def edit_tags(self): def edit_tags(self):
from calibre.gui2.dialogs.tag_editor import TagEditor from calibre.gui2.dialogs.tag_editor import TagEditor
d = TagEditor(self, get_gui().current_db, current_tags=filter(None, [x.strip() for x in self.query.text().split(',')])) d = TagEditor(self, get_gui().current_db, current_tags=list(filter(None, [x.strip() for x in self.query.text().split(',')])))
if d.exec_() == d.Accepted: if d.exec_() == d.Accepted:
self.query.setText(', '.join(d.tags)) self.query.setText(', '.join(d.tags))

View File

@ -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.editor import syntax_from_mime
from calibre.gui2.tweak_book.templates import template_for from calibre.gui2.tweak_book.templates import template_for
from calibre.utils.icu import numeric_sort_key from calibre.utils.icu import numeric_sort_key
from polyglot.builtins import iteritems, itervalues, unicode_type, range from polyglot.builtins import iteritems, itervalues, unicode_type, range, filter
from polyglot.binary import as_hex_unicode from polyglot.binary import as_hex_unicode
try: try:

View File

@ -8,7 +8,7 @@ __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
import time, textwrap, json import time, textwrap, json
from bisect import bisect_right from bisect import bisect_right
from polyglot.builtins import map, unicode_type from polyglot.builtins import map, unicode_type, filter
from threading import Thread from threading import Thread
from functools import partial from functools import partial
@ -321,7 +321,7 @@ class WebPage(QWebPage):
ans = None ans = None
return ans return ans
val = self.mainFrame().evaluateJavaScript('window.calibre_preview_integration.line_numbers()') val = self.mainFrame().evaluateJavaScript('window.calibre_preview_integration.line_numbers()')
self._line_numbers = sorted(uniq(filter(lambda x:x is not None, map(atoi, val)))) self._line_numbers = sorted(uniq(list(filter(lambda x:x is not None, map(atoi, val)))))
return self._line_numbers return self._line_numbers
def go_to_line(self, lnum): def go_to_line(self, lnum):

View File

@ -8,7 +8,7 @@ __copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
import time, textwrap, os import time, textwrap, os
from threading import Thread from threading import Thread
from polyglot.builtins import iteritems, map, range from polyglot.builtins import iteritems, map, range, filter
from operator import itemgetter from operator import itemgetter
from functools import partial from functools import partial
from collections import defaultdict from collections import defaultdict
@ -166,7 +166,7 @@ class FilesView(QTableView):
@property @property
def selected_locations(self): def selected_locations(self):
return filter(None, (self.proxy.sourceModel().location(self.proxy.mapToSource(index)) for index in self.selectionModel().selectedIndexes())) return list(filter(None, (self.proxy.sourceModel().location(self.proxy.mapToSource(index)) for index in self.selectionModel().selectedIndexes())))
@property @property
def current_location(self): def current_location(self):

View File

@ -34,7 +34,7 @@ from calibre.gui2.tweak_book.widgets import BusyCursor
from calibre.gui2.widgets2 import FlowLayout, HistoryComboBox from calibre.gui2.widgets2 import FlowLayout, HistoryComboBox
from calibre.utils.icu import primary_contains from calibre.utils.icu import primary_contains
from calibre.ebooks.conversion.search_replace import REGEX_FLAGS, compile_regular_expression from calibre.ebooks.conversion.search_replace import REGEX_FLAGS, compile_regular_expression
from polyglot.builtins import iteritems, unicode_type, range, error_message from polyglot.builtins import iteritems, unicode_type, range, error_message, filter
# The search panel {{{ # The search panel {{{

View File

@ -37,7 +37,7 @@ from calibre.spell.import_from import import_from_oxt
from calibre.spell.break_iterator import split_into_words from calibre.spell.break_iterator import split_into_words
from calibre.utils.localization import calibre_langcode_to_name, get_language, get_lang, canonicalize_lang from calibre.utils.localization import calibre_langcode_to_name, get_language, get_lang, canonicalize_lang
from calibre.utils.icu import sort_key, primary_sort_key, primary_contains, contains from calibre.utils.icu import sort_key, primary_sort_key, primary_contains, contains
from polyglot.builtins import iteritems, unicode_type, range from polyglot.builtins import iteritems, unicode_type, range, filter
LANG = 0 LANG = 0
COUNTRY = 1 COUNTRY = 1
@ -720,7 +720,7 @@ class WordsModel(QAbstractTableModel):
return True return True
def do_filter(self): def do_filter(self):
self.items = filter(self.filter_item, self.words) self.items = list(filter(self.filter_item, self.words))
def toggle_ignored(self, row): def toggle_ignored(self, row):
w = self.word_for_row(row) w = self.word_for_row(row)

View File

@ -9,7 +9,7 @@ from threading import Thread
from uuid import uuid4 from uuid import uuid4
from PyQt5.Qt import pyqtSignal, QEventLoop, Qt from PyQt5.Qt import pyqtSignal, QEventLoop, Qt
from polyglot.builtins import string_or_bytes from polyglot.builtins import string_or_bytes, filter
is64bit = sys.maxsize > (1 << 32) is64bit = sys.maxsize > (1 << 32)
base = sys.extensions_location if hasattr(sys, 'new_app_layout') else os.path.dirname(sys.executable) base = sys.extensions_location if hasattr(sys, 'new_app_layout') else os.path.dirname(sys.executable)
@ -359,7 +359,7 @@ def test(helper=HELPER):
if server.err_msg is not None: if server.err_msg is not None:
raise RuntimeError(server.err_msg) raise RuntimeError(server.err_msg)
server.join(2) server.join(2)
parts = filter(None, server.data.split(b'\0')) parts = list(filter(None, server.data.split(b'\0')))
if parts[0] != secret: if parts[0] != secret:
raise RuntimeError('Did not get back secret: %r != %r' % (secret, parts[0])) raise RuntimeError('Did not get back secret: %r != %r' % (secret, parts[0]))
q = parts[1].decode('utf-8') q = parts[1].decode('utf-8')

View File

@ -14,7 +14,7 @@ from calibre.library.catalogs import FIELDS, TEMPLATE_ALLOWED_FIELDS
from calibre.customize.conversion import DummyReporter from calibre.customize.conversion import DummyReporter
from calibre.constants import preferred_encoding from calibre.constants import preferred_encoding
from calibre.ebooks.metadata import format_isbn from calibre.ebooks.metadata import format_isbn
from polyglot.builtins import string_or_bytes from polyglot.builtins import string_or_bytes, filter
class BIBTEX(CatalogPlugin): class BIBTEX(CatalogPlugin):
@ -384,7 +384,7 @@ class BIBTEX(CatalogPlugin):
# check in book strict if all is ok else throw a warning into log # check in book strict if all is ok else throw a warning into log
if bib_entry == 'book' : if bib_entry == 'book' :
nb_books = len(filter(check_entry_book_valid, data)) nb_books = len(list(filter(check_entry_book_valid, data)))
if nb_books < nb_entries : if nb_books < nb_entries :
log.warn("Only %d entries in %d are book compatible" % (nb_books, nb_entries)) log.warn("Only %d entries in %d are book compatible" % (nb_books, nb_entries))
nb_entries = nb_books nb_entries = nb_books

View File

@ -10,7 +10,7 @@ import re, os, traceback, fnmatch
from calibre import isbytestring from calibre import isbytestring
from calibre.constants import filesystem_encoding from calibre.constants import filesystem_encoding
from calibre.ebooks import BOOK_EXTENSIONS from calibre.ebooks import BOOK_EXTENSIONS
from polyglot.builtins import iteritems from polyglot.builtins import iteritems, filter
EBOOK_EXTENSIONS = frozenset(BOOK_EXTENSIONS) EBOOK_EXTENSIONS = frozenset(BOOK_EXTENSIONS)
NORMALS = frozenset(['metadata.opf', 'cover.jpg']) NORMALS = frozenset(['metadata.opf', 'cover.jpg'])

View File

@ -12,7 +12,7 @@ from calibre.ebooks.metadata import MetaInformation
from calibre.ebooks.metadata import string_to_authors from calibre.ebooks.metadata import string_to_authors
from calibre.utils.serialize import pickle_loads, pickle_dumps from calibre.utils.serialize import pickle_loads, pickle_dumps
from calibre import isbytestring from calibre import isbytestring
from polyglot.builtins import unicode_type from polyglot.builtins import unicode_type, filter
class Concatenate(object): class Concatenate(object):
@ -1070,8 +1070,8 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE;
self.conn.get('SELECT id, name FROM authors')] self.conn.get('SELECT id, name FROM authors')]
def all_author_names(self): def all_author_names(self):
return filter(None, [i[0].strip().replace('|', ',') for i in self.conn.get( return list(filter(None, [i[0].strip().replace('|', ',') for i in self.conn.get(
'SELECT name FROM authors')]) 'SELECT name FROM authors')]))
def all_publishers(self): def all_publishers(self):
return [(i[0], i[1]) for i in return [(i[0], i[1]) for i in

View File

@ -16,7 +16,7 @@ from calibre.library.prefs import DBPrefs
from calibre.constants import filesystem_encoding from calibre.constants import filesystem_encoding
from calibre.utils.date import utcfromtimestamp from calibre.utils.date import utcfromtimestamp
from calibre import isbytestring from calibre import isbytestring
from polyglot.builtins import iteritems from polyglot.builtins import iteritems, filter
NON_EBOOK_EXTENSIONS = frozenset([ NON_EBOOK_EXTENSIONS = frozenset([
'jpg', 'jpeg', 'gif', 'png', 'bmp', 'jpg', 'jpeg', 'gif', 'png', 'bmp',
@ -174,7 +174,7 @@ class Restore(Thread):
def process_dir(self, dirpath, filenames, book_id): def process_dir(self, dirpath, filenames, book_id):
book_id = int(book_id) book_id = int(book_id)
formats = filter(self.is_ebook_file, filenames) formats = list(filter(self.is_ebook_file, filenames))
fmts = [os.path.splitext(x)[1][1:].upper() for x in formats] fmts = [os.path.splitext(x)[1][1:].upper() for x in formats]
sizes = [os.path.getsize(os.path.join(dirpath, x)) for x in formats] sizes = [os.path.getsize(os.path.join(dirpath, x)) for x in formats]
names = [os.path.splitext(x)[0] for x in formats] names = [os.path.splitext(x)[0] for x in formats]

View File

@ -18,7 +18,7 @@ from calibre.spell import parse_lang_code
from calibre.utils.config import JSONConfig from calibre.utils.config import JSONConfig
from calibre.utils.icu import capitalize from calibre.utils.icu import capitalize
from calibre.utils.localization import get_lang, get_system_locale from calibre.utils.localization import get_lang, get_system_locale
from polyglot.builtins import iteritems, itervalues, unicode_type from polyglot.builtins import iteritems, itervalues, unicode_type, filter
Dictionary = namedtuple('Dictionary', 'primary_locale locales dicpath affpath builtin name id') Dictionary = namedtuple('Dictionary', 'primary_locale locales dicpath affpath builtin name id')
LoadedDictionary = namedtuple('Dictionary', 'primary_locale locales obj builtin name id') LoadedDictionary = namedtuple('Dictionary', 'primary_locale locales obj builtin name id')

View File

@ -15,7 +15,7 @@ from calibre.srv.routes import Router
from calibre.srv.users import UserManager from calibre.srv.users import UserManager
from calibre.utils.date import utcnow from calibre.utils.date import utcnow
from calibre.utils.search_query_parser import ParseException from calibre.utils.search_query_parser import ParseException
from polyglot.builtins import itervalues from polyglot.builtins import itervalues, filter
class Context(object): class Context(object):

View File

@ -16,7 +16,7 @@ from calibre.srv.loop import Connection, READ, WRITE
from calibre.srv.utils import MultiDict, HTTP1, HTTP11, Accumulator from calibre.srv.utils import MultiDict, HTTP1, HTTP11, Accumulator
from polyglot import http_client, reprlib from polyglot import http_client, reprlib
from polyglot.urllib import unquote from polyglot.urllib import unquote
from polyglot.builtins import error_message from polyglot.builtins import error_message, filter
protocol_map = {(1, 0):HTTP1, (1, 1):HTTP11} protocol_map = {(1, 0):HTTP1, (1, 1):HTTP11}
quoted_slash = re.compile(br'%2[fF]') quoted_slash = re.compile(br'%2[fF]')

View File

@ -19,7 +19,7 @@ from calibre.srv.routes import endpoint
from calibre.srv.utils import get_library_data, http_date from calibre.srv.utils import get_library_data, http_date
from calibre.utils.cleantext import clean_xml_chars from calibre.utils.cleantext import clean_xml_chars
from calibre.utils.date import dt_as_local, is_date_undefined, timestampfromdt from calibre.utils.date import dt_as_local, is_date_undefined, timestampfromdt
from polyglot.builtins import iteritems, string_or_bytes from polyglot.builtins import iteritems, string_or_bytes, filter
from polyglot.urllib import urlencode from polyglot.urllib import urlencode
# /mobile {{{ # /mobile {{{

View File

@ -9,7 +9,7 @@ from functools import partial
from calibre import prints from calibre import prints
from calibre.constants import preferred_encoding from calibre.constants import preferred_encoding
from polyglot.builtins import iteritems, raw_input from polyglot.builtins import iteritems, raw_input, filter
# Manage users CLI {{{ # Manage users CLI {{{
@ -175,7 +175,7 @@ def manage_users_cli(path=None):
pass pass
else: else:
names = get_input(_('Enter a comma separated list of library names:')) names = get_input(_('Enter a comma separated list of library names:'))
names = filter(None, [x.strip() for x in names.split(',')]) names = list(filter(None, [x.strip() for x in names.split(',')]))
w = 'allowed_library_names' if c == 1 else 'blocked_library_names' w = 'allowed_library_names' if c == 1 else 'blocked_library_names'
t = _('Allowing access only to libraries: {}') if c == 1 else _( t = _('Allowing access only to libraries: {}') if c == 1 else _(
'Allowing access to all libraries, except: {}') 'Allowing access to all libraries, except: {}')

View File

@ -22,7 +22,7 @@ from calibre.utils.icu import collation_order
from calibre.utils.localization import calibre_langcode_to_name from calibre.utils.localization import calibre_langcode_to_name
from calibre.library.comments import comments_to_html, markdown from calibre.library.comments import comments_to_html, markdown
from calibre.library.field_metadata import category_icon_map from calibre.library.field_metadata import category_icon_map
from polyglot.builtins import iteritems, itervalues, range from polyglot.builtins import iteritems, itervalues, range, filter
from polyglot.urllib import quote from polyglot.urllib import quote
IGNORED_FIELDS = frozenset('cover ondevice path marked au_map size'.split()) IGNORED_FIELDS = frozenset('cover ondevice path marked au_map size'.split())
@ -304,7 +304,7 @@ categories_with_ratings = {'authors', 'series', 'publisher', 'tags'}
def get_name_components(name): def get_name_components(name):
components = filter(None, [t.strip() for t in name.split('.')]) components = list(filter(None, [t.strip() for t in name.split('.')]))
if not components or '.'.join(components) != name: if not components or '.'.join(components) != name:
components = [name] components = [name]
return components return components
@ -533,9 +533,9 @@ def render_categories(opts, db, category_data):
if opts.hidden_categories: if opts.hidden_categories:
# We have to remove hidden categories after all processing is done as # We have to remove hidden categories after all processing is done as
# items from a hidden category could be in a user category # items from a hidden category could be in a user category
root['children'] = filter((lambda child:items[child['id']]['category'] not in opts.hidden_categories), root['children']) root['children'] = list(filter((lambda child:items[child['id']]['category'] not in opts.hidden_categories), root['children']))
if opts.hide_empty_categories: if opts.hide_empty_categories:
root['children'] = filter((lambda child:items[child['id']]['count'] > 0), root['children']) root['children'] = list(filter((lambda child:items[child['id']]['count'] > 0), root['children']))
return {'root':root, 'item_map': items} return {'root':root, 'item_map': items}

View File

@ -26,7 +26,7 @@ from calibre import force_unicode
from calibre.srv.errors import HTTPNotFound, HTTPInternalServerError from calibre.srv.errors import HTTPNotFound, HTTPInternalServerError
from calibre.srv.routes import endpoint from calibre.srv.routes import endpoint
from calibre.srv.utils import get_library_data, http_date, Offsets from calibre.srv.utils import get_library_data, http_date, Offsets
from polyglot.builtins import iteritems, unicode_type from polyglot.builtins import iteritems, unicode_type, filter
from polyglot.urllib import urlencode from polyglot.urllib import urlencode
from polyglot.binary import as_hex_unicode, from_hex_unicode from polyglot.binary import as_hex_unicode, from_hex_unicode

View File

@ -12,7 +12,7 @@ from operator import attrgetter
from calibre.srv.errors import HTTPSimpleResponse, HTTPNotFound, RouteError from calibre.srv.errors import HTTPSimpleResponse, HTTPNotFound, RouteError
from calibre.srv.utils import http_date from calibre.srv.utils import http_date
from calibre.utils.serialize import msgpack_dumps, json_dumps, MSGPACK_MIME from calibre.utils.serialize import msgpack_dumps, json_dumps, MSGPACK_MIME
from polyglot.builtins import iteritems, itervalues, unicode_type, range, zip from polyglot.builtins import iteritems, itervalues, unicode_type, range, zip, filter
from polyglot import http_client from polyglot import http_client
from polyglot.urllib import quote as urlquote from polyglot.urllib import quote as urlquote
@ -114,7 +114,7 @@ class Route(object):
del endpoint_ del endpoint_
if not self.endpoint.route.startswith('/'): if not self.endpoint.route.startswith('/'):
raise RouteError('A route must start with /, %s does not' % self.endpoint.route) raise RouteError('A route must start with /, %s does not' % self.endpoint.route)
parts = filter(None, self.endpoint.route.split('/')) parts = list(filter(None, self.endpoint.route.split('/')))
matchers = self.matchers = [] matchers = self.matchers = []
self.defaults = {} self.defaults = {}
found_optional_part = False found_optional_part = False

View File

@ -8,7 +8,7 @@ __copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
import os import os
from calibre.srv.tests.base import BaseTest from calibre.srv.tests.base import BaseTest
from polyglot.builtins import itervalues from polyglot.builtins import itervalues, filter
class TestRouter(BaseTest): class TestRouter(BaseTest):
@ -53,7 +53,7 @@ class TestRouter(BaseTest):
router = Router() router = Router()
def find(path): def find(path):
path = filter(None, path.split('/')) path = list(filter(None, path.split('/')))
ep, args = router.find_route(path) ep, args = router.find_route(path)
args = list(args) args = list(args)
return ep, args return ep, args

View File

@ -3,7 +3,7 @@ __copyright__ = '2010, sengian <sengian1@gmail.com>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import re import re
from polyglot.builtins import codepoint_to_chr, map, range from polyglot.builtins import codepoint_to_chr, map, range, filter
from polyglot.html_entities import name2codepoint from polyglot.html_entities import name2codepoint
from calibre.constants import plugins, preferred_encoding from calibre.constants import plugins, preferred_encoding

View File

@ -16,7 +16,7 @@ from calibre.constants import (config_dir, iswindows, isosx, plugins, DEBUG,
isworker, filesystem_encoding) isworker, filesystem_encoding)
from calibre.utils.fonts.metadata import FontMetadata, UnsupportedFont from calibre.utils.fonts.metadata import FontMetadata, UnsupportedFont
from calibre.utils.icu import sort_key from calibre.utils.icu import sort_key
from polyglot.builtins import itervalues, unicode_type from polyglot.builtins import itervalues, unicode_type, filter
class NoFonts(ValueError): class NoFonts(ValueError):
@ -281,7 +281,7 @@ class FontScanner(Thread):
return False return False
for family in self.find_font_families(): for family in self.find_font_families():
faces = filter(filter_faces, self.fonts_for_family(family)) faces = list(filter(filter_faces, self.fonts_for_family(family)))
if not faces: if not faces:
continue continue
generic_family = panose_to_css_generic_family(faces[0]['panose']) generic_family = panose_to_css_generic_family(faces[0]['panose'])

View File

@ -8,6 +8,7 @@ __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import sys import sys
from polyglot.builtins import filter
is_narrow_build = sys.maxunicode < 0x10ffff is_narrow_build = sys.maxunicode < 0x10ffff

View File

@ -16,7 +16,7 @@ from itertools import islice
from calibre import detect_ncpus as cpu_count, as_unicode from calibre import detect_ncpus as cpu_count, as_unicode
from calibre.constants import plugins, filesystem_encoding from calibre.constants import plugins, filesystem_encoding
from calibre.utils.icu import primary_sort_key, primary_find, primary_collator from calibre.utils.icu import primary_sort_key, primary_find, primary_collator
from polyglot.builtins import iteritems, itervalues, map, unicode_type, range, zip, raw_input from polyglot.builtins import iteritems, itervalues, map, unicode_type, range, zip, raw_input, filter
from polyglot.queue import Queue from polyglot.queue import Queue
DEFAULT_LEVEL1 = '/' DEFAULT_LEVEL1 = '/'

View File

@ -16,6 +16,7 @@ import win32con, win32api, win32gui, pywintypes, winerror
from calibre import prints from calibre import prints
from calibre.gui2 import must_use_qt from calibre.gui2 import must_use_qt
from calibre.utils.winreg.default_programs import split_commandline from calibre.utils.winreg.default_programs import split_commandline
from polyglot.builtins import filter
ICON_SIZE = 64 ICON_SIZE = 64

View File

@ -22,7 +22,7 @@ from calibre.utils.filenames import atomic_rename
from calibre.utils.terminal import ANSIStream from calibre.utils.terminal import ANSIStream
from duktape import Context, JSError, to_python from duktape import Context, JSError, to_python
from lzma.xz import compress, decompress from lzma.xz import compress, decompress
from polyglot.builtins import itervalues, range, exec_path, raw_input, error_message from polyglot.builtins import itervalues, range, exec_path, raw_input, error_message, filter
from polyglot.queue import Empty, Queue from polyglot.queue import Empty, Queue
COMPILER_PATH = 'rapydscript/compiler.js.xz' COMPILER_PATH = 'rapydscript/compiler.js.xz'
@ -395,8 +395,8 @@ class Repl(Thread):
def completer(text, num): def completer(text, num):
if self.completions is None: if self.completions is None:
self.to_repl.put(('complete', text)) self.to_repl.put(('complete', text))
self.completions = filter(None, self.get_from_repl()) self.completions = list(filter(None, self.get_from_repl()))
if self.completions is None: if not self.completions:
return None return None
try: try:
return self.completions[num] return self.completions[num]