Hello community,

here is the log from the commit of package python-eventlet for openSUSE:Factory 
checked in at 2017-12-19 10:56:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-eventlet (Old)
 and      /work/SRC/openSUSE:Factory/.python-eventlet.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-eventlet"

Tue Dec 19 10:56:24 2017 rev:26 rq:556955 version:0.20.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-eventlet/python-eventlet.changes  
2017-11-27 22:17:46.748011023 +0100
+++ /work/SRC/openSUSE:Factory/.python-eventlet.new/python-eventlet.changes     
2017-12-19 10:56:26.127293966 +0100
@@ -1,0 +2,5 @@
+Sun Dec 10 20:33:20 UTC 2017 - dmuel...@suse.com
+
+- fix enum-compat removal
+
+-------------------------------------------------------------------
@@ -4 +9 @@
-- go back to a working version: downgrade to 0.20.1
+- go back to a working version: downgrade to 0.20.0

Old:
----
  eventlet-0.20.1.tar.gz

New:
----
  eventlet-0.20.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-eventlet.spec ++++++
--- /var/tmp/diff_new_pack.4zLmvl/_old  2017-12-19 10:56:26.779262493 +0100
+++ /var/tmp/diff_new_pack.4zLmvl/_new  2017-12-19 10:56:26.783262300 +0100
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-eventlet
-Version:        0.20.1
+Version:        0.20.0
 Release:        0
 Summary:        Concurrent networking library for Python
 License:        MIT
@@ -62,7 +62,7 @@
 %prep
 %setup -q -n eventlet-%{version}
 %patch0 -p1
-sed -i '/enum_compat/d' setup.py # crude way to drop the strange "enum-compat" 
requirement
+sed -i '/enum.compat/d' setup.py # crude way to drop the strange "enum-compat" 
requirement
 sed -i "s|^#!.*||" eventlet/support/greendns.py # Fix non-executable script
 
 %build

++++++ eventlet-0.20.1.tar.gz -> eventlet-0.20.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/AUTHORS new/eventlet-0.20.0/AUTHORS
--- old/eventlet-0.20.1/AUTHORS 2017-01-03 02:13:25.000000000 +0100
+++ new/eventlet-0.20.0/AUTHORS 2016-12-11 23:28:07.000000000 +0100
@@ -140,5 +140,3 @@
 * Ondřej Nový
 * Jarrod Johnson
 * Whitney Young
-* Matthew D. Pagel
-* Matt Yule-Bennett
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/NEWS new/eventlet-0.20.0/NEWS
--- old/eventlet-0.20.1/NEWS    2017-01-03 02:13:25.000000000 +0100
+++ new/eventlet-0.20.0/NEWS    2016-12-11 23:28:07.000000000 +0100
@@ -1,10 +1,3 @@
-0.20.1
-======
-* dns: try unqualified queries as top level
-* test_import_patched_defaults bended to play with pyopenssl>=16.1.0
-* Explicit environ flag for importing eventlet.__version__ without ignoring 
import errors
-* Type check Semaphore, GreenPool arguments; Thanks to Matthew D. Pagel
-
 0.20.0
 ======
 * IMPORTANT: removed select.poll() function
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/PKG-INFO new/eventlet-0.20.0/PKG-INFO
--- old/eventlet-0.20.1/PKG-INFO        2017-01-03 02:13:37.000000000 +0100
+++ new/eventlet-0.20.0/PKG-INFO        2016-12-11 23:32:40.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: eventlet
-Version: 0.20.1
+Version: 0.20.0
 Summary: Highly concurrent networking library
 Home-page: http://eventlet.net
 Author: Linden Lab
@@ -38,11 +38,13 @@
         
         The easiest way to get Eventlet is to use pip::
         
-          pip install -U eventlet
+          pip install eventlet
         
-        To install latest development verson once::
+        The development `tip`_ is available as well::
         
-          pip install -U 
https://github.com/eventlet/eventlet/archive/master.zip
+          pip install 'eventlet==dev'
+        
+        .. _tip: 
http://bitbucket.org/eventlet/eventlet/get/tip.zip#egg=eventlet-dev
         
         
         Building the Docs Locally
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/README.rst 
new/eventlet-0.20.0/README.rst
--- old/eventlet-0.20.1/README.rst      2017-01-03 02:13:25.000000000 +0100
+++ new/eventlet-0.20.0/README.rst      2016-12-11 23:28:07.000000000 +0100
@@ -30,11 +30,13 @@
 
 The easiest way to get Eventlet is to use pip::
 
-  pip install -U eventlet
+  pip install eventlet
 
-To install latest development verson once::
+The development `tip`_ is available as well::
 
