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