python3 compatibility: range, zip, StringIO
This commit is contained in:
@@ -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():
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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':
|
||||
|
||||
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user