-  pip install -U https://github.com/eventlet/eventlet/archive/master.zip
+  pip install 'eventlet==dev'
+
+.. _tip: http://bitbucket.org/eventlet/eventlet/get/tip.zip#egg=eventlet-dev
 
 
 Building the Docs Locally
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/benchmarks/__init__.py 
new/eventlet-0.20.0/benchmarks/__init__.py
--- old/eventlet-0.20.1/benchmarks/__init__.py  2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/benchmarks/__init__.py  1970-01-01 01:00:00.000000000 
+0100
@@ -1,26 +0,0 @@
-import gc
-import timeit
-import random
-
-from eventlet.support import six
-
-
-def measure_best(repeat, iters,
-                 common_setup='pass',
-                 common_cleanup='pass',
-                 *funcs):
-    funcs = list(funcs)
-    results = dict([(f, []) for f in funcs])
-
-    for i in six.moves.range(repeat):
-        random.shuffle(funcs)
-        for func in funcs:
-            gc.collect()
-            t = timeit.Timer(func, setup=common_setup)
-            results[func].append(t.timeit(iters))
-            common_cleanup()
-
-    best_results = {}
-    for func, times in six.iteritems(results):
-        best_results[func] = min(times)
-    return best_results
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/benchmarks/localhost_socket.py 
new/eventlet-0.20.0/benchmarks/localhost_socket.py
--- old/eventlet-0.20.1/benchmarks/localhost_socket.py  2017-01-03 
02:13:25.000000000 +0100
+++ new/eventlet-0.20.0/benchmarks/localhost_socket.py  1970-01-01 
01:00:00.000000000 +0100
@@ -1,117 +0,0 @@
-"""Benchmark evaluating eventlet's performance at speaking to itself over a 
localhost socket."""
-from __future__ import print_function
-
-import time
-
-import benchmarks
-from eventlet.support import six
-
-
-BYTES = 1000
-SIZE = 1
-CONCURRENCY = 50
-TRIES = 5
-
-
-def reader(sock):
-    expect = BYTES
-    while expect > 0:
-        d = sock.recv(min(expect, SIZE))
-        expect -= len(d)
-
-
-def writer(addr, socket_impl):
-    sock = socket_impl(socket.AF_INET, socket.SOCK_STREAM)
-    sock.connect(addr)
-    sent = 0
-    while sent < BYTES:
-        d = 'xy' * (max(min(SIZE / 2, BYTES - sent), 1))
-        sock.sendall(d)
-        sent += len(d)
-
-
-def green_accepter(server_sock, pool):
-    for i in six.moves.range(CONCURRENCY):
-        sock, addr = server_sock.accept()
-        pool.spawn_n(reader, sock)
-
-
-def heavy_accepter(server_sock, pool):
-    for i in six.moves.range(CONCURRENCY):
-        sock, addr = server_sock.accept()
-        t = threading.Thread(None, reader, "reader thread", (sock,))
-        t.start()
-        pool.append(t)
-
-
-import eventlet.green.socket
-import eventlet
-
-from eventlet import debug
-debug.hub_exceptions(True)
-
-
-def launch_green_threads():
-    pool = eventlet.GreenPool(CONCURRENCY * 2 + 1)
-    server_sock = eventlet.green.socket.socket(socket.AF_INET, 
socket.SOCK_STREAM)
-    server_sock.bind(('localhost', 0))
-    server_sock.listen(50)
-    addr = ('localhost', server_sock.getsockname()[1])
-    pool.spawn_n(green_accepter, server_sock, pool)
-    for i in six.moves.range(CONCURRENCY):
-        pool.spawn_n(writer, addr, eventlet.green.socket.socket)
-    pool.waitall()
-
-
-import threading
-import socket
-
-
-def launch_heavy_threads():
-    threads = []
-    server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-    server_sock.bind(('localhost', 0))
-    server_sock.listen(50)
-    addr = ('localhost', server_sock.getsockname()[1])
-    accepter_thread = threading.Thread(
-        None, heavy_accepter, "accepter thread", (server_sock, threads))
-    accepter_thread.start()
-    threads.append(accepter_thread)
-    for i in six.moves.range(CONCURRENCY):
-        client_thread = threading.Thread(None, writer, "writer thread", (addr, 
socket.socket))
-        client_thread.start()
-        threads.append(client_thread)
-    for t in threads:
-        t.join()
-
-
-if __name__ == "__main__":
-    import optparse
-    parser = optparse.OptionParser()
-    parser.add_option('--compare-threading', action='store_true', 
dest='threading', default=False)
-    parser.add_option('-b', '--bytes', type='int', dest='bytes',
-                      default=BYTES)
-    parser.add_option('-s', '--size', type='int', dest='size',
-                      default=SIZE)
-    parser.add_option('-c', '--concurrency', type='int', dest='concurrency',
-                      default=CONCURRENCY)
-    parser.add_option('-t', '--tries', type='int', dest='tries',
-                      default=TRIES)
-
-    opts, args = parser.parse_args()
-    BYTES = opts.bytes
-    SIZE = opts.size
-    CONCURRENCY = opts.concurrency
-    TRIES = opts.tries
-
-    funcs = [launch_green_threads]
-    if opts.threading:
-        funcs = [launch_green_threads, launch_heavy_threads]
-    results = benchmarks.measure_best(TRIES, 3,
-                                      lambda: None, lambda: None,
-                                      *funcs)
-    print("green:", results[launch_green_threads])
-    if opts.threading:
-        print("threads:", results[launch_heavy_threads])
-        print("%", (results[launch_green_threads] - 
results[launch_heavy_threads]
-                    ) / results[launch_heavy_threads] * 100)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/benchmarks/spawn.py 
new/eventlet-0.20.0/benchmarks/spawn.py
--- old/eventlet-0.20.1/benchmarks/spawn.py     2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/benchmarks/spawn.py     1970-01-01 01:00:00.000000000 
+0100
@@ -1,86 +0,0 @@
-"""Compare spawn to spawn_n"""
-from __future__ import print_function
-
-import eventlet
-import benchmarks
-
-
-def cleanup():
-    eventlet.sleep(0.2)
-
-
-iters = 10000
-best = benchmarks.measure_best(
-    5, iters,
-    'pass',
-    cleanup,
-    eventlet.sleep)
-print("eventlet.sleep (main)", best[eventlet.sleep])
-
-gt = eventlet.spawn(
-    benchmarks.measure_best, 5, iters,
-    'pass',
-    cleanup,
-    eventlet.sleep)
-best = gt.wait()
-print("eventlet.sleep (gt)", best[eventlet.sleep])
-
-
-def dummy(i=None):
-    return i
-
-
-def run_spawn():
-    eventlet.spawn(dummy, 1)
-
-
-def run_spawn_n():
-    eventlet.spawn_n(dummy, 1)
-
-
-def run_spawn_n_kw():
-    eventlet.spawn_n(dummy, i=1)
-
-
-best = benchmarks.measure_best(
-    5, iters,
-    'pass',
-    cleanup,
-    run_spawn_n,
-    run_spawn,
-    run_spawn_n_kw)
-print("eventlet.spawn", best[run_spawn])
-print("eventlet.spawn_n", best[run_spawn_n])
-print("eventlet.spawn_n(**kw)", best[run_spawn_n_kw])
-print("%% %0.1f" % ((best[run_spawn] - best[run_spawn_n]) / best[run_spawn_n] 
* 100))
-
-pool = None
-
-
-def setup():
-    global pool
-    pool = eventlet.GreenPool(iters)
-
-
-def run_pool_spawn():
-    pool.spawn(dummy, 1)
-
-
-def run_pool_spawn_n():
-    pool.spawn_n(dummy, 1)
-
-
-def cleanup_pool():
-    pool.waitall()
-
-
-best = benchmarks.measure_best(
-    3, iters,
-    setup,
-    cleanup_pool,
-    run_pool_spawn,
-    run_pool_spawn_n,
-)
-print("eventlet.GreenPool.spawn", best[run_pool_spawn])
-print("eventlet.GreenPool.spawn_n", best[run_pool_spawn_n])
-print("%% %0.1f" % ((best[run_pool_spawn] - best[run_pool_spawn_n]) / 
best[run_pool_spawn_n] * 100))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/doc/modules/zmq.rst 
new/eventlet-0.20.0/doc/modules/zmq.rst
--- old/eventlet-0.20.1/doc/modules/zmq.rst     2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/doc/modules/zmq.rst     2016-12-11 23:28:07.000000000 
+0100
@@ -1,9 +1,6 @@
 :mod:`eventlet.green.zmq` -- ØMQ support
 ========================================
 
-:mod:`pyzmq <zmq>` [1]_ is a python binding to the C++ ØMQ [2]_ library 
written in Cython [3]_.
-:mod:`eventlet.green.zmq` is greenthread aware version of `pyzmq`.
-
 .. automodule:: eventlet.green.zmq
     :show-inheritance:
 
@@ -24,6 +21,20 @@
 
 .. module:: zmq
 
