# # spec file for package python-eventlet # # Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # %{?sle15_python_module_pythons} Name: python-eventlet Version: 0.39.0 Release: 1.2 Summary: Concurrent networking library for Python License: MIT Group: Development/Languages/Python URL: https://eventlet.net Source: https://files.pythonhosted.org/packages/source/e/eventlet/eventlet-%{version}.tar.gz BuildRequires: %{python_module hatch-vcs} BuildRequires: %{python_module pip} BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: netcfg libnss_usrfiles2 Requires: python-dnspython >= 1.15.0 Requires: python-greenlet >= 1.0 BuildArch: noarch # SECTION TEST requirements BuildRequires: %{python_module dnspython >= 1.15.0} BuildRequires: %{python_module greenlet >= 1.0} BuildRequires: %{python_module pytest} BuildRequires: %{python_module testsuite} # eventlet parses /etc/protocols which is not available in normal build envs BuildRequires: netcfg libnss_usrfiles2 %if 0%{?suse_version} >= 1550 BuildRequires: %{python_module pyOpenSSL} %endif # /SECTION %python_subpackages %description Eventlet is a concurrent networking library for Python that allows changing how code is run. It uses epoll or libevent for scalable non-blocking I/O. Coroutines ensure that the developer uses a blocking style of programming that is similar to threading, but provide the benefits of non-blocking I/O. The event dispatch is implicit, which means Eventlet can be used from the Python interpreter, or as part of a larger application. %prep %autosetup -p1 -n eventlet-%{version} %build %pyproject_wheel %install %pyproject_install %python_expand %fdupes %{buildroot}%{$python_sitelib} %check # dnspython 1 and 2: backdoor tests fail with "take too long" skiptests="(BackdoorTest and test_server)" skiptests+=" or test_dns_methods_are_green or test_noraise_dns_tcp or test_clear" # These are flaky inside the OBS environment skiptests+=" or test_fork_after_monkey_patch or test_send_1k_req_rep or test_cpu_usage_after_bind" # it is racy, see: https://lore.kernel.org/all/CADVnQy=AnJY9NZ3w_xNghEG80-DhsXL0r_vEtkr=dmz0ugcoVw@mail.gmail.com/ (bsc#1202188) skiptests+=" or test_018b_http_10_keepalive_framing" # gh#eventlet/eventlet#803 skiptests+=" or test_raise_dns_tcp" # gh#eventlet/eventlet#821 bsc#1216858 skiptests+=" or test_full_duplex" # gh#eventlet/eventlet#987 skiptests+=" or test_send_timeout" # gh#eventlet/eventlet#662 (hopefully temporary until debugging with 3.13 finishes) python313_skiptests+=" or test_threading_condition or test_threading_join or test_socketserver_selectors or test_threading_current or test_threadpoolexecutor" # gh#eventlet/eventlet#739 python310_skiptests+=" or test_017_ssl_zeroreturnerror" %pytest -k "not ($skiptests ${$python_skiptests})" ${$python_pytest_param} %files %{python_files} %license LICENSE %doc AUTHORS NEWS README.rst %{python_sitelib}/eventlet %{python_sitelib}/eventlet-%{version}.dist-info %changelog * Fri Feb 7 2025 John Paul Adrian Glaubitz - Update to 0.39.0 * [fix] Remove monotonic from requirements (#1018) * [fix] wsgi: Clean up some override logic (#999) * [fix] Correct line lookup from inspect.getsourcelines() (#990) * Drop support of Python 3.7 (#967) * [fix] Calling eventlet.sleep(0) isn't really blocking, so don't blow up (#1015) * Mon Jan 6 2025 John Paul Adrian Glaubitz - Update to 0.38.2 * [fix] fix the monkey patching with the asyncio hub * [feature] introduce the unmonkeypatching feature - from version 0.38.1 * [fix] Python 3.13: Use greenthread's dead state where possible (#1000) * [env] bump github Actions (#996) * [fix] Fix bug where asyncio hub didn't support multiple os threads (#995) * Wed Dec 4 2024 John Paul Adrian Glaubitz - Update to 0.38.0 * Python 3.13 Support (#988) * [fix] wsgi: server MUST NOT send Content-Length/Transfer-Encoding header in response with a status code of 1xx, 204 or (2xx to CONNECT request) (#747) * [fix] wsgi: No request Content-Length nor Transfer-Encoding implies no body (#985) - Drop 313-new-thread-attributes.patch, merged upstream - Drop no-dynamic-version.patch, no longer required - Switch back to stable releases * Wed Oct 23 2024 mcepl@cepl.eu - Temporarily switch to direct download from GitHub, and update to version 0.37.0+git.1726056572.8637820: * Update changelog for version 0.37.0 (#980) * Describes Eventlet's Alternatives Into the Migration Guide (#971) * fix migration guide url (#978) * os.read/write waits until file descriptor is ready. (#975) * Upgrade RLocks as last thing we do (#970) * warns about using multiple readers (#960) * drop header keys with underscores (#959) * doc: Repair changelog link (#958) * Make the docs more user friendly (#950) * Update changelog for version 0.36.1 (#952) - Add patches making it build with 3.13: - 313-new-thread-attributes.patch (gh#eventlet/eventlet#964) - no-dynamic-version.patch (we cannot use dynamic version number on a git checkout) - Fix setting of the version number "manually" (with sed) * Wed Sep 18 2024 John Paul Adrian Glaubitz - Update to 0.37.0 * [fix] os.read/write waits until file descriptor is ready * [fix] Upgrade RLocks as last thing we do * [security] drop header keys with underscores * [doc] Various doc updates (Migration Guide, repair links, warns...) * Thu Jun 6 2024 Dirk Müller - update to 0.36.1: * [fix] eventlet.websocket is not always used from eventlet.wsgi, so do not assume eventlet.set_idle exists * [fix] Make sure asyncio hub doesn't use greendns for asyncio DNS APIs * [fix] Make asyncio.to_thread work with the same semantics as normal asyncio * [fix] Refactor congruence checks based on assert at runtime * [tests] Run tests on macOS in CI, and some fixes to get it in reasonable state (#list * [fix] Fix wsgi.server shutdown for in-flight requests * [feature] Add debug convenience helpers - asyncio, threads * [fix] Handle errors better. * [fix] Fix tool.setuptools/packages list * [security] Dnspython 2.6.1 - Address DoS via the Tudoor mechanism (CVE-2023-29483) * [doc] add asyncio into the doc hub page * [clean] clean obsolete python 2 code from the ssl module * [fix] Add get_server_info to db_pool.py * [fix] wsgi: Handle Timeouts from applications * [fix] shrinks window before connecting * [fix] Do not allow failed patching to stop execution * [doc] Basic documentation for asyncio migration * [tests] add minimal linting * [doc] officially host docs on readthedocs * [fix] fix truncate size nullable * [fix] Handle transport endpoint shutdown in conditions * [fix] Rework reject_bad_requests option * [fix] Fix NameError introduced by #826 * [feature] Support awaiting GreenThread in an `async def` context https://github.com/eventlet/eventlet/pull/889 * [infra] Extend test cert to 2049 * [feature] Asyncio hub support for Python 3.7 to 3.9 * [infra] Modernize doc generation * [fix] Fix bad exceptions handlings * [feature] Support using asyncio coroutines from inside greenlets https://github.com/eventlet/eventlet/pull/877 * [removal] Remove deprecated CGIHTTPServer and SimpleHTTPServer * [governance] Update maintenance goals * [feature] Add an asyncio hub for eventlet * Fri Jan 19 2024 Dirk Müller - update to 0.34.3: * Fix security issue in the wsgi module related to RFC 9112 * Fix segfault, a new approach for greening existing locks * greendns: fix getaddrinfo parameter name * Fix deprecation warning on ssl.PROTOCOL_TLS * Pytests, fix error at teardown of TestGreenSocket.test_full_duplex * Skip test which uses Py cgi module * Drop old code based on python < 3.7 * Allowing inheritance of GreenSSLSocket without overriding the __new_ method https://github.com/eventlet/eventlet/pull/796 * [bug] Fix broken API related to `__version__` removal * [doc] Fix pypi broken link * 0.34.1 * [bug] Fix memory leak in greendns * [infra] Fix OIDC authentication failure * [bug] Ignore asyncore and asynchat for Python 3.12+ * 0.34.0 (Not released on Pypi) * Dropped support for Python 3.6 and earlier. * Fix Python 3.13 compat by adding missing attibute '_is_main_interpreter' * Add support of Python 3.12 * Drop unmaintained and unused stdlib tests * Fix tests and CI for Python 3.7 and higher * Stop claiming to create universal wheels * Fix green logging locks for Python versions <= 3.10 - switch to PEP517 build - cleanup tests - drop support-python3.12.patch, denose-eventlet.patch: solved differently upstream - drop python-eventlet-FTBFS2028.patch fix-py3-rlock.patch: upstream * Thu Nov 30 2023 Steve Kowalik - Add patch support-python3.12.patch: * Support Python 3.12 changes. * Tue Nov 7 2023 Jiri Slaby - disable test_full_duplex (bsc#1216858) * Fri Apr 21 2023 Dirk Müller - add sle15_python_module_pythons (jsc#PED-68) - Remove upstreamed newdnspython.patch (bsc#1208126). - skip test_raise_dns_tcp test (gh#eventlet/eventlet#803) * Thu Apr 13 2023 Matej Cepl - Make calling of %%{sle15modernpython} optional. * Thu Feb 16 2023 Dirk Müller - update newdnspython.patch to not patch non-testsuite as it breaks the functionality (bsc#1208126) * Tue Feb 14 2023 Matej Cepl - Remove unnecessary obsolete dependency on pyzmq. - Clean up the SPEC file. * Sat Jan 28 2023 Dirk Müller - update to 0.33.3: * dnspython 2.3.0 raised AttributeError: module 'dns.rdtypes' has no attribute 'ANY' https://github.com/eventlet/eventlet/issues/781 * Tue Jan 17 2023 Daniel Garcia - Add fix-py3-rlock.patch to make the code compatible with python 3.11, gh#eventlet/eventlet#754 * Fri Dec 9 2022 Thorsten Kukuk - Reove unecessary sysconfig-netconfig BuildRequires * Sat Dec 3 2022 Yogalakshmi Arunachalam - Update to v0.33.2 * Stop using deprecated threading APIs Way back in py26, snake_case alternatives were added for the old camelCase APIs. py310 started emitting DeprecationWarnings about them; presumably they'll look to remove the old APIs eventually. See * Wed Nov 9 2022 Pedro Monreal - Fix build with OpenSSL 3.0 [bsc#1205042] * Temporarily disable test_017_ssl_zeroreturnerror * Wed Aug 17 2022 Jiri Slaby - disable test_018b_http_10_keepalive_framing (bsc#1202188) * Sat Jun 4 2022 Dirk Müller - update to 0.33.1: * Prevent deadlock on logging._lock * Sun Dec 26 2021 Bernhard Wiedemann - Add python-eventlet-FTBFS2028.patch to fix build in 2028 (boo#1102840) * Thu Dec 16 2021 Ben Greiner - update to 0.33.0 * green.thread: unlocked Lock().release() should raise exception, returned True * wsgi: Don’t break HTTP framing during 100-continue handling * Python 3.10 partial support * greendns: Create a DNS resolver lazily rather than on import * ssl: GreenSSLContext minimum_version and maximum_version setters - Refresh denosing patches: merge remove_nose.patch and remove_nose_part_2.patch into denose-eventlet.patch - Refresh newdnspython.patch * Sun Nov 7 2021 Dirk Müller - update to 0.32.0: * greendns: compatibility with dnspython v2 * green.ssl: wrap_socket now accepts argument `ciphers` * websocket: control frames are now always uncompressed per RFC 7692 * ssl: py3.6 using client certificates raised ValueError: check_hostname needs server_hostname argument * IMPORTANT: websocket: Limit maximum uncompressed frame length to 8MiB * wsgi: websocket ALREADY_HANDLED flag on corolocal * green.ssl: Set suppress_ragged_eofs default based on SSLSocket defaults * greenio: socket.connect_ex returned None instead of 0 on success * Use _imp instead of deprecated imp - drop pr_639.patch, merged upstream * Sun Mar 21 2021 Ben Greiner - Update to 0.30.2 * greendns: patch ssl to fix RecursionError on SSLContext.options.__set__ #677 - Release 0.30.1 * patcher: built-in open() did not accept kwargs #683 - Release 0.30.0 * pyopenssl tsafe module was deprecated and removed in v20.0.0 * deprecate pyevent hub * Deprecate CPython 2.7 and 3.4 support * py39: Add _at_fork_reinit method to Semaphores - Drop pr_672-remove-OpenSSL-tsafe.patch merged upstream * Thu Dec 10 2020 Benjamin Greiner - Add pr_672-remove-OpenSSL-tsafe.patch to support pyopenssl 20 - skip some tests which are flaky inside OBS environment - fix python2 build requirement for Leap * Mon Dec 7 2020 Benjamin Greiner - Update to 0.29.1 * patcher: [py27] recursion error in pytest/python2.7 installing register_at_fork * patcher: monkey_patch(builtins=True) failed on py3 because `file` class is gone * don't crash on PyPy 7.0.0 * Only install monotonic on python2 - Changes for 0.29.0 * ssl: context wrapped listener fails accept() - Changes for 0.28.1 * Clean up TypeError in __del__ - Changes for 0.28.0 * Always remove the right listener from the hub gh#enventlet/eventlet#645 - Changes for 0.27.0 * patcher: Clean up threading book-keeping at fork when monkey-patched * backdoor: handle disconnects better - Fix test skips for non-default python 3.6 flavor gh#openSUSE/python-rpm-macros#66 - refresh newdnspython.patch * Wed Aug 19 2020 Benjamin Greiner - do not run test on python 2 (sadly no real macro expansion possible to allow run but failok with ||:) - disable test discovery dir recursion gh#eventlet/eventlet#638 - simplify the pytest call, no test file deletions * Mon Aug 17 2020 John Vandenberg - Add pr_639.patch which fixes eventlet using dnspython 2.0.0 - Add remove_nose_part_2.patch to complete the removal of nose - Activate test suite with 958 test cases passing on Tumbleweed * Mon Aug 17 2020 Matej Cepl - Don't limit the upper version of dnspython. * Fri Aug 14 2020 Matej Cepl - Add newdnspython.patch which makes eventlet work with new dnspython 2.0.0. * Thu Aug 13 2020 Matej Cepl - Add remove_nose.patch to remove dependency on nose (gh#eventlet/eventlet#638). * Thu Aug 13 2020 Dirk Mueller - update to 0.26.1: * pin dnspython <2.0.0 https://github.com/eventlet/eventlet/issues/619 * Fix compatibility with SSLContext usage >= Python 3.7 * wsgi: Fix header capitalization on py3 * Fix #508: Py37 Deadlock ThreadPoolExecutor (#598) * drop Python 3.4 support * Fix misc SyntaxWarning's under Python 3.8 * Remove unnecessary assignment in _recv_loop (#601) * Wed Apr 29 2020 Dirk Mueller - update to 0.25.2: * green.ssl: redundant set_nonblocking() caused SSLWantReadError * Tue Sep 10 2019 Ralf Haferkamp - Update to 0.25.1: * wsgi (tests): Stop using deprecated cgi.parse_qs() to support Python 3.8; Thanks to Miro Hrončok * os: Add workaround to `open` for pathlib on py 3.7; Thanks to David Szotten * Fri Jun 21 2019 Hans-Peter Jansen - we don't want to obsolete python-doc: rather python-eventlet-doc, which depends on python-eventlet, should get removed on update, anyway. * Fri Jun 7 2019 Tomáš Chvátal - Do not generate sphinx docu, it is online and now we have only python3 Sphinx anyway - Update to 0.25.0: * Support for new python and ssl - Remove patches that are in upstream release: * 0001-IMPORTANT-late-import-in-use_hub-thread-race-caused-.patch * 0001-ssl-connect-used-non-monotonic-time.time-for-timeout.patch * 0002-Fix-for-Python-3.7-506.patch * 0003-Fix-compatibility-with-Python-3.7-ssl.SSLSocket-531.patch * Mon Apr 29 2019 Thomas Bechtold - add 0001-ssl-connect-used-non-monotonic-time.time-for-timeout.patch - add 0002-Fix-for-Python-3.7-506.patch and add 0003-Fix-compatibility-with-Python-3.7-ssl.SSLSocket-531.patch Both needed for python 3.7 compatibility * Mon Apr 29 2019 Thomas Bechtold - add 0001-IMPORTANT-late-import-in-use_hub-thread-race-caused-.patch Fixes a problem during tests runs with python 2.7: RuntimeError: no suitable implementation for this system: \ AttributeError("'module' object has no attribute 'epolls'",) * Thu Dec 6 2018 Thomas Bechtold - update to 0.24.1: * greendns: don't contact nameservers if one entry is returned from hosts file; Thanks to Daniel Alvarez * greendns: Fix infinite loop when UDP source address mismatch; Thanks to Lon Hohberger * greendns: Fix bad ipv6 comparison; Thanks to Lon Hohberger * wsgi: Use byte strings on py2 and unicode strings on py3; Thanks to Tim Burke * pools: put to empty pool would block sometimes; Thanks to Sam Merritt * greendns: resolving over TCP produced ValueError; Thanks to Jaume Marhuenda * support.greendns: ImportError when dns.rdtypes was imported before eventlet; Thanks to Jaume Marhuenda * greendns: full comment lines were not skipped; Thanks to nat-goodspeed * Drop support for Python3.3; Python2.6 and python-epoll package * external dependencies for six, monotonic, dnspython; Thanks to nat-goodspeed * wsgi: Don't strip all Unicode whitespace from headers on py3; Thanks to Tim Burke * green.threading: current_thread() did not see new monkey-patched threads; Thanks to Jake Tesler * tpool: exception in tpool-ed call leaked memory via backtrace * wsgi: latin-1 encoding dance for environ[PATH_INFO] * Fixed issue installing excess enum34 on Python3.4+ (rebuild with updated setuptools) * event: Event.wait() timeout=None argument to be compatible with upstream CPython * greendns: Treat /etc/hosts entries case-insensitive; Thanks to Ralf Haferkamp * convenience: (SO_REUSEPORT) socket.error is not OSError on Python 2; Thanks to JacoFourie@github * convenience: SO_REUSEPORT is not available on WSL platform (Linux on Windows) * convenience: skip SO_REUSEPORT for bind on random port (0) * dns: reading /etc/hosts raised DeprecationWarning for universal lines on Python 3.4+; Thanks to Chris Kerr * green.openssl: Drop OpenSSL.rand support; Thanks to Haikel Guemar * green.subprocess: keep CalledProcessError identity; Thanks to Linbing@github * greendns: be explicit about expecting bytes from sock.recv; Thanks to Matt Bennett * greendns: early socket.timeout was breaking IO retry loops * GreenSocket.accept does not notify_open; Thanks to orishoshan * patcher: set locked RLocks' owner only when patching existing locks; Thanks to Quan Tian * patcher: workaround for monotonic "no suitable implementation"; Thanks to Geoffrey Thomas * queue: empty except was catching too much * socket: context manager support; Thanks to Miguel Grinberg * support: update monotonic 1.3 (5c0322dc559bf) * support: upgrade bundled dnspython to 1.16.0 (22e9de1d7957e) https://github.com/eventlet/eventlet/issues/427 * websocket: fd leak when client did not close connection properly; Thanks to Konstantin Enchant * websocket: support permessage-deflate extension; Thanks to Costas Christofi and Peter Kovary * wsgi: close idle connections (also applies to websockets) * wsgi: deprecated options are one step closer to removal * wsgi: handle remote connection resets; Thanks to Stefan Nica * New timeout error API: .is_timeout=True on exception object It's now easy to test if network error is transient and retry is appropriate. Please spread the word and invite other libraries to support this interface. * hubs: use monotonic clock by default (bundled package); Thanks to Roman Podoliaka and Victor Stinner * dns: EVENTLET_NO_GREENDNS option is back, green is still default * dns: hosts file was consulted after nameservers * ssl: RecursionError on Python3.6+; Thanks to justdoit0823@github and Gevent developers * wsgi: log_output=False was not disabling startup and accepted messages * greenio: Fixed OSError: [WinError 10038] Socket operation on nonsocket * dns: EAI_NODATA was removed from RFC3493 and FreeBSD * green.select: fix mark_as_closed() wrong number of args * green.zmq: socket.{recv,send}_* signatures did not match recent upstream pyzmq * New feature: Add zipkin tracing to eventlet * db_pool: proxy Connection.set_isolation_level() * green.zmq: support RCVTIMEO (receive timeout) * green.profile: Python3 compatibility; Thanks to Artur Stawiarski * support: upgrade bundled six to 1.10 (dbfbfc818e3d) * python3.6: http.client.request support chunked_encoding * 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 - Drop 0001-Fix-SSL-connection-reset-errors.patch . Merged upstream - Drop PR-459.patch . Merged upstream * Thu Dec 6 2018 Tomáš Chvátal - Fix fdupes call * Tue Dec 4 2018 Matej Cepl - Remove superfluous devel dependency for noarch package * Fri Jan 12 2018 tbechtold@suse.com - Add PR-459.patch. Hostname in /etc/hosts are not case-sensitive, this fixes HostsResolver() accordingly. * Sun Dec 10 2017 dmueller@suse.com - fix enum-compat removal * Sun Nov 26 2017 dmueller@suse.com - go back to a working version: downgrade to 0.20.0 - add 0001-Fix-SSL-connection-reset-errors.patch to fix hangs on SSL connections * Tue Oct 17 2017 snica@suse.com - add netcfg package to list of requirements * Fri Oct 6 2017 tbechtold@suse.com - update to 0.21.0: * New timeout error API: .is_timeout=True on exception object It's now easy to test if network error is transient and retry is appropriate. Please spread the word and invite other libraries to support this interface. * hubs: use monotonic clock by default (bundled package); * dns: EVENTLET_NO_GREENDNS option is back, green is still default * dns: hosts file was consulted after nameservers * ssl: RecursionError on Python3.6+; * wsgi: log_output=False was not disabling startup and accepted messages * greenio: Fixed OSError: [WinError 10038] Socket operation on nonsocket * dns: EAI_NODATA was removed from RFC3493 and FreeBSD * green.select: fix mark_as_closed() wrong number of args * green.zmq: socket.{recv,send}_* signatures did not match recent upstream pyzmq * New feature: Add zipkin tracing to eventlet * db_pool: proxy Connection.set_isolation_level() * green.zmq: support RCVTIMEO (receive timeout) * green.profile: Python3 compatibility; Thanks to Artur Stawiarski * support: upgrade bundled six to 1.10 (dbfbfc818e3d) * python3.6: http.client.request support chunked_encoding - Use fdupes * Tue Sep 5 2017 jengelh@inai.de - Ensure neutrality of description. * Tue Sep 5 2017 jmatejek@suse.com - remove dependency on metapackage "enum-compat" in favor of specifying this requirement the usual way via RPM requirement conditional on version * Thu Aug 24 2017 jmatejek@suse.com - singlespec auto-conversion * Wed Jan 11 2017 dmueller@suse.com - update to 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 * IMPORTANT: removed select.poll() function * DNS resolving is always green with dnspython bundled in * greenio: only trampoline when we block * convenience: listen() sets SO_REUSEPORT when available; Thanks to Zhengwei Gao * ssl: Fix "TypeError: read() argument 2 must be read-write bytes-like object, not None" * greenio: _recv_loop behaviour with recv_into on closed sock * ipv6: getaddrinfo would fail with scope index * green.zmq: Support {send,recv}_{string,json,pyobj} wrappers * greendns: Return answers from /etc/hosts despite nameserver errors * patcher: fixed green existing locks fail (Python3) * Add DAGPool, a dependency-driven greenthread pool * wsgi: Unix socket address representation; Thanks to Samuel Merritt * tpool: isolate internal socket from default timeout; Thanks to Alex Villacís Lasso * wsgi: only skip Content-Type and Content-Length headers (GH-327) * wsgi: 400 on blank Content-Length headers (GH-334) * greenio: makefile related pypy socket ref counting * ssl: Fix recv_into blocking when reading chunks of data * websocket: support Gunicorn environ['gunicorn.socket'] * Sat Dec 3 2016 dmueller@suse.com - update to 0.19.0: * ssl: IMPORTANT DoS FIX do_handshake_connect=False in server accept(); * green.urllib2: missing patched ssl module; * wsgi: environ[headers_raw] tuple of unmodified name: value pairs * test against modern pyopenssl 16.0.0 for Python 2.7+; * wsgi: document compatibility with python `logging` * Minor grammatical improvements and typo fixes to the docs * Fri Feb 26 2016 dmueller@suse.com - update to 0.18.4: * wsgi: change TCP_NODELAY to TCP_QUICKACK, ignore socket error when not available * wsgi: Use buffered writes - fixes partial socket.send without custom writelines(); Github issue #295 * wsgi: TCP_NODELAY enabled by default * wsgi: Fix data loss on partial writes (socket.send); Thanks to Jakub Stasiak * IMPORTANT: do not use Eventlet 0.18.0 and 0.18.1 * patcher: Fix AttributeError in subprocess communicate() * greenio: Fix "TypeError: an integer is required" in sendto() * IMPORTANT: do not use Eventlet 0.18.0 and 0.18.1 * greenio: Fixed a bug that could cause send() to start an endless loop on ENOTCONN; Thanks to Seyeong Kim * wsgi: Fixed UNIX socket address being trimmed in "wsgi starting" log; Thanks to Ihar Hrachyshka * ssl: Ported eventlet.green.OpenSSL to Python 3; Thanks to Victor Stinner * greenio: Made read() support buflen=-1 and added readall() (Python 3); Thanks to David Szotten * wsgi: Made the error raised in case of chunk read failures more precise (this should be backwards compatible as the new exception class, wsgi.ChunkReadError, is a subclass of ValueError which was being used there before); Thanks to Samuel Merritt * greenio: Fixed socket.recv() sometimes returning str instead of bytes on Python 3; Thanks to Janusz Harkot * wsgi: Improved request body discarding * websocket: Fixed TypeError on empty websocket message (Python 3); Thanks to Fukuchi Daisuke * subprocess: Fixed universal_newlines support * wsgi: Output of 0-byte chunks is now suppressed; Thanks to Samuel Merritt * Improved the documentation; Thanks to Ramakrishnan G, ashutosh-mishra and Azhar Hussain * greenio: Changed GreenFileIO.write() (Python 3) to always write all data to match the behavior on Python 2; Thanks to Victor Stinner * subprocess: Fixed missing subprocess.mswindows attribute on Python 3.5; Thanks to Josh VanderLinden * ssl/monkey patching: Fixed a bug that would cause merely importing eventlet to monkey patch the ssl module; Thanks to David Szotten * documentation: Added support for building plain text documentation; thanks to Levente Polyak * Mon Jun 22 2015 tbechtold@suse.com - update to 0.17.4: * ssl: incorrect initalization of default context; Thanks to stuart-mclaren * Wed Apr 22 2015 tbechtold@suse.com - update to 0.17.3: * green.thread: Python3.3+ fixes; Thanks to Victor Stinner * Semaphore.acquire() accepts timeout=-1; Thanks to Victor Stinner * wsgi: Provide python logging compatibility; Thanks to Sean Dague * greendns: fix premature connection closing in DNS proxy; Thanks to Tim Simmons * greenio: correct fd close; Thanks to Antonio Cuni and Victor Sergeyev * green.ssl: HTTPS client Python 2.7.9+ compatibility * setup: tests.{isolated,manual} polluted top-level packages * greendns: fix dns.name import and Python3 compatibility * Tue Feb 24 2015 tbechtold@suse.com - update to version 0.17.0 * Full Python3 compatibility * greendns: IPv6 support, improved handling of /etc/hosts * tpool: make sure we return results during killall * semaphore: Don't hog a semaphore if someone else is waiting for it * green.socket: create_connection() was wrapping all exceptions in socket.error * Make sure SSL retries are done using the exact same data buffer * greenio: shutdown already closed sockets without error * Mon Feb 2 2015 tbechtold@suse.com - update to version 0.16.1: * Wheel build 0.16.0 incorrectly shipped removed module eventlet.util. * Thu Jan 8 2015 tbechtold@suse.com - update to 0.16.0: * Fix SSL socket wrapping and Python 2.7.9 compatibility; Thanks to Jakub Stasiak * Fix monkey_patch() on Python 3; Thanks to Victor Stinner * Fix "maximum recursion depth exceeded in GreenSocket.__del__"; Thanks to Jakub Stasiak * db_pool: BaseConnectionPool.clear updates .current_size #139; Thanks to Andrey Gubarev * Fix __str__ method on the TimeoutExpired exception class.; Thanks to Tomaz Muraus * hubs: drop Twisted support * Removed deprecated modules: api, most of coros, pool, proc, processes and util * Improved Python 3 compatibility (including patch by raylu); Thanks to Jakub Stasiak * Allow more graceful shutdown of wsgi server; Thanks to Stuart McLaren * wsgi.input: Make send_hundred_continue_headers() a public API; Thanks to Tushar Gohad * tpool: Windows compatibility, fix ResourceWarning. Thanks to Victor Stinner * tests: Fix timers not cleaned up on MySQL test skips; Thanks to Corey Wright - Remove README.twisted from docs (removed upstream) * Tue Sep 2 2014 dmueller@suse.com - update to 0.15.2: * greenio: fixed memory leak, introduced in 0.15.1; Thanks to Michael Kerrin, Tushar Gohad * wsgi: Support optional headers w/ "100 Continue" responses; Thanks to Tushar Gohad * greenio: Fix second simultaneous read (parallel paramiko issue); Thanks to Jan Grant, Michael Kerrin * db_pool: customizable connection cleanup function; Thanks to Avery Fay * Python3 compatibility -- **not ready yet**; Thanks to Astrum Kuo, Davanum Srinivas, Jakub Stasiak, Victor Sergeyev * coros: remove Actor which was deprecated in 2010-01 * saranwrap: remove saranwrap which was deprecated in 2010-02 * PyPy compatibility fixes; Thanks to Dmitriy Kruglyak, Jakub Stasiak * green.profile: accumulate results between runs; Thanks to Zhang Hua * greenthread: add .unlink() method; Thanks to Astrum Kuo * packaging: Generate universal wheels; Thanks to Jakub Stasiak * queue: Make join not wait if there are no unfinished tasks; Thanks to Jakub Stasiak * tpool: proxy __enter__, __exit__ fixes Bitbucket-158; Thanks to Eric Urban * websockets: Add websockets13 support; handle lack of Upgrade header; Thanks to Edward George * wsgi: capitalize_response_headers option * Thu Oct 24 2013 speilicke@suse.com - Require python-setuptools instead of distribute (upstreams merged) * Tue Sep 17 2013 dmueller@suse.com - update to 0.14.0: * wsgi: handle connection socket timeouts; Thanks to Paul Oppenheim * wsgi: close timed out client connections * greenio: socket pypy compatibility; Thanks to Alex Gaynor * wsgi: env['wsgi.input'] was returning 1 byte strings; Thanks to Eric Urban * green.ssl: fix NameError; Github #17; Thanks to Jakub Stasiak * websocket: allow "websocket" in lowercase in Upgrade header; Compatibility with current Google Chrome; Thanks to Dmitry Orlov * wsgi: allow minimum_chunk_size to be overriden on a per request basis; Thanks to David Goetz * wsgi: configurable socket_timeout * Wed Jul 3 2013 dmueller@suse.com - update to 0.13.1: * hubs: kqueue support! Thanks to YAMAMOTO Takashi, Edward George * greenio: Fix AttributeError on MacOSX; Bitbucket #136; Thanks to Derk Tegeler * green: subprocess: Fix subprocess.communicate() block on Python 2.7; Thanks to Edward George * green: select: ensure that hub can .wait() at least once before timeout; Thanks to YAMAMOTO Takashi * tpool: single request queue to avoid deadlocks; Bitbucket pull request 31,32; Thanks to Edward George * zmq: pyzmq 13.x compatibility; Thanks to Edward George * green: subprocess: Popen.wait() accepts new `timeout` kwarg; Python 3.3 and RHEL 6.1 compatibility * hubs: EVENTLET_HUB can point to external modules; Thanks to Edward George * semaphore: support timeout for acquire(); Thanks to Justin Patrin * support: do not clear sys.exc_info if can be preserved (greenlet >= 0.3.2); Thanks to Edward George * Travis continous integration; Thanks to Thomas Grainger, Jakub Stasiak * wsgi: minimum_chunk_size of last Server altered all previous (global variable); Thanks to Jakub Stasiak * doc: hubs: Point to the correct function in exception message; Thanks to Floris Bruynooghe * Fri Feb 8 2013 p.drouand@gmail.com - Update to version 0.12.1: * zmq: Fix 100%% busy CPU in idle after .bind(PUB) * greenio: Fix socket.settimeout() did not switch back to blocking mode * greenio: socket.dup() made excess fcntl syscalls * setup: Remove legacy --without-greenlet option and unused httplib2 dependency * wsgi: environ[REMOTE_PORT], also available in log_format, log accept event * tests: Support libzmq 3.0 SNDHWM option * Tue Jan 15 2013 p.drouand@gmail.com - Update to version 0.11.0: * ssl: Fix 100%% busy CPU in socket.sendall() (thanks to Raymon Lu) * zmq: Return linger argument to Socket.close() (thanks to Eric Windisch) * tests: SSL tests were always skipped due to bug in skip_if_no_ssl decorator * Fri Nov 23 2012 saschpe@suse.de - Update to version 0.9.17: + ZeroMQ support calling send and recv from multiple greenthreads + SSL: unwrap() sends data, and so it needs trampolining + hubs.epolls: Fix imports for exception handler + db_pool: Fix .clear() when min_size > 0 + db_pool: Add MySQL's insert_id() method + db_pool: Close connections after timeout, fix get-after-close race condition with using TpooledConnectionPool + threading monkey patch fixes + pools: Better accounting of current_size in pools.Pool + wsgi: environ['RAW_PATH_INFO'] with request path as received from client + wsgi: log_output flag + wsgi: Limit HTTP header size + wsgi: Configurable maximum URL length * Fri Sep 2 2011 saschpe@suse.de - Update to version 0.9.16: + SO_REUSEADDR now correctly set. - Don't package unittests - Fix non-executable script rpmlint warning * Wed Feb 2 2011 berendt@b1-systems.de - bumped version to 0.9.14 * Fri Nov 26 2010 seife+obs@b1-systems.com - initial package (version 0.9.9)