diff --git a/.python-eventlet.metadata b/.python-eventlet.metadata index 87aaff8..4267d4e 100644 --- a/.python-eventlet.metadata +++ b/.python-eventlet.metadata @@ -1,2 +1,2 @@ -c066c954558e6d23a9e234c2e9f7706a4166368d SOURCES/v0.31.1.zip +5ae8302c1f9ce7ddd73194a65fee3f5d58fdf106 SOURCES/v0.32.0.zip 88fd1703aa8abb825799d08b624308c655d1307a SOURCES/dnspython-1.16.0.zip diff --git a/SOURCES/715.patch b/SOURCES/715.patch index 874d896..a9488de 100644 --- a/SOURCES/715.patch +++ b/SOURCES/715.patch @@ -1,7 +1,7 @@ -From beb705719827843940ecebe48ef8b8ba65d2b91c Mon Sep 17 00:00:00 2001 +From 3fde87d6af97551ce9e18ad8835947153530e121 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Wed, 9 Jun 2021 14:40:13 -0700 -Subject: [PATCH 1/6] Only wrap socket.timeout on Python < 3.10 +Subject: [PATCH 1/5] Only wrap socket.timeout on Python < 3.10 On py310, socket.timeout is TimeoutError, which our is_timeout() helper func already knows is a timeout. @@ -31,89 +31,40 @@ index 2eed86966..51a7ae13e 100644 def socket_connect(descriptor, address): -From c22a27ace90a55d14e8c60ff37f9832e76266441 Mon Sep 17 00:00:00 2001 +From ccf6db2df4edd1a7dda671515df20edd846a7f53 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Fri, 11 Jun 2021 12:56:07 -0700 -Subject: [PATCH 2/6] Get a working greenio._open on py310 +Subject: [PATCH 2/5] Get a working greenio._open on py310 -_pyio.open is now a staticmethod, which means we can't get at the -function code to wrap it up with a new environment. - -Instead, create a new wrapper function which swaps out FileIO for -GreenFileIO in the function's __globals__ before calling and replaces -it in a finally. +_pyio.open is now a staticmethod, so we've got to go down to +_pyio.open.__wrapped__ to get to the python function object. --- - eventlet/greenio/py3.py | 30 +++++++++++++++++++++++------- - 1 file changed, 23 insertions(+), 7 deletions(-) + eventlet/greenio/py3.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eventlet/greenio/py3.py b/eventlet/greenio/py3.py -index 7a75b52c0..c7f0aef50 100644 +index 7a75b52c0..bc3dc9499 100644 --- a/eventlet/greenio/py3.py +++ b/eventlet/greenio/py3.py -@@ -2,6 +2,7 @@ - import errno - import os as _original_os - import socket as _original_socket -+import sys - from io import ( - BufferedRandom as _OriginalBufferedRandom, - BufferedReader as _OriginalBufferedReader, -@@ -19,6 +20,7 @@ - SOCKET_BLOCKING, - ) - from eventlet.hubs import notify_close, notify_opened, IOClosed, trampoline -+from eventlet.semaphore import Semaphore - from eventlet.support import get_errno - import six - -@@ -182,21 +184,35 @@ def __exit__(self, *args): - self.close() - - --_open_environment = dict(globals()) --_open_environment.update(dict( -+_open_patching = dict( - BufferedRandom=_OriginalBufferedRandom, - BufferedWriter=_OriginalBufferedWriter, - BufferedReader=_OriginalBufferedReader, - TextIOWrapper=_OriginalTextIOWrapper, +@@ -191,9 +191,12 @@ def __exit__(self, *args): FileIO=GreenFileIO, os=_original_os, --)) -- --_open = FunctionType( + )) ++if hasattr(_original_pyio, 'text_encoding'): ++ _open_environment['text_encoding'] = _original_pyio.text_encoding + ++_pyio_open = getattr(_original_pyio.open, '__wrapped__', _original_pyio.open) + _open = FunctionType( - six.get_function_code(_original_pyio.open), -- _open_environment, ++ six.get_function_code(_pyio_open), + _open_environment, ) -+if sys.version_info < (3, 10): -+ _open_environment = dict(globals()) -+ _open_environment.update(_open_patching) -+ _open = FunctionType( -+ six.get_function_code(_original_pyio.open), -+ _open_environment, -+ ) -+else: -+ _open_lock = Semaphore() -+ _open_originals = {k: _original_pyio.open.__func__.__globals__[k] -+ for k in _open_patching} -+ -+ def _open(*a, **kw): -+ with _open_lock: -+ try: -+ _original_pyio.open.__func__.__globals__.update(_open_patching) -+ return _original_pyio.open(*a, **kw) -+ finally: -+ _original_pyio.open.__func__.__globals__.update(_open_originals) -+ - - def GreenPipe(name, mode="r", buffering=-1, encoding=None, errors=None, - newline=None, closefd=True, opener=None): -From ab4f8aaa704eb56b1e15730268fffbc8724c53ea Mon Sep 17 00:00:00 2001 +From 5641a81d5f7d588c2d452c36479391c71b012e8a Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Fri, 11 Jun 2021 13:02:52 -0700 -Subject: [PATCH 3/6] Test using eventlet.is_timeout +Subject: [PATCH 3/5] Test using eventlet.is_timeout ...rather than requiring an is_timeout attribute on errors. @@ -137,20 +88,20 @@ index c0b64fd9e..188366774 100644 @contextlib.contextmanager -From ceef941b6b730add07eff4a3d4da5d203e255a71 Mon Sep 17 00:00:00 2001 +From 2ea6991d26eef98300d27c3c5d383eccc65360c3 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Fri, 11 Jun 2021 13:07:09 -0700 -Subject: [PATCH 4/6] Fix backdoor tests on py310 +Subject: [PATCH 4/5] Fix backdoor tests on py310 Python 3.10 started including build info on the version line, so the expectation in tests had to change. Also, start printing the banner as we read it to aid in future debugging. --- - tests/backdoor_test.py | 17 +++++++++++++---- - 1 file changed, 13 insertions(+), 4 deletions(-) + tests/backdoor_test.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/backdoor_test.py b/tests/backdoor_test.py -index 03a569259..67a817947 100644 +index 03a569259..1e09f09b6 100644 --- a/tests/backdoor_test.py +++ b/tests/backdoor_test.py @@ -1,5 +1,6 @@ @@ -160,34 +111,22 @@ index 03a569259..67a817947 100644 import eventlet -@@ -21,10 +22,18 @@ def test_server(self): - +@@ -22,7 +23,9 @@ def test_server(self): def _run_test_on_client_and_server(self, client, server_thread): f = client.makefile('rw') -- assert 'Python' in f.readline() + assert 'Python' in f.readline() - f.readline() # build info -- f.readline() # help info -- assert 'InteractiveConsole' in f.readline() -+ line = f.readline() -+ print(line.strip('\r\n')) -+ assert 'Python' in line + if sys.version_info < (3, 10): + # Starting in py310, build info is included in version line -+ line = f.readline() # build info -+ print(line.strip('\r\n')) -+ line = f.readline() # help info -+ print(line.strip('\r\n')) -+ line = f.readline() -+ print(line.strip('\r\n')) -+ assert 'InteractiveConsole' in line ++ f.readline() # build info + f.readline() # help info + assert 'InteractiveConsole' in f.readline() self.assertEqual('>>> ', f.read(4)) - f.write('print("hi")\n') - f.flush() -From aa6720a44cda816d1ac0a183ff94ebd51b6b1e53 Mon Sep 17 00:00:00 2001 +From bad82b6d5634d8cdfa77a2f828abdf61e859a3f4 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Fri, 11 Jun 2021 13:12:36 -0700 -Subject: [PATCH 5/6] Tolerate __builtins__ being a dict (rather than module) +Subject: [PATCH 5/5] Tolerate __builtins__ being a dict (rather than module) in is_timeout I'm still not sure how this happens, but somehow it does in @@ -195,48 +134,24 @@ socket_test.test_error_is_timeout. As a result, is_timeout wouldn't get a reference to TimeoutError, so the socket error would not be correctly identified as a timeout. --- - eventlet/timeout.py | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) + eventlet/timeout.py | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/eventlet/timeout.py b/eventlet/timeout.py -index 6e1e08f63..969fdbcbd 100644 +index 6e1e08f63..4ab893eef 100644 --- a/eventlet/timeout.py +++ b/eventlet/timeout.py -@@ -175,5 +175,8 @@ def fun(*args, **kwargs): +@@ -174,6 +174,11 @@ def fun(*args, **kwargs): + return fun ++if isinstance(__builtins__, dict): # seen when running tests on py310, but HOW?? ++ _timeout_err = __builtins__.get('TimeoutError', Timeout) ++else: ++ _timeout_err = getattr(__builtins__, 'TimeoutError', Timeout) ++ ++ def is_timeout(obj): - py3err = getattr(__builtins__, 'TimeoutError', Timeout) -+ if isinstance(__builtins__, dict): # seen when running tests on py310, but HOW?? -+ py3err = __builtins__.get('TimeoutError', Timeout) -+ else: -+ py3err = getattr(__builtins__, 'TimeoutError', Timeout) - return bool(getattr(obj, 'is_timeout', False)) or isinstance(obj, py3err) - -From 900c8e195154efdae526ee7901469152141ab9d2 Mon Sep 17 00:00:00 2001 -From: Tim Burke -Date: Fri, 11 Jun 2021 13:33:00 -0700 -Subject: [PATCH 6/6] wsgi_test: Cap TLS version at 1.2 - -On py310, tests may attempt to use TLS 1.3 which apparently doesn't like -the abrupt disconnect. Instead, it would complain: - - ssl.SSLEOFError: EOF occurred in violation of protocol ---- - tests/wsgi_test.py | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/tests/wsgi_test.py b/tests/wsgi_test.py -index 1dd754bba..4173bcefa 100644 ---- a/tests/wsgi_test.py -+++ b/tests/wsgi_test.py -@@ -579,7 +579,8 @@ def wsgi_app(environ, start_response): - sock = eventlet.wrap_ssl( - eventlet.listen(('localhost', 0)), - certfile=certificate_file, keyfile=private_key_file, -- server_side=True) -+ server_side=True, -+ ssl_version=ssl.PROTOCOL_TLSv1_2) - server_coro = eventlet.spawn(server, sock, wsgi_app, self.logfile) - - client = eventlet.connect(('localhost', sock.getsockname()[1])) +- return bool(getattr(obj, 'is_timeout', False)) or isinstance(obj, py3err) ++ return bool(getattr(obj, 'is_timeout', False)) or isinstance(obj, _timeout_err) diff --git a/SPECS/python-eventlet.spec b/SPECS/python-eventlet.spec index 7923344..fd6b916 100644 --- a/SPECS/python-eventlet.spec +++ b/SPECS/python-eventlet.spec @@ -1,10 +1,10 @@ %global modname eventlet -%global bundle_dns 1 +%global bundle_dns 0 %{?python_enable_dependency_generator} Name: python-%{modname} -Version: 0.31.1 -Release: 1%{?dist} +Version: 0.32.0 +Release: 2%{?dist} Summary: Highly concurrent networking library %if %bundle_dns License: MIT and ISC @@ -49,7 +49,7 @@ BuildRequires: python3-cryptography Recommends: python3-cryptography %else BuildRequires: python3dist(dnspython) >= 1.15 -BuildRequires: python3dist(dnspython) < 2 +BuildRequires: python3dist(dnspython) < 3 %endif %{?python_provide:%python_provide python3-%{modname}} @@ -111,7 +111,7 @@ rm -vrf %{buildroot}%{python3_sitelib}/tests # Disable setting up dns (we have no /etc/resolv.conf in mock export EVENTLET_NO_GREENDNS=yes # Tests are written only for Python 3 -nosetests-%{python3_version} -v -e greendns_test -e socket_test -e test_patcher_existing_locks_locked +nosetests-%{python3_version} -v -e greendns_test -e socket_test -e test_patcher_existing_locks_locked -e test_017_ssl_zeroreturnerror %files -n python3-%{modname} %doc README.rst AUTHORS LICENSE NEWS @@ -127,6 +127,12 @@ nosetests-%{python3_version} -v -e greendns_test -e socket_test -e test_patcher_ %doc html-3 %changelog +* Tue Oct 05 2021 Lumír Balhar - 0.32.0-2 +- Unbundle dnspython + +* Sat Sep 25 2021 Kevin Fenzi - 0.32.0-1 +- Update to 0.32.0. Fixes rhbz#2000093 + * Fri Jul 30 2021 Kevin Fenzi - 0.31.1-1 - Update to 0.31.1. Fixes rhbz#1981430 - Fix FTBFS rhbz#1981320