+:mod:`zmq` -- The pyzmq ØMQ python bindings
+===========================================
+
+:mod:`pyzmq <zmq>` [1]_ Is a python binding to the C++ ØMQ [2]_ library 
written in Cython [3]_. The following is
+auto generated :mod:`pyzmq's <zmq>` from documentation.
+
+.. autoclass:: zmq.Context
+    :members:
+
+.. autoclass:: zmq.Socket
+
+.. autoclass:: zmq.Poller
+    :members:
+
 
 .. [1] http://github.com/zeromq/pyzmq
 .. [2] http://www.zeromq.com
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/doc/zeromq.rst 
new/eventlet-0.20.0/doc/zeromq.rst
--- old/eventlet-0.20.1/doc/zeromq.rst  2017-01-03 02:13:25.000000000 +0100
+++ new/eventlet-0.20.0/doc/zeromq.rst  2016-12-11 23:28:07.000000000 +0100
@@ -26,4 +26,4 @@
 API documentation
 =================
 
-ØMQ support is provided in the :mod:`eventlet.green.zmq` module.
+ØMQ support is provided in the :mod:`eventlet.green.zmq` module
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/eventlet/__init__.py 
new/eventlet-0.20.0/eventlet/__init__.py
--- old/eventlet-0.20.1/eventlet/__init__.py    2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/eventlet/__init__.py    2016-12-11 23:28:07.000000000 
+0100
@@ -1,50 +1,42 @@
 import os
 
 
-version_info = (0, 20, 1)
+version_info = (0, 20, 0)
 __version__ = '.'.join(map(str, version_info))
 # This is to make Debian packaging easier, it ignores import
 # errors of greenlet so that the packager can still at least
 # access the version.  Also this makes easy_install a little quieter
 if os.environ.get('EVENTLET_IMPORT_VERSION_ONLY') != '1':
-    from eventlet import convenience
-    from eventlet import event
-    from eventlet import greenpool
     from eventlet import greenthread
-    from eventlet import patcher
+    from eventlet import greenpool
     from eventlet import queue
-    from eventlet import semaphore
     from eventlet import timeout
+    from eventlet import patcher
+    from eventlet import convenience
     import greenlet
 
-    connect = convenience.connect
-    listen = convenience.listen
-    serve = convenience.serve
-    StopServe = convenience.StopServe
-    wrap_ssl = convenience.wrap_ssl
-
-    Event = event.Event
-
-    GreenPool = greenpool.GreenPool
-    GreenPile = greenpool.GreenPile
-
     sleep = greenthread.sleep
     spawn = greenthread.spawn
     spawn_n = greenthread.spawn_n
     spawn_after = greenthread.spawn_after
     kill = greenthread.kill
 
-    import_patched = patcher.import_patched
-    monkey_patch = patcher.monkey_patch
+    Timeout = timeout.Timeout
+    with_timeout = timeout.with_timeout
+
+    GreenPool = greenpool.GreenPool
+    GreenPile = greenpool.GreenPile
 
     Queue = queue.Queue
 
-    Semaphore = semaphore.Semaphore
-    CappedSemaphore = semaphore.CappedSemaphore
-    BoundedSemaphore = semaphore.BoundedSemaphore
+    import_patched = patcher.import_patched
+    monkey_patch = patcher.monkey_patch
 
-    Timeout = timeout.Timeout
-    with_timeout = timeout.with_timeout
+    connect = convenience.connect
+    listen = convenience.listen
+    serve = convenience.serve
+    StopServe = convenience.StopServe
+    wrap_ssl = convenience.wrap_ssl
 
     getcurrent = greenlet.greenlet.getcurrent
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/eventlet/greenpool.py 
new/eventlet-0.20.0/eventlet/greenpool.py
--- old/eventlet-0.20.1/eventlet/greenpool.py   2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/eventlet/greenpool.py   2016-12-11 23:28:07.000000000 
+0100
@@ -1,7 +1,9 @@
 import traceback
 
-import eventlet
+from eventlet import event
+from eventlet import greenthread
 from eventlet import queue
+from eventlet import semaphore
 from eventlet.support import greenlets as greenlet
 from eventlet.support import six
 
@@ -15,18 +17,10 @@
     """
 
     def __init__(self, size=1000):
-        try:
-            size = int(size)
-        except ValueError as e:
-            msg = 'GreenPool() expect size :: int, actual: {0} 
{1}'.format(type(size), str(e))
-            raise TypeError(msg)
-        if size < 0:
-            msg = 'GreenPool() expect size >= 0, actual: 
{0}'.format(repr(size))
-            raise ValueError(msg)
         self.size = size
         self.coroutines_running = set()
-        self.sem = eventlet.Semaphore(size)
-        self.no_coros_running = eventlet.Event()
+        self.sem = semaphore.Semaphore(size)
+        self.no_coros_running = event.Event()
 
     def resize(self, new_size):
         """ Change the max number of greenthreads doing work at any given time.
@@ -55,7 +49,7 @@
 
     def spawn(self, function, *args, **kwargs):
         """Run the *function* with its arguments in its own green thread.
-        Returns the :class:`GreenThread <eventlet.GreenThread>`
+        Returns the :class:`GreenThread <eventlet.greenthread.GreenThread>`
         object that is running the function, which can be used to retrieve the
         results.
 
@@ -67,17 +61,17 @@
         """
         # if reentering an empty pool, don't try to wait on a coroutine freeing
         # itself -- instead, just execute in the current coroutine
-        current = eventlet.getcurrent()
+        current = greenthread.getcurrent()
         if self.sem.locked() and current in self.coroutines_running:
             # a bit hacky to use the GT without switching to it
-            gt = eventlet.greenthread.GreenThread(current)
+            gt = greenthread.GreenThread(current)
             gt.main(function, args, kwargs)
             return gt
         else:
             self.sem.acquire()
-            gt = eventlet.spawn(function, *args, **kwargs)
+            gt = greenthread.spawn(function, *args, **kwargs)
             if not self.coroutines_running:
-                self.no_coros_running = eventlet.Event()
+                self.no_coros_running = event.Event()
             self.coroutines_running.add(gt)
             gt.link(self._spawn_done)
         return gt
@@ -95,7 +89,7 @@
             if coro is None:
                 return
             else:
-                coro = eventlet.getcurrent()
+                coro = greenthread.getcurrent()
                 self._spawn_done(coro)
 
     def spawn_n(self, function, *args, **kwargs):
