Hello community,
here is the log from the commit of package python-eventlet for openSUSE:Factory
checked in at 2020-12-12 20:29:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-eventlet (Old)
and /work/SRC/openSUSE:Factory/.python-eventlet.new.2328 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-eventlet"
Sat Dec 12 20:29:53 2020 rev:36 rq:854888 version:0.29.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-eventlet/python-eventlet.changes
2020-08-25 12:38:29.925411431 +0200
+++
/work/SRC/openSUSE:Factory/.python-eventlet.new.2328/python-eventlet.changes
2020-12-12 20:32:16.005845931 +0100
@@ -1,0 +2,32 @@
+Thu Dec 10 22:43:44 UTC 2020 - Benjamin Greiner <[email protected]>
+
+- 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 00:14:23 UTC 2020 - Benjamin Greiner <[email protected]>
+
+- 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
+
+-------------------------------------------------------------------
Old:
----
eventlet-0.26.1.tar.gz
New:
----
eventlet-0.29.1.tar.gz
pr_672-remove-OpenSSL-tsafe.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-eventlet.spec ++++++
--- /var/tmp/diff_new_pack.Vh9rHN/_old 2020-12-12 20:32:16.781846741 +0100
+++ /var/tmp/diff_new_pack.Vh9rHN/_new 2020-12-12 20:32:16.785846745 +0100
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-eventlet
-Version: 0.26.1
+Version: 0.29.1
Release: 0
Summary: Concurrent networking library for Python
License: MIT
@@ -35,15 +35,19 @@
Patch2: pr_639.patch
# Really remove the dependency on nose
Patch3: remove_nose_part_2.patch
+# PATCH-FIX-UPSTREAM -- gh#eventlet/eventlet#672 remove OpenSSL.tsafe
+Patch4: pr_672-remove-OpenSSL-tsafe.patch
BuildRequires: %{python_module dnspython >= 1.15.0}
BuildRequires: %{python_module greenlet >= 0.3}
-BuildRequires: %{python_module monotonic >= 1.4}
BuildRequires: %{python_module pyOpenSSL}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module pyzmq}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module six >= 1.10.0}
BuildRequires: %{python_module testsuite}
+%if 0%{?suse_version} < 1550
+BuildRequires: python2-monotonic >= 1.4
+%endif
BuildRequires: fdupes
BuildRequires: netcfg
BuildRequires: python-rpm-macros
@@ -53,7 +57,9 @@
Requires: netcfg
Requires: python-dnspython >= 1.15.0
Requires: python-greenlet >= 0.3
+%ifpython2
Requires: python-monotonic >= 1.4
+%endif
Requires: python-six >= 1.10.0
BuildArch: noarch
%python_subpackages
@@ -85,25 +91,29 @@
%check
# python2 is required to build for Leap, but tests fail (even upstream)
-python2_skipall='--collect-only'
+python2_pytest_param='--collect-only'
# dnspython 1 and 2: backdoor tests fail with "take too long"
skiptests="(BackdoorTest and test_server)"
# fail only with dnspython 2:
skiptests+=" or test_dns_methods_are_green or test_noraise_dns_tcp"
+# 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"
-# Unknown openSUSE 15.x specific errors
+# Unknown Python 3.6 specific errors
# TypeError: _wrap_socket() argument 1 must be _socket.socket, not SSLSocket
# https://github.com/rthalley/dnspython/issues/559#issuecomment-675274960
+python36_skiptests+=" or test_connect_ssl or test_ssl_sending_messages or
test_wrap_ssl"
+python36_skiptests+=" or ssl_test or wsgi_test"
%if %python3_version_nodots == 36
- skiptests+=" or test_connect_ssl or test_ssl_sending_messages or
test_wrap_ssl"
- skiptests+=" or ssl_test or wsgi_test"
+python3_skiptests+="$python36_skiptests"
%endif
# no subdir recursion
https://github.com/eventlet/eventlet/issues/638#issuecomment-676085599
-%pytest -o norecursedirs="tests/*" -k "not ($skiptests)" ${$python_skipall}
+%pytest -o norecursedirs="tests/*" -k "not ($skiptests ${$python_skiptests})"
${$python_pytest_param}
%files %{python_files}
%license LICENSE
%doc AUTHORS NEWS README.rst
-%{python_sitelib}/*
+%{python_sitelib}/eventlet
+%{python_sitelib}/eventlet-%{version}*-info
%changelog
++++++ eventlet-0.26.1.tar.gz -> eventlet-0.29.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/NEWS new/eventlet-0.29.1/NEWS
--- old/eventlet-0.26.1/NEWS 2020-07-30 23:48:00.000000000 +0200
+++ new/eventlet-0.29.1/NEWS 2020-10-22 09:16:46.000000000 +0200
@@ -1,3 +1,29 @@
+0.29.1
+======
+patcher: [py27] recursion error in pytest/python2.7 installing
register_at_fork https://github.com/eventlet/eventlet/issues/660
+patcher: monkey_patch(builtins=True) failed on py3 because `file` class is
gone https://github.com/eventlet/eventlet/issues/541
+don't crash on PyPy 7.0.0 https://github.com/eventlet/eventlet/pull/547
+Only install monotonic on python2 https://github.com/eventlet/eventlet/pull/583
+
+0.29.0
+======
+* ssl: context wrapped listener fails accept()
https://github.com/eventlet/eventlet/issues/651
+
+0.28.1
+======
+* Sorry, Eventlet was broken on Windows for versions 0.27-0.28
+ patcher: no os.register_at_fork on Windows (#654)
+* Clean up TypeError in __del__
+
+0.28.0
+======
+* Always remove the right listener from the hub
https://github.com/eventlet/eventlet/pull/645
+
+0.27.0
+======
+* patcher: Clean up threading book-keeping at fork when monkey-patched
+* backdoor: handle disconnects better
+
0.26.1
======
* pin dnspython <2.0.0 https://github.com/eventlet/eventlet/issues/619
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/PKG-INFO new/eventlet-0.29.1/PKG-INFO
--- old/eventlet-0.26.1/PKG-INFO 2020-07-30 23:48:27.000000000 +0200
+++ new/eventlet-0.29.1/PKG-INFO 2020-10-22 09:17:28.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: eventlet
-Version: 0.26.1
+Version: 0.29.1
Summary: Highly concurrent networking library
Home-page: http://eventlet.net
Author: Linden Lab
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet/__init__.py
new/eventlet-0.29.1/eventlet/__init__.py
--- old/eventlet-0.26.1/eventlet/__init__.py 2020-07-30 23:46:33.000000000
+0200
+++ new/eventlet-0.29.1/eventlet/__init__.py 2020-10-22 09:14:16.000000000
+0200
@@ -1,7 +1,7 @@
import os
-version_info = (0, 26, 1)
+version_info = (0, 29, 1)
__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
@@ -21,8 +21,11 @@
# Helpful when CPython < 3.5 on Linux blocked in `os.waitpid(-1)` before
first use of hub.
# Example: gunicorn
# https://github.com/eventlet/eventlet/issues/401#issuecomment-327500352
- import monotonic
- del monotonic
+ try:
+ import monotonic
+ del monotonic
+ except ImportError:
+ pass
connect = convenience.connect
listen = convenience.listen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet/backdoor.py
new/eventlet-0.29.1/eventlet/backdoor.py
--- old/eventlet-0.26.1/eventlet/backdoor.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/eventlet/backdoor.py 2020-10-22 04:46:21.000000000
+0200
@@ -32,8 +32,12 @@
pass
def write(self, data, *a, **kw):
- self.f.write(data, *a, **kw)
- self.f.flush()
+ try:
+ self.f.write(data, *a, **kw)
+ self.f.flush()
+ except socket.error as e:
+ if get_errno(e) != errno.EPIPE:
+ raise
def readline(self, *a):
return self.f.readline(*a).replace('\r\n', '\n')
@@ -99,14 +103,18 @@
print("backdoor server listening on %s" % (listening_on,))
try:
- try:
- while True:
+ while True:
+ socketpair = None
+ try:
socketpair = sock.accept()
backdoor(socketpair, locals)
- except socket.error as e:
- # Broken pipe means it was shutdown
- if get_errno(e) != errno.EPIPE:
- raise
+ except socket.error as e:
+ # Broken pipe means it was shutdown
+ if get_errno(e) != errno.EPIPE:
+ raise
+ finally:
+ if socketpair:
+ socketpair[0].close()
finally:
sock.close()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet/green/builtin.py
new/eventlet-0.29.1/eventlet/green/builtin.py
--- old/eventlet-0.26.1/eventlet/green/builtin.py 2020-07-30
18:25:18.000000000 +0200
+++ new/eventlet-0.29.1/eventlet/green/builtin.py 2020-10-22
08:30:23.000000000 +0200
@@ -13,22 +13,26 @@
from eventlet.hubs import hub
from eventlet.patcher import slurp_properties
import sys
+import six
__all__ = dir(builtins_orig)
-__patched__ = ['file', 'open']
+__patched__ = ['open']
+if six.PY2:
+ __patched__ += ['file']
slurp_properties(builtins_orig, globals(),
ignore=__patched__, srckeys=dir(builtins_orig))
hubs.get_hub()
-__original_file = file
+if six.PY2:
+ __original_file = file
+ class file(__original_file):
+ def __init__(self, *args, **kwargs):
+ super(file, self).__init__(*args, **kwargs)
+ hubs.notify_opened(self.fileno())
-class file(__original_file):
- def __init__(self, *args, **kwargs):
- super(file, self).__init__(*args, **kwargs)
- hubs.notify_opened(self.fileno())
__original_open = open
__opening = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet/green/ssl.py
new/eventlet-0.29.1/eventlet/green/ssl.py
--- old/eventlet-0.26.1/eventlet/green/ssl.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/eventlet/green/ssl.py 2020-10-22 04:46:21.000000000
+0200
@@ -404,14 +404,11 @@
new_ssl = type(self)(
newsock,
- keyfile=self.keyfile,
- certfile=self.certfile,
server_side=True,
- cert_reqs=self.cert_reqs,
- ssl_version=self.ssl_version,
- ca_certs=self.ca_certs,
do_handshake_on_connect=False,
- suppress_ragged_eofs=self.suppress_ragged_eofs)
+ suppress_ragged_eofs=self.suppress_ragged_eofs,
+ _context=self._context,
+ )
return (new_ssl, addr)
def dup(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet/greenio/py2.py
new/eventlet-0.29.1/eventlet/greenio/py2.py
--- old/eventlet-0.26.1/eventlet/greenio/py2.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/eventlet/greenio/py2.py 2020-10-22 04:46:21.000000000
+0200
@@ -207,7 +207,10 @@
was_closed = self._mark_as_closed()
if was_closed:
return
- notify_close(self._fileno)
+ if notify_close:
+ # If closing from __del__, notify_close may have
+ # already been cleaned up and set to None
+ notify_close(self._fileno)
try:
os.close(self._fileno)
except:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet/hubs/hub.py
new/eventlet-0.29.1/eventlet/hubs/hub.py
--- old/eventlet-0.26.1/eventlet/hubs/hub.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/eventlet/hubs/hub.py 2020-10-22 08:30:23.000000000
+0200
@@ -22,7 +22,11 @@
import eventlet.hubs
from eventlet.hubs import timer
from eventlet.support import greenlets as greenlet, clear_sys_exc_info
-import monotonic
+try:
+ from monotonic import monotonic
+except ImportError:
+ from time import monotonic
+
import six
g_prevent_multiple_readers = True
@@ -120,7 +124,7 @@
self.closed = []
if clock is None:
- clock = monotonic.monotonic
+ clock = monotonic
self.clock = clock
self.greenlet = greenlet.greenlet(self.run)
@@ -225,14 +229,18 @@
fileno = listener.fileno
evtype = listener.evtype
- self.listeners[evtype].pop(fileno, None)
- # migrate a secondary listener to be the primary listener
- if fileno in self.secondaries[evtype]:
- sec = self.secondaries[evtype].get(fileno, None)
- if not sec:
- return
- self.listeners[evtype][fileno] = sec.pop(0)
- if not sec:
+ if listener is self.listeners[evtype][fileno]:
+ del self.listeners[evtype][fileno]
+ # migrate a secondary listener to be the primary listener
+ if fileno in self.secondaries[evtype]:
+ sec = self.secondaries[evtype][fileno]
+ if sec:
+ self.listeners[evtype][fileno] = sec.pop(0)
+ if not sec:
+ del self.secondaries[evtype][fileno]
+ else:
+ self.secondaries[evtype][fileno].remove(listener)
+ if not self.secondaries[evtype][fileno]:
del self.secondaries[evtype][fileno]
def mark_as_reopened(self, fileno):
@@ -247,16 +255,23 @@
def remove_descriptor(self, fileno):
""" Completely remove all listeners for this fileno. For internal use
only."""
+ # gather any listeners we have
listeners = []
- listeners.append(self.listeners[READ].pop(fileno, noop))
- listeners.append(self.listeners[WRITE].pop(fileno, noop))
- listeners.extend(self.secondaries[READ].pop(fileno, ()))
- listeners.extend(self.secondaries[WRITE].pop(fileno, ()))
+ listeners.append(self.listeners[READ].get(fileno, noop))
+ listeners.append(self.listeners[WRITE].get(fileno, noop))
+ listeners.extend(self.secondaries[READ].get(fileno, ()))
+ listeners.extend(self.secondaries[WRITE].get(fileno, ()))
for listener in listeners:
try:
+ # listener.cb may want to remove(listener)
listener.cb(fileno)
except Exception:
self.squelch_generic_exception(sys.exc_info())
+ # NOW this fileno is now dead to all
+ self.listeners[READ].pop(fileno, None)
+ self.listeners[WRITE].pop(fileno, None)
+ self.secondaries[READ].pop(fileno, None)
+ self.secondaries[WRITE].pop(fileno, None)
def close_one(self):
""" Triggered from the main run loop. If a listener's underlying FD was
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet/patcher.py
new/eventlet-0.29.1/eventlet/patcher.py
--- old/eventlet-0.26.1/eventlet/patcher.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/eventlet/patcher.py 2020-10-22 08:31:17.000000000
+0200
@@ -1,5 +1,11 @@
import imp
import sys
+try:
+ # Only for this purpose, it's irrelevant if `os` was already patched.
+ # https://github.com/eventlet/eventlet/pull/661
+ from os import register_at_fork
+except ImportError:
+ register_at_fork = None
import eventlet
import six
@@ -298,6 +304,7 @@
# tell us whether or not we succeeded
pass
+ _threading = original('threading')
imp.acquire_lock()
try:
for name, mod in modules_to_patch:
@@ -312,6 +319,28 @@
for attr_name in deleted:
if hasattr(orig_mod, attr_name):
delattr(orig_mod, attr_name)
+
+ # https://github.com/eventlet/eventlet/issues/592
+ if name == 'threading' and register_at_fork:
+ def fix_threading_active(
+ _global_dict=_threading.current_thread.__globals__,
+ # alias orig_mod as patched to reflect its new state
+ #
https://github.com/eventlet/eventlet/pull/661#discussion_r509877481
+ _patched=orig_mod,
+ ):
+ _prefork_active = [None]
+
+ def before_fork():
+ _prefork_active[0] = _global_dict['_active']
+ _global_dict['_active'] = _patched._active
+
+ def after_fork():
+ _global_dict['_active'] = _prefork_active[0]
+
+ register_at_fork(
+ before=before_fork,
+ after_in_parent=after_fork)
+ fix_threading_active()
finally:
imp.release_lock()
@@ -359,18 +388,25 @@
import eventlet.green.thread
lock_type = type(threading.Lock())
rlock_type = type(threading.RLock())
- if sys.version_info[0] >= 3:
+ if hasattr(threading, '_PyRLock'):
+ # this happens on CPython3 and PyPy >= 7.0.0: "py3-style" rlocks, they
+ # are implemented natively in C and RPython respectively
+ py3_style = True
pyrlock_type = type(threading._PyRLock())
+ else:
+ # this happens on CPython2.7 and PyPy < 7.0.0: "py2-style" rlocks,
+ # they are implemented in pure-python
+ py3_style = False
+ pyrlock_type = None
+
# We're monkey-patching so there can't be any greenlets yet, ergo our
thread
# ID is the only valid owner possible.
tid = eventlet.green.thread.get_ident()
for obj in gc.get_objects():
if isinstance(obj, rlock_type):
- if (sys.version_info[0] == 2 and
- isinstance(obj._RLock__block, lock_type)):
+ if not py3_style and isinstance(obj._RLock__block, lock_type):
_fix_py2_rlock(obj, tid)
- elif (sys.version_info[0] >= 3 and
- not isinstance(obj, pyrlock_type)):
+ elif py3_style and not isinstance(obj, pyrlock_type):
_fix_py3_rlock(obj)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet.egg-info/PKG-INFO
new/eventlet-0.29.1/eventlet.egg-info/PKG-INFO
--- old/eventlet-0.26.1/eventlet.egg-info/PKG-INFO 2020-07-30
23:48:26.000000000 +0200
+++ new/eventlet-0.29.1/eventlet.egg-info/PKG-INFO 2020-10-22
09:17:28.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: eventlet
-Version: 0.26.1
+Version: 0.29.1
Summary: Highly concurrent networking library
Home-page: http://eventlet.net
Author: Linden Lab
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet.egg-info/SOURCES.txt
new/eventlet-0.29.1/eventlet.egg-info/SOURCES.txt
--- old/eventlet-0.26.1/eventlet.egg-info/SOURCES.txt 2020-07-30
23:48:26.000000000 +0200
+++ new/eventlet-0.29.1/eventlet.egg-info/SOURCES.txt 2020-10-22
09:17:28.000000000 +0200
@@ -217,10 +217,12 @@
tests/isolated/hub_use_hub_class.py
tests/isolated/mysqldb_monkey_patch.py
tests/isolated/patcher_blocking_select_methods_are_deleted.py
+tests/isolated/patcher_builtin.py
tests/isolated/patcher_existing_locks_early.py
tests/isolated/patcher_existing_locks_late.py
tests/isolated/patcher_existing_locks_locked.py
tests/isolated/patcher_existing_locks_unlocked.py
+tests/isolated/patcher_fork_after_monkey_patch.py
tests/isolated/patcher_import_patched_defaults.py
tests/isolated/patcher_importlib_lock.py
tests/isolated/patcher_socketserver_selectors.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/eventlet.egg-info/requires.txt
new/eventlet-0.29.1/eventlet.egg-info/requires.txt
--- old/eventlet-0.26.1/eventlet.egg-info/requires.txt 2020-07-30
23:48:26.000000000 +0200
+++ new/eventlet-0.29.1/eventlet.egg-info/requires.txt 2020-10-22
09:17:28.000000000 +0200
@@ -1,4 +1,6 @@
dnspython<2.0.0,>=1.15.0
greenlet>=0.3
-monotonic>=1.4
six>=1.10.0
+
+[:python_version < "3.5"]
+monotonic>=1.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/setup.py new/eventlet-0.29.1/setup.py
--- old/eventlet-0.26.1/setup.py 2020-07-30 23:42:21.000000000 +0200
+++ new/eventlet-0.29.1/setup.py 2020-10-22 08:30:23.000000000 +0200
@@ -17,7 +17,7 @@
install_requires=(
'dnspython >= 1.15.0, < 2.0.0',
'greenlet >= 0.3',
- 'monotonic >= 1.4',
+ 'monotonic >= 1.4;python_version<"3.5"',
'six >= 1.10.0',
),
zip_safe=False,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/tests/__init__.py
new/eventlet-0.29.1/tests/__init__.py
--- old/eventlet-0.26.1/tests/__init__.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/tests/__init__.py 2020-10-22 04:46:21.000000000
+0200
@@ -323,8 +323,8 @@
def run_python(path, env=None, args=None, timeout=None,
pythonpath_extend=None, expect_pass=False):
new_argv = [sys.executable]
- if sys.version_info[:2] <= (2, 6):
- new_argv += ['-W', 'ignore::DeprecationWarning']
+ if sys.version_info[:2] <= (2, 7):
+ new_argv += ['-W', 'ignore:Python 2 is no longer supported']
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__)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/tests/backdoor_test.py
new/eventlet-0.29.1/tests/backdoor_test.py
--- old/eventlet-0.26.1/tests/backdoor_test.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/tests/backdoor_test.py 2020-10-22 04:46:21.000000000
+0200
@@ -57,3 +57,19 @@
client = socket.socket(socket.AF_UNIX)
client.connect(SOCKET_PATH)
self._run_test_on_client_and_server(client, serv)
+
+ def test_quick_client_disconnect(self):
+ listener = socket.socket()
+ listener.bind(('localhost', 0))
+ listener.listen(50)
+ serv = eventlet.spawn(backdoor.backdoor_server, listener)
+ client = socket.socket()
+ client.connect(('localhost', listener.getsockname()[1]))
+ client.close()
+ # can still reconnect; server is running
+ client = socket.socket()
+ client.connect(('localhost', listener.getsockname()[1]))
+ client.close()
+ serv.kill()
+ # wait for the console to discover that it's dead
+ eventlet.sleep(0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/tests/hub_test.py
new/eventlet-0.29.1/tests/hub_test.py
--- old/eventlet-0.26.1/tests/hub_test.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/tests/hub_test.py 2020-10-22 04:46:21.000000000
+0200
@@ -1,11 +1,14 @@
from __future__ import with_statement
+import errno
+import fcntl
+import os
import sys
import time
import tests
from tests import skip_with_pyevent, skip_if_no_itimer, skip_unless
import eventlet
-from eventlet import hubs
+from eventlet import debug, hubs
from eventlet.support import greenlets
import six
@@ -83,6 +86,48 @@
eventlet.sleep()
+class TestMultipleListenersCleanup(tests.LimitedTestCase):
+ def setUp(self):
+ super(TestMultipleListenersCleanup, self).setUp()
+ debug.hub_prevent_multiple_readers(False)
+ debug.hub_exceptions(False)
+
+ def tearDown(self):
+ super(TestMultipleListenersCleanup, self).tearDown()
+ debug.hub_prevent_multiple_readers(True)
+ debug.hub_exceptions(True)
+
+ def test_cleanup(self):
+ r, w = os.pipe()
+ self.addCleanup(os.close, r)
+ self.addCleanup(os.close, w)
+
+ fcntl.fcntl(r, fcntl.F_SETFL,
+ fcntl.fcntl(r, fcntl.F_GETFL) | os.O_NONBLOCK)
+
+ def readfd(fd):
+ while True:
+ try:
+ return os.read(fd, 1)
+ except OSError as e:
+ if e.errno != errno.EAGAIN:
+ raise
+ hubs.trampoline(fd, read=True)
+
+ first_listener = eventlet.spawn(readfd, r)
+ eventlet.sleep()
+
+ second_listener = eventlet.spawn(readfd, r)
+ eventlet.sleep()
+
+ hubs.get_hub().schedule_call_global(0, second_listener.throw,
+ eventlet.Timeout(None))
+ eventlet.sleep()
+
+ os.write(w, b'.')
+ self.assertEqual(first_listener.wait(), b'.')
+
+
class TestScheduleCall(tests.LimitedTestCase):
def test_local(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/tests/isolated/patcher_builtin.py
new/eventlet-0.29.1/tests/isolated/patcher_builtin.py
--- old/eventlet-0.26.1/tests/isolated/patcher_builtin.py 1970-01-01
01:00:00.000000000 +0100
+++ new/eventlet-0.29.1/tests/isolated/patcher_builtin.py 2020-10-22
08:30:23.000000000 +0200
@@ -0,0 +1,14 @@
+if __name__ == '__main__':
+ from tests.mock import patch
+
+ import sys
+ import eventlet
+ from eventlet import hubs
+ with patch.object(hubs, 'notify_opened') as mock_func:
+ eventlet.monkey_patch(builtins=True)
+ with open(__file__, 'r') as f:
+ mock_func.assert_called_with(f.fileno())
+ if sys.version_info.major == 2:
+ with file(__file__, 'r') as f:
+ mock_func.assert_called_with(f.fileno())
+ print('pass')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/eventlet-0.26.1/tests/isolated/patcher_fork_after_monkey_patch.py
new/eventlet-0.29.1/tests/isolated/patcher_fork_after_monkey_patch.py
--- old/eventlet-0.26.1/tests/isolated/patcher_fork_after_monkey_patch.py
1970-01-01 01:00:00.000000000 +0100
+++ new/eventlet-0.29.1/tests/isolated/patcher_fork_after_monkey_patch.py
2020-10-22 04:46:21.000000000 +0200
@@ -0,0 +1,59 @@
+# Monkey patching interferes with threading in Python 3.7
+# https://github.com/eventlet/eventlet/issues/592
+__test__ = False
+
+
+def check(n, mod, tag):
+ assert len(mod._active) == n, 'Expected {} {} threads, got {}'.format(n,
tag, mod._active)
+
+
+if __name__ == '__main__':
+ import eventlet
+ import eventlet.patcher
+ eventlet.monkey_patch()
+ import os
+ import sys
+ import threading
+ _threading = eventlet.patcher.original('threading')
+ import eventlet.green.threading
+
+ def target():
+ eventlet.sleep(0.1)
+
+ threads = [
+ threading.Thread(target=target, name='patched'),
+ _threading.Thread(target=target, name='original-1'),
+ _threading.Thread(target=target, name='original-2'),
+ eventlet.green.threading.Thread(target=target, name='green-1'),
+ eventlet.green.threading.Thread(target=target, name='green-2'),
+ eventlet.green.threading.Thread(target=target, name='green-3'),
+ ]
+ for t in threads:
+ t.start()
+
+ check(2, threading, 'pre-fork patched')
+ check(3, _threading, 'pre-fork original')
+ check(4, eventlet.green.threading, 'pre-fork green')
+
+ if os.fork() == 0:
+ # Inside the child, we should only have a main thread,
+ # but old pythons make it difficult to ensure
+ if sys.version_info >= (3, 7):
+ check(1, threading, 'child post-fork patched')
+ check(1, _threading, 'child post-fork original')
+ check(1, eventlet.green.threading, 'child post-fork green')
+ sys.exit()
+ else:
+ os.wait()
+
+ check(2, threading, 'post-fork patched')
+ check(3, _threading, 'post-fork original')
+ check(4, eventlet.green.threading, 'post-fork green')
+
+ for t in threads:
+ t.join()
+
+ check(1, threading, 'post-join patched')
+ check(1, _threading, 'post-join original')
+ check(1, eventlet.green.threading, 'post-join green')
+ print('pass')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/tests/patcher_test.py
new/eventlet-0.29.1/tests/patcher_test.py
--- old/eventlet-0.26.1/tests/patcher_test.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/tests/patcher_test.py 2020-10-22 08:30:23.000000000
+0200
@@ -515,3 +515,11 @@
def test_threadpoolexecutor():
tests.run_isolated('patcher_threadpoolexecutor.py')
+
+
+def test_fork_after_monkey_patch():
+ tests.run_isolated('patcher_fork_after_monkey_patch.py')
+
+
+def test_builtin():
+ tests.run_isolated('patcher_builtin.py')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/tests/ssl_test.py
new/eventlet-0.29.1/tests/ssl_test.py
--- old/eventlet-0.26.1/tests/ssl_test.py 2020-07-30 18:25:18.000000000
+0200
+++ new/eventlet-0.29.1/tests/ssl_test.py 2020-10-22 04:46:21.000000000
+0200
@@ -1,4 +1,5 @@
import contextlib
+import random
import socket
import warnings
@@ -325,3 +326,48 @@
server_to_client.close()
listener.close()
+
+ def test_context_wrapped_accept(self):
+ context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
+ context.load_cert_chain(tests.certificate_file, tests.private_key_file)
+ expected = "success:{}".format(random.random()).encode()
+
+ def client(addr):
+ client_tls = ssl.wrap_socket(
+ eventlet.connect(addr),
+ cert_reqs=ssl.CERT_REQUIRED,
+ ca_certs=tests.certificate_file,
+ )
+ client_tls.send(expected)
+
+ server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ server_sock.bind(('localhost', 0))
+ server_sock.listen(1)
+ eventlet.spawn(client, server_sock.getsockname())
+ server_tls = context.wrap_socket(server_sock, server_side=True)
+ peer, _ = server_tls.accept()
+ assert peer.recv(64) == expected
+ peer.close()
+
+ def test_explicit_keys_accept(self):
+ expected = "success:{}".format(random.random()).encode()
+
+ def client(addr):
+ client_tls = ssl.wrap_socket(
+ eventlet.connect(addr),
+ cert_reqs=ssl.CERT_REQUIRED,
+ ca_certs=tests.certificate_file,
+ )
+ client_tls.send(expected)
+
+ server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ server_sock.bind(('localhost', 0))
+ server_sock.listen(1)
+ eventlet.spawn(client, server_sock.getsockname())
+ server_tls = ssl.wrap_socket(
+ server_sock, server_side=True,
+ keyfile=tests.private_key_file, certfile=tests.certificate_file,
+ )
+ peer, _ = server_tls.accept()
+ assert peer.recv(64) == expected
+ peer.close()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/eventlet-0.26.1/tests/test__socket_errors.py
new/eventlet-0.29.1/tests/test__socket_errors.py
--- old/eventlet-0.26.1/tests/test__socket_errors.py 2020-07-30
18:25:18.000000000 +0200
+++ new/eventlet-0.29.1/tests/test__socket_errors.py 2020-10-22
08:30:23.000000000 +0200
@@ -1,3 +1,4 @@
+import errno
import unittest
import socket as _original_sock
from eventlet.green import socket
@@ -18,7 +19,7 @@
self.fail("Shouldn't have connected")
except socket.error as ex:
code, text = ex.args
- assert code in [111, 61, 10061], (code, text)
+ assert code == errno.ECONNREFUSED, 'Expected ECONNREFUSED, got {0}
({1})'.format(code, text)
assert 'refused' in text.lower(), (code, text)
def test_timeout_real_socket(self):
@@ -54,9 +55,9 @@
def test_create_connection_refused():
- errno = None
try:
socket.create_connection(('127.0.0.1', 1))
+ assert False, "Shouldn't have connected"
except socket.error as ex:
- errno = ex.errno
- assert errno in [111, 61, 10061], 'Expected socket.error ECONNREFUSED, got
{0}'.format(errno)
+ code, text = ex.args
+ assert code == errno.ECONNREFUSED, 'Expected ECONNREFUSED, got {0}
({1})'.format(code, text)
++++++ newdnspython.patch ++++++
--- /var/tmp/diff_new_pack.Vh9rHN/_old 2020-12-12 20:32:16.949846916 +0100
+++ /var/tmp/diff_new_pack.Vh9rHN/_new 2020-12-12 20:32:16.953846920 +0100
@@ -1,5 +1,7 @@
---- a/eventlet/support/greendns.py
-+++ b/eventlet/support/greendns.py
+Index: eventlet-0.29.1/eventlet/support/greendns.py
+===================================================================
+--- eventlet-0.29.1.orig/eventlet/support/greendns.py
++++ eventlet-0.29.1/eventlet/support/greendns.py
@@ -313,7 +313,7 @@ class ResolverProxy(object):
self.clear()
@@ -9,8 +11,10 @@
self._resolver.cache = dns.resolver.LRUCache()
def query(self, qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN,
---- a/tests/greendns_test.py
-+++ b/tests/greendns_test.py
+Index: eventlet-0.29.1/tests/greendns_test.py
+===================================================================
+--- eventlet-0.29.1.orig/tests/greendns_test.py
++++ eventlet-0.29.1/tests/greendns_test.py
@@ -885,7 +885,7 @@ class TinyDNSTests(tests.LimitedTestCase
# https://github.com/eventlet/eventlet/issues/499
# None means we don't want the server to find the IP
@@ -29,8 +33,10 @@
resolver.nameservers = [dnsaddr[0]]
resolver.nameserver_ports[dnsaddr[0]] = dnsaddr[1]
response = resolver.query('host.example.com', 'a', tcp=True)
---- a/setup.py
-+++ b/setup.py
+Index: eventlet-0.29.1/setup.py
+===================================================================
+--- eventlet-0.29.1.orig/setup.py
++++ eventlet-0.29.1/setup.py
@@ -15,7 +15,7 @@ setuptools.setup(
url='http://eventlet.net',
packages=setuptools.find_packages(exclude=['benchmarks', 'tests',
'tests.*']),
@@ -38,5 +44,5 @@
- 'dnspython >= 1.15.0, < 2.0.0',
+ 'dnspython >= 1.15.0',
'greenlet >= 0.3',
- 'monotonic >= 1.4',
+ 'monotonic >= 1.4;python_version<"3.5"',
'six >= 1.10.0',
++++++ pr_672-remove-OpenSSL-tsafe.patch ++++++
From be0d520c9bc9e3b3959f84d80c65e418e6081887 Mon Sep 17 00:00:00 2001
From: Sergey Shepelev <[email protected]>
Date: Wed, 2 Dec 2020 01:10:02 +0300
Subject: [PATCH] pyopenssl tsafe module was deprecated and removed in v20.0.0
https://github.com/eventlet/eventlet/issues/671
https://github.com/pyca/pyopenssl/pull/913
---
eventlet/green/OpenSSL/__init__.py | 7 ++++++-
tests/openssl_test.py | 1 -
4 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/eventlet/green/OpenSSL/__init__.py
b/eventlet/green/OpenSSL/__init__.py
index d86147645..1b2500971 100644
--- a/eventlet/green/OpenSSL/__init__.py
+++ b/eventlet/green/OpenSSL/__init__.py
@@ -1,4 +1,9 @@
from . import crypto
from . import SSL
-from . import tsafe
+try:
+ # pyopenssl tsafe module was deprecated and removed in v20.0.0
+ # https://github.com/pyca/pyopenssl/pull/913
+ from . import tsafe
+except ImportError:
+ pass
from .version import __version__
diff --git a/tests/openssl_test.py b/tests/openssl_test.py
index a127408b8..1108adaf6 100644
--- a/tests/openssl_test.py
+++ b/tests/openssl_test.py
@@ -12,5 +12,4 @@ def test_import():
import eventlet.green.OpenSSL.SSL
import eventlet.green.OpenSSL.crypto
- import eventlet.green.OpenSSL.tsafe
import eventlet.green.OpenSSL.version
_______________________________________________
openSUSE Commits mailing list -- [email protected]
To unsubscribe, email [email protected]
List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette
List Archives:
https://lists.opensuse.org/archives/list/[email protected]