Get rid of some xrange

This commit is contained in:
Kovid Goyal 2019-03-13 15:21:06 +05:30
parent 55151a3cdd
commit d1e30dfcac
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
35 changed files with 99 additions and 85 deletions

View File

@ -54,10 +54,10 @@ def build_manual(language, base):
return p.wait()
try:
if not skip_pdf:
for i in xrange(3):
for i in range(3):
run_cmd(['pdflatex', '-interaction=nonstopmode', 'calibre.tex'])
run_cmd(['makeindex', '-s', 'python.ist', 'calibre.idx'])
for i in xrange(2):
for i in range(2):
run_cmd(['pdflatex', '-interaction=nonstopmode', 'calibre.tex'])
if not os.path.exists('calibre.pdf'):
print('Failed to build pdf file, see calibre.log in the latex directory', file=sys.stderr)

View File

@ -76,7 +76,7 @@ class ElDiplo_Recipe(BasicNewsRecipe):
summaryurl = re.sub(r'\?.*', '', a['href'])
summaryurl = 'http://www.eldiplo.org' + summaryurl
for pagenum in xrange(1, 10):
for pagenum in range(1, 10):
soup = self.index_to_soup(
'{0}/?cms1_paging_p_b32={1}'.format(summaryurl, pagenum))
thedivs = soup.findAll(True, attrs={'class': ['interna']})

View File

@ -13,7 +13,7 @@ from functools import partial
from setup import Command, __appname__, __version__, require_git_master, build_cache_dir, edit_file
from setup.parallel_build import parallel_check_output
from polyglot.builtins import codepoint_to_chr, iteritems
from polyglot.builtins import codepoint_to_chr, iteritems, range
is_ci = os.environ.get('CI', '').lower() == 'true'
@ -121,7 +121,7 @@ class POT(Command): # {{{
self.tx(['set', '-r', 'calibre.' + slug, '--source', '-l', 'en', '-t', 'PO', dest])
with open(self.j(self.d(tbase), '.tx/config'), 'r+b') as f:
lines = f.read().splitlines()
for i in xrange(len(lines)):
for i in range(len(lines)):
line = lines[i]
if line == '[calibre.%s]' % slug:
lines.insert(i+1, 'file_filter = manual/<lang>/%s.po' % bname)

View File

@ -4,7 +4,7 @@ __copyright__ = '2008, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
import sys, os, re, time, random, warnings
from polyglot.builtins import builtins, codepoint_to_chr, unicode_type
from polyglot.builtins import builtins, codepoint_to_chr, unicode_type, range
builtins.__dict__['dynamic_property'] = lambda func: func(None)
from math import floor
from functools import partial
@ -113,7 +113,7 @@ def confirm_config_name(name):
_filename_sanitize = re.compile(r'[\xae\0\\|\?\*<":>\+/]')
_filename_sanitize_unicode = frozenset([u'\\', u'|', u'?', u'*', u'<',
u'"', u':', u'>', u'+', u'/'] + list(map(codepoint_to_chr, xrange(32))))
u'"', u':', u'>', u'+', u'/'] + list(map(codepoint_to_chr, range(32))))
def sanitize_file_name(name, substitute='_', as_unicode=False):

View File

@ -9,6 +9,8 @@ __docformat__ = 'restructuredtext en'
SPOOL_SIZE = 30*1024*1024
from polyglot.builtins import range
def _get_next_series_num_for_list(series_indices, unwrap=True):
from calibre.utils.config_base import tweaks
@ -22,17 +24,17 @@ def _get_next_series_num_for_list(series_indices, unwrap=True):
if tweaks['series_index_auto_increment'] == 'next':
return floor(series_indices[-1]) + 1
if tweaks['series_index_auto_increment'] == 'first_free':
for i in xrange(1, 10000):
for i in range(1, 10000):
if i not in series_indices:
return i
# really shouldn't get here.
if tweaks['series_index_auto_increment'] == 'next_free':
for i in xrange(int(ceil(series_indices[0])), 10000):
for i in range(int(ceil(series_indices[0])), 10000):
if i not in series_indices:
return i
# really shouldn't get here.
if tweaks['series_index_auto_increment'] == 'last_free':
for i in xrange(int(ceil(series_indices[-1])), 0, -1):
for i in range(int(ceil(series_indices[-1])), 0, -1):
if i not in series_indices:
return i
return series_indices[-1] + 1