@@ -105,21 +99,21 @@
         """
         # if reentering an empty pool, don't try to wait on a coroutine freeing
         # itself -- instead, just execute in the current coroutine
-        current = eventlet.getcurrent()
+        current = greenthread.getcurrent()
         if self.sem.locked() and current in self.coroutines_running:
             self._spawn_n_impl(function, args, kwargs, None)
         else:
             self.sem.acquire()
-            g = eventlet.spawn_n(
+            g = greenthread.spawn_n(
                 self._spawn_n_impl,
                 function, args, kwargs, True)
             if not self.coroutines_running:
-                self.no_coros_running = eventlet.Event()
+                self.no_coros_running = event.Event()
             self.coroutines_running.add(g)
 
     def waitall(self):
         """Waits until all greenthreads in the pool are finished working."""
-        assert eventlet.getcurrent() not in self.coroutines_running, \
+        assert greenthread.getcurrent() not in self.coroutines_running, \
             "Calling waitall() from within one of the " \
             "GreenPool's greenthreads will never terminate."
         if self.running():
@@ -157,7 +151,7 @@
         if function is None:
             function = lambda *a: a
         gi = GreenMap(self.size)
-        eventlet.spawn_n(self._do_map, function, iterable, gi)
+        greenthread.spawn_n(self._do_map, function, iterable, gi)
         return gi
 
     def imap(self, function, *iterables):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/eventlet/semaphore.py 
new/eventlet-0.20.0/eventlet/semaphore.py
--- old/eventlet-0.20.1/eventlet/semaphore.py   2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/eventlet/semaphore.py   2016-12-11 23:28:07.000000000 
+0100
@@ -1,7 +1,10 @@
+from __future__ import with_statement
+
 import collections
 
-import eventlet
+from eventlet import greenthread
 from eventlet import hubs
+from eventlet.timeout import Timeout
 
 
 class Semaphore(object):
@@ -31,15 +34,10 @@
     """
 
     def __init__(self, value=1):
-        try:
-            value = int(value)
-        except ValueError as e:
-            msg = 'Semaphore() expect value :: int, actual: {0} 
{1}'.format(type(value), str(e))
-            raise TypeError(msg)
-        if value < 0:
-            msg = 'Semaphore() expect value >= 0, actual: 
{0}'.format(repr(value))
-            raise ValueError(msg)
         self.counter = value
+        if value < 0:
+            raise ValueError("Semaphore must be initialized with a positive "
+                             "number, got %s" % value)
         self._waiters = collections.deque()
 
     def __repr__(self):
@@ -94,7 +92,7 @@
         if not blocking and self.locked():
             return False
 
-        current_thread = eventlet.getcurrent()
+        current_thread = greenthread.getcurrent()
 
         if self.counter <= 0 or self._waiters:
             if current_thread not in self._waiters:
@@ -102,7 +100,7 @@
             try:
                 if timeout is not None:
                     ok = False
-                    with eventlet.Timeout(timeout, False):
+                    with Timeout(timeout, False):
                         while self.counter <= 0:
                             hubs.get_hub().switch()
                         ok = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/eventlet/support/greendns.py 
new/eventlet-0.20.0/eventlet/support/greendns.py
--- old/eventlet-0.20.1/eventlet/support/greendns.py    2017-01-03 
02:13:25.000000000 +0100
+++ new/eventlet-0.20.0/eventlet/support/greendns.py    2016-12-11 
23:28:07.000000000 +0100
@@ -303,58 +303,17 @@
         self._resolver.cache = dns.resolver.LRUCache()
 
     def query(self, qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN,
-              tcp=False, source=None, raise_on_no_answer=True,
-              _hosts_rdtypes=(dns.rdatatype.A, dns.rdatatype.AAAA)):
-        """Query the resolver, using /etc/hosts if enabled.
-        """
-        result = [None, None, 0]
-
+              tcp=False, source=None, raise_on_no_answer=True):
+        """Query the resolver, using /etc/hosts if enabled"""
         if qname is None:
             qname = '0.0.0.0'
-        if isinstance(qname, six.string_types):
-            qname = dns.name.from_text(qname, None)
-
-        def step(fun, *args, **kwargs):
+        if rdclass == dns.rdataclass.IN and self._hosts:
             try:
