Hello community,
here is the log from the commit of package python-eventlet for openSUSE:Factory
checked in at 2019-05-05 21:18:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-eventlet (Old)
and /work/SRC/openSUSE:Factory/.python-eventlet.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-eventlet"
Sun May 5 21:18:15 2019 rev:30 rq:699142 version:0.24.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-eventlet/python-eventlet.changes
2018-12-13 19:48:13.832717554 +0100
+++
/work/SRC/openSUSE:Factory/.python-eventlet.new.5148/python-eventlet.changes
2019-05-05 21:18:17.668766418 +0200
@@ -1,0 +2,16 @@
+Mon Apr 29 06:00:44 UTC 2019 - Thomas Bechtold <[email protected]>
+
+- 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 04:30:11 UTC 2019 - Thomas Bechtold <[email protected]>
+
+- 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'",)
+
+-------------------------------------------------------------------
New:
----
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
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-eventlet.spec ++++++
--- /var/tmp/diff_new_pack.5adxsO/_old 2019-05-05 21:18:18.576768891 +0200
+++ /var/tmp/diff_new_pack.5adxsO/_new 2019-05-05 21:18:18.588768924 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-eventlet
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -25,6 +25,15 @@
Group: Development/Languages/Python
URL: http://eventlet.net
Source:
https://files.pythonhosted.org/packages/source/e/eventlet/eventlet-%{version}.tar.gz
+# PATCH-FIX-UPSTREAM
0001-IMPORTANT-late-import-in-use_hub-thread-race-caused-.patch --
https://github.com/eventlet/eventlet/commit/77bccbe48d4d9a46982b2e0503e76784e76b066a
+Patch0: 0001-IMPORTANT-late-import-in-use_hub-thread-race-caused-.patch
+# PATCH-FIX-UPSTREAM
0001-ssl-connect-used-non-monotonic-time.time-for-timeout.patch --
https://github.com/eventlet/eventlet/commit/a28a275393d3c3ae3c3a5341cc4764fad21be3e5
+Patch1: 0001-ssl-connect-used-non-monotonic-time.time-for-timeout.patch
+# PATCH-FIX-UPSTREAM 0002-Fix-for-Python-3.7-506.patch --
https://github.com/eventlet/eventlet/commit/cf47cb518db3e0dbdd48473fb40cf9f6ecd50e07
+Patch2: 0002-Fix-for-Python-3.7-506.patch
+# PATCH-FIX-UPSTREAM
0003-Fix-compatibility-with-Python-3.7-ssl.SSLSocket-531.patch --
https://github.com/eventlet/eventlet/commit/a915bb642dd6cd4e92c959addff30509977a637c
+Patch3: 0003-Fix-compatibility-with-Python-3.7-ssl.SSLSocket-531.patch
+
BuildRequires: %{python_module Sphinx}
BuildRequires: %{python_module greenlet}
BuildRequires: %{python_module setuptools}
@@ -63,6 +72,10 @@
%prep
%setup -q -n eventlet-%{version}
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
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
++++++ 0001-IMPORTANT-late-import-in-use_hub-thread-race-caused-.patch ++++++
++++ 717 lines (skipped)
++++++ 0001-ssl-connect-used-non-monotonic-time.time-for-timeout.patch ++++++
>From a28a275393d3c3ae3c3a5341cc4764fad21be3e5 Mon Sep 17 00:00:00 2001
From: Sergey Shepelev <[email protected]>
Date: Mon, 27 Aug 2018 00:22:35 +0500
Subject: [PATCH 1/3] ssl: connect used non-monotonic time.time() for timeout
(#520)
Origin: https://github.com/eventlet/eventlet/pull/517
Related:
https://github.com/eventlet/eventlet/pull/388
https://github.com/eventlet/eventlet/pull/303
https://github.com/eventlet/eventlet/issues/270
https://github.com/eventlet/eventlet/issues/132
---
eventlet/green/ssl.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/eventlet/green/ssl.py b/eventlet/green/ssl.py
index 53ee9a3..577afba 100644
--- a/eventlet/green/ssl.py
+++ b/eventlet/green/ssl.py
@@ -6,9 +6,8 @@ slurp_properties(__ssl, globals(), srckeys=dir(__ssl))
import errno
import functools
import sys
-import time
-from eventlet import greenio
+from eventlet import greenio, hubs
from eventlet.greenio import (
set_nonblocking, GreenSocket, CONNECT_ERR, CONNECT_SUCCESS,
)
@@ -264,6 +263,7 @@ class GreenSSLSocket(_original_sslsocket):
if self.act_non_blocking:
return real_connect(self, addr)
else:
+ clock = hubs.get_hub().clock
# *NOTE: gross, copied code from greenio because it's not factored
# well enough to reuse
if self.gettimeout() is None:
@@ -278,7 +278,7 @@ class GreenSSLSocket(_original_sslsocket):
else:
raise
else:
- end = time.time() + self.gettimeout()
+ end = clock() + self.gettimeout()
while True:
try:
real_connect(self, addr)
@@ -286,12 +286,12 @@ class GreenSSLSocket(_original_sslsocket):
if get_errno(exc) in CONNECT_ERR:
trampoline(
self, write=True,
- timeout=end - time.time(),
timeout_exc=timeout_exc('timed out'))
+ timeout=end - clock(),
timeout_exc=timeout_exc('timed out'))
elif get_errno(exc) in CONNECT_SUCCESS:
return
else:
raise
- if time.time() >= end:
+ if clock() >= end:
raise timeout_exc('timed out')
def connect(self, addr):
--
2.21.0
++++++ 0002-Fix-for-Python-3.7-506.patch ++++++
>From cf47cb518db3e0dbdd48473fb40cf9f6ecd50e07 Mon Sep 17 00:00:00 2001
From: Marcel Plch <[email protected]>
Date: Fri, 28 Sep 2018 17:08:59 +0200
Subject: [PATCH 2/3] Fix for Python 3.7 (#506)
* Fix for Python 3.7
* Remove redundant piece of code.
* Put back do_handshake_on_connect kwarg
* Use Python 3.7 instead of 3.7-dev
* Fix buildbot failing permissions with 3.7
* tests: env_tpool_zero assert details
* setup: Python 3.7 classificator
---
eventlet/green/ssl.py | 46 +++++++++++++++++++++++++++++++++++++------
1 file changed, 40 insertions(+), 6 deletions(-)
diff --git a/eventlet/green/ssl.py b/eventlet/green/ssl.py
index 577afba..53dff70 100644
--- a/eventlet/green/ssl.py
+++ b/eventlet/green/ssl.py
@@ -23,6 +23,7 @@ __patched__ = [
'create_default_context', '_create_default_https_context']
_original_sslsocket = __ssl.SSLSocket
+_original_wrap_socket = __ssl.wrap_socket
class GreenSSLSocket(_original_sslsocket):
@@ -56,11 +57,41 @@ class GreenSSLSocket(_original_sslsocket):
# this assignment
self._timeout = sock.gettimeout()
- # nonblocking socket handshaking on connect got disabled so let's
pretend it's disabled
- # even when it's on
- super(GreenSSLSocket, self).__init__(
- sock.fd, keyfile, certfile, server_side, cert_reqs, ssl_version,
- ca_certs, do_handshake_on_connect and six.PY2, *args, **kw)
+ if sys.version_info >= (3, 7):
+ # Monkey-patch the sslsocket so our modified self gets
+ # injected into its _create method.
+ def fake_new(self, cls, *args, **kwargs):
+ return self
+
+ orig_new = _original_sslsocket.__new__
+ try:
+ _original_sslsocket.__new__ = fake_new.__get__(self,
GreenSSLSocket)
+
+ self = _original_wrap_socket(
+ sock=sock.fd,
+ keyfile=keyfile,
+ certfile=certfile,
+ server_side=server_side,
+ cert_reqs=cert_reqs,
+ ssl_version=ssl_version,
+ ca_certs=ca_certs,
+ do_handshake_on_connect=False,
+ *args, **kw
+ )
+ self.keyfile = keyfile
+ self.certfile = certfile
+ self.cert_reqs = cert_reqs
+ self.ssl_version = ssl_version
+ self.ca_certs = ca_certs
+ finally:
+ # Unpatch
+ _original_sslsocket.__new__ = orig_new
+ else:
+ # nonblocking socket handshaking on connect got disabled so let's
pretend it's disabled
+ # even when it's on
+ super(GreenSSLSocket, self).__init__(
+ sock.fd, keyfile, certfile, server_side, cert_reqs,
ssl_version,
+ ca_certs, do_handshake_on_connect and six.PY2, *args, **kw)
# the superclass initializer trashes the methods so we remove
# the local-object versions of them and let the actual class
@@ -323,7 +354,10 @@ class GreenSSLSocket(_original_sslsocket):
except NameError:
self._sslobj = sslobj
else:
- self._sslobj = SSLObject(sslobj, owner=self)
+ if sys.version_info < (3, 7):
+ self._sslobj = SSLObject(sslobj, owner=self)
+ else:
+ self._sslobj = sslobj
if self.do_handshake_on_connect:
self.do_handshake()
--
2.21.0
++++++ 0003-Fix-compatibility-with-Python-3.7-ssl.SSLSocket-531.patch ++++++
>From a915bb642dd6cd4e92c959addff30509977a637c Mon Sep 17 00:00:00 2001
From: Junyi <[email protected]>
Date: Wed, 30 Jan 2019 00:10:31 -0800
Subject: [PATCH 3/3] Fix compatibility with Python 3.7 ssl.SSLSocket (#531)
---
eventlet/green/ssl.py | 86 ++++++++++++++++++++++++-------------------
1 file changed, 49 insertions(+), 37 deletions(-)
diff --git a/eventlet/green/ssl.py b/eventlet/green/ssl.py
index 53dff70..9504aef 100644
--- a/eventlet/green/ssl.py
+++ b/eventlet/green/ssl.py
@@ -3,10 +3,7 @@ __ssl = __import__('ssl')
from eventlet.patcher import slurp_properties
slurp_properties(__ssl, globals(), srckeys=dir(__ssl))
-import errno
-import functools
import sys
-
from eventlet import greenio, hubs
from eventlet.greenio import (
set_nonblocking, GreenSocket, CONNECT_ERR, CONNECT_SUCCESS,
@@ -14,6 +11,8 @@ from eventlet.greenio import (
from eventlet.hubs import trampoline, IOClosed
from eventlet.support import get_errno, PY33
import six
+from contextlib import contextmanager
+
orig_socket = __import__('socket')
socket = orig_socket.socket
timeout_exc = SSLError
@@ -24,6 +23,21 @@ __patched__ = [
_original_sslsocket = __ssl.SSLSocket
_original_wrap_socket = __ssl.wrap_socket
+_original_sslcontext = getattr(__ssl, 'SSLContext', None)
+_is_under_py_3_7 = sys.version_info < (3, 7)
+
+
+@contextmanager
+def _original_ssl_context(*args, **kwargs):
+ tmp_sslcontext = _original_wrap_socket.__globals__.get('SSLContext', None)
+ tmp_sslsocket = _original_sslsocket._create.__globals__.get('SSLSocket',
None)
+ _original_sslsocket._create.__globals__['SSLSocket'] = _original_sslsocket
+ _original_wrap_socket.__globals__['SSLContext'] = _original_sslcontext
+ try:
+ yield
+ finally:
+ _original_wrap_socket.__globals__['SSLContext'] = tmp_sslcontext
+ _original_sslsocket._create.__globals__['SSLSocket'] = tmp_sslsocket
class GreenSSLSocket(_original_sslsocket):
@@ -40,16 +54,43 @@ class GreenSSLSocket(_original_sslsocket):
settimeout(), and to close/reopen the connection when a timeout
occurs at an unexpected juncture in the code.
"""
+ def __new__(cls, sock=None, keyfile=None, certfile=None,
+ server_side=False, cert_reqs=CERT_NONE,
+ ssl_version=PROTOCOL_SSLv23, ca_certs=None,
+ do_handshake_on_connect=True, *args, **kw):
+ if _is_under_py_3_7:
+ return super(GreenSSLSocket, cls).__new__(cls)
+ else:
+ if not isinstance(sock, GreenSocket):
+ sock = GreenSocket(sock)
+ with _original_ssl_context():
+ ret = _original_wrap_socket(
+ sock=sock.fd,
+ keyfile=keyfile,
+ certfile=certfile,
+ server_side=server_side,
+ cert_reqs=cert_reqs,
+ ssl_version=ssl_version,
+ ca_certs=ca_certs,
+ do_handshake_on_connect=False,
+ *args, **kw
+ )
+ ret.keyfile = keyfile
+ ret.certfile = certfile
+ ret.cert_reqs = cert_reqs
+ ret.ssl_version = ssl_version
+ ret.ca_certs = ca_certs
+ ret.__class__ = GreenSSLSocket
+ return ret
+
# we are inheriting from SSLSocket because its constructor calls
# do_handshake whose behavior we wish to override
-
def __init__(self, sock, keyfile=None, certfile=None,
server_side=False, cert_reqs=CERT_NONE,
ssl_version=PROTOCOL_SSLv23, ca_certs=None,
do_handshake_on_connect=True, *args, **kw):
if not isinstance(sock, GreenSocket):
sock = GreenSocket(sock)
-
self.act_non_blocking = sock.act_non_blocking
if six.PY2:
@@ -57,42 +98,12 @@ class GreenSSLSocket(_original_sslsocket):
# this assignment
self._timeout = sock.gettimeout()
- if sys.version_info >= (3, 7):
- # Monkey-patch the sslsocket so our modified self gets
- # injected into its _create method.
- def fake_new(self, cls, *args, **kwargs):
- return self
-
- orig_new = _original_sslsocket.__new__
- try:
- _original_sslsocket.__new__ = fake_new.__get__(self,
GreenSSLSocket)
-
- self = _original_wrap_socket(
- sock=sock.fd,
- keyfile=keyfile,
- certfile=certfile,
- server_side=server_side,
- cert_reqs=cert_reqs,
- ssl_version=ssl_version,
- ca_certs=ca_certs,
- do_handshake_on_connect=False,
- *args, **kw
- )
- self.keyfile = keyfile
- self.certfile = certfile
- self.cert_reqs = cert_reqs
- self.ssl_version = ssl_version
- self.ca_certs = ca_certs
- finally:
- # Unpatch
- _original_sslsocket.__new__ = orig_new
- else:
+ if _is_under_py_3_7:
# nonblocking socket handshaking on connect got disabled so let's
pretend it's disabled
# even when it's on
super(GreenSSLSocket, self).__init__(
sock.fd, keyfile, certfile, server_side, cert_reqs,
ssl_version,
ca_certs, do_handshake_on_connect and six.PY2, *args, **kw)
-
# the superclass initializer trashes the methods so we remove
# the local-object versions of them and let the actual class
# methods shine through
@@ -354,7 +365,7 @@ class GreenSSLSocket(_original_sslsocket):
except NameError:
self._sslobj = sslobj
else:
- if sys.version_info < (3, 7):
+ if _is_under_py_3_7:
self._sslobj = SSLObject(sslobj, owner=self)
else:
self._sslobj = sslobj
@@ -396,6 +407,7 @@ class GreenSSLSocket(_original_sslsocket):
def dup(self):
raise NotImplementedError("Can't dup an ssl object")
+
SSLSocket = GreenSSLSocket
--
2.21.0