View File

@ -13,6 +13,7 @@ from collections import defaultdict
from calibre.constants import plugins
from calibre.utils.date import parse_date, UNDEFINED_DATE, utc_tz
from calibre.ebooks.metadata import author_to_author_sort
from polyglot.builtins import range
_c_speedup = plugins['speedup'][0].parse_date
@ -32,7 +33,7 @@ def c_parse(val):
else:
try:
ans = datetime(year, month, day, hour, minutes, seconds, tzinfo=utc_tz)
if tzsecs is not 0:
if tzsecs != 0:
ans -= timedelta(seconds=tzsecs)
except OverflowError:
ans = UNDEFINED_DATE
@ -43,7 +44,7 @@ def c_parse(val):
return UNDEFINED_DATE
ONE_ONE, MANY_ONE, MANY_MANY = xrange(3)
ONE_ONE, MANY_ONE, MANY_MANY = range(3)
null = object()

View File

@ -10,6 +10,7 @@ import time, random
from threading import Thread
from calibre.db.tests.base import BaseTest
from calibre.db.locking import SHLock, RWLockWrapper, LockingError
from polyglot.builtins import range
class TestLock(BaseTest):
@ -155,7 +156,7 @@ class TestLock(BaseTest):
done = []
def lots_of_acquires():
for _ in xrange(1000):
for _ in range(1000):
shared = random.choice([True,False])
lock.acquire(shared=shared)
lock.acquire(shared=shared)
@ -167,7 +168,7 @@ class TestLock(BaseTest):
lock.release()
lock.release()
done.append(True)
threads = [Thread(target=lots_of_acquires) for _ in xrange(10)]
threads = [Thread(target=lots_of_acquires) for _ in range(10)]
for t in threads:
t.daemon = True
t.start()

View File

@ -10,7 +10,7 @@ __docformat__ = 'restructuredtext en'
import weakref, operator
from functools import partial
from itertools import izip, imap
from polyglot.builtins import map, unicode_type
from polyglot.builtins import map, unicode_type, range
from calibre.ebooks.metadata import title_sort
from calibre.utils.config_base import tweaks, prefs
@ -49,7 +49,7 @@ class TableRow(object):
view = self.view()
if isinstance(obj, slice):
return [view._field_getters[c](self.book_id)
for c in xrange(*obj.indices(len(view._field_getters)))]
for c in range(*obj.indices(len(view._field_getters)))]
else:
return view._field_getters[obj](self.book_id)
@ -57,7 +57,7 @@ class TableRow(object):
return self.column_count
def __iter__(self):
for i in xrange(self.column_count):
for i in range(self.column_count):
yield self[i]

View File