-                a = fun(*args, **kwargs)
-            except Exception as e:
-                result[1] = e
-                return False
-            if a.rrset is not None and len(a.rrset):
-                if result[0] is None:
-                    result[0] = a
-                else:
-                    result[0].rrset.union_update(a.rrset)
-                result[2] += len(a.rrset)
-            return True
-
-        # Main query
-        step(self._resolver.query, qname, rdtype, rdclass, tcp, source, 
raise_on_no_answer=False)
-
-        # `resolv.conf` docs say unqualified names must resolve from search 
(or local) domain.
-        # However, common OS `getaddrinfo()` implementations append trailing 
dot (e.g. `db -> db.`)
-        # and ask nameservers, as if top-level domain was queried.
-        # This step follows established practice.
-        # https://github.com/nameko/nameko/issues/392
-        # https://github.com/eventlet/eventlet/issues/363
-        if len(qname) == 1:
-            step(self._resolver.query, qname.concatenate(dns.name.root),
-                 rdtype, rdclass, tcp, source, raise_on_no_answer=False)
-
-        # Return answers from /etc/hosts despite nameserver errors
-        # https://github.com/eventlet/eventlet/pull/354
-        if ((result[2] == 0) and self._hosts and
-                (rdclass == dns.rdataclass.IN) and (rdtype in _hosts_rdtypes)):
-            step(self._hosts.query, qname, rdtype, raise_on_no_answer=False)
-
-        if result[0] is not None:
-            if raise_on_no_answer and result[2] == 0:
-                raise dns.resolver.NoAnswer
-            return result[0]
-        if result[1] is not None:
-            if raise_on_no_answer or not isinstance(result[1], 
dns.resolver.NoAnswer):
-                raise result[1]
-        raise dns.resolver.NXDOMAIN(qnames=(qname,))
+                return self._hosts.query(qname, rdtype)
+            except dns.resolver.NoAnswer:
+                pass
+        return self._resolver.query(qname, rdtype, rdclass,
+                                    tcp, source, raise_on_no_answer)
 
     def getaliases(self, hostname):
         """Return a list of all the aliases of a given hostname"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/eventlet.egg-info/PKG-INFO 
new/eventlet-0.20.0/eventlet.egg-info/PKG-INFO
--- old/eventlet-0.20.1/eventlet.egg-info/PKG-INFO      2017-01-03 
02:13:36.000000000 +0100
+++ new/eventlet-0.20.0/eventlet.egg-info/PKG-INFO      2016-12-11 
23:32:40.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: eventlet
-Version: 0.20.1
+Version: 0.20.0
 Summary: Highly concurrent networking library
 Home-page: http://eventlet.net
 Author: Linden Lab
@@ -38,11 +38,13 @@
         
         The easiest way to get Eventlet is to use pip::
         
-          pip install -U eventlet
+          pip install eventlet
         
-        To install latest development verson once::
+        The development `tip`_ is available as well::
         
-          pip install -U 
https://github.com/eventlet/eventlet/archive/master.zip
+          pip install 'eventlet==dev'
+        
+        .. _tip: 
http://bitbucket.org/eventlet/eventlet/get/tip.zip#egg=eventlet-dev
         
         
         Building the Docs Locally
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/eventlet.egg-info/SOURCES.txt 
new/eventlet-0.20.0/eventlet.egg-info/SOURCES.txt
--- old/eventlet-0.20.1/eventlet.egg-info/SOURCES.txt   2017-01-03 
02:13:36.000000000 +0100
+++ new/eventlet-0.20.0/eventlet.egg-info/SOURCES.txt   2016-12-11 
23:32:40.000000000 +0100
@@ -5,9 +5,7 @@
 README.rst
 setup.cfg
 setup.py
-benchmarks/__init__.py
-benchmarks/localhost_socket.py
-benchmarks/spawn.py
+tox.ini
 doc/Makefile
 doc/authors.rst
 doc/basic_usage.rst
@@ -296,7 +294,6 @@
 tests/isolated/patcher_existing_locks_early.py
 tests/isolated/patcher_existing_locks_late.py
 tests/isolated/patcher_existing_locks_locked.py
-tests/isolated/patcher_import_patched_defaults.py
 tests/isolated/patcher_importlib_lock.py
 tests/isolated/patcher_socketserver_selectors.py
 tests/isolated/patcher_threading_condition.py
@@ -310,9 +307,6 @@
 tests/manual/greenio_memtest.py
 tests/manual/regress-226-unpatched-ssl.py
 tests/manual/websocket-gunicorn.py
-tests/patcher/__init__.py
-tests/patcher/shared1.py
-tests/patcher/shared_import_socket.py
 tests/stdlib/all.py
 tests/stdlib/all_modules.py
 tests/stdlib/all_monkey.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/tests/__init__.py 
new/eventlet-0.20.0/tests/__init__.py
--- old/eventlet-0.20.1/tests/__init__.py       2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/tests/__init__.py       2016-12-11 23:28:07.000000000 
+0100
@@ -302,23 +302,16 @@
     return retval
 
 
-def run_python(path, env=None, args=None, timeout=None, 
pythonpath_extend=None, expect_pass=False):
+def run_python(path, env=None, args=None, timeout=None):
     new_argv = [sys.executable]
     new_env = os.environ.copy()
-    new_env.setdefault('eventlet_test_in_progress', 'yes')
-    src_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     if path:
         path = os.path.abspath(path)
         new_argv.append(path)
+        src_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
         new_env['PYTHONPATH'] = os.pathsep.join(sys.path + [src_dir])
     if env:
         new_env.update(env)
-    if pythonpath_extend:
-        new_path = [p for p in new_env.get('PYTHONPATH', '').split(os.pathsep) 
if p]
-        new_path.extend(
-            p if os.path.isabs(p) else os.path.join(src_dir, p) for p in 
pythonpath_extend
-        )
-        new_env['PYTHONPATH'] = os.pathsep.join(new_path)
     if args:
         new_argv.extend(args)
     p = subprocess.Popen(
@@ -336,25 +329,21 @@
         p.kill()
         output, _ = p.communicate(timeout=timeout)
         return '{0}\nFAIL - timed out'.format(output).encode()
-
-    if expect_pass:
-        if output.startswith(b'skip'):
-            parts = output.rstrip().split(b':', 1)
-            skip_args = []
-            if len(parts) > 1:
-                skip_args.append(parts[1])
-            raise SkipTest(*skip_args)
-        ok = output.rstrip() == b'pass'
-        if not ok:
-            sys.stderr.write('Program {0} 
output:\n---\n{1}\n---\n'.format(path, output.decode()))
-        assert ok, 'Expected single line "pass" in stdout'
-
     return output
 
 
-def run_isolated(path, prefix='tests/isolated/', **kwargs):
-    kwargs.setdefault('expect_pass', True)
-    run_python(prefix + path, **kwargs)
+def run_isolated(path, prefix='tests/isolated/', env=None, args=None, 
timeout=None):
+    output = run_python(prefix + path, env=env, args=args, 
timeout=timeout).rstrip()
+    if output.startswith(b'skip'):
+        parts = output.split(b':', 1)
+        skip_args = []
+        if len(parts) > 1:
+            skip_args.append(parts[1])
+        raise SkipTest(*skip_args)
+    ok = output == b'pass'
+    if not ok:
+        sys.stderr.write('Isolated test {0} 
output:\n---\n{1}\n---\n'.format(path, output.decode()))
+    assert ok, 'Expected single line "pass" in stdout'
 
 
 certificate_file = os.path.join(os.path.dirname(__file__), 'test_server.crt')
@@ -364,10 +353,3 @@
 def test_run_python_timeout():
     output = run_python('', args=('-c', 'import time; time.sleep(0.5)'), 
timeout=0.1)
     assert output.endswith(b'FAIL - timed out')
-
-
-def test_run_python_pythonpath_extend():
-    code = '''import os, sys ; print('\\n'.join(sys.path))'''
-    output = run_python('', args=('-c', code), pythonpath_extend=('dira', 
'dirb'))
-    assert b'/dira\n' in output
-    assert b'/dirb\n' in output
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/tests/env_test.py 
new/eventlet-0.20.0/tests/env_test.py
--- old/eventlet-0.20.1/tests/env_test.py       2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/tests/env_test.py       2016-12-11 23:28:07.000000000 
+0100
@@ -19,12 +19,12 @@
 socket.getaddrinfo('localhost', 80)
 print('pass')
 '''
-    tests.run_python(
+    output = tests.run_python(
         path=None,
         env={'EVENTLET_TPOOL_DNS': 'yes'},
         args=['-c', code],
-        expect_pass=True,
     )
+    assert output.rstrip() == b'pass'
 
 
 @tests.skip_with_pyevent
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/tests/greendns_test.py 
new/eventlet-0.20.0/tests/greendns_test.py
--- old/eventlet-0.20.1/tests/greendns_test.py  2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/tests/greendns_test.py  2016-12-11 23:28:07.000000000 
+0100
@@ -6,10 +6,10 @@
 import tempfile
 import time
 
+import tests
+from tests import mock
 from eventlet.support import greendns
 from eventlet.support.greendns import dns
-import tests
-import tests.mock
 
 
 class TestHostsResolver(tests.LimitedTestCase):
@@ -777,17 +777,3 @@
 
 def test_reverse_name():
     tests.run_isolated('greendns_from_address_203.py')
-
-
-def test_proxy_resolve_unqualified():
-    # https://github.com/eventlet/eventlet/issues/363
-    rp = greendns.ResolverProxy(filename=None)
-    rp._resolver.search.append(dns.name.from_text('example.com'))
-    with tests.mock.patch('dns.resolver.Resolver.query', 
side_effect=dns.resolver.NoAnswer) as m:
-        try:
-            rp.query('machine')
-            assert False, 'Expected NoAnswer exception'
-        except dns.resolver.NoAnswer:
-            pass
-        assert any(call[0][0] == dns.name.from_text('machine') for call in 
m.call_args_list)
-        assert any(call[0][0] == dns.name.from_text('machine.') for call in 
m.call_args_list)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/tests/greenpool_test.py 
new/eventlet-0.20.0/tests/greenpool_test.py
--- old/eventlet-0.20.1/tests/greenpool_test.py 2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/tests/greenpool_test.py 2016-12-11 23:28:07.000000000 
+0100
@@ -1,8 +1,9 @@
 import gc
+import os
 import random
 
 import eventlet
-from eventlet import hubs, pools
+from eventlet import hubs, greenpool, event, pools
 from eventlet.support import greenlets as greenlet, six
 import tests
 
@@ -23,7 +24,7 @@
 
 class GreenPool(tests.LimitedTestCase):
     def test_spawn(self):
-        p = eventlet.GreenPool(4)
+        p = greenpool.GreenPool(4)
         waiters = []
         for i in range(10):
             waiters.append(p.spawn(passthru, i))
@@ -31,7 +32,7 @@
         self.assertEqual(results, list(range(10)))
 
     def test_spawn_n(self):
-        p = eventlet.GreenPool(4)
+        p = greenpool.GreenPool(4)
         results_closure = []
 
         def do_something(a):
@@ -44,8 +45,8 @@
         self.assertEqual(results_closure, list(range(10)))
 
     def test_waiting(self):
-        pool = eventlet.GreenPool(1)
-        done = eventlet.Event()
+        pool = greenpool.GreenPool(1)
+        done = event.Event()
 
         def consume():
             done.wait()
@@ -73,7 +74,7 @@
         self.assertEqual(pool.running(), 0)
 
     def test_multiple_coros(self):
-        evt = eventlet.Event()
+        evt = event.Event()
         results = []
 
         def producer():
@@ -85,7 +86,7 @@
             evt.wait()
             results.append('cons2')
 
-        pool = eventlet.GreenPool(2)
+        pool = greenpool.GreenPool(2)
         done = pool.spawn(consumer)
         pool.spawn_n(producer)
         done.wait()
@@ -102,7 +103,7 @@
         def some_work():
             hubs.get_hub().schedule_call_local(0, fire_timer)
 
-        pool = eventlet.GreenPool(2)
+        pool = greenpool.GreenPool(2)
         worker = pool.spawn(some_work)
         worker.wait()
         eventlet.sleep(0)
@@ -110,7 +111,7 @@
         self.assertEqual(timer_fired, [])
 
     def test_reentrant(self):
-        pool = eventlet.GreenPool(1)
+        pool = greenpool.GreenPool(1)
 
         def reenter():
             waiter = pool.spawn(lambda a: a, 'reenter')
@@ -119,7 +120,7 @@
         outer_waiter = pool.spawn(reenter)
         outer_waiter.wait()
 
-        evt = eventlet.Event()
+        evt = event.Event()
 
         def reenter_async():
             pool.spawn_n(lambda a: a, 'reenter')
@@ -136,7 +137,7 @@
 
         timer = eventlet.Timeout(1)
         try:
-            evt = eventlet.Event()
+            evt = event.Event()
             for x in six.moves.range(num_free):
                 pool.spawn(wait_long_time, evt)
                 # if the pool has fewer free than we expect,
@@ -158,8 +159,8 @@
         eventlet.sleep(0)
 
     def test_resize(self):
-        pool = eventlet.GreenPool(2)
-        evt = eventlet.Event()
+        pool = greenpool.GreenPool(2)
+        evt = event.Event()
 
         def wait_long_time(e):
             e.wait()
@@ -193,7 +194,7 @@
         # The premise is that a coroutine in a Pool tries to get a token out
         # of a token pool but times out before getting the token.  We verify
         # that neither pool is adversely affected by this situation.
-        pool = eventlet.GreenPool(1)
+        pool = greenpool.GreenPool(1)
         tp = pools.TokenPool(max_size=1)
         tp.get()  # empty out the pool
 
@@ -229,7 +230,7 @@
         gt.wait()
 
     def test_spawn_n_2(self):
-        p = eventlet.GreenPool(2)
+        p = greenpool.GreenPool(2)
         self.assertEqual(p.free(), 2)
         r = []
 
@@ -258,7 +259,7 @@
         self.assertEqual(set(r), set([1, 2, 3, 4]))
 
     def test_exceptions(self):
-        p = eventlet.GreenPool(2)
+        p = greenpool.GreenPool(2)
         for m in (p.spawn, p.spawn_n):
             self.assert_pool_has_free(p, 2)
             m(raiser, RuntimeError())
@@ -271,22 +272,22 @@
             self.assert_pool_has_free(p, 2)
 
     def test_imap(self):
-        p = eventlet.GreenPool(4)
+        p = greenpool.GreenPool(4)
         result_list = list(p.imap(passthru, range(10)))
         self.assertEqual(result_list, list(range(10)))
 
     def test_empty_imap(self):
-        p = eventlet.GreenPool(4)
+        p = greenpool.GreenPool(4)
         result_iter = p.imap(passthru, [])
         self.assertRaises(StopIteration, result_iter.next)
 
     def test_imap_nonefunc(self):
-        p = eventlet.GreenPool(4)
+        p = greenpool.GreenPool(4)
         result_list = list(p.imap(None, range(10)))
         self.assertEqual(result_list, [(x,) for x in range(10)])
 
     def test_imap_multi_args(self):
-        p = eventlet.GreenPool(4)
+        p = greenpool.GreenPool(4)
         result_list = list(p.imap(passthru2, range(10), range(10, 20)))
         self.assertEqual(result_list, list(zip(range(10), range(10, 20))))
 
@@ -294,7 +295,7 @@
         # testing the case where the function raises an exception;
         # both that the caller sees that exception, and that the iterator
         # continues to be usable to get the rest of the items
-        p = eventlet.GreenPool(4)
+        p = greenpool.GreenPool(4)
 
         def raiser(item):
             if item == 1 or item == 7:
@@ -314,30 +315,30 @@
         self.assertEqual(results, [0, 'r', 2, 3, 4, 5, 6, 'r', 8, 9])
 
     def test_starmap(self):
-        p = eventlet.GreenPool(4)
+        p = greenpool.GreenPool(4)
         result_list = list(p.starmap(passthru, [(x,) for x in range(10)]))
         self.assertEqual(result_list, list(range(10)))
 
     def test_waitall_on_nothing(self):
-        p = eventlet.GreenPool()
+        p = greenpool.GreenPool()
         p.waitall()
 
     def test_recursive_waitall(self):
-        p = eventlet.GreenPool()
+        p = greenpool.GreenPool()
         gt = p.spawn(p.waitall)
         self.assertRaises(AssertionError, gt.wait)
 
 
 class GreenPile(tests.LimitedTestCase):
     def test_pile(self):
-        p = eventlet.GreenPile(4)
+        p = greenpool.GreenPile(4)
         for i in range(10):
             p.spawn(passthru, i)
         result_list = list(p)
         self.assertEqual(result_list, list(range(10)))
 
     def test_pile_spawn_times_out(self):
-        p = eventlet.GreenPile(4)
+        p = greenpool.GreenPile(4)
         for i in range(4):
             p.spawn(passthru, i)
         # now it should be full and this should time out
@@ -350,9 +351,9 @@
         self.assertEqual(list(p), list(range(10)))
 
     def test_constructing_from_pool(self):
-        pool = eventlet.GreenPool(2)
-        pile1 = eventlet.GreenPile(pool)
-        pile2 = eventlet.GreenPile(pool)
+        pool = greenpool.GreenPool(2)
+        pile1 = greenpool.GreenPile(pool)
+        pile2 = greenpool.GreenPile(pool)
 
         def bunch_of_work(pile, unique):
             for i in range(10):
@@ -365,17 +366,6 @@
         self.assertEqual(list(pile1), list(range(10)))
 
 
-def test_greenpool_type_check():
-    eventlet.GreenPool(0)
-    eventlet.GreenPool(1)
-    eventlet.GreenPool(1e3)
-
-    with tests.assert_raises(TypeError):
-        eventlet.GreenPool('foo')
-    with tests.assert_raises(ValueError):
-        eventlet.GreenPool(-1)
-
-
 class StressException(Exception):
     pass
 
@@ -401,9 +391,10 @@
     # tests will take extra-long
     TEST_TIMEOUT = 60
 
+    @tests.skip_unless(os.environ.get('RUN_STRESS_TESTS') == 'YES')
     def spawn_order_check(self, concurrency):
         # checks that piles are strictly ordered
-        p = eventlet.GreenPile(concurrency)
+        p = greenpool.GreenPile(concurrency)
 
         def makework(count, unique):
             for i in six.moves.range(count):
@@ -434,16 +425,18 @@
         for l in latest[1:]:
             self.assertEqual(l, iters - 1)
 
+    @tests.skip_unless(os.environ.get('RUN_STRESS_TESTS') == 'YES')
     def test_ordering_5(self):
         self.spawn_order_check(5)
 
+    @tests.skip_unless(os.environ.get('RUN_STRESS_TESTS') == 'YES')
     def test_ordering_50(self):
         self.spawn_order_check(50)
 
     def imap_memory_check(self, concurrency):
         # checks that imap is strictly
         # ordered and consumes a constant amount of memory
-        p = eventlet.GreenPool(concurrency)
+        p = greenpool.GreenPool(concurrency)
         count = 1000
         it = p.imap(passthru, six.moves.range(count))
         latest = -1
@@ -467,12 +460,15 @@
         # make sure we got to the end
         self.assertEqual(latest, count - 1)
 
+    @tests.skip_unless(os.environ.get('RUN_STRESS_TESTS') == 'YES')
     def test_imap_50(self):
         self.imap_memory_check(50)
 
+    @tests.skip_unless(os.environ.get('RUN_STRESS_TESTS') == 'YES')
     def test_imap_500(self):
         self.imap_memory_check(500)
 
+    @tests.skip_unless(os.environ.get('RUN_STRESS_TESTS') == 'YES')
     def test_with_intpool(self):
         class IntPool(pools.Pool):
             def create(self):
@@ -487,7 +483,7 @@
                 return token
 
             int_pool = IntPool(max_size=intpool_size)
-            pool = eventlet.GreenPool(pool_size)
+            pool = greenpool.GreenPool(pool_size)
             for ix in six.moves.range(num_executes):
                 pool.spawn(run, int_pool)
             pool.waitall()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/eventlet-0.20.1/tests/isolated/patcher_import_patched_defaults.py 
new/eventlet-0.20.0/tests/isolated/patcher_import_patched_defaults.py
--- old/eventlet-0.20.1/tests/isolated/patcher_import_patched_defaults.py       
2017-01-03 02:13:25.000000000 +0100
+++ new/eventlet-0.20.0/tests/isolated/patcher_import_patched_defaults.py       
1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-__test__ = False
-
-if __name__ == '__main__':
-    import sys
-    # On eventlet<=0.20.0 uncommenting this unpatched import fails test
-    # because import_patched did not agressively repatch sub-imported modules 
cached in sys.modules
-    # to be fixed in https://github.com/eventlet/eventlet/issues/368
-    # import tests.patcher.shared_import_socket
-
-    import eventlet
-    target = eventlet.import_patched('tests.patcher.shared1').shared
-    t = target.socket.socket
-    import eventlet.green.socket as g
-    if not issubclass(t, g.socket):
-        print('Fail. Target socket not green: {0} bases {1}'.format(t, 
t.__bases__))
-        sys.exit(1)
-
-    print('pass')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/tests/patcher/shared1.py 
new/eventlet-0.20.0/tests/patcher/shared1.py
--- old/eventlet-0.20.1/tests/patcher/shared1.py        2017-01-03 
02:13:25.000000000 +0100
+++ new/eventlet-0.20.0/tests/patcher/shared1.py        1970-01-01 
01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-import os
-__test__ = False
-shared = None
-
-
-if os.environ.get('eventlet_test_in_progress') == 'yes':
-    # pyopenssl imported urllib before we could patch it
-    # we can ensure this shared module was not imported
-    # https://github.com/eventlet/eventlet/issues/362
-    import tests.patcher.shared_import_socket as shared
-    _ = shared  # mask unused import error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/eventlet-0.20.1/tests/patcher/shared_import_socket.py 
new/eventlet-0.20.0/tests/patcher/shared_import_socket.py
--- old/eventlet-0.20.1/tests/patcher/shared_import_socket.py   2017-01-03 
02:13:25.000000000 +0100
+++ new/eventlet-0.20.0/tests/patcher/shared_import_socket.py   1970-01-01 
01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-import os
-import socket
-__test__ = False
-_ = socket  # mask unused import error
-
-# prevent accidental imports
-assert os.environ.get('eventlet_test_in_progress') == 'yes'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/tests/patcher_test.py 
new/eventlet-0.20.0/tests/patcher_test.py
--- old/eventlet-0.20.1/tests/patcher_test.py   2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/tests/patcher_test.py   2016-12-11 23:28:07.000000000 
+0100
@@ -82,9 +82,26 @@
         assert 'eventlet.green.urllib' in lines[2], repr(output)
         assert 'eventlet.green.httplib' not in lines[2], repr(output)
 
+    def test_import_patched_defaults(self):
+        self.write_to_tempfile("base", """
+import socket
+try:
+    import urllib.request as urllib
+except ImportError:
+    import urllib
+print("base {0} {1}".format(socket, urllib))""")
 
-def test_import_patched_defaults():
-    tests.run_isolated('patcher_import_patched_defaults.py')
+        new_mod = """
+from eventlet import patcher
+base = patcher.import_patched('base')
+print("newmod {0} {1} {2}".format(base, base.socket, 
base.urllib.socket.socket))
+"""
+        self.write_to_tempfile("newmod", new_mod)
+        output, lines = self.launch_subprocess('newmod.py')
+        assert lines[0].startswith('base'), repr(output)
+        assert lines[1].startswith('newmod'), repr(output)
+        assert 'eventlet.green.socket' in lines[1], repr(output)
+        assert 'GreenSocket' in lines[1], repr(output)
 
 
 class MonkeyPatch(ProcessBase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/tests/semaphore_test.py 
new/eventlet-0.20.0/tests/semaphore_test.py
--- old/eventlet-0.20.1/tests/semaphore_test.py 2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/tests/semaphore_test.py 2016-12-11 23:28:07.000000000 
+0100
@@ -1,13 +1,14 @@
 import time
 
 import eventlet
-import tests
+from eventlet import semaphore
+from tests import LimitedTestCase
 
 
-class TestSemaphore(tests.LimitedTestCase):
+class TestSemaphore(LimitedTestCase):
 
     def test_bounded(self):
-        sem = eventlet.CappedSemaphore(2, limit=3)
+        sem = semaphore.CappedSemaphore(2, limit=3)
         self.assertEqual(sem.acquire(), True)
         self.assertEqual(sem.acquire(), True)
         gt1 = eventlet.spawn(sem.release)
@@ -23,28 +24,28 @@
         gt2.wait()
 
     def test_bounded_with_zero_limit(self):
-        sem = eventlet.CappedSemaphore(0, 0)
+        sem = semaphore.CappedSemaphore(0, 0)
         gt = eventlet.spawn(sem.acquire)
         sem.release()
         gt.wait()
 
     def test_non_blocking(self):
-        sem = eventlet.Semaphore(0)
+        sem = semaphore.Semaphore(0)
         self.assertEqual(sem.acquire(blocking=False), False)
 
     def test_timeout(self):
-        sem = eventlet.Semaphore(0)
+        sem = semaphore.Semaphore(0)
         start = time.time()
         self.assertEqual(sem.acquire(timeout=0.1), False)
         self.assertTrue(time.time() - start >= 0.1)
 
     def test_timeout_non_blocking(self):
-        sem = eventlet.Semaphore()
+        sem = semaphore.Semaphore()
         self.assertRaises(ValueError, sem.acquire, blocking=False, timeout=1)
 
 
 def test_semaphore_contention():
-    g_mutex = eventlet.Semaphore()
+    g_mutex = semaphore.Semaphore()
     counts = [0, 0]
 
     def worker(no):
@@ -60,14 +61,3 @@
     t2.kill()
 
     assert abs(counts[0] - counts[1]) < int(min(counts) * 0.1), counts
-
-
-def test_semaphore_type_check():
-    eventlet.Semaphore(0)
-    eventlet.Semaphore(1)
-    eventlet.Semaphore(1e2)
-
-    with tests.assert_raises(TypeError):
-        eventlet.Semaphore('foo')
-    with tests.assert_raises(ValueError):
-        eventlet.Semaphore(-1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/tests/socket_test.py 
new/eventlet-0.20.0/tests/socket_test.py
--- old/eventlet-0.20.1/tests/socket_test.py    2017-01-03 02:13:25.000000000 
+0100
+++ new/eventlet-0.20.0/tests/socket_test.py    2016-12-11 23:28:07.000000000 
+0100
@@ -72,7 +72,10 @@
         with open(mock_sys_pkg_dir + '/dns.py', 'wb') as f:
             f.write(b'raise Exception("Your IP address string is so illegal ' +
                     b'it prevents installing packages.")\n')
-        tests.run_isolated('socket_resolve_green.py', 
pythonpath_extend=[mock_sys_pkg_dir])
+        tests.run_isolated(
+            'socket_resolve_green.py',
+            env={'PYTHONPATH': os.pathsep.join(sys.path + [mock_sys_pkg_dir])},
+        )
     finally:
         shutil.rmtree(mock_sys_pkg_dir)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.20.1/tox.ini new/eventlet-0.20.0/tox.ini
--- old/eventlet-0.20.1/tox.ini 1970-01-01 01:00:00.000000000 +0100
+++ new/eventlet-0.20.0/tox.ini 2016-12-11 23:28:07.000000000 +0100
@@ -0,0 +1,56 @@
+# The flake8 and pep8 sections just contain configuration for corresponding 
tools.
+# Checkers are not run implicitly.
+[flake8]
+exclude = 
*.egg*,.env,.git,.hg,.tox,_*,build*,dist*,venv*,six.py,mock.py,eventlet/green/http/*,eventlet/support/dns/*
+ignore = E261
+max-line-length = 101
+
+[pep8]
+count = 1
+exclude = 
*.egg*,.env,.git,.hg,.tox,_*,build*,dist*,venv*,six.py,mock.py,eventlet/green/http/*,eventlet/support/dns/*
+ignore = E261
+max-line-length = 101
+show-source = 1
+statistics = 1
+
+[tox]
+minversion=1.8
+envlist =
+    pep8, py{26,27,33,34,35,py}-{selects,poll,epolls}
+
+[testenv:pep8]
+basepython = python2.7
+setenv =
+    {[testenv]setenv}
+deps =
+    pep8==1.5.6
+commands =
+    pep8 benchmarks/ eventlet/ tests/
+
+[testenv]
+passenv = TRAVIS*
+setenv =
+    PYTHONDONTWRITEBYTECODE = 1
+    selects: EVENTLET_HUB = selects
+    poll: EVENTLET_HUB = poll
+    epolls: EVENTLET_HUB = epolls
+basepython =
+    py26: python2.6
+    py27: python2.7
+    py33: python3.3
+    py34: python3.4
+    py35: python3.5
+    pypy: pypy
+deps =
+    nose==1.3.1
+    setuptools==5.4.1
+    py{26,27}: subprocess32==3.2.7
+    py{26,27}-{selects,poll,epolls}: MySQL-python==1.2.5
+    py26-{selects,poll,epolls}: pyopenssl==0.13
+    py{27,33,34}-{selects,poll,epolls}: pyopenssl==16.0.0
+    {selects,poll,epolls}: psycopg2cffi-compat==1.1
+    {selects,poll,epolls}: pyzmq==13.1.0
+commands =
+    nosetests --verbose {posargs:tests/}
+    nosetests --verbose --with-doctest eventlet/coros.py eventlet/event.py \
+        eventlet/pools.py eventlet/queue.py eventlet/timeout.py


Reply via email to