forked from pool/python-eventlet
- 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 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-eventlet?expand=0&rev=58
This commit is contained in:
committed by
Git OBS Bridge
parent
9b7862e481
commit
82c5a213c9
@@ -0,0 +1,67 @@
|
|||||||
|
From a28a275393d3c3ae3c3a5341cc4764fad21be3e5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sergey Shepelev <temotor@gmail.com>
|
||||||
|
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
|
||||||
|
|
96
0002-Fix-for-Python-3.7-506.patch
Normal file
96
0002-Fix-for-Python-3.7-506.patch
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
From cf47cb518db3e0dbdd48473fb40cf9f6ecd50e07 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Marcel Plch <mplch@redhat.com>
|
||||||
|
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
|
||||||
|
|
165
0003-Fix-compatibility-with-Python-3.7-ssl.SSLSocket-531.patch
Normal file
165
0003-Fix-compatibility-with-Python-3.7-ssl.SSLSocket-531.patch
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
From a915bb642dd6cd4e92c959addff30509977a637c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Junyi <xmaswillyou@gmail.com>
|
||||||
|
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
|
||||||
|
|
@@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Apr 29 06:00:44 UTC 2019 - Thomas Bechtold <tbechtold@suse.com>
|
||||||
|
|
||||||
|
- 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 <tbechtold@suse.com>
|
Mon Apr 29 04:30:11 UTC 2019 - Thomas Bechtold <tbechtold@suse.com>
|
||||||
|
|
||||||
|
@@ -25,8 +25,15 @@ License: MIT
|
|||||||
Group: Development/Languages/Python
|
Group: Development/Languages/Python
|
||||||
URL: http://eventlet.net
|
URL: http://eventlet.net
|
||||||
Source: https://files.pythonhosted.org/packages/source/e/eventlet/eventlet-%{version}.tar.gz
|
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
|
# 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
|
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 Sphinx}
|
||||||
BuildRequires: %{python_module greenlet}
|
BuildRequires: %{python_module greenlet}
|
||||||
BuildRequires: %{python_module setuptools}
|
BuildRequires: %{python_module setuptools}
|
||||||
@@ -66,6 +73,9 @@ for Python that allows changing how code is run.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q -n eventlet-%{version}
|
%setup -q -n eventlet-%{version}
|
||||||
%patch0 -p1
|
%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 '/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
|
sed -i "s|^#!.*||" eventlet/support/greendns.py # Fix non-executable script
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user