diff --git a/manual/build.py b/manual/build.py index 1a2a57791e..3d0b9ad5e9 100755 --- a/manual/build.py +++ b/manual/build.py @@ -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) diff --git a/recipes/el_diplo.recipe b/recipes/el_diplo.recipe index b0b87afc86..119e010eb9 100644 --- a/recipes/el_diplo.recipe +++ b/recipes/el_diplo.recipe @@ -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']}) diff --git a/setup/translations.py b/setup/translations.py index ac8684d820..d1e580c66b 100644 --- a/setup/translations.py +++ b/setup/translations.py @@ -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//%s.po' % bname) diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index 879cdced87..f5d4a2e628 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -4,7 +4,7 @@ __copyright__ = '2008, Kovid Goyal ' __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): diff --git a/src/calibre/db/__init__.py b/src/calibre/db/__init__.py index 33565388b3..277ffbdd76 100644 --- a/src/calibre/db/__init__.py +++ b/src/calibre/db/__init__.py @@ -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 diff --git a/src/calibre/db/tables.py b/src/calibre/db/tables.py index 169b97f52d..c165edc961 100644 --- a/src/calibre/db/tables.py +++ b/src/calibre/db/tables.py @@ -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() diff --git a/src/calibre/db/tests/locking.py b/src/calibre/db/tests/locking.py index d01162b12c..efeccb0ed7 100644 --- a/src/calibre/db/tests/locking.py +++ b/src/calibre/db/tests/locking.py @@ -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() diff --git a/src/calibre/db/view.py b/src/calibre/db/view.py index 585d84d6cd..87663a980d 100644 --- a/src/calibre/db/view.py +++ b/src/calibre/db/view.py @@ -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] diff --git a/src/calibre/devices/scanner.py b/src/calibre/devices/scanner.py index 7ac97b3f84..ca3014cda9 100644 --- a/src/calibre/devices/scanner.py +++ b/src/calibre/devices/scanner.py @@ -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, diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 8275e0b7ba..a6ea48b34d 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -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) diff --git a/src/calibre/gui2/font_family_chooser.py b/src/calibre/gui2/font_family_chooser.py index f30fddc384..f68cbbcb04 100644 --- a/src/calibre/gui2/font_family_chooser.py +++ b/src/calibre/gui2/font_family_chooser.py @@ -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] diff --git a/src/calibre/gui2/icon_theme.py b/src/calibre/gui2/icon_theme.py index 8891020e85..95fc1dcaca 100644 --- a/src/calibre/gui2/icon_theme.py +++ b/src/calibre/gui2/icon_theme.py @@ -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): diff --git a/src/calibre/gui2/job_indicator.py b/src/calibre/gui2/job_indicator.py index 24ccff629b..6589d1f52f 100644 --- a/src/calibre/gui2/job_indicator.py +++ b/src/calibre/gui2/job_indicator.py @@ -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() - diff --git a/src/calibre/gui2/jobs.py b/src/calibre/gui2/jobs.py index 9e9d1f4c3f..59b6e74be1 100644 --- a/src/calibre/gui2/jobs.py +++ b/src/calibre/gui2/jobs.py @@ -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() diff --git a/src/calibre/gui2/keyboard.py b/src/calibre/gui2/keyboard.py index ebf8404a87..5d1254bc0e 100644 --- a/src/calibre/gui2/keyboard.py +++ b/src/calibre/gui2/keyboard.py @@ -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: diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index 24a1ec8326..5c397c09c8 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -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) diff --git a/src/calibre/gui2/open_with.py b/src/calibre/gui2/open_with.py index 4000649201..725b7af0c6 100644 --- a/src/calibre/gui2/open_with.py +++ b/src/calibre/gui2/open_with.py @@ -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'] diff --git a/src/calibre/gui2/pin_columns.py b/src/calibre/gui2/pin_columns.py index 51437370a2..0c205784c3 100644 --- a/src/calibre/gui2/pin_columns.py +++ b/src/calibre/gui2/pin_columns.py @@ -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) diff --git a/src/calibre/gui2/tag_mapper.py b/src/calibre/gui2/tag_mapper.py index cb2baad4fa..45af4b1211 100644 --- a/src/calibre/gui2/tag_mapper.py +++ b/src/calibre/gui2/tag_mapper.py @@ -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 diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 492e167307..ff02851f8b 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -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: diff --git a/src/calibre/library/__init__.py b/src/calibre/library/__init__.py index 58f07ca924..4e05cc537f 100644 --- a/src/calibre/library/__init__.py +++ b/src/calibre/library/__init__.py @@ -4,6 +4,9 @@ __copyright__ = '2008, Kovid Goyal ' ''' 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) - - diff --git a/src/calibre/rpdb.py b/src/calibre/rpdb.py index 4835e8e1f2..9b8b8bb1a6 100644 --- a/src/calibre/rpdb.py +++ b/src/calibre/rpdb.py @@ -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() diff --git a/src/calibre/srv/loop.py b/src/calibre/srv/loop.py index 1a60c1adc3..3dd74ccb00 100644 --- a/src/calibre/srv/loop.py +++ b/src/calibre/srv/loop.py @@ -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) diff --git a/src/calibre/srv/metadata.py b/src/calibre/srv/metadata.py index 526a2e4a08..9db376d257 100644 --- a/src/calibre/srv/metadata.py +++ b/src/calibre/srv/metadata.py @@ -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('') diff --git a/src/calibre/srv/pool.py b/src/calibre/srv/pool.py index dd0fa8978e..507aef42e5 100644 --- a/src/calibre/srv/pool.py +++ b/src/calibre/srv/pool.py @@ -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: diff --git a/src/calibre/srv/routes.py b/src/calibre/srv/routes.py index 6d96ee0891..ab81b054bb 100644 --- a/src/calibre/srv/routes.py +++ b/src/calibre/srv/routes.py @@ -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): diff --git a/src/calibre/srv/utils.py b/src/calibre/srv/utils.py index e02f96f559..91efd16b12 100644 --- a/src/calibre/srv/utils.py +++ b/src/calibre/srv/utils.py @@ -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)) diff --git a/src/calibre/utils/cleantext.py b/src/calibre/utils/cleantext.py index 3ef9962391..9e04d5d4d6 100644 --- a/src/calibre/utils/cleantext.py +++ b/src/calibre/utils/cleantext.py @@ -3,7 +3,7 @@ __copyright__ = '2010, sengian ' __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) diff --git a/src/calibre/utils/filenames.py b/src/calibre/utils/filenames.py index 98dc6ecb73..3459c852dd 100644 --- a/src/calibre/utils/filenames.py +++ b/src/calibre/utils/filenames.py @@ -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 diff --git a/src/calibre/utils/matcher.py b/src/calibre/utils/matcher.py index c417a9b41e..7da1be1742 100644 --- a/src/calibre/utils/matcher.py +++ b/src/calibre/utils/matcher.py @@ -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 diff --git a/src/calibre/utils/rapydscript.py b/src/calibre/utils/rapydscript.py index 946be0f5a4..ee0cf8aa07 100644 --- a/src/calibre/utils/rapydscript.py +++ b/src/calibre/utils/rapydscript.py @@ -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) diff --git a/src/calibre/utils/speedups.py b/src/calibre/utils/speedups.py index 7dcec14dd4..bb31aaa6ca 100644 --- a/src/calibre/utils/speedups.py +++ b/src/calibre/utils/speedups.py @@ -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) diff --git a/src/calibre/utils/terminal.py b/src/calibre/utils/terminal.py index dcfac66126..b4a28420d2 100644 --- a/src/calibre/utils/terminal.py +++ b/src/calibre/utils/terminal.py @@ -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', diff --git a/src/calibre/web/feeds/recipes/__init__.py b/src/calibre/web/feeds/recipes/__init__.py index c72454b827..4be58c8e10 100644 --- a/src/calibre/web/feeds/recipes/__init__.py +++ b/src/calibre/web/feeds/recipes/__init__.py @@ -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) diff --git a/src/odf/odf2xhtml.py b/src/odf/odf2xhtml.py index 89d75a1961..00c038d278 100644 --- a/src/odf/odf2xhtml.py +++ b/src/odf/odf2xhtml.py @@ -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