Reformat with autopep8

This commit is contained in:
Jakub Stasiak
2014-10-10 09:41:15 +01:00
parent 765d7df36d
commit 93f2a8d068
34 changed files with 212 additions and 136 deletions

View File

@@ -73,7 +73,8 @@ def launch_heavy_threads():
server_sock.bind(('localhost', 0)) server_sock.bind(('localhost', 0))
server_sock.listen(50) server_sock.listen(50)
addr = ('localhost', server_sock.getsockname()[1]) addr = ('localhost', server_sock.getsockname()[1])
accepter_thread = threading.Thread(None, heavy_accepter, "accepter thread", (server_sock, threads)) accepter_thread = threading.Thread(
None, heavy_accepter, "accepter thread", (server_sock, threads))
accepter_thread.start() accepter_thread.start()
threads.append(accepter_thread) threads.append(accepter_thread)
for i in six.moves.range(CONCURRENCY): for i in six.moves.range(CONCURRENCY):
@@ -112,4 +113,5 @@ if __name__ == "__main__":
print("green:", results[launch_green_threads]) print("green:", results[launch_green_threads])
if opts.threading: if opts.threading:
print("threads:", results[launch_heavy_threads]) print("threads:", results[launch_heavy_threads])
print("%", (results[launch_green_threads] - results[launch_heavy_threads]) / results[launch_heavy_threads] * 100) print("%", (results[launch_green_threads] - results[launch_heavy_threads]
) / results[launch_heavy_threads] * 100)

View File

