Merge in amajorek-py3k
This commit is contained in:
@@ -6,8 +6,7 @@ import linecache
|
||||
import inspect
|
||||
import warnings
|
||||
|
||||
from eventlet.common import BaseException
|
||||
from eventlet.support import greenlets as greenlet
|
||||
from eventlet.support import greenlets as greenlet, BaseException
|
||||
from eventlet import hubs
|
||||
from eventlet import greenthread
|
||||
from eventlet import debug
|
||||
|
@@ -5,8 +5,7 @@ from code import InteractiveConsole
|
||||
|
||||
import eventlet
|
||||
from eventlet import hubs
|
||||
from eventlet.common import get_errno
|
||||
from eventlet.support import greenlets
|
||||
from eventlet.support import greenlets, get_errno
|
||||
#FIXME no testcases for bckdor module
|
||||
|
||||
try:
|
||||
|
@@ -1,36 +0,0 @@
|
||||
import sys
|
||||
def get_errno(exc):
|
||||
""" Get the error code out of socket.error objects.
|
||||
socket.error in <2.5 does not have errno attribute
|
||||
socket.error in 3.x does not allow indexing access
|
||||
e.args[0] works for all.
|
||||
There are cases when args[0] is not errno.
|
||||
i.e. http://bugs.python.org/issue6471
|
||||
Maybe there are cases when errno is set, but it is not the first argument?
|
||||
"""
|
||||
|
||||
try:
|
||||
if exc.errno is not None: return exc.errno
|
||||
except AttributeError:
|
||||
pass
|
||||
try:
|
||||
return exc.args[0]
|
||||
except IndexError:
|
||||
return None
|
||||
|
||||
if sys.version_info[0]<3:
|
||||
from sys import exc_clear as clear_sys_exc_info
|
||||
else:
|
||||
def clear_sys_exc_info():
|
||||
"""No-op In py3k.
|
||||
Exception information is not visible outside of except statements.
|
||||
sys.exc_clear became obsolete and removed."""
|
||||
pass
|
||||
|
||||
if sys.version_info[0]==2 and sys.version_info[1]<5:
|
||||
class BaseException: # pylint: disable-msg=W0622
|
||||
# not subclassing from object() intentionally, because in
|
||||
# that case "raise Timeout" fails with TypeError.
|
||||
pass
|
||||
else:
|
||||
from __builtin__ import BaseException
|
@@ -1,6 +1,6 @@
|
||||
from OpenSSL import SSL as orig_SSL
|
||||
from OpenSSL.SSL import *
|
||||
from eventlet.common import get_errno
|
||||
from eventlet.support import get_errno
|
||||
from eventlet import greenio
|
||||
from eventlet.hubs import trampoline
|
||||
import socket
|
||||
|
@@ -3,7 +3,7 @@ import errno
|
||||
socket = __import__("socket")
|
||||
|
||||
from eventlet import greenio
|
||||
from eventlet.common import get_errno
|
||||
from eventlet.support import get_errno
|
||||
from eventlet import greenthread
|
||||
from eventlet import hubs
|
||||
|
||||
|
@@ -6,7 +6,7 @@ for attr in dir(__ssl):
|
||||
import errno
|
||||
time = __import__('time')
|
||||
|
||||
from eventlet.common import get_errno
|
||||
from eventlet.support import get_errno
|
||||
from eventlet.hubs import trampoline
|
||||
from eventlet.greenio import set_nonblocking, GreenSocket, SOCKET_CLOSED, CONNECT_ERR, CONNECT_SUCCESS
|
||||
orig_socket = __import__('socket')
|
||||
|
@@ -1,4 +1,4 @@
|
||||
from eventlet.common import get_errno
|
||||
from eventlet.support import get_errno
|
||||
from eventlet.hubs import trampoline
|
||||
BUFFER_SIZE = 4096
|
||||
|
||||
|
@@ -2,8 +2,7 @@ import heapq
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
from eventlet.common import clear_sys_exc_info
|
||||
from eventlet.support import greenlets as greenlet
|
||||
from eventlet.support import greenlets as greenlet, clear_sys_exc_info
|
||||
from eventlet.hubs import timer
|
||||
from eventlet import patcher
|
||||
time = patcher.original('time')
|
||||
|
@@ -5,7 +5,7 @@ select = patcher.original('select')
|
||||
time = patcher.original('time')
|
||||
sleep = time.sleep
|
||||
|
||||
from eventlet.common import get_errno, clear_sys_exc_info
|
||||
from eventlet.support import get_errno, clear_sys_exc_info
|
||||
from eventlet.hubs.hub import BaseHub, READ, WRITE
|
||||
|
||||
EXC_MASK = select.POLLERR | select.POLLHUP
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import sys
|
||||
import errno
|
||||
from eventlet import patcher
|
||||
from eventlet.common import get_errno, clear_sys_exc_info
|
||||
from eventlet.support import get_errno, clear_sys_exc_info
|
||||
select = patcher.original('select')
|
||||
time = patcher.original('time')
|
||||
|
||||
|
@@ -117,7 +117,7 @@ def _read_response(id, attribute, input, cp):
|
||||
"""local helper method to read respones from the rpc server."""
|
||||
try:
|
||||
str = _read_lp_hunk(input)
|
||||
_prnt(`str`)
|
||||
_prnt(repr(str))
|
||||
response = Pickle.loads(str)
|
||||
except (AttributeError, DeadProcess, Pickle.UnpicklingError), e:
|
||||
raise UnrecoverableError(e)
|
||||
@@ -577,7 +577,7 @@ class Server(object):
|
||||
_log("responding with: %s" % body)
|
||||
#_log("objects: %s" % self._objects)
|
||||
s = Pickle.dumps(body)
|
||||
_log(`s`)
|
||||
_log(repr(s))
|
||||
_write_lp_hunk(self._out, s)
|
||||
|
||||
def write_exception(self, e):
|
||||
|
@@ -0,0 +1,36 @@
|
||||
import sys
|
||||
def get_errno(exc):
|
||||
""" Get the error code out of socket.error objects.
|
||||
socket.error in <2.5 does not have errno attribute
|
||||
socket.error in 3.x does not allow indexing access
|
||||
e.args[0] works for all.
|
||||
There are cases when args[0] is not errno.
|
||||
i.e. http://bugs.python.org/issue6471
|
||||
Maybe there are cases when errno is set, but it is not the first argument?
|
||||
"""
|
||||
|
||||
try:
|
||||
if exc.errno is not None: return exc.errno
|
||||
except AttributeError:
|
||||
pass
|
||||
try:
|
||||
return exc.args[0]
|
||||
except IndexError:
|
||||
return None
|
||||
|
||||
if sys.version_info[0]<3:
|
||||
from sys import exc_clear as clear_sys_exc_info
|
||||
else:
|
||||
def clear_sys_exc_info():
|
||||
"""No-op In py3k.
|
||||
Exception information is not visible outside of except statements.
|
||||
sys.exc_clear became obsolete and removed."""
|
||||
pass
|
||||
|
||||
if sys.version_info[0]==2 and sys.version_info[1]<5:
|
||||
class BaseException: # pylint: disable-msg=W0622
|
||||
# not subclassing from object() intentionally, because in
|
||||
# that case "raise Timeout" fails with TypeError.
|
||||
pass
|
||||
else:
|
||||
from __builtin__ import BaseException
|
||||
|
@@ -20,8 +20,7 @@
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.from eventlet.support import greenlets as greenlet
|
||||
|
||||
from eventlet.common import BaseException
|
||||
from eventlet.support import greenlets as greenlet
|
||||
from eventlet.support import greenlets as greenlet, BaseException
|
||||
from eventlet.hubs import get_hub
|
||||
|
||||
__all__ = ['Timeout',
|
||||
|
@@ -169,7 +169,7 @@ class Proxy(object):
|
||||
|
||||
def __getattr__(self,attr_name):
|
||||
f = getattr(self._obj,attr_name)
|
||||
if not callable(f):
|
||||
if not hasattr(f, '__call__'):
|
||||
if (isinstance(f, self._autowrap) or
|
||||
attr_name in self._autowrap_names):
|
||||
return Proxy(f, self._autowrap)
|
||||
@@ -199,6 +199,8 @@ class Proxy(object):
|
||||
# wrapped object in such a way that they would block
|
||||
def __eq__(self, rhs):
|
||||
return self._obj.__eq__(rhs)
|
||||
def __hash__(self):
|
||||
return self._obj.__hash__()
|
||||
def __repr__(self):
|
||||
return self._obj.__repr__()
|
||||
def __str__(self):
|
||||
|
@@ -10,7 +10,7 @@ from eventlet.green import socket
|
||||
from eventlet.green import BaseHTTPServer
|
||||
from eventlet import greenpool
|
||||
from eventlet import greenio
|
||||
from eventlet.common import get_errno
|
||||
from eventlet.support import get_errno
|
||||
|
||||
DEFAULT_MAX_SIMULTANEOUS_REQUESTS = 1024
|
||||
DEFAULT_MAX_HTTP_VERSION = 'HTTP/1.1'
|
||||
|
@@ -30,7 +30,7 @@ class TestServe(LimitedTestCase):
|
||||
# tests that the server closes the client sock on handle() exception
|
||||
def crasher(sock,addr):
|
||||
sock.recv(1024)
|
||||
0/0
|
||||
0//0
|
||||
|
||||
l = eventlet.listen(('localhost', 0))
|
||||
gt = eventlet.spawn(eventlet.serve, l, crasher)
|
||||
@@ -44,7 +44,7 @@ class TestServe(LimitedTestCase):
|
||||
def crasher(sock,addr):
|
||||
sock.recv(1024)
|
||||
sock.close()
|
||||
0/0
|
||||
0//0
|
||||
|
||||
l = eventlet.listen(('localhost', 0))
|
||||
gt = eventlet.spawn(eventlet.serve, l, crasher)
|
||||
|
@@ -3,7 +3,7 @@ from tests import LimitedTestCase, skip_with_pyevent, main, skipped, s2b
|
||||
from eventlet import event
|
||||
from eventlet import greenio
|
||||
from eventlet import debug
|
||||
from eventlet.common import get_errno
|
||||
from eventlet.support import get_errno
|
||||
from eventlet.green import socket
|
||||
from eventlet.green import time
|
||||
from eventlet.green.socket import GreenSSLObject
|
||||
|
@@ -51,7 +51,7 @@ class TestExceptionInMainloop(LimitedTestCase):
|
||||
assert delay >= DELAY*0.9, 'sleep returned after %s seconds (was scheduled for %s)' % (delay, DELAY)
|
||||
|
||||
def fail():
|
||||
1/0
|
||||
1//0
|
||||
|
||||
hubs.get_hub().schedule_call_global(0, fail)
|
||||
|
||||
|
@@ -46,7 +46,7 @@ def parse_unittest_output(s):
|
||||
fail = int(fail or '0')
|
||||
error = int(error or '0')
|
||||
else:
|
||||
assert ok_match, `s`
|
||||
assert ok_match, repr(s)
|
||||
timeout_match = re.search('^===disabled because of timeout: (\d+)$', s, re.M)
|
||||
if timeout_match:
|
||||
timeout = int(timeout_match.group(1))
|
||||
|
@@ -82,7 +82,6 @@ class TestSaranwrap(LimitedTestCase):
|
||||
self.assertEqual(1, prox['a'])
|
||||
self.assertEqual(str(my_object), str(prox))
|
||||
self.assertEqual('saran:' + repr(my_object), repr(prox))
|
||||
self.assertEqual('saran:' + `my_object`, `prox`)
|
||||
|
||||
@skip_on_windows
|
||||
@skip_with_pyevent
|
||||
|
@@ -40,7 +40,7 @@ class TestGreenness(unittest.TestCase):
|
||||
urllib2.urlopen('http://127.0.0.1:%s' % self.port)
|
||||
assert False, 'should not get there'
|
||||
except urllib2.HTTPError, ex:
|
||||
assert ex.code == 501, `ex`
|
||||
assert ex.code == 501, repr(ex)
|
||||
self.assertEqual(self.server.request_count, 1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@@ -4,7 +4,7 @@ are not leaked by the hub.
|
||||
import sys
|
||||
import unittest
|
||||
from pprint import pformat
|
||||
from eventlet.common import clear_sys_exc_info
|
||||
from eventlet.support import clear_sys_exc_info
|
||||
from eventlet.green import socket
|
||||
from eventlet.green.thread import start_new_thread
|
||||
from eventlet.green.time import sleep
|
||||
@@ -31,7 +31,7 @@ def handle_request(s, raise_on_timeout):
|
||||
return
|
||||
#print 'handle_request - accepted'
|
||||
res = conn.recv(100)
|
||||
assert res == 'hello', `res`
|
||||
assert res == 'hello', repr(res)
|
||||
#print 'handle_request - recvd %r' % res
|
||||
res = conn.send('bye')
|
||||
#print 'handle_request - sent %r' % res
|
||||
@@ -46,7 +46,7 @@ def make_request(port):
|
||||
res = s.send('hello')
|
||||
#print 'make_request - sent %s' % res
|
||||
res = s.recv(100)
|
||||
assert res == 'bye', `res`
|
||||
assert res == 'bye', repr(res)
|
||||
#print 'make_request - recvd %r' % res
|
||||
#s.close()
|
||||
|
||||
|
@@ -29,7 +29,7 @@ class Test(unittest.TestCase):
|
||||
def test_block_on_already_succeed(self):
|
||||
d = defer.succeed('hey corotwine')
|
||||
res = block_on(d)
|
||||
assert res == 'hey corotwine', `res`
|
||||
assert res == 'hey corotwine', repr(res)
|
||||
|
||||
@requires_twisted
|
||||
def test_block_on_already_failed(self):
|
||||
|
@@ -160,7 +160,7 @@ class TestGreenTransport_bufsize1(TestGreenTransport):
|
||||
# self.conn.write('hello\r\n')
|
||||
# sleep(DELAY*1.5) # make sure the rest of data arrives
|
||||
# try:
|
||||
# 1/0
|
||||
# 1//0
|
||||
# except:
|
||||
# #self.conn.loseConnection(failure.Failure()) # does not work, why?
|
||||
# spawn(self.conn._queue.send_exception, *sys.exc_info())
|
||||
@@ -176,7 +176,7 @@ class TestGreenTransport_bufsize1(TestGreenTransport):
|
||||
# self.assertEqual('you said hello. ', self.conn.recv())
|
||||
# sleep(DELAY*1.5) # make sure the rest of data arrives
|
||||
# try:
|
||||
# 1/0
|
||||
# 1//0
|
||||
# except:
|
||||
# #self.conn.loseConnection(failure.Failure()) # does not work, why?
|
||||
# spawn(self.conn._queue.send_exception, *sys.exc_info())
|
||||
|
@@ -51,7 +51,7 @@ class Test(LimitedTestCase):
|
||||
pass
|
||||
|
||||
try:
|
||||
1/0
|
||||
1//0
|
||||
except:
|
||||
try:
|
||||
with Timeout(DELAY, sys.exc_info()[0]):
|
||||
|
@@ -74,7 +74,6 @@ class TestTpool(LimitedTestCase):
|
||||
self.assertEqual(1, prox['a'])
|
||||
self.assertEqual(str(my_object), str(prox))
|
||||
self.assertEqual(repr(my_object), repr(prox))
|
||||
self.assertEqual(`my_object`, `prox`)
|
||||
|
||||
@skip_with_pyevent
|
||||
def test_wrap_module_class(self):
|
||||
@@ -93,6 +92,17 @@ class TestTpool(LimitedTestCase):
|
||||
exp3 = prox.compile('/')
|
||||
self.assert_(exp1 != exp3)
|
||||
|
||||
@skip_with_pyevent
|
||||
def test_wrap_hash(self):
|
||||
prox1 = tpool.Proxy(''+'A')
|
||||
prox2 = tpool.Proxy('A'+'')
|
||||
self.assert_(prox1=='A')
|
||||
self.assert_('A'==prox2)
|
||||
#self.assert_(prox1==prox2) FIXME - could __eq__ unwrap rhs if it is other proxy?
|
||||
self.assertEqual(hash(prox1), hash(prox2))
|
||||
proxList = tpool.Proxy([])
|
||||
self.assertRaises(TypeError, hash, proxList)
|
||||
|
||||
@skip_with_pyevent
|
||||
def test_wrap_nonzero(self):
|
||||
prox = tpool.Proxy(re)
|
||||
|
@@ -14,7 +14,7 @@ from eventlet import greenio
|
||||
from eventlet.green import socket as greensocket
|
||||
from eventlet import wsgi
|
||||
from eventlet import processes
|
||||
from eventlet.common import get_errno
|
||||
from eventlet.support import get_errno
|
||||
|
||||
from tests import find_command
|
||||
|
||||
@@ -137,9 +137,9 @@ class TestHttpd(LimitedTestCase):
|
||||
self.spawn_server()
|
||||
|
||||
def tearDown(self):
|
||||
super(TestHttpd, self).tearDown()
|
||||
greenthread.kill(self.killer)
|
||||
eventlet.sleep(0)
|
||||
super(TestHttpd, self).tearDown()
|
||||
|
||||
def spawn_server(self, **kwargs):
|
||||
"""Spawns a new wsgi server with the given arguments.
|
||||
@@ -147,8 +147,10 @@ class TestHttpd(LimitedTestCase):
|
||||
running it.
|
||||
|
||||
Kills any previously-running server."""
|
||||
eventlet.sleep(0) # give previous server a chance to start
|
||||
if self.killer:
|
||||
greenthread.kill(self.killer)
|
||||
eventlet.sleep(0) # give killer a chance to kill
|
||||
|
||||
new_kwargs = dict(max_size=128,
|
||||
log=self.logfile,
|
||||
@@ -252,6 +254,7 @@ class TestHttpd(LimitedTestCase):
|
||||
a = cgi.parse_qs(body).get('a', [1])[0]
|
||||
start_response('200 OK', [('Content-type', 'text/plain')])
|
||||
return ['a is %s, body is %s' % (a, body)]
|
||||
|
||||
self.site.application = new_app
|
||||
sock = eventlet.connect(
|
||||
('localhost', self.port))
|
||||
@@ -559,7 +562,7 @@ class TestHttpd(LimitedTestCase):
|
||||
# shut down the server and verify the server_socket fd is still open,
|
||||
# but the actual socketobject passed in to wsgi.server is closed
|
||||
greenthread.kill(self.killer)
|
||||
api.sleep(0.001) # make the kill go through
|
||||
eventlet.sleep(0) # make the kill go through
|
||||
try:
|
||||
server_sock_2.accept()
|
||||
# shouldn't be able to use this one anymore
|
||||
@@ -676,7 +679,7 @@ class TestHttpd(LimitedTestCase):
|
||||
old_stderr = sys.stderr
|
||||
try:
|
||||
sys.stderr = self.logfile
|
||||
api.sleep(0) # need to enter server loop
|
||||
eventlet.sleep(0) # need to enter server loop
|
||||
try:
|
||||
eventlet.connect(('localhost', self.port))
|
||||
self.fail("Didn't expect to connect")
|
||||
@@ -758,7 +761,7 @@ class TestHttpd(LimitedTestCase):
|
||||
client.sendall(data)
|
||||
else: # close sock prematurely
|
||||
client.close()
|
||||
api.sleep(0) # let context switch back to server
|
||||
eventlet.sleep(0) # let context switch back to server
|
||||
self.assert_(not errored[0], errored[0])
|
||||
# make another request to ensure the server's still alive
|
||||
try:
|
||||
|
Reference in New Issue
Block a user