Index: lnt/lnttool/admin.py =================================================================== --- lnt/lnttool/admin.py +++ lnt/lnttool/admin.py @@ -1,17 +1,19 @@ #!/usr/bin/env python +from future import standard_library +standard_library.install_aliases() import click from importlib import import_module from .common import submit_options def _load_dependencies(): - global yaml, sys, requests, json, os, httplib + global yaml, sys, requests, json, os, http yaml = import_module('yaml') sys = import_module('sys') requests = import_module('requests') json = import_module('json') os = import_module('os') - httplib = import_module('httplib') + http = import_module('http.client') def _error(msg): @@ -102,7 +104,7 @@ return sys.stderr.write("%d: %s\n" % - (status_code, httplib.responses.get(status_code, ''))) + (status_code, http.client.responses.get(status_code, ''))) sys.stderr.write("\n%s\n" % response.text) sys.exit(1) Index: lnt/lnttool/viewcomparison.py =================================================================== --- lnt/lnttool/viewcomparison.py +++ lnt/lnttool/viewcomparison.py @@ -60,7 +60,7 @@ import os import shutil import tempfile - import thread + import _thread init_logger(logging.ERROR) @@ -98,7 +98,7 @@ logger.info("opening comparison view: %s" % (comparison_url,)) if not dry_run: - thread.start_new_thread(_start_browser, (comparison_url, True)) + _thread.start_new_thread(_start_browser, (comparison_url, True)) # Run the webserver. app = lnt.server.ui.app.App.create_with_instance(instance) Index: lnt/server/ui/app.py =================================================================== --- lnt/server/ui/app.py +++ lnt/server/ui/app.py @@ -1,5 +1,7 @@ from __future__ import print_function -import StringIO +from future import standard_library +standard_library.install_aliases() +import io import logging import logging.handlers import sys @@ -97,7 +99,7 @@ # FIXME: Conditionalize on an is_production variable. show_sql = bool(self.args.get('db_log') or self.form.get('db_log')) if show_sql: - g.db_log = StringIO.StringIO() + g.db_log = io.StringIO() logger = logging.getLogger("sqlalchemy") logger.addHandler(logging.StreamHandler(g.db_log)) return self.db Index: lnt/server/ui/filters.py =================================================================== --- lnt/server/ui/filters.py +++ lnt/server/ui/filters.py @@ -1,6 +1,6 @@ from future import standard_library standard_library.install_aliases() -import StringIO +import io import datetime import pprint import urllib.parse @@ -26,7 +26,7 @@ def filter_pprint(value): - stream = StringIO.StringIO() + stream = io.StringIO() pprint.pprint(value, stream) return stream.getvalue() Index: lnt/server/ui/views.py =================================================================== --- lnt/server/ui/views.py +++ lnt/server/ui/views.py @@ -1,10 +1,12 @@ +from future import standard_library +standard_library.install_aliases() import datetime import json import os import re import time from collections import namedtuple, defaultdict -from urlparse import urlparse, urljoin +from urllib.parse import urlparse, urljoin import flask import sqlalchemy.sql Index: lnt/testing/profile/profilev1impl.py =================================================================== --- lnt/testing/profile/profilev1impl.py +++ lnt/testing/profile/profilev1impl.py @@ -1,5 +1,7 @@ +from future import standard_library +standard_library.install_aliases() from lnt.testing.profile.profile import ProfileImpl -import cPickle +import pickle import zlib @@ -48,11 +50,11 @@ @staticmethod def deserialize(fobj): o = zlib.decompress(fobj.read()) - data = cPickle.loads(o) + data = pickle.loads(o) return ProfileV1(data) def serialize(self, fname=None): - obj = cPickle.dumps(self.data) + obj = pickle.dumps(self.data) compressed_obj = zlib.compress(obj) if fname is None: Index: lnt/testing/profile/profilev2impl.py =================================================================== --- lnt/testing/profile/profilev2impl.py +++ lnt/testing/profile/profilev2impl.py @@ -1,7 +1,8 @@ from __future__ import absolute_import from builtins import range +from future import standard_library +standard_library.install_aliases() from .profile import ProfileImpl -import StringIO import bz2 import copy import io @@ -92,7 +93,7 @@ n = 0 shift = 0 while True: - b = ord(fobj.read(1)) + b = bytearray(fobj.read(1))[0] n |= (b & 0x7F) << shift shift += 7 if (b & 0x80) == 0: @@ -108,7 +109,7 @@ n >>= 7 if n != 0: b |= 0x80 - fobj.write(chr(b)) + fobj.write(bytearray([b])) if n == 0: break @@ -118,15 +119,15 @@ """ Read a string from a stream. """ - return fobj.readline()[:-1] + return fobj.readline()[:-1].decode() def writeString(fobj, s): """ Write a string to a stream. """ - fobj.write(str(s)) - fobj.write('\n') + fobj.write(s.encode()) + fobj.write(u'\n'.encode()) def readFloat(fobj): @@ -183,7 +184,7 @@ class CompressedSection(Section): def read(self, fobj): fobj.seek(self.offset + self.start) - _io = StringIO.StringIO(bz2.decompress(fobj.read(self.size))) + _io = io.BytesIO(bz2.decompress(fobj.read(self.size))) return self.deserialize(_io) def write(self, fobj): @@ -214,12 +215,12 @@ raise NotImplementedError() else: - _io = StringIO.StringIO(bz2.decompress(fobj.read(self.size))) + _io = io.BytesIO(bz2.decompress(fobj.read(self.size))) self.size = len(_io.getvalue()) return self.deserialize(_io) def write(self, fobj): - _io = StringIO.StringIO() + _io = io.BytesIO() if self.pool_fname: raise NotImplementedError() @@ -334,7 +335,7 @@ def extractForFunction(self, fname, counters): offset = self.function_offsets[fname] - _io = StringIO.StringIO(self.data) + _io = io.BytesIO(self.data) _io.seek(offset) counters.sort() while True: @@ -384,7 +385,7 @@ def extractForFunction(self, fname): offset = self.function_offsets[fname] - _io = StringIO.StringIO(self.data) + _io = io.BytesIO(self.data) _io.seek(offset) last_address = 0 while True: @@ -436,7 +437,7 @@ def extractForFunction(self, fname): offset = self.function_offsets[fname] - _io = StringIO.StringIO(self.data) + _io = io.BytesIO(self.data) _io.seek(offset) while True: n = readNum(_io) @@ -455,7 +456,7 @@ # Populate data with a single character initially so that zero is # never a valid string pool index. LineText relies upon this to use # zero as a sentinel. - self.data = StringIO.StringIO('\n') + self.data = io.BytesIO(u'\n'.encode()) self.pool_read = False def serialize(self, fobj): @@ -464,7 +465,7 @@ def deserialize(self, fobj): # FIXME: Make this lazy! - self.data = StringIO.StringIO(fobj.read(self.size)) + self.data = io.BytesIO(fobj.read(self.size)) def upgrade(self, impl): pass @@ -591,7 +592,7 @@ def serialize(self, fname=None): # If we're not writing to a file, emulate a file object instead. if fname is None: - fobj = StringIO.StringIO() + fobj = io.BytesIO() else: fobj = open(fname, 'wb') @@ -613,7 +614,7 @@ # We need to write all sections first, so we know their offset # before we write the header. - tmpio = StringIO.StringIO() + tmpio = io.BytesIO() offsets = {} sizes = {} for section in sections: Index: lnt/testing/util/rcs.py =================================================================== --- lnt/testing/util/rcs.py +++ lnt/testing/util/rcs.py @@ -1,3 +1,5 @@ +from future import standard_library +standard_library.install_aliases() import re import os from lnt.util import logger Index: lnt/tests/compile.py =================================================================== --- lnt/tests/compile.py +++ lnt/tests/compile.py @@ -1,5 +1,7 @@ """Single file compile-time performance testing""" from __future__ import print_function +from future import standard_library +standard_library.install_aliases() import errno import hashlib import json Index: lnt/util/wsgi_restart.py =================================================================== --- lnt/util/wsgi_restart.py +++ lnt/util/wsgi_restart.py @@ -1,18 +1,20 @@ # This code lifted from the mod_wsgi docs. from __future__ import print_function +from future import standard_library +standard_library.install_aliases() import os import sys import signal import threading import atexit -import Queue +import queue _interval = 1.0 _times = {} _files = [] _running = False -_queue = Queue.Queue() +_queue = queue.Queue() _lock = threading.Lock() Index: tests/server/ui/V4Pages.py =================================================================== --- tests/server/ui/V4Pages.py +++ tests/server/ui/V4Pages.py @@ -17,11 +17,13 @@ # # RUN: python %s %t.instance %{tidylib} +from future import standard_library +standard_library.install_aliases() import logging import re import sys import xml.etree.ElementTree as ET -from htmlentitydefs import name2codepoint +from html.entities import name2codepoint from flask import session import lnt.server.db.migrate import lnt.server.ui.app