@@ -127,7 +127,8 @@ except ImportError:
from eventlet.green.OpenSSL import SSL from eventlet.green.OpenSSL import SSL
except ImportError: except ImportError:
def wrap_ssl_impl(*a, **kw): def wrap_ssl_impl(*a, **kw):
raise ImportError("To use SSL with Eventlet, you must install PyOpenSSL or use Python 2.6 or later.") raise ImportError(
"To use SSL with Eventlet, you must install PyOpenSSL or use Python 2.6 or later.")
else: else:
def wrap_ssl_impl(sock, keyfile=None, certfile=None, server_side=False, def wrap_ssl_impl(sock, keyfile=None, certfile=None, server_side=False,
cert_reqs=None, ssl_version=None, ca_certs=None, cert_reqs=None, ssl_version=None, ca_certs=None,

View File

@@ -317,73 +317,107 @@ class GenericConnectionWrapper(object):
# setattr(class, name, lambda self, *a, **kw: getattr(self._base, name)(*a, **kw)) # setattr(class, name, lambda self, *a, **kw: getattr(self._base, name)(*a, **kw))
# * def __getattr__(self, name): if name in (...): return getattr(self._base, name) # * def __getattr__(self, name): if name in (...): return getattr(self._base, name)
# * other? # * other?
def __enter__(self): return self._base.__enter__() def __enter__(self):
return self._base.__enter__()
def __exit__(self, exc, value, tb): return self._base.__exit__(exc, value, tb) def __exit__(self, exc, value, tb):
return self._base.__exit__(exc, value, tb)
def __repr__(self): return self._base.__repr__() def __repr__(self):
return self._base.__repr__()
def affected_rows(self): return self._base.affected_rows() def affected_rows(self):
return self._base.affected_rows()
def autocommit(self, *args, **kwargs): return self._base.autocommit(*args, **kwargs) def autocommit(self, *args, **kwargs):
return self._base.autocommit(*args, **kwargs)
def begin(self): return self._base.begin() def begin(self):
return self._base.begin()
def change_user(self, *args, **kwargs): return self._base.change_user(*args, **kwargs) def change_user(self, *args, **kwargs):
return self._base.change_user(*args, **kwargs)
def character_set_name(self, *args, **kwargs): return self._base.character_set_name(*args, **kwargs) def character_set_name(self, *args, **kwargs):
return self._base.character_set_name(*args, **kwargs)
def close(self, *args, **kwargs): return self._base.close(*args, **kwargs) def close(self, *args, **kwargs):
return self._base.close(*args, **kwargs)
def commit(self, *args, **kwargs): return self._base.commit(*args, **kwargs) def commit(self, *args, **kwargs):
return self._base.commit(*args, **kwargs)
def cursor(self, *args, **kwargs): return self._base.cursor(*args, **kwargs) def cursor(self, *args, **kwargs):
return self._base.cursor(*args, **kwargs)
def dump_debug_info(self, *args, **kwargs): return self._base.dump_debug_info(*args, **kwargs) def dump_debug_info(self, *args, **kwargs):
return self._base.dump_debug_info(*args, **kwargs)
def errno(self, *args, **kwargs): return self._base.errno(*args, **kwargs) def errno(self, *args, **kwargs):
return self._base.errno(*args, **kwargs)
def error(self, *args, **kwargs): return self._base.error(*args, **kwargs) def error(self, *args, **kwargs):
return self._base.error(*args, **kwargs)
def errorhandler(self, *args, **kwargs): return self._base.errorhandler(*args, **kwargs) def errorhandler(self, *args, **kwargs):
return self._base.errorhandler(*args, **kwargs)
def insert_id(self, *args, **kwargs): return self._base.insert_id(*args, **kwargs) def insert_id(self, *args, **kwargs):
return self._base.insert_id(*args, **kwargs)
def literal(self, *args, **kwargs): return self._base.literal(*args, **kwargs) def literal(self, *args, **kwargs):
return self._base.literal(*args, **kwargs)
def set_character_set(self, *args, **kwargs): return self._base.set_character_set(*args, **kwargs) def set_character_set(self, *args, **kwargs):
return self._base.set_character_set(*args, **kwargs)
def set_sql_mode(self, *args, **kwargs): return self._base.set_sql_mode(*args, **kwargs) def set_sql_mode(self, *args, **kwargs):
return self._base.set_sql_mode(*args, **kwargs)
def show_warnings(self): return self._base.show_warnings() def show_warnings(self):
return self._base.show_warnings()
def warning_count(self): return self._base.warning_count() def warning_count(self):
return self._base.warning_count()
def ping(self, *args, **kwargs): return self._base.ping(*args, **kwargs) def ping(self, *args, **kwargs):
return self._base.ping(*args, **kwargs)
def query(self, *args, **kwargs): return self._base.query(*args, **kwargs) def query(self, *args, **kwargs):
return self._base.query(*args, **kwargs)
def rollback(self, *args, **kwargs): return self._base.rollback(*args, **kwargs) def rollback(self, *args, **kwargs):
return self._base.rollback(*args, **kwargs)
def select_db(self, *args, **kwargs): return self._base.select_db(*args, **kwargs) def select_db(self, *args, **kwargs):
return self._base.select_db(*args, **kwargs)
def set_server_option(self, *args, **kwargs): return self._base.set_server_option(*args, **kwargs) def set_server_option(self, *args, **kwargs):
return self._base.set_server_option(*args, **kwargs)
def server_capabilities(self, *args, **kwargs): return self._base.server_capabilities(*args, **kwargs) def server_capabilities(self, *args, **kwargs):
return self._base.server_capabilities(*args, **kwargs)
def shutdown(self, *args, **kwargs): return self._base.shutdown(*args, **kwargs) def shutdown(self, *args, **kwargs):
return self._base.shutdown(*args, **kwargs)
def sqlstate(self, *args, **kwargs): return self._base.sqlstate(*args, **kwargs) def sqlstate(self, *args, **kwargs):
return self._base.sqlstate(*args, **kwargs)
def stat(self, *args, **kwargs): return self._base.stat(*args, **kwargs) def stat(self, *args, **kwargs):
return self._base.stat(*args, **kwargs)
def store_result(self, *args, **kwargs): return self._base.store_result(*args, **kwargs) def store_result(self, *args, **kwargs):
return self._base.store_result(*args, **kwargs)
def string_literal(self, *args, **kwargs): return self._base.string_literal(*args, **kwargs) def string_literal(self, *args, **kwargs):
return self._base.string_literal(*args, **kwargs)
def thread_id(self, *args, **kwargs): return self._base.thread_id(*args, **kwargs) def thread_id(self, *args, **kwargs):
return self._base.thread_id(*args, **kwargs)
def use_result(self, *args, **kwargs): return self._base.use_result(*args, **kwargs) def use_result(self, *args, **kwargs):
return self._base.use_result(*args, **kwargs)
class PooledConnectionWrapper(GenericConnectionWrapper): class PooledConnectionWrapper(GenericConnectionWrapper):
@@ -420,7 +454,7 @@ class PooledConnectionWrapper(GenericConnectionWrapper):
def __del__(self): def __del__(self):
return # this causes some issues if __del__ is called in the return # this causes some issues if __del__ is called in the
# main coroutine, so for now this is disabled # main coroutine, so for now this is disabled
# self.close() # self.close()

View File

@@ -18,11 +18,13 @@ __all__ = dir(builtins_orig)
__patched__ = ['file', 'open'] __patched__ = ['file', 'open']
slurp_properties(builtins_orig, globals(), slurp_properties(builtins_orig, globals(),
ignore=__patched__, srckeys=dir(builtins_orig)) ignore=__patched__, srckeys=dir(builtins_orig))
hubs.get_hub() hubs.get_hub()
__original_file = file __original_file = file
class file(__original_file): class file(__original_file):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(file, self).__init__(*args, **kwargs) super(file, self).__init__(*args, **kwargs)
@@ -30,6 +32,8 @@ class file(__original_file):
__original_open = open __original_open = open
__opening = False __opening = False
def open(*args): def open(*args):
global __opening global __opening
result = __original_open(*args) result = __original_open(*args)
@@ -40,4 +44,4 @@ def open(*args):
__opening = True __opening = True
hubs.notify_opened(result.fileno()) hubs.notify_opened(result.fileno())
__opening = False __opening = False
return result return result

View File

@@ -96,6 +96,8 @@ def waitpid(pid, options):
greenthread.sleep(0.01) greenthread.sleep(0.01)
__original_open__ = os_orig.open __original_open__ = os_orig.open
def open(file, flags, mode=0o777): def open(file, flags, mode=0o777):
""" Wrap os.open """ Wrap os.open
This behaves identically, but collaborates with This behaves identically, but collaborates with

View File

@@ -58,7 +58,7 @@ class GreenSSLSocket(_original_sslsocket):
# nonblocking socket handshaking on connect got disabled so let's pretend it's disabled # nonblocking socket handshaking on connect got disabled so let's pretend it's disabled
# even when it's on # even when it's on
super(GreenSSLSocket, self).__init__( super(GreenSSLSocket, self).__init__(
sock.fd, keyfile, certfile, server_side,cert_reqs, ssl_version, sock.fd, keyfile, certfile, server_side, cert_reqs, ssl_version,
ca_certs, do_handshake_on_connect and six.PY2, *args, **kw) ca_certs, do_handshake_on_connect and six.PY2, *args, **kw)
# the superclass initializer trashes the methods so we remove # the superclass initializer trashes the methods so we remove
@@ -208,17 +208,20 @@ class GreenSSLSocket(_original_sslsocket):
def recv_into(self, buffer, nbytes=None, flags=0): def recv_into(self, buffer, nbytes=None, flags=0):
if not self.act_non_blocking: if not self.act_non_blocking:
trampoline(self, read=True, timeout=self.gettimeout(), timeout_exc=timeout_exc('timed out')) trampoline(self, read=True, timeout=self.gettimeout(),
timeout_exc=timeout_exc('timed out'))
return super(GreenSSLSocket, self).recv_into(buffer, nbytes, flags) return super(GreenSSLSocket, self).recv_into(buffer, nbytes, flags)
def recvfrom(self, addr, buflen=1024, flags=0): def recvfrom(self, addr, buflen=1024, flags=0):
if not self.act_non_blocking: if not self.act_non_blocking:
trampoline(self, read=True, timeout=self.gettimeout(), timeout_exc=timeout_exc('timed out')) trampoline(self, read=True, timeout=self.gettimeout(),
timeout_exc=timeout_exc('timed out'))
return super(GreenSSLSocket, self).recvfrom(addr, buflen, flags) return super(GreenSSLSocket, self).recvfrom(addr, buflen, flags)
def recvfrom_into(self, buffer, nbytes=None, flags=0): def recvfrom_into(self, buffer, nbytes=None, flags=0):
if not self.act_non_blocking: if not self.act_non_blocking:
trampoline(self, read=True, timeout=self.gettimeout(), timeout_exc=timeout_exc('timed out')) trampoline(self, read=True, timeout=self.gettimeout(),
timeout_exc=timeout_exc('timed out'))
return super(GreenSSLSocket, self).recvfrom_into(buffer, nbytes, flags) return super(GreenSSLSocket, self).recvfrom_into(buffer, nbytes, flags)
def unwrap(self): def unwrap(self):

View File

@@ -74,6 +74,7 @@ if hasattr(__thread, 'stack_size'):
return __original_stack_size__(size) return __original_stack_size__(size)
else: else:
pass pass
# not going to decrease stack_size, because otherwise other greenlets in this thread will suffer # not going to decrease stack_size, because otherwise other greenlets in
# this thread will suffer
from eventlet.corolocal import local as _local from eventlet.corolocal import local as _local

View File

@@ -191,8 +191,8 @@ class GreenSocket(object):
raise IOClosed() raise IOClosed()
try: try:
return trampoline(fd, read=read, write=write, timeout=timeout, return trampoline(fd, read=read, write=write, timeout=timeout,
timeout_exc=timeout_exc, timeout_exc=timeout_exc,
mark_as_closed=self._mark_as_closed) mark_as_closed=self._mark_as_closed)
except IOClosed: except IOClosed:
# This socket's been obsoleted. De-fang it. # This socket's been obsoleted. De-fang it.
self._mark_as_closed() self._mark_as_closed()
@@ -209,7 +209,7 @@ class GreenSocket(object):
set_nonblocking(client) set_nonblocking(client)
return type(self)(client), addr return type(self)(client), addr
self._trampoline(fd, read=True, timeout=self.gettimeout(), self._trampoline(fd, read=True, timeout=self.gettimeout(),
timeout_exc=socket.timeout("timed out")) timeout_exc=socket.timeout("timed out"))
def _mark_as_closed(self): def _mark_as_closed(self):
""" Mark this socket as being closed """ """ Mark this socket as being closed """
@@ -243,7 +243,7 @@ class GreenSocket(object):
raise socket.timeout("timed out") raise socket.timeout("timed out")
try: try:
self._trampoline(fd, write=True, timeout=end - time.time(), self._trampoline(fd, write=True, timeout=end - time.time(),
timeout_exc=socket.timeout("timed out")) timeout_exc=socket.timeout("timed out"))
except IOClosed: except IOClosed:
# ... we need some workable errno here. # ... we need some workable errno here.
raise socket.error(errno.EBADFD) raise socket.error(errno.EBADFD)
@@ -271,7 +271,7 @@ class GreenSocket(object):
if time.time() >= end: if time.time() >= end:
raise socket.timeout(errno.EAGAIN) raise socket.timeout(errno.EAGAIN)
self._trampoline(fd, write=True, timeout=end - time.time(), self._trampoline(fd, write=True, timeout=end - time.time(),
timeout_exc=socket.timeout(errno.EAGAIN)) timeout_exc=socket.timeout(errno.EAGAIN))
socket_checkerr(fd) socket_checkerr(fd)
except socket.error as ex: except socket.error as ex:
return get_errno(ex) return get_errno(ex)
@@ -327,19 +327,19 @@ class GreenSocket(object):
def recvfrom(self, *args): def recvfrom(self, *args):
if not self.act_non_blocking: if not self.act_non_blocking:
self._trampoline(self.fd, read=True, timeout=self.gettimeout(), self._trampoline(self.fd, read=True, timeout=self.gettimeout(),
timeout_exc=socket.timeout("timed out")) timeout_exc=socket.timeout("timed out"))
return self.fd.recvfrom(*args) return self.fd.recvfrom(*args)
def recvfrom_into(self, *args): def recvfrom_into(self, *args):
if not self.act_non_blocking: if not self.act_non_blocking:
self._trampoline(self.fd, read=True, timeout=self.gettimeout(), self._trampoline(self.fd, read=True, timeout=self.gettimeout(),
timeout_exc=socket.timeout("timed out")) timeout_exc=socket.timeout("timed out"))
return self.fd.recvfrom_into(*args) return self.fd.recvfrom_into(*args)
def recv_into(self, *args): def recv_into(self, *args):
if not self.act_non_blocking: if not self.act_non_blocking:
self._trampoline(self.fd, read=True, timeout=self.gettimeout(), self._trampoline(self.fd, read=True, timeout=self.gettimeout(),
timeout_exc=socket.timeout("timed out")) timeout_exc=socket.timeout("timed out"))
return self.fd.recv_into(*args) return self.fd.recv_into(*args)
def send(self, data, flags=0): def send(self, data, flags=0):
@@ -362,7 +362,7 @@ class GreenSocket(object):
try: try:
self._trampoline(self.fd, write=True, timeout=self.gettimeout(), self._trampoline(self.fd, write=True, timeout=self.gettimeout(),
timeout_exc=socket.timeout("timed out")) timeout_exc=socket.timeout("timed out"))
except IOClosed: except IOClosed:
raise socket.error(errno.ECONNRESET, 'Connection closed by another thread') raise socket.error(errno.ECONNRESET, 'Connection closed by another thread')
@@ -432,8 +432,8 @@ class _SocketDuckForFd(object):
raise IOClosed() raise IOClosed()
try: try:
return trampoline(fd, read=read, write=write, timeout=timeout, return trampoline(fd, read=read, write=write, timeout=timeout,
timeout_exc=timeout_exc, timeout_exc=timeout_exc,
mark_as_closed=self._mark_as_closed) mark_as_closed=self._mark_as_closed)
except IOClosed: except IOClosed:
# Our fileno has been obsoleted. Defang ourselves to # Our fileno has been obsoleted. Defang ourselves to
# prevent spurious closes. # prevent spurious closes.

View File

@@ -8,7 +8,8 @@ from eventlet.hubs import timer
from eventlet.support import greenlets as greenlet, six from eventlet.support import greenlets as greenlet, six
import warnings import warnings
__all__ = ['getcurrent', 'sleep', 'spawn', 'spawn_n', 'spawn_after', 'spawn_after_local', 'GreenThread'] __all__ = ['getcurrent', 'sleep', 'spawn', 'spawn_n',
'spawn_after', 'spawn_after_local', 'GreenThread']
getcurrent = greenlet.getcurrent getcurrent = greenlet.getcurrent

View File

@@ -120,7 +120,7 @@ from eventlet import timeout
def trampoline(fd, read=None, write=None, timeout=None, def trampoline(fd, read=None, write=None, timeout=None,
timeout_exc=timeout.Timeout, timeout_exc=timeout.Timeout,
mark_as_closed = None): mark_as_closed=None):
"""Suspend the current coroutine until the given socket object or file """Suspend the current coroutine until the given socket object or file
descriptor is ready to *read*, ready to *write*, or the specified descriptor is ready to *read*, ready to *write*, or the specified
*timeout* elapses, depending on arguments specified. *timeout* elapses, depending on arguments specified.
@@ -163,6 +163,7 @@ def trampoline(fd, read=None, write=None, timeout=None,
if t is not None: if t is not None:
t.cancel() t.cancel()
def notify_close(fd): def notify_close(fd):
""" """
A particular file descriptor has been explicitly closed. Register for any A particular file descriptor has been explicitly closed. Register for any
@@ -171,6 +172,7 @@ def notify_close(fd):
hub = get_hub() hub = get_hub()
hub.notify_close(fd) hub.notify_close(fd)
def notify_opened(fd): def notify_opened(fd):
""" """
Some file descriptors may be closed 'silently' - that is, by the garbage Some file descriptors may be closed 'silently' - that is, by the garbage

View File

@@ -173,7 +173,7 @@ class BaseHub(object):
"If you do know what you're doing and want to disable " "If you do know what you're doing and want to disable "
"this error, call " "this error, call "
"eventlet.debug.hub_prevent_multiple_readers(False) - MY THREAD=%s; THAT THREAD=%s" % ( "eventlet.debug.hub_prevent_multiple_readers(False) - MY THREAD=%s; THAT THREAD=%s" % (
evtype, fileno, evtype, cb, bucket[fileno])) evtype, fileno, evtype, cb, bucket[fileno]))
# store off the second listener in another structure # store off the second listener in another structure
self.secondaries[evtype].setdefault(fileno, []).append(listener) self.secondaries[evtype].setdefault(fileno, []).append(listener)
else: else:
@@ -365,7 +365,8 @@ class BaseHub(object):
if self.running: if self.running:
self.stopping = True self.stopping = True
if wait: if wait:
assert self.greenlet is not greenlet.getcurrent(), "Can't abort with wait from inside the hub's greenlet." assert self.greenlet is not greenlet.getcurrent(
), "Can't abort with wait from inside the hub's greenlet."
# schedule an immediate timer just so the hub doesn't sleep # schedule an immediate timer just so the hub doesn't sleep
self.schedule_call_global(0, lambda: None) self.schedule_call_global(0, lambda: None)
# switch to it; when done the hub will switch back to its parent, # switch to it; when done the hub will switch back to its parent,

View File

@@ -88,7 +88,8 @@ class Hub(BaseHub):
def abort(self, wait=True): def abort(self, wait=True):
self.schedule_call_global(0, self.greenlet.throw, greenlet.GreenletExit) self.schedule_call_global(0, self.greenlet.throw, greenlet.GreenletExit)
if wait: if wait:
assert self.greenlet is not greenlet.getcurrent(), "Can't abort with wait from inside the hub's greenlet." assert self.greenlet is not greenlet.getcurrent(
), "Can't abort with wait from inside the hub's greenlet."
self.switch() self.switch()
def _getrunning(self): def _getrunning(self):

View File

@@ -38,7 +38,7 @@ def callLater(DelayedCallClass, reactor, _seconds, _f, *args, **kw):
if not isinstance(_seconds, (int, long, float)): if not isinstance(_seconds, (int, long, float)):
raise TypeError("Seconds must be int, long, or float, was " + type(_seconds)) raise TypeError("Seconds must be int, long, or float, was " + type(_seconds))
assert sys.maxint >= _seconds >= 0, \ assert sys.maxint >= _seconds >= 0, \
"%s is not greater than or equal to 0 seconds" % (_seconds,) "%s is not greater than or equal to 0 seconds" % (_seconds,)
tple = DelayedCallClass(reactor.seconds() + _seconds, _f, args, kw, tple = DelayedCallClass(reactor.seconds() + _seconds, _f, args, kw,
reactor._cancelCallLater, reactor._cancelCallLater,
reactor._moveCallLaterSooner, reactor._moveCallLaterSooner,
@@ -109,11 +109,11 @@ class BaseTwistedHub(object):
def switch(self): def switch(self):
assert greenlet.getcurrent() is not self.greenlet, \ assert greenlet.getcurrent() is not self.greenlet, \
"Cannot switch from MAINLOOP to MAINLOOP" "Cannot switch from MAINLOOP to MAINLOOP"
try: try:
greenlet.getcurrent().parent = self.greenlet greenlet.getcurrent().parent = self.greenlet
except ValueError: except ValueError:
pass pass
return self.greenlet.switch() return self.greenlet.switch()
def stop(self): def stop(self):
@@ -197,17 +197,17 @@ class TwistedHub(BaseTwistedHub):
def __init__(self): def __init__(self):
assert Hub.state == 0, ('%s hub can only be instantiated once' % type(self).__name__, assert Hub.state == 0, ('%s hub can only be instantiated once' % type(self).__name__,
Hub.state) Hub.state)
Hub.state = 1 Hub.state = 1
make_twisted_threadpool_daemonic() # otherwise the program make_twisted_threadpool_daemonic() # otherwise the program
# would hang after the main # would hang after the main
# greenlet exited # greenlet exited
g = greenlet.greenlet(self.run) g = greenlet.greenlet(self.run)
BaseTwistedHub.__init__(self, g) BaseTwistedHub.__init__(self, g)
def switch(self): def switch(self):
assert greenlet.getcurrent() is not self.greenlet, \ assert greenlet.getcurrent() is not self.greenlet, \
"Cannot switch from MAINLOOP to MAINLOOP" "Cannot switch from MAINLOOP to MAINLOOP"
if self.greenlet.dead: if self.greenlet.dead:
self.greenlet = greenlet.greenlet(self.run) self.greenlet = greenlet.greenlet(self.run)
try: try:

View File

@@ -70,7 +70,7 @@ def inject(module_name, new_globals, *additional_modules):
_green_socket_modules() + _green_socket_modules() +
_green_thread_modules() + _green_thread_modules() +
_green_time_modules()) _green_time_modules())
# _green_MySQLdb()) # enable this after a short baking-in period # _green_MySQLdb()) # enable this after a short baking-in period
# after this we are gonna screw with sys.modules, so capture the # after this we are gonna screw with sys.modules, so capture the
# state of all the modules we're going to mess with, and lock # state of all the modules we're going to mess with, and lock

View File

@@ -108,7 +108,8 @@ class Waiter(object):
"""Wake up the greenlet that is calling wait() currently (if there is one). """Wake up the greenlet that is calling wait() currently (if there is one).
Can only be called from Hub's greenlet. Can only be called from Hub's greenlet.
""" """
assert getcurrent() is get_hub().greenlet, "Can only use Waiter.switch method from the mainloop" assert getcurrent() is get_hub(
).greenlet, "Can only use Waiter.switch method from the mainloop"
if self.greenlet is not None: if self.greenlet is not None:
try: try:
self.greenlet.switch(value) self.greenlet.switch(value)
@@ -119,7 +120,8 @@ class Waiter(object):
"""Make greenlet calling wait() wake up (if there is a wait()). """Make greenlet calling wait() wake up (if there is a wait()).
Can only be called from Hub's greenlet. Can only be called from Hub's greenlet.
""" """
assert getcurrent() is get_hub().greenlet, "Can only use Waiter.switch method from the mainloop" assert getcurrent() is get_hub(
).greenlet, "Can only use Waiter.switch method from the mainloop"
if self.greenlet is not None: if self.greenlet is not None:
try: try:
self.greenlet.throw(*throw_args) self.greenlet.throw(*throw_args)
@@ -335,7 +337,8 @@ class LightQueue(object):
getter = self.getters.pop() getter = self.getters.pop()
if getter: if getter:
item = putter.item item = putter.item
putter.item = _NONE # this makes greenlet calling put() not to call _put() again # this makes greenlet calling put() not to call _put() again
putter.item = _NONE
self._put(item) self._put(item)
item = self._get() item = self._get()
getter.switch(item) getter.switch(item)

View File

@@ -228,7 +228,7 @@ def getnameinfo(sockaddr, flags):
except (ValueError, TypeError): except (ValueError, TypeError):
if not isinstance(sockaddr, tuple): if not isinstance(sockaddr, tuple):
del sockaddr # to pass a stdlib test that is del sockaddr # to pass a stdlib test that is
# hyper-careful about reference counts # hyper-careful about reference counts
raise TypeError('getnameinfo() argument 1 must be a tuple') raise TypeError('getnameinfo() argument 1 must be a tuple')
else: else:
# must be ipv6 sockaddr, pretending we don't know how to resolve it # must be ipv6 sockaddr, pretending we don't know how to resolve it

View File

@@ -5,7 +5,7 @@ try:
getcurrent = greenlet.greenlet.getcurrent getcurrent = greenlet.greenlet.getcurrent
GreenletExit = greenlet.greenlet.GreenletExit GreenletExit = greenlet.greenlet.GreenletExit
preserves_excinfo = (distutils.version.LooseVersion(greenlet.__version__) preserves_excinfo = (distutils.version.LooseVersion(greenlet.__version__)
>= distutils.version.LooseVersion('0.3.2')) >= distutils.version.LooseVersion('0.3.2'))
greenlet = greenlet.greenlet greenlet = greenlet.greenlet
except ImportError as e: except ImportError as e:
raise raise

View File

@@ -262,7 +262,8 @@ del attr
Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes
sys.modules[__name__ + ".moves.urllib_parse"] = sys.modules[__name__ + ".moves.urllib.parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse") sys.modules[__name__ + ".moves.urllib_parse"] = sys.modules[__name__ +
".moves.urllib.parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse")
class Module_six_moves_urllib_error(_LazyModule): class Module_six_moves_urllib_error(_LazyModule):
@@ -280,7 +281,8 @@ del attr
Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes
sys.modules[__name__ + ".moves.urllib_error"] = sys.modules[__name__ + ".moves.urllib.error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib.error") sys.modules[__name__ + ".moves.urllib_error"] = sys.modules[__name__ +
".moves.urllib.error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib.error")
class Module_six_moves_urllib_request(_LazyModule): class Module_six_moves_urllib_request(_LazyModule):
@@ -328,7 +330,8 @@ del attr
Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes
sys.modules[__name__ + ".moves.urllib_request"] = sys.modules[__name__ + ".moves.urllib.request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib.request") sys.modules[__name__ + ".moves.urllib_request"] = sys.modules[__name__ +
".moves.urllib.request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib.request")
class Module_six_moves_urllib_response(_LazyModule): class Module_six_moves_urllib_response(_LazyModule):
@@ -347,7 +350,8 @@ del attr
Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes
sys.modules[__name__ + ".moves.urllib_response"] = sys.modules[__name__ + ".moves.urllib.response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib.response") sys.modules[__name__ + ".moves.urllib_response"] = sys.modules[__name__ +
".moves.urllib.response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib.response")
class Module_six_moves_urllib_robotparser(_LazyModule): class Module_six_moves_urllib_robotparser(_LazyModule):
@@ -363,7 +367,8 @@ del attr
Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes
sys.modules[__name__ + ".moves.urllib_robotparser"] = sys.modules[__name__ + ".moves.urllib.robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser") sys.modules[__name__ + ".moves.urllib_robotparser"] = sys.modules[__name__ +
".moves.urllib.robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser")
class Module_six_moves_urllib(types.ModuleType): class Module_six_moves_urllib(types.ModuleType):
@@ -574,8 +579,8 @@ if print_ is None:
data = str(data) data = str(data)
# If the file has an encoding, encode unicode with it. # If the file has an encoding, encode unicode with it.
if (isinstance(fp, file) and if (isinstance(fp, file) and
isinstance(data, unicode) and isinstance(data, unicode) and
fp.encoding is not None): fp.encoding is not None):
errors = getattr(fp, "errors", None) errors = getattr(fp, "errors", None)
if errors is None: if errors is None:
errors = "strict" errors = "strict"

View File

@@ -1,6 +1,7 @@
from eventlet.hubs import get_hub from eventlet.hubs import get_hub
from eventlet import spawn, getcurrent from eventlet import spawn, getcurrent
def block_on(deferred): def block_on(deferred):
cur = [getcurrent()] cur = [getcurrent()]
synchronous = [] synchronous = []
@@ -28,6 +29,7 @@ def block_on(deferred):
finally: finally:
del cur[0] del cur[0]
def _putResultInDeferred(deferred, f, args, kwargs): def _putResultInDeferred(deferred, f, args, kwargs):
try: try:
result = f(*args, **kwargs) result = f(*args, **kwargs)
@@ -38,17 +40,19 @@ def _putResultInDeferred(deferred, f, args, kwargs):
else: else:
deferred.callback(result) deferred.callback(result)
def deferToGreenThread(func, *args, **kwargs): def deferToGreenThread(func, *args, **kwargs):
from twisted.internet import defer from twisted.internet import defer
d = defer.Deferred() d = defer.Deferred()
spawn(_putResultInDeferred, d, func, args, kwargs) spawn(_putResultInDeferred, d, func, args, kwargs)
return d return d
def callInGreenThread(func, *args, **kwargs): def callInGreenThread(func, *args, **kwargs):
return spawn(func, *args, **kwargs) return spawn(func, *args, **kwargs)
if __name__=='__main__': if __name__ == '__main__':
import sys import sys
try: try:
num = int(sys.argv[1]) num = int(sys.argv[1])
@@ -58,21 +62,20 @@ if __name__=='__main__':
def test(): def test():
print(block_on(reactor.resolver.getHostByName('www.google.com'))) print(block_on(reactor.resolver.getHostByName('www.google.com')))
print(block_on(reactor.resolver.getHostByName('###'))) print(block_on(reactor.resolver.getHostByName('###')))
if num==0: if num == 0:
test() test()
elif num==1: elif num == 1:
spawn(test) spawn(test)
from eventlet import sleep from eventlet import sleep
print('sleeping..') print('sleeping..')
sleep(5) sleep(5)
print('done sleeping..') print('done sleeping..')
elif num==2: elif num == 2:
from eventlet.twistedutil import join_reactor from eventlet.twistedutil import join_reactor
spawn(test) spawn(test)
reactor.run() reactor.run()
elif num==3: elif num == 3:
from eventlet.twistedutil import join_reactor from eventlet.twistedutil import join_reactor
print("fails because it's impossible to use block_on from the mainloop") print("fails because it's impossible to use block_on from the mainloop")
reactor.callLater(0, test) reactor.callLater(0, test)
reactor.run() reactor.run()

View File

@@ -27,7 +27,7 @@ class ValueQueue(Queue):
Queue and it is an exception, raise it, but keep it in the Queue, so Queue and it is an exception, raise it, but keep it in the Queue, so
that future calls to wait() will raise it again. that future calls to wait() will raise it again.
""" """
if self.has_error() and len(self.items)==1: if self.has_error() and len(self.items) == 1:
# the last item, which is an exception, raise without emptying the Queue # the last item, which is an exception, raise without emptying the Queue
getcurrent().throw(*self.items[0][1]) getcurrent().throw(*self.items[0][1])
else: else:
@@ -49,6 +49,7 @@ class Event(BaseEvent):
self.reset() self.reset()
return BaseEvent.send_exception(self, *throw_args) return BaseEvent.send_exception(self, *throw_args)
class Producer2Event(object): class Producer2Event(object):
# implements IPullProducer # implements IPullProducer
@@ -117,7 +118,7 @@ class GreenTransportBase(object):
self._disconnected_event.wait() self._disconnected_event.wait()
def __getattr__(self, item): def __getattr__(self, item):
if item=='transport': if item == 'transport':
raise AttributeError(item) raise AttributeError(item)
if hasattr(self, 'transport'): if hasattr(self, 'transport'):
try: try:
@@ -131,12 +132,12 @@ class GreenTransportBase(object):
def resumeProducing(self): def resumeProducing(self):
self.paused -= 1 self.paused -= 1
if self.paused==0: if self.paused == 0:
self.transport.resumeProducing() self.transport.resumeProducing()
def pauseProducing(self): def pauseProducing(self):
self.paused += 1 self.paused += 1
if self.paused==1: if self.paused == 1:
self.transport.pauseProducing() self.transport.pauseProducing()
def _init_transport_producer(self): def _init_transport_producer(self):
@@ -229,7 +230,7 @@ class GreenTransport(GreenTransportBase):
except: except:
if not self._disconnected_event.has_exception(): if not self._disconnected_event.has_exception():
raise raise
if size>=0: if size >= 0:
result, self._buffer = self._buffer[:size], self._buffer[size:] result, self._buffer = self._buffer[:size], self._buffer[size:]
else: else:
result, self._buffer = self._buffer, '' result, self._buffer = self._buffer, ''
@@ -247,7 +248,7 @@ class GreenTransport(GreenTransportBase):
try: try:
try: try:
recvd = self._wait() recvd = self._wait()
#print 'received %r' % recvd # print 'received %r' % recvd
self._buffer += recvd self._buffer += recvd
except ConnectionDone: except ConnectionDone:
pass pass
@@ -411,4 +412,3 @@ class SpawnFactory(SimpleSpawnFactory):
for g in self.greenlets: for g in self.greenlets:
results.append(g.wait()) results.append(g.wait())
return results return results

View File

@@ -38,4 +38,3 @@ class LineOnlyReceiverTransport(GreenTransportBase):
return self.readline() return self.readline()
except ConnectionDone: except ConnectionDone:
raise StopIteration raise StopIteration

View File

@@ -16,11 +16,11 @@ conn.loseWriteConnection()
print(conn.read()) print(conn.read())
# read from SSL connection line by line # read from SSL connection line by line
conn = GreenClientCreator(reactor, LineOnlyReceiverTransport).connectSSL('sf.net', 443, ssl.ClientContextFactory()) conn = GreenClientCreator(reactor, LineOnlyReceiverTransport).connectSSL(
'sf.net', 443, ssl.ClientContextFactory())
conn.write('GET / HTTP/1.0\r\n\r\n') conn.write('GET / HTTP/1.0\r\n\r\n')
try: try:
for num, line in enumerate(conn): for num, line in enumerate(conn):
print('%3s %r' % (num, line)) print('%3s %r' % (num, line))
except ConnectionClosed as ex: except ConnectionClosed as ex:
print(ex) print(ex)

View File

@@ -17,6 +17,7 @@ from eventlet.twistedutil import deferToGreenThread
from eventlet.twistedutil import join_reactor from eventlet.twistedutil import join_reactor
from eventlet.green import httplib from eventlet.green import httplib
class LineOnlyReceiver(basic.LineOnlyReceiver): class LineOnlyReceiver(basic.LineOnlyReceiver):
def connectionMade(self): def connectionMade(self):
@@ -31,7 +32,7 @@ class LineOnlyReceiver(basic.LineOnlyReceiver):
def requestReceived(self, lines): def requestReceived(self, lines):
request = re.match('^(\w+) http://(.*?)(/.*?) HTTP/1..$', lines[0]) request = re.match('^(\w+) http://(.*?)(/.*?) HTTP/1..$', lines[0])
#print request.groups() # print request.groups()
method, host, path = request.groups() method, host, path = request.groups()
headers = dict(x.split(': ', 1) for x in lines[1:]) headers = dict(x.split(': ', 1) for x in lines[1:])
def callback(result): def callback(result):
@@ -43,6 +44,7 @@ class LineOnlyReceiver(basic.LineOnlyReceiver):
d = deferToGreenThread(http_request, method, host, path, headers=headers) d = deferToGreenThread(http_request, method, host, path, headers=headers)
d.addCallbacks(callback, errback) d.addCallbacks(callback, errback)
def http_request(method, host, path, headers): def http_request(method, host, path, headers):
conn = httplib.HTTPConnection(host) conn = httplib.HTTPConnection(host)
conn.request(method, path, headers=headers) conn.request(method, path, headers=headers)
@@ -51,6 +53,7 @@ def http_request(method, host, path, headers):
print(method, host, path, response.status, response.reason, len(body)) print(method, host, path, response.status, response.reason, len(body))
return format_response(response, body) return format_response(response, body)
def format_response(response, body): def format_response(response, body):
result = "HTTP/1.1 %s %s" % (response.status, response.reason) result = "HTTP/1.1 %s %s" % (response.status, response.reason)
for k, v in response.getheaders(): for k, v in response.getheaders():
@@ -61,6 +64,7 @@ def format_response(response, body):
result += '\r\n' result += '\r\n'
return result return result
class MyFactory(Factory): class MyFactory(Factory):
protocol = LineOnlyReceiver protocol = LineOnlyReceiver

View File

@@ -6,6 +6,7 @@ from eventlet.twistedutil import join_reactor
from eventlet.twistedutil.protocol import GreenClientCreator, SpawnFactory, UnbufferedTransport from eventlet.twistedutil.protocol import GreenClientCreator, SpawnFactory, UnbufferedTransport
from eventlet import proc from eventlet import proc
def forward(source, dest): def forward(source, dest):
try: try:
while True: while True:
@@ -17,6 +18,7 @@ def forward(source, dest):
finally: finally:
dest.loseConnection() dest.loseConnection()
def handler(local): def handler(local):
client = str(local.getHost()) client = str(local.getHost())
print('accepted connection from %s' % client) print('accepted connection from %s' % client)

View File

@@ -9,6 +9,7 @@ from eventlet.twistedutil import join_reactor
from eventlet.twistedutil.protocol import SpawnFactory from eventlet.twistedutil.protocol import SpawnFactory
from eventlet.twistedutil.protocols.basic import LineOnlyReceiverTransport from eventlet.twistedutil.protocols.basic import LineOnlyReceiverTransport
class Chat: class Chat:
def __init__(self): def __init__(self):
@@ -39,4 +40,3 @@ chat = Chat()
from twisted.internet import reactor from twisted.internet import reactor
reactor.listenTCP(8007, SpawnFactory(chat.handler, LineOnlyReceiverTransport)) reactor.listenTCP(8007, SpawnFactory(chat.handler, LineOnlyReceiverTransport))
reactor.run() reactor.run()

View File

@@ -5,11 +5,13 @@ from gnutls.interfaces.twisted import X509Credentials
from eventlet.twistedutil.protocol import GreenClientCreator from eventlet.twistedutil.protocol import GreenClientCreator
from eventlet.twistedutil.protocols.basic import LineOnlyReceiverTransport from eventlet.twistedutil.protocols.basic import LineOnlyReceiverTransport
class NoisySRVConnector(SRVConnector): class NoisySRVConnector(SRVConnector):
def pickServer(self): def pickServer(self):
host, port = SRVConnector.pickServer(self) host, port = SRVConnector.pickServer(self)
print('Resolved _%s._%s.%s --> %s:%s' % (self.service, self.protocol, self.domain, host, port)) print('Resolved _%s._%s.%s --> %s:%s' %
(self.service, self.protocol, self.domain, host, port))
return host, port return host, port
cred = X509Credentials(None, None) cred = X509Credentials(None, None)

View File

@@ -7,6 +7,7 @@ from xcaplib.green import XCAPClient
from eventlet.twistedutil import deferToGreenThread from eventlet.twistedutil import deferToGreenThread
from eventlet.twistedutil import join_reactor from eventlet.twistedutil import join_reactor
class LineOnlyReceiver(basic.LineOnlyReceiver): class LineOnlyReceiver(basic.LineOnlyReceiver):
def lineReceived(self, line): def lineReceived(self, line):
@@ -14,8 +15,8 @@ class LineOnlyReceiver(basic.LineOnlyReceiver):
if not line: if not line:
return return
app, context, node = (line + ' ').split(' ', 3) app, context, node = (line + ' ').split(' ', 3)
context = {'u' : 'users', 'g': 'global'}.get(context, context) context = {'u': 'users', 'g': 'global'}.get(context, context)
d = deferToGreenThread(client._get, app, node, globaltree=context=='global') d = deferToGreenThread(client._get, app, node, globaltree=context == 'global')
def callback(result): def callback(result):
self.transport.write(str(result)) self.transport.write(str(result))
def errback(error): def errback(error):
@@ -23,6 +24,7 @@ class LineOnlyReceiver(basic.LineOnlyReceiver):
d.addCallback(callback) d.addCallback(callback)
d.addErrback(errback) d.addErrback(errback)
class MyFactory(Factory): class MyFactory(Factory):
protocol = LineOnlyReceiver protocol = LineOnlyReceiver

View File

@@ -220,7 +220,8 @@ def verify_hub_empty():
num_readers = len(hub.get_readers()) num_readers = len(hub.get_readers())
num_writers = len(hub.get_writers()) num_writers = len(hub.get_writers())
num_timers = hub.get_timers_count() num_timers = hub.get_timers_count()
assert num_readers == 0 and num_writers == 0, "Readers: %s Writers: %s" % (num_readers, num_writers) assert num_readers == 0 and num_writers == 0, "Readers: %s Writers: %s" % (
num_readers, num_writers)
def find_command(command): def find_command(command):

View File

@@ -6,15 +6,15 @@ import os
__test__ = False __test__ = False
_proc_status = '/proc/%d/status' % os.getpid() _proc_status = '/proc/%d/status' % os.getpid()
_scale = {'kB': 1024.0, 'mB': 1024.0*1024.0, _scale = {'kB': 1024.0, 'mB': 1024.0 * 1024.0,
'KB': 1024.0, 'MB': 1024.0*1024.0} 'KB': 1024.0, 'MB': 1024.0 * 1024.0}
def _VmB(VmKey): def _VmB(VmKey):
'''Private. '''Private.
''' '''
global _proc_status, _scale global _proc_status, _scale
# get pseudo file /proc/<pid>/status # get pseudo file /proc/<pid>/status
try: try:
t = open(_proc_status) t = open(_proc_status)
v = t.read() v = t.read()

View File

@@ -461,8 +461,8 @@ def _check_and_set_parent(parent, value, name, new_name):
if not _is_instance_mock(value): if not _is_instance_mock(value):
return False return False
if ((value._mock_name or value._mock_new_name) or if ((value._mock_name or value._mock_new_name) or
(value._mock_parent is not None) or (value._mock_parent is not None) or
(value._mock_new_parent is not None)): (value._mock_new_parent is not None)):
return False return False
_parent = parent _parent = parent
@@ -502,10 +502,10 @@ class NonCallableMock(Base):
return instance return instance
def __init__( def __init__(
self, spec=None, wraps=None, name=None, spec_set=None, self, spec=None, wraps=None, name=None, spec_set=None,
parent=None, _spec_state=None, _new_name='', _new_parent=None, parent=None, _spec_state=None, _new_name='', _new_parent=None,
**kwargs **kwargs
): ):
if _new_parent is None: if _new_parent is None:
_new_parent = parent _new_parent = parent
@@ -768,8 +768,8 @@ class NonCallableMock(Base):
# property setters go through here # property setters go through here
return object.__setattr__(self, name, value) return object.__setattr__(self, name, value)
elif (self._spec_set and self._mock_methods is not None and elif (self._spec_set and self._mock_methods is not None and
name not in self._mock_methods and name not in self._mock_methods and
name not in self.__dict__): name not in self.__dict__):
raise AttributeError("Mock object has no attribute '%s'" % name) raise AttributeError("Mock object has no attribute '%s'" % name)
elif name in _unsupported_magics: elif name in _unsupported_magics:
msg = 'Attempting to set unsupported magic method %r.' % name msg = 'Attempting to set unsupported magic method %r.' % name
@@ -1018,7 +1018,7 @@ class CallableMixin(Base):
ret_val = self.return_value ret_val = self.return_value
if (self._mock_wraps is not None and if (self._mock_wraps is not None and
self._mock_return_value is DEFAULT): self._mock_return_value is DEFAULT):
return self._mock_wraps(*args, **kwargs) return self._mock_wraps(*args, **kwargs)
if ret_val is DEFAULT: if ret_val is DEFAULT:
ret_val = self.return_value ret_val = self.return_value
@@ -1110,9 +1110,9 @@ class _patch(object):
_active_patches = set() _active_patches = set()
def __init__( def __init__(
self, getter, attribute, new, spec, create, self, getter, attribute, new, spec, create,
spec_set, autospec, new_callable, kwargs spec_set, autospec, new_callable, kwargs
): ):
if new_callable is not None: if new_callable is not None:
if new is not DEFAULT: if new is not DEFAULT:
raise ValueError( raise ValueError(
@@ -1193,7 +1193,7 @@ class _patch(object):
return func(*args, **keywargs) return func(*args, **keywargs)
except: except:
if (patching not in entered_patchers and if (patching not in entered_patchers and
_is_started(patching)): _is_started(patching)):
# the patcher may have been started, but an exception # the patcher may have been started, but an exception
# raised whilst entering one of its additional_patchers # raised whilst entering one of its additional_patchers
entered_patchers.append(patching) entered_patchers.append(patching)
@@ -1252,7 +1252,7 @@ class _patch(object):
if spec is not None and autospec is not None: if spec is not None and autospec is not None:
raise TypeError("Can't specify spec and autospec") raise TypeError("Can't specify spec and autospec")
if ((spec is not None or autospec is not None) and if ((spec is not None or autospec is not None) and
spec_set not in (True, None)): spec_set not in (True, None)):
raise TypeError("Can't provide explicit spec_set *and* spec or autospec") raise TypeError("Can't provide explicit spec_set *and* spec or autospec")
original, local = self.get_original() original, local = self.get_original()
@@ -1301,7 +1301,7 @@ class _patch(object):
# add a name to mocks # add a name to mocks
if (isinstance(Klass, type) and if (isinstance(Klass, type) and
issubclass(Klass, NonCallableMock) and self.attribute): issubclass(Klass, NonCallableMock) and self.attribute):
_kwargs['name'] = self.attribute _kwargs['name'] = self.attribute
_kwargs.update(kwargs) _kwargs.update(kwargs)
@@ -1314,7 +1314,7 @@ class _patch(object):
if spec_set is not None: if spec_set is not None:
this_spec = spec_set this_spec = spec_set
if (not _is_list(this_spec) and not if (not _is_list(this_spec) and not
_instance_callable(this_spec)): _instance_callable(this_spec)):
Klass = NonCallableMagicMock Klass = NonCallableMagicMock
_kwargs.pop('name') _kwargs.pop('name')
@@ -1402,10 +1402,10 @@ def _get_target(target):
def _patch_object( def _patch_object(
target, attribute, new=DEFAULT, spec=None, target, attribute, new=DEFAULT, spec=None,
create=False, spec_set=None, autospec=None, create=False, spec_set=None, autospec=None,
new_callable=None, **kwargs new_callable=None, **kwargs
): ):
""" """
patch.object(target, attribute, new=DEFAULT, spec=None, create=False, patch.object(target, attribute, new=DEFAULT, spec=None, create=False,
spec_set=None, autospec=None, new_callable=None, **kwargs) spec_set=None, autospec=None, new_callable=None, **kwargs)
@@ -1479,9 +1479,9 @@ def _patch_multiple(target, spec=None, create=False, spec_set=None,
def patch( def patch(
target, new=DEFAULT, spec=None, create=False, target, new=DEFAULT, spec=None, create=False,
spec_set=None, autospec=None, new_callable=None, **kwargs spec_set=None, autospec=None, new_callable=None, **kwargs
): ):
""" """
`patch` acts as a function decorator, class decorator or a context `patch` acts as a function decorator, class decorator or a context
manager. Inside the body of the function or with statement, the `target` manager. Inside the body of the function or with statement, the `target`
@@ -1611,7 +1611,7 @@ class _patch_dict(object):
for attr in dir(klass): for attr in dir(klass):
attr_value = getattr(klass, attr) attr_value = getattr(klass, attr)
if (attr.startswith(patch.TEST_PREFIX) and if (attr.startswith(patch.TEST_PREFIX) and
hasattr(attr_value, "__call__")): hasattr(attr_value, "__call__")):
decorator = _patch_dict(self.in_dict, self.values, self.clear) decorator = _patch_dict(self.in_dict, self.values, self.clear)
decorated = decorator(attr_value) decorated = decorator(attr_value)
setattr(klass, attr, decorated) setattr(klass, attr, decorated)

View File

@@ -39,7 +39,8 @@ def parse_unittest_output(s):
num = int(re.search('^Ran (\d+) test.*?$', s, re.M).group(1)) num = int(re.search('^Ran (\d+) test.*?$', s, re.M).group(1))
ok = re.search('^OK$', s, re.M) ok = re.search('^OK$', s, re.M)
error, fail, timeout = 0, 0, 0 error, fail, timeout = 0, 0, 0
failed_match = re.search(r'^FAILED \((?:failures=(?P<f>\d+))?,? ?(?:errors=(?P<e>\d+))?\)$', s, re.M) failed_match = re.search(
r'^FAILED \((?:failures=(?P<f>\d+))?,? ?(?:errors=(?P<e>\d+))?\)$', s, re.M)
ok_match = re.search('^OK$', s, re.M) ok_match = re.search('^OK$', s, re.M)
if failed_match: if failed_match:
assert not ok_match, (ok_match, s) assert not ok_match, (ok_match, s)

View File

@@ -218,7 +218,8 @@ class TestQueue(LimitedTestCase):
self.assertEqual(['waiting', 'sending hello', 'hello', 'sending world', 'world'], events) self.assertEqual(['waiting', 'sending hello', 'hello', 'sending world', 'world'], events)
eventlet.sleep(0) eventlet.sleep(0)
self.assertEqual(['waiting', 'sending hello', 'hello', 'sending world', 'world', 'sent world'], events) self.assertEqual(
['waiting', 'sending hello', 'hello', 'sending world', 'world', 'sent world'], events)
def test_channel_waiters(self): def test_channel_waiters(self):
c = eventlet.Queue(0) c = eventlet.Queue(0)

View File

@@ -9,8 +9,10 @@ patcher.inject(
('urllib2', urllib2)) ('urllib2', urllib2))
HandlerTests.test_file = patcher.patch_function(HandlerTests.test_file, ('socket', socket)) HandlerTests.test_file = patcher.patch_function(HandlerTests.test_file, ('socket', socket))
HandlerTests.test_cookie_redirect = patcher.patch_function(HandlerTests.test_cookie_redirect, ('urllib2', urllib2)) HandlerTests.test_cookie_redirect = patcher.patch_function(
OpenerDirectorTests.test_badly_named_methods = patcher.patch_function(OpenerDirectorTests.test_badly_named_methods, ('urllib2', urllib2)) HandlerTests.test_cookie_redirect, ('urllib2', urllib2))
OpenerDirectorTests.test_badly_named_methods = patcher.patch_function(
OpenerDirectorTests.test_badly_named_methods, ('urllib2', urllib2))
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()

View File

@@ -39,4 +39,3 @@ class Test(unittest.TestCase):
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()