python3 compatibility: range, zip, StringIO

This commit is contained in:
Viktors
2014-04-17 21:07:09 +03:00
committed by Sergey Shepelev
parent e4dedf7336
commit 92d12567b2
7 changed files with 32 additions and 38 deletions

View File

@@ -1,4 +1,3 @@
import itertools
import traceback
from eventlet import event
@@ -6,6 +5,7 @@ from eventlet import greenthread
from eventlet import queue
from eventlet import semaphore
from eventlet.support import greenlets as greenlet
from eventlet.support import six
__all__ = ['GreenPool', 'GreenPile']
@@ -154,16 +154,16 @@ class GreenPool(object):
def imap(self, function, *iterables):
"""This is the same as :func:`itertools.imap`, and has the same
concurrency and memory behavior as :meth:`starmap`.
It's quite convenient for, e.g., farming out jobs from a file::
def worker(line):
return do_something(line)
pool = GreenPool()
for result in pool.imap(worker, open("filename", 'r')):
print result
"""
return self.starmap(function, itertools.izip(*iterables))
return self.starmap(function, six.moves.zip(*iterables))
def return_stop_iteration():

View File

@@ -1,10 +1,13 @@
from eventlet.support import greenlets as greenlet
import traceback
from eventlet.support import greenlets as greenlet, six
from eventlet.hubs import get_hub
""" If true, captures a stack trace for each timer when constructed. This is
useful for debugging leaking timers, to find out where the timer was set up. """
_g_debug = False
class Timer(object):
def __init__(self, seconds, cb, *args, **kw):
"""Create a timer.
@@ -20,8 +23,7 @@ class Timer(object):
self.tpl = cb, args, kw
self.called = False
if _g_debug:
import traceback, cStringIO
self.traceback = cStringIO.StringIO()
self.traceback = six.StringIO()
traceback.print_stack(file=self.traceback)
@property
@@ -31,7 +33,7 @@ class Timer(object):
def __repr__(self):
secs = getattr(self, 'seconds', None)
cb, args, kw = getattr(self, 'tpl', (None, None, None))
retval = "Timer(%s, %s, *%s, **%s)" % (
retval = "Timer(%s, %s, *%s, **%s)" % (
secs, cb, args, kw)
if _g_debug and hasattr(self, 'traceback'):
retval += '\n' + self.traceback.getvalue()
@@ -74,8 +76,9 @@ class Timer(object):
# No default ordering in 3.x. heapq uses <
# FIXME should full set be added?
def __lt__(self, other):
return id(self)<id(other)
def __lt__(self, other):
return id(self) < id(other)
class LocalTimer(Timer):
@@ -100,4 +103,3 @@ class LocalTimer(Timer):
def cancel(self):
self.greenlet = None
Timer.cancel(self)

View File

@@ -451,7 +451,7 @@ class RFC6455WebSocket(WebSocket):
def _apply_mask(data, mask, length=None, offset=0):
if length is None:
length = len(data)
cnt = xrange(length)
cnt = range(length)
return ''.join(chr(ord(data[i]) ^ mask[(offset + i) % 4]) for i in cnt)
def _handle_control_frame(self, opcode, data):

View File

@@ -2,13 +2,10 @@ import sys
import eventlet
from eventlet import debug
from eventlet.support import six
from tests import LimitedTestCase, main, s2b
from unittest import TestCase
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
class TestSpew(TestCase):
def setUp(self):
@@ -33,7 +30,7 @@ class TestSpew(TestCase):
self.failUnlessEqual(self.tracer, None)
def test_line(self):
sys.stdout = StringIO()
sys.stdout = six.StringIO()
s = debug.Spew()
f = sys._getframe()
s(f, "line", None)
@@ -43,7 +40,7 @@ class TestSpew(TestCase):
self.failUnless("f=<frame object at" in output)
def test_line_nofile(self):
sys.stdout = StringIO()
sys.stdout = six.StringIO()
s = debug.Spew()
g = globals().copy()
del g['__file__']
@@ -56,7 +53,7 @@ class TestSpew(TestCase):
def test_line_global(self):
global GLOBAL_VAR
sys.stdout = StringIO()
sys.stdout = six.StringIO()
GLOBAL_VAR = debug.Spew()
f = sys._getframe()
GLOBAL_VAR(f, "line", None)
@@ -69,7 +66,7 @@ class TestSpew(TestCase):
del GLOBAL_VAR
def test_line_novalue(self):
sys.stdout = StringIO()
sys.stdout = six.StringIO()
s = debug.Spew(show_values=False)
f = sys._getframe()
s(f, "line", None)
@@ -79,7 +76,7 @@ class TestSpew(TestCase):
self.failIf("f=<frame object at" in output)
def test_line_nooutput(self):
sys.stdout = StringIO()
sys.stdout = six.StringIO()
s = debug.Spew(trace_names=['foo'])
f = sys._getframe()
s(f, "line", None)
@@ -106,16 +103,16 @@ class TestDebug(LimitedTestCase):
server = eventlet.listen(('0.0.0.0', 0))
client = eventlet.connect(('127.0.0.1', server.getsockname()[1]))
client_2, addr = server.accept()
def hurl(s):
s.recv(1)
{}[1] # keyerror
fake = StringIO()
fake = six.StringIO()
orig = sys.stderr
sys.stderr = fake
try:
gt = eventlet.spawn(hurl, client_2)
gt = eventlet.spawn(hurl, client_2)
eventlet.sleep(0)
client.send(s2b(' '))
eventlet.sleep(0)
@@ -127,8 +124,8 @@ class TestDebug(LimitedTestCase):
self.assertRaises(KeyError, gt.wait)
debug.hub_exceptions(False)
# look for the KeyError exception in the traceback
self.assert_('KeyError: 1' in fake.getvalue(),
self.assert_('KeyError: 1' in fake.getvalue(),
"Traceback not in:\n" + fake.getvalue())
if __name__ == "__main__":
main()

View File

@@ -274,7 +274,7 @@ class GreenPool(tests.LimitedTestCase):
def test_imap_multi_args(self):
p = greenpool.GreenPool(4)
result_list = list(p.imap(passthru2, range(10), range(10, 20)))
self.assertEquals(result_list, list(itertools.izip(range(10), range(10,20))))
self.assertEquals(result_list, list(zip(range(10), range(10,20))))
def test_imap_raises(self):
# testing the case where the function raises an exception;

View File

@@ -19,7 +19,7 @@ def handle(ws):
break
ws.send(m)
elif ws.path == '/range':
for i in xrange(10):
for i in range(10):
ws.send("msg %d" % i)
eventlet.sleep(0.01)
elif ws.path == '/error':

View File

@@ -14,7 +14,7 @@ from eventlet import event
from eventlet import hubs
from eventlet.green import socket as greensocket
from eventlet import wsgi
from eventlet.support import get_errno
from eventlet.support import get_errno, six
from tests import find_command, run_python
@@ -23,11 +23,6 @@ httplib = eventlet.import_patched('httplib')
certificate_file = os.path.join(os.path.dirname(__file__), 'test_server.crt')
private_key_file = os.path.join(os.path.dirname(__file__), 'test_server.key')
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
HttpReadResult = collections.namedtuple(
'HttpReadResult',
@@ -205,7 +200,7 @@ def read_http(sock):
class _TestBase(LimitedTestCase):
def setUp(self):
super(_TestBase, self).setUp()
self.logfile = StringIO()
self.logfile = six.StringIO()
self.site = Site()
self.killer = None
self.set_site()
@@ -635,7 +630,7 @@ class TestHttpd(_TestBase):
self.assert_('1.2.3.4,5.6.7.8,127.0.0.1' in self.logfile.getvalue())
# turning off the option should work too
self.logfile = StringIO()
self.logfile = six.StringIO()
self.spawn_server(log_x_forwarded_for=False)
sock = eventlet.connect(('localhost', self.port))
@@ -777,7 +772,7 @@ class TestHttpd(_TestBase):
listener = greensocket.socket()
listener.bind(('localhost', 0))
# NOT calling listen, to trigger the error
self.logfile = StringIO()
self.logfile = six.StringIO()
self.spawn_server(sock=listener)
old_stderr = sys.stderr
try:
@@ -1133,7 +1128,7 @@ class TestHttpd(_TestBase):
sock = eventlet.listen(('::1', 0), family=socket.AF_INET6)
except (socket.gaierror, socket.error): # probably no ipv6
return
log = StringIO()
log = six.StringIO()
# first thing the server does is try to log the IP it's bound to
def run_server():