@ -13,6 +13,7 @@ from threading import Lock
from calibre import prints, as_unicode
from calibre.constants import (iswindows, isosx, plugins, islinux, isfreebsd,
isnetbsd)
from polyglot.builtins import range
osx_scanner = linux_scanner = freebsd_scanner = netbsd_scanner = None
@ -22,7 +23,7 @@ if iswindows:
def drive_is_ok(letter, max_tries=10, debug=False):
import win32file
with drive_ok_lock:
for i in xrange(max_tries):
for i in range(max_tries):
try:
win32file.GetDiskFreeSpaceEx(letter+':\\')
return True
@ -87,9 +88,9 @@ class LibUSBScanner(object):
memory()
for num in (1, 10, 100):
start = memory()
for i in xrange(num):
for i in range(num):
self()
for i in xrange(3):
for i in range(3):
gc.collect()
print('Mem consumption increased by:', memory() - start, 'MB', end=' ')
print('after', num, 'repeats')
@ -219,17 +220,17 @@ def test_for_mem_leak():
scanner = DeviceScanner()
scanner.scan()
memory() # load the psutil library
for i in xrange(3):
for i in range(3):
gc.collect()
for reps in (1, 10, 100, 1000):
for i in xrange(3):
for i in range(3):
gc.collect()
h1 = gc_histogram()
startmem = memory()
for i in xrange(reps):
for i in range(reps):
scanner.scan()
for i in xrange(3):
for i in range(3):
gc.collect()
usedmem = memory(startmem)
prints('Memory used in %d repetitions of scan(): %.5f KB'%(reps,

View File

@ -35,7 +35,7 @@ from calibre.utils.config import Config, ConfigProxy, JSONConfig, dynamic
from calibre.utils.date import UNDEFINED_DATE
from calibre.utils.file_type_icons import EXT_MAP
from calibre.utils.localization import get_lang
from polyglot.builtins import unicode_type, string_or_bytes
from polyglot.builtins import unicode_type, string_or_bytes, range
try:
NO_URL_FORMATTING = QUrl.None_
@ -1025,11 +1025,11 @@ class Application(QApplication):
def fget(self):
return [col.getRgb() for col in
(QColorDialog.customColor(i) for i in xrange(QColorDialog.customCount()))]
(QColorDialog.customColor(i) for i in range(QColorDialog.customCount()))]
def fset(self, colors):
num = min(len(colors), QColorDialog.customCount())
for i in xrange(num):
for i in range(num):
QColorDialog.setCustomColor(i, QColor(*colors[i]))
return property(fget=fget, fset=fset)

View File

@ -17,7 +17,7 @@ from PyQt5.Qt import (QFontInfo, QFontMetrics, Qt, QFont, QFontDatabase, QPen,
from calibre.constants import config_dir
from calibre.gui2 import choose_files, error_dialog, info_dialog, empty_index
from polyglot.builtins import unicode_type
from polyglot.builtins import unicode_type, range
def add_fonts(parent):
@ -268,7 +268,7 @@ class FontFamilyDialog(QDialog):
q = icu_lower(unicode_type(self.search.text())).strip()
if not q:
return
r = (xrange(i-1, -1, -1) if backwards else xrange(i+1,
r = (range(i-1, -1, -1) if backwards else range(i+1,
len(self.families)))
for j in r:
f = self.families[j]

View File

@ -14,7 +14,7 @@ from Queue import Queue, Empty
from threading import Thread, Event
from multiprocessing.pool import ThreadPool
from polyglot.builtins import reraise
from polyglot.builtins import reraise, range
from PyQt5.Qt import (
QImageReader, QFormLayout, QVBoxLayout, QSplitter, QGroupBox, QListWidget,
@ -496,7 +496,7 @@ def get_covers(themes, callback, num_of_workers=8):
else:
callback(metadata, cdata)
for w in xrange(num_of_workers):
for w in range(num_of_workers):
t = Thread(name='IconThemeCover', target=run)
t.daemon = True
t.start()
@ -703,7 +703,7 @@ class ChooseTheme(Dialog):
get_covers(self.themes, self.cover_downloaded.emit)
def __iter__(self):
for i in xrange(self.theme_list.count()):
for i in range(self.theme_list.count()):
yield self.theme_list.item(i)
def item_from_name(self, name):

View File

@ -12,6 +12,7 @@ from PyQt5.Qt import (QPainter, Qt, QWidget, QPropertyAnimation, QRect, QPoint,
QPalette)
from calibre.gui2 import config
from polyglot.builtins import range
class Pointer(QWidget):
@ -79,7 +80,7 @@ class Pointer(QWidget):
self.animation.setEndValue(self.rect_at(1.0))
self.animation.setDirection(self.animation.Backward)
num_keys = 100
for i in xrange(1, num_keys):
for i in range(1, num_keys):
i /= num_keys
self.animation.setKeyValueAt(i, self.rect_at(i))
self.animation.start()
@ -91,4 +92,3 @@ class Pointer(QWidget):
p.setPen(Qt.NoPen)
p.drawPath(self.arrow_path)
p.end()

View File

@ -30,7 +30,7 @@ from calibre.gui2.threaded_jobs import ThreadedJobServer, ThreadedJob
from calibre.gui2.widgets2 import Dialog
from calibre.utils.search_query_parser import SearchQueryParser, ParseException
from calibre.utils.icu import lower
from polyglot.builtins import unicode_type
from polyglot.builtins import unicode_type, range
class AdaptSQP(SearchQueryParser):
@ -301,7 +301,7 @@ class JobManager(QAbstractTableModel, AdaptSQP): # {{{
def show_hidden_jobs(self):
for j in self.jobs:
j.hidden_in_gui = False
for r in xrange(len(self.jobs)):
for r in range(len(self.jobs)):
self.dataChanged.emit(self.index(r, 0), self.index(r, 0))
def kill_job(self, job, view):
@ -710,7 +710,7 @@ class JobsDialog(QDialog, Ui_JobsDialog):
self.proxy_model.beginResetModel(), self.proxy_model.endResetModel()
def hide_all(self, *args):
self.model.hide_jobs(list(xrange(0,
self.model.hide_jobs(list(range(0,
self.model.rowCount(QModelIndex()))))
self.proxy_model.beginResetModel(), self.proxy_model.endResetModel()

View File

@ -26,7 +26,7 @@ from calibre.utils.icu import sort_key, lower
from calibre.gui2 import error_dialog, info_dialog
from calibre.utils.search_query_parser import SearchQueryParser, ParseException
from calibre.gui2.search_box import SearchBox2
from polyglot.builtins import unicode_type
from polyglot.builtins import unicode_type, range
ROOT = QModelIndex()
@ -270,7 +270,7 @@ class ConfigModel(SearchQueryParser, QAbstractItemModel):
for node in self.all_shortcuts:
s = node.data
s['keys'] = tuple(keys_map[s['unique_name']])
for r in xrange(self.rowCount()):
for r in range(self.rowCount()):
group = self.index(r, 0)
num = self.rowCount(group)
if num > 0:

View File

@ -28,7 +28,7 @@ from calibre.utils.config import dynamic, prefs
from calibre.utils.ipc import RC, gui_socket_address
from calibre.utils.lock import singleinstance
from calibre.utils.monotonic import monotonic
from polyglot.builtins import unicode_type
from polyglot.builtins import unicode_type, range
if iswindows:
winutil = plugins['winutil'][0]
@ -478,7 +478,7 @@ def shutdown_other(rc=None):
return # No running instance found
rc.conn.send('shutdown:')
prints(_('Shutdown command sent, waiting for shutdown...'))
for i in xrange(50):
for i in range(50):
if singleinstance(singleinstance_name):
return
time.sleep(0.1)

View File

@ -22,7 +22,7 @@ from calibre.gui2.widgets2 import Dialog
from calibre.gui2.progress_indicator import ProgressIndicator
from calibre.utils.config import JSONConfig
from calibre.utils.icu import numeric_sort_key as sort_key
from polyglot.builtins import string_or_bytes
from polyglot.builtins import string_or_bytes, range
ENTRY_ROLE = Qt.UserRole
@ -411,7 +411,7 @@ class EditPrograms(Dialog): # {{{
register_keyboard_shortcuts(finalize=True)
def update_stored_config(self):
entries = [self.plist.item(i).data(ENTRY_ROLE) for i in xrange(self.plist.count())]
entries = [self.plist.item(i).data(ENTRY_ROLE) for i in range(self.plist.count())]
oprefs['entries'][self.file_type] = entries
oprefs['entries'] = oprefs['entries']

View File

@ -8,6 +8,7 @@ from PyQt5.Qt import QSplitter, QTableView
from calibre.gui2.library import DEFAULT_SORT
from calibre.gui2 import gprefs
from polyglot.builtins import range
class PinTableView(QTableView):
@ -74,7 +75,7 @@ class PinTableView(QTableView):
# Because of a bug in Qt 5 we have to ensure that the header is actually
# relaid out by changing this value, without this sometimes ghost
# columns remain visible when changing libraries
for i in xrange(h.count()):
for i in range(h.count()):
val = h.isSectionHidden(i)
h.setSectionHidden(i, not val)
h.setSectionHidden(i, val)

View File

@ -20,7 +20,7 @@ from calibre.gui2.ui import get_gui
from calibre.gui2.widgets2 import Dialog
from calibre.utils.config import JSONConfig
from calibre.utils.localization import localize_user_manual_link
from polyglot.builtins import unicode_type
from polyglot.builtins import unicode_type, range
tag_maps = JSONConfig('tag-map-rules')
@ -368,7 +368,7 @@ class Rules(QWidget):
@property
def rules(self):
ans = []
for r in xrange(self.rule_list.count()):
for r in range(self.rule_list.count()):
ans.append(self.rule_list.item(r).data(DATA_ROLE))
return ans

View File

@ -23,7 +23,7 @@ from calibre.gui2.progress_indicator import ProgressIndicator as _ProgressIndica
from calibre.gui2.dnd import (dnd_has_image, dnd_get_image, dnd_get_files,
image_extensions, dnd_has_extension, DownloadDialog)
from calibre.utils.localization import localize_user_manual_link
from polyglot.builtins import unicode_type
from polyglot.builtins import unicode_type, range
history = XMLConfig('history')
@ -84,7 +84,7 @@ class FilenamePattern(QWidget, Ui_Form): # {{{
# Get all items in the combobox. If we are reseting
# to defaults we don't want to lose what the user
# has added.
val_hist = [unicode_type(self.re.lineEdit().text())] + [unicode_type(self.re.itemText(i)) for i in xrange(self.re.count())]
val_hist = [unicode_type(self.re.lineEdit().text())] + [unicode_type(self.re.itemText(i)) for i in range(self.re.count())]
self.re.clear()
if defaults:
@ -163,7 +163,7 @@ class FilenamePattern(QWidget, Ui_Form): # {{{
prefs['filename_pattern'] = pat
history = []
history_pats = [unicode_type(self.re.lineEdit().text())] + [unicode_type(self.re.itemText(i)) for i in xrange(self.re.count())]
history_pats = [unicode_type(self.re.lineEdit().text())] + [unicode_type(self.re.itemText(i)) for i in range(self.re.count())]
for p in history_pats[:24]:
# Ensure we don't have duplicate items.
if p and p not in history:

View File

@ -4,6 +4,9 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
''' Code to manage ebook library'''
from polyglot.builtins import range
def db(path=None, read_only=False):
from calibre.db.legacy import LibraryDatabase
from calibre.utils.config import prefs
@ -32,13 +35,13 @@ def generate_test_db(library_path, # {{{
def randstr(length):
return ''.join(random.choice(letters) for i in
xrange(length))
range(length))
all_tags = [randstr(tag_length) for j in xrange(num_of_tags)]
all_tags = [randstr(tag_length) for j in range(num_of_tags)]
print('Generated', num_of_tags, 'tags')
all_authors = [randstr(author_length) for j in xrange(num_of_authors)]
all_authors = [randstr(author_length) for j in range(num_of_authors)]
print('Generated', num_of_authors, 'authors')
all_titles = [randstr(title_length) for j in xrange(num_of_records)]
all_titles = [randstr(title_length) for j in range(num_of_records)]
print('Generated', num_of_records, 'titles')
testdb = db(library_path)
@ -51,9 +54,9 @@ def generate_test_db(library_path, # {{{
print(i+1, end=' ')
sys.stdout.flush()
authors = random.randint(1, max_authors)
authors = [random.choice(all_authors) for i in xrange(authors)]
authors = [random.choice(all_authors) for i in range(authors)]
tags = random.randint(0, max_tags)
tags = [random.choice(all_tags) for i in xrange(tags)]
tags = [random.choice(all_tags) for i in range(tags)]
from calibre.ebooks.metadata.book.base import Metadata
mi = Metadata(title, authors)
mi.tags = tags
@ -80,5 +83,3 @@ def current_library_name():
path = current_library_path()
if path:
return posixpath.basename(path)

View File

@ -11,6 +11,7 @@ import pdb, socket, inspect, sys, select, os, atexit, time
from calibre import prints
from calibre.utils.ipc import eintr_retry_call
from calibre.constants import cache_dir
from polyglot.builtins import range
PROMPT = b'(debug) '
QUESTION = b'\x00\x01\x02'
@ -96,7 +97,7 @@ def set_trace(port=4444, skip=None):
def cli(port=4444):
prints('Connecting to remote debugger on port %d...' % port)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
for i in xrange(20):
for i in range(20):
try:
sock.connect(('127.0.0.1', port))
break
@ -147,5 +148,6 @@ def cli(port=4444):
except KeyboardInterrupt:
pass
if __name__ == '__main__':
cli()

View File

@ -25,9 +25,10 @@ from calibre.utils.socket_inheritance import set_socket_inherit
from calibre.utils.logging import ThreadSafeLog
from calibre.utils.monotonic import monotonic
from calibre.utils.mdns import get_external_ip
from polyglot.builtins import range
READ, WRITE, RDWR, WAIT = 'READ', 'WRITE', 'RDWR', 'WAIT'
WAKEUP, JOB_DONE = bytes(bytearray(xrange(2)))
WAKEUP, JOB_DONE = bytes(bytearray(range(2)))
IPPROTO_IPV6 = getattr(socket, "IPPROTO_IPV6", 41)

View File

@ -23,6 +23,7 @@ from calibre.utils.icu import collation_order
from calibre.utils.localization import calibre_langcode_to_name
from calibre.library.comments import comments_to_html, markdown
from calibre.library.field_metadata import category_icon_map
from polyglot.builtins import range
IGNORED_FIELDS = frozenset('cover ondevice path marked au_map size'.split())
@ -573,7 +574,7 @@ def dump_tags_model(m):
def dump_node(index, level=-1):
if level > -1:
ans.append(indent*level + index.data(Qt.UserRole).dump_data())
for i in xrange(m.rowCount(index)):
for i in range(m.rowCount(index)):
dump_node(m.index(i, 0, index), level + 1)
if level == 0:
ans.append('')

View File

@ -11,6 +11,7 @@ from Queue import Queue, Full
from threading import Thread
from calibre.utils.monotonic import monotonic
from polyglot.builtins import range
class Worker(Thread):
@ -52,7 +53,7 @@ class ThreadPool(object):
def __init__(self, log, notify_server, count=10, queue_size=1000):
self.request_queue, self.result_queue = Queue(queue_size), Queue(queue_size)
self.workers = [Worker(log, notify_server, i, self.request_queue, self.result_queue) for i in xrange(count)]
self.workers = [Worker(log, notify_server, i, self.request_queue, self.result_queue) for i in range(count)]
def start(self):
for w in self.workers:

View File

@ -14,7 +14,7 @@ from operator import attrgetter
from calibre.srv.errors import HTTPSimpleResponse, HTTPNotFound, RouteError
from calibre.srv.utils import http_date
from calibre.utils.serialize import msgpack_dumps, json_dumps, MSGPACK_MIME
from polyglot.builtins import unicode_type
from polyglot.builtins import unicode_type, range
default_methods = frozenset(('HEAD', 'GET'))
@ -259,8 +259,8 @@ class Router(object):
lsz = max(len(r.matchers) for r in self)
except ValueError:
lsz = 0
self.min_size_map = {sz:frozenset(r for r in self if r.min_size <= sz) for sz in xrange(lsz + 1)}
self.max_size_map = {sz:frozenset(r for r in self if r.max_size >= sz) for sz in xrange(lsz + 1)}
self.min_size_map = {sz:frozenset(r for r in self if r.min_size <= sz) for sz in range(lsz + 1)}
self.max_size_map = {sz:frozenset(r for r in self if r.max_size >= sz) for sz in range(lsz + 1)}
self.soak_routes = sorted(frozenset(r for r in self if r.soak_up_extra), key=attrgetter('min_size'), reverse=True)
def find_route(self, path):

View File

@ -13,7 +13,7 @@ from urlparse import parse_qs
import repr as reprlib
from email.utils import formatdate
from operator import itemgetter
from polyglot.builtins import map, unicode_type
from polyglot.builtins import map, unicode_type, range
from urllib import quote as urlquote
from binascii import hexlify, unhexlify
@ -370,7 +370,7 @@ class RotatingStream(object):
if not self.max_size or self.current_pos <= self.max_size or self.filename in ('/dev/stdout', '/dev/stderr'):
return
self.stream.close()
for i in xrange(self.history - 1, 0, -1):
for i in range(self.history - 1, 0, -1):
src, dest = '%s.%d' % (self.filename, i), '%s.%d' % (self.filename, i+1)
self.rename(src, dest)
self.rename(self.filename, '%s.%d' % (self.filename, 1))

View File

@ -3,7 +3,7 @@ __copyright__ = '2010, sengian <sengian1@gmail.com>'
__docformat__ = 'restructuredtext en'
import re, htmlentitydefs
from polyglot.builtins import codepoint_to_chr, map
from polyglot.builtins import codepoint_to_chr, map, range
from calibre.constants import plugins, preferred_encoding
try:
@ -28,7 +28,7 @@ def clean_ascii_chars(txt, charlist=None):
return ''
global _ascii_pat
if _ascii_pat is None:
chars = set(xrange(32))
chars = set(range(32))
chars.add(127)
for x in (9, 10, 13):
chars.remove(x)

View File

@ -14,7 +14,7 @@ from calibre.constants import (
filesystem_encoding, iswindows, plugins, preferred_encoding, isosx
)
from calibre.utils.localization import get_udc
from polyglot.builtins import unicode_type
from polyglot.builtins import unicode_type, range
def ascii_text(orig):
@ -501,7 +501,7 @@ def atomic_rename(oldpath, newpath):
are on different volumes. If succeeds, guaranteed to be atomic. newpath may
or may not exist. If it exists, it is replaced. '''
if iswindows:
for i in xrange(10):
for i in range(10):
try:
rename_file(oldpath, newpath)
break

View File

@ -15,7 +15,7 @@ from collections import OrderedDict
from itertools import islice
from itertools import izip
from polyglot.builtins import map, unicode_type
from polyglot.builtins import map, unicode_type, range
from calibre import detect_ncpus as cpu_count, as_unicode
from calibre.constants import plugins, filesystem_encoding
@ -194,7 +194,7 @@ def process_item(ctx, haystack, needle):
key = (hidx, nidx, last_idx)
mem = ctx.memory.get(key, None)
if mem is None:
for i in xrange(nidx, len(needle)):
for i in range(nidx, len(needle)):
n = needle[i]
if (len(haystack) - hidx < len(needle) - i):
score = 0
@ -295,12 +295,12 @@ def test(return_tests=False):
m('one')
start = memory()
for i in xrange(10):
for i in range(10):
doit(str(i))
gc.collect()
used10 = memory() - start
start = memory()
for i in xrange(100):
for i in range(100):
doit(str(i))
gc.collect()
used100 = memory() - start

View File

@ -23,7 +23,7 @@ from calibre.utils.filenames import atomic_rename
from calibre.utils.terminal import ANSIStream
from duktape import Context, JSError, to_python
from lzma.xz import compress, decompress
from polyglot.builtins import range
COMPILER_PATH = 'rapydscript/compiler.js.xz'
@ -372,12 +372,12 @@ class Repl(Thread):
self.from_repl.put(val[0])
except Exception as e:
if isinstance(e, JSError):
print (e.stack or e.message, file=sys.stderr)
print(e.stack or e.message, file=sys.stderr)
else:
import traceback
traceback.print_exc()
for i in xrange(100):
for i in range(100):
# Do this many times to ensure we dont deadlock
self.from_repl.put(None)

View File

@ -6,6 +6,7 @@ from __future__ import (unicode_literals, division, absolute_import,
print_function)
import os
from polyglot.builtins import range
class ReadOnlyFileBuffer(object):
@ -90,7 +91,7 @@ def svg_path_to_painter_path(d):
return float(b''.join(chars))
def parse_floats(num, x_offset=0, y_offset=0):
for i in xrange(num):
for i in range(num):
val = parse_float()
yield val + (x_offset if i % 2 == 0 else y_offset)

View File

@ -11,6 +11,7 @@ import os, sys, re
from itertools import izip
from calibre.constants import iswindows
from polyglot.builtins import range
if iswindows:
import ctypes.wintypes
@ -30,7 +31,7 @@ def fmt(code):
RATTRIBUTES = dict(
izip(xrange(1, 9), (
izip(range(1, 9), (
'bold',
'dark',
'',
@ -45,7 +46,7 @@ ATTRIBUTES = {v:fmt(k) for k, v in RATTRIBUTES.iteritems()}
del ATTRIBUTES['']
RBACKGROUNDS = dict(
izip(xrange(41, 48), (
izip(range(41, 48), (
'red',
'green',
'yellow',
@ -58,7 +59,7 @@ RBACKGROUNDS = dict(
BACKGROUNDS = {v:fmt(k) for k, v in RBACKGROUNDS.iteritems()}
RCOLORS = dict(
izip(xrange(31, 38), (
izip(range(31, 38), (
'red',
'green',
'yellow',

View File

@ -9,7 +9,7 @@ from calibre.web.feeds.news import (BasicNewsRecipe, CustomIndexRecipe,
AutomaticNewsRecipe, CalibrePeriodical)
from calibre.ebooks.BeautifulSoup import BeautifulSoup
from calibre.utils.config import JSONConfig
from polyglot.builtins import unicode_type, codepoint_to_chr
from polyglot.builtins import unicode_type, codepoint_to_chr, range
basic_recipes = (BasicNewsRecipe, AutomaticNewsRecipe, CustomIndexRecipe,
CalibrePeriodical)
@ -47,6 +47,7 @@ def compile_recipe(src):
'BeautifulSoup':BeautifulSoup,
'unicode': unicode_type,
'unichr': codepoint_to_chr,
'xrange': range,
}
exec(src, namespace)

View File

@ -1194,7 +1194,7 @@ dl.notes dd:last-of-type { page-break-after: avoid }
htmlattrs = {}
if c:
htmlattrs['class'] = "TC-%s" % c.replace(".","_")
for x in xrange(repeated):
for x in range(repeated):
self.emptytag('col', htmlattrs)
self.purgedata()
@ -1580,8 +1580,7 @@ dl.notes dd:last-of-type { page-break-after: avoid }
"""
self.lines = []
self._wfunc = self._wlines
if isinstance(odffile, (bytes, type(u'')) \
or hasattr(odffile, 'read'): # Added by Kovid
if isinstance(odffile, (bytes, type(u''))) or hasattr(odffile, 'read'): # Added by Kovid
self.document = load(odffile)
else:
self.document = odffile