From: Arkadiusz Miƛkiewicz Date: Fri, 5 Mar 2021 08:45:12 +0000 (+0100) Subject: - rel 2; rediff patches X-Git-Tag: auto/th/python-gevent-1.4.0-2 X-Git-Url: http://git.pld-linux.org/?p=packages%2Fpython-gevent.git;a=commitdiff_plain;h=3c6d899 - rel 2; rediff patches --- diff --git a/known_failures-pld.patch b/known_failures-pld.patch index dae45a5..5eea024 100644 --- a/known_failures-pld.patch +++ b/known_failures-pld.patch @@ -1,6 +1,7 @@ ---- gevent-1.4.0.orig/src/gevent/tests/known_failures.py 2017-06-05 13:31:50.000000000 +0200 -+++ gevent-1.4.0/src/gevent/tests/known_failures.py 2018-03-05 12:50:16.000000000 +0100 -@@ -33,8 +33,277 @@ +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/known_failures.py gevent-1.4.0/src/gevent/tests/known_failures.py +--- gevent-1.4.0.org/src/gevent/tests/known_failures.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/tests/known_failures.py 2021-03-05 09:43:56.691802201 +0100 +@@ -30,8 +30,277 @@ FAILING_TESTS = [ # we don't have that option without a new commit---and sometimes we really need a build # to succeed in order to get a release wheel 'FLAKY test__issue6.py', @@ -278,4 +279,4 @@ +] if sys.platform == 'win32': - # other Windows-related issues (need investigating) + IGNORED_TESTS = [ diff --git a/python-gevent-py3.8.patch b/python-gevent-py3.8.patch index c8a8588..a21f049 100644 --- a/python-gevent-py3.8.patch +++ b/python-gevent-py3.8.patch @@ -78,11 +78,10 @@ Still needs the specific networking test classes added, but all the basics pass # 1.5a1 (2019-05-02) # ================== # -diff --git a/examples/webproxy.py b/examples/webproxy.py -index e381d6bd4..de1eaf8d5 100755 ---- a/examples/webproxy.py -+++ b/examples/webproxy.py -@@ -15,7 +15,12 @@ +diff -urNp -x '*.orig' gevent-1.4.0.org/examples/webproxy.py gevent-1.4.0/examples/webproxy.py +--- gevent-1.4.0.org/examples/webproxy.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/examples/webproxy.py 2021-03-05 09:44:15.299051013 +0100 +@@ -15,7 +15,12 @@ from gevent import monkey; monkey.patch_ import sys import re import traceback @@ -96,40 +95,9 @@ index e381d6bd4..de1eaf8d5 100755 try: import urllib2 -#diff --git a/pyproject.toml b/pyproject.toml -#index 2b611b9a4..f611ef972 100644 -#--- a/pyproject.toml -#+++ b/pyproject.toml -#@@ -12,8 +12,9 @@ requires = [ -# # 0.28 is faster, and (important!) lets us specify the target module -# # name to be created so that we can have both foo.py and _foo.so -# # at the same time. 0.29 fixes some issues with Python 3.7, -#- # and adds the 3str mode for transition to Python 3. -#- "Cython >= 0.29.7", -#+ # and adds the 3str mode for transition to Python 3. 0.29.12+ is -#+ # required for Python 3.8 -#+ "Cython >= 0.29.13", -# # See version requirements in setup.py -# "cffi >= 1.12.3 ; platform_python_implementation == 'CPython'", -# # Python 3.7 requires at least 0.4.14, which is ABI incompatible with earlier -#diff --git a/scripts/install.sh b/scripts/install.sh -#index 94bd53058..ef8a6dfbd 100755 -#--- a/scripts/install.sh -#+++ b/scripts/install.sh -#@@ -99,6 +99,9 @@ for var in "$@"; do -# 3.7) -# install 3.7.2 python3.7 3.7.d -# ;; -#+ 3.8) -#+ install 3.8.0b4 python3.8 3.8.d -#+ ;; -# pypy2.7) -# install pypy2.7-7.1.0 pypy2.7 pypy2.7.d -# ;; -diff --git a/src/gevent/__semaphore.pxd b/src/gevent/__semaphore.pxd -index dc9f11c68..e46778ed7 100644 ---- a/src/gevent/__semaphore.pxd -+++ b/src/gevent/__semaphore.pxd +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/__semaphore.pxd gevent-1.4.0/src/gevent/__semaphore.pxd +--- gevent-1.4.0.org/src/gevent/__semaphore.pxd 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/__semaphore.pxd 2021-03-05 09:44:15.299051013 +0100 @@ -13,7 +13,7 @@ cdef class Semaphore(AbstractLinkable): # threadpool uses it cpdef _start_notify(self) @@ -139,11 +107,10 @@ index dc9f11c68..e46778ed7 100644 cpdef __enter__(self) cpdef __exit__(self, object t, object v, object tb) -diff --git a/src/gevent/_compat.py b/src/gevent/_compat.py -index 56391459e..e8f5ed4ba 100644 ---- a/src/gevent/_compat.py -+++ b/src/gevent/_compat.py -@@ -21,7 +21,7 @@ +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_compat.py gevent-1.4.0/src/gevent/_compat.py +--- gevent-1.4.0.org/src/gevent/_compat.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/_compat.py 2021-03-05 09:44:15.299051013 +0100 +@@ -14,7 +14,7 @@ PY3 = sys.version_info[0] >= 3 PYPY = hasattr(sys, 'pypy_version_info') WIN = sys.platform.startswith("win") LINUX = sys.platform.startswith('linux') @@ -152,11 +119,10 @@ index 56391459e..e8f5ed4ba 100644 PURE_PYTHON = PYPY or os.getenv('PURE_PYTHON') -diff --git a/src/gevent/_socket2.py b/src/gevent/_socket2.py -index 15f470893..7c2f35f3e 100644 ---- a/src/gevent/_socket2.py -+++ b/src/gevent/_socket2.py -@@ -6,6 +6,7 @@ +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_socket2.py gevent-1.4.0/src/gevent/_socket2.py +--- gevent-1.4.0.org/src/gevent/_socket2.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/_socket2.py 2021-03-05 09:44:15.299051013 +0100 +@@ -6,6 +6,7 @@ from __future__ import absolute_import # Our import magic sadly makes this warning useless # pylint: disable=undefined-variable @@ -164,38 +130,101 @@ index 15f470893..7c2f35f3e 100644 from gevent import _socketcommon from gevent._util import copy_globals -#diff --git a/src/gevent/_socketcommon.py b/src/gevent/_socketcommon.py -#index cd12ac1a9..87b9a4f8a 100644 -#--- a/src/gevent/_socketcommon.py -#+++ b/src/gevent/_socketcommon.py -#@@ -69,13 +69,19 @@ -# __imports__.extend(__py3_imports__) -# -# import time -#-import sys -#+ -# from gevent._hub_local import get_hub_noargs as get_hub -# from gevent._compat import string_types, integer_types, PY3 -#+from gevent._compat import PY38 -#+from gevent._compat import WIN as is_windows -#+from gevent._compat import OSX as is_macos -# from gevent._util import copy_globals -# -#-is_windows = sys.platform == 'win32' -#-is_macos = sys.platform == 'darwin' -#+if PY38: -#+ __imports__.extend([ -#+ 'create_server', -#+ 'has_dualstack_ipv6', -#+ ]) -# -# # pylint:disable=no-name-in-module,unused-import -# if is_windows: -diff --git a/src/gevent/monkey.py b/src/gevent/monkey.py -index 5dbfe3f78..f862f879c 100644 ---- a/src/gevent/monkey.py -+++ b/src/gevent/monkey.py -@@ -668,6 +668,22 @@ def join(timeout=None): +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_socketcommon.py gevent-1.4.0/src/gevent/_socketcommon.py +--- gevent-1.4.0.org/src/gevent/_socketcommon.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/_socketcommon.py 2021-03-05 09:44:15.302384451 +0100 +@@ -74,6 +74,12 @@ from gevent._hub_local import get_hub_no + from gevent._compat import string_types, integer_types, PY3 + from gevent._util import copy_globals + ++if sys.version_info[:2] >= (3, 8): ++ __imports__.extend([ ++ 'create_server', ++ 'has_dualstack_ipv6' ++ ]) ++ + is_windows = sys.platform == 'win32' + is_macos = sys.platform == 'darwin' + +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_ssl3.py gevent-1.4.0/src/gevent/_ssl3.py +--- gevent-1.4.0.org/src/gevent/_ssl3.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/_ssl3.py 2021-03-05 09:44:15.299051013 +0100 +@@ -667,6 +667,11 @@ class SSLSocket(socket): + return None + return self._sslobj.tls_unique_cb() + ++ def verify_client_post_handshake(self): ++ # Only present in 3.7.1+; an attributeerror is alright ++ if self._sslobj: ++ return self._sslobj.verify_client_post_handshake() ++ raise ValueError("No SSL wrapper around " + str(self)) + + # Python does not support forward declaration of types + SSLContext.sslsocket_class = SSLSocket +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_tblib.py gevent-1.4.0/src/gevent/_tblib.py +--- gevent-1.4.0.org/src/gevent/_tblib.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/_tblib.py 2021-03-05 09:44:15.302384451 +0100 +@@ -198,7 +198,10 @@ class Traceback(object): + while current: + f_code = current.tb_frame.f_code + code = compile('\n' * (current.tb_lineno - 1) + 'raise __traceback_maker', current.tb_frame.f_code.co_filename, 'exec') +- if PY3: ++ if hasattr(code, "replace"): ++ # Python 3.8 and newer ++ code = code.replace(co_argcount=0, co_freevars=(), co_cellvars=()) ++ elif PY3: + code = CodeType( + 0, code.co_kwonlyargcount, + code.co_nlocals, code.co_stacksize, code.co_flags, +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/libuv/_corecffi_source.c gevent-1.4.0/src/gevent/libuv/_corecffi_source.c +--- gevent-1.4.0.org/src/gevent/libuv/_corecffi_source.c 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/libuv/_corecffi_source.c 2021-03-05 09:44:15.299051013 +0100 +@@ -150,32 +150,34 @@ static void _gevent_fs_poll_callback3(vo + + static void gevent_uv_walk_callback_close(uv_handle_t* handle, void* arg) + { +- if( handle && !uv_is_closing(handle) ) { +- uv_close(handle, NULL); +- } ++ if( handle && !uv_is_closing(handle) ) { ++ uv_close(handle, NULL); ++ } + } + + static void gevent_close_all_handles(uv_loop_t* loop) + { ++ if (loop) { + uv_walk(loop, gevent_uv_walk_callback_close, NULL); ++ } + } + + static void gevent_zero_timer(uv_timer_t* handle) + { +- memset(handle, 0, sizeof(uv_timer_t)); ++ memset(handle, 0, sizeof(uv_timer_t)); + } + + static void gevent_zero_check(uv_check_t* handle) + { +- memset(handle, 0, sizeof(uv_check_t)); ++ memset(handle, 0, sizeof(uv_check_t)); + } + + static void gevent_zero_prepare(uv_prepare_t* handle) + { +- memset(handle, 0, sizeof(uv_prepare_t)); ++ memset(handle, 0, sizeof(uv_prepare_t)); + } + + static void gevent_zero_loop(uv_loop_t* handle) + { +- memset(handle, 0, sizeof(uv_loop_t)); ++ memset(handle, 0, sizeof(uv_loop_t)); + } +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/monkey.py gevent-1.4.0/src/gevent/monkey.py +--- gevent-1.4.0.org/src/gevent/monkey.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/monkey.py 2021-03-05 09:44:15.299051013 +0100 +@@ -614,6 +614,22 @@ def patch_thread(threading=True, _thread raise RuntimeError("Cannot join current thread") if thread_greenlet is not None and thread_greenlet.dead: return @@ -218,12 +247,10 @@ index 5dbfe3f78..f862f879c 100644 if not thread.is_alive(): return -@@ -700,8 +716,34 @@ def join(timeout=None): +@@ -646,8 +662,34 @@ def patch_thread(threading=True, _thread if orig_current_thread == threading_mod.main_thread(): main_thread = threading_mod.main_thread() _greenlet = main_thread._greenlet = greenlet.getcurrent() -- -- main_thread.join = make_join_func(main_thread, _greenlet) + main_thread.__real_tstate_lock = main_thread._tstate_lock + + # The interpreter will call threading._shutdown @@ -250,16 +277,16 @@ index 5dbfe3f78..f862f879c 100644 + main_thread._tstate_lock = main_thread.__real_tstate_lock + main_thread.__real_tstate_lock = None + orig_shutdown() -+ + +- main_thread.join = make_join_func(main_thread, _greenlet) + threading_mod._shutdown = _shutdown # Patch up the ident of the main thread to match. This # matters if threading was imported before monkey-patching -diff --git a/src/gevent/os.py b/src/gevent/os.py -index 3980f320c..4dd66abd8 100644 ---- a/src/gevent/os.py -+++ b/src/gevent/os.py -@@ -385,6 +385,12 @@ def waitpid(pid, options): +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/os.py gevent-1.4.0/src/gevent/os.py +--- gevent-1.4.0.org/src/gevent/os.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/os.py 2021-03-05 09:44:15.299051013 +0100 +@@ -385,6 +385,12 @@ if hasattr(os, 'fork'): # we're not watching it return _waitpid(pid, options) @@ -272,7 +299,7 @@ index 3980f320c..4dd66abd8 100644 def fork_and_watch(callback=None, loop=None, ref=False, fork=fork_gevent): """ Fork a child process and start a child watcher for it in the parent process. -@@ -413,10 +419,7 @@ def fork_and_watch(callback=None, loop=None, ref=False, fork=fork_gevent): +@@ -413,10 +419,7 @@ if hasattr(os, 'fork'): pid = fork() if pid: # parent @@ -284,7 +311,7 @@ index 3980f320c..4dd66abd8 100644 return pid __extensions__.append('fork_and_watch') -@@ -474,6 +477,23 @@ def forkpty(*args, **kwargs): +@@ -474,6 +477,23 @@ if hasattr(os, 'fork'): # take any args to match fork_and_watch return forkpty_and_watch(*args, **kwargs) __implements__.append("waitpid") @@ -308,7 +335,7 @@ index 3980f320c..4dd66abd8 100644 else: def fork(): """ -@@ -503,6 +523,7 @@ def forkpty(): +@@ -503,6 +523,7 @@ if hasattr(os, 'fork'): else: __implements__.remove('fork') @@ -316,65 +343,10 @@ index 3980f320c..4dd66abd8 100644 __imports__ = copy_globals(os, globals(), names_to_ignore=__implements__ + __extensions__, dunder_names_to_keep=()) -#diff --git a/src/gevent/subprocess.py b/src/gevent/subprocess.py -#index a9894f1ab..9b4d13cd2 100644 -#--- a/src/gevent/subprocess.py -#+++ b/src/gevent/subprocess.py -#@@ -47,6 +47,7 @@ -# from gevent._compat import PY35 -# from gevent._compat import PY36 -# from gevent._compat import PY37 -#+from gevent._compat import PY38 -# from gevent._compat import reraise -# from gevent._compat import fspath -# from gevent._compat import fsencode -#@@ -69,6 +70,25 @@ -# __implements__.append("_posixsubprocess") -# _posixsubprocess = None -# -#+if PY38: -#+ # Using os.posix_spawn() to start subprocesses -#+ # bypasses our child watchers on certain operating systems, -#+ # and with certain library versions. Possibly the right -#+ # fix is to monkey-patch os.posix_spawn like we do os.fork? -#+ # These have no effect, they're just here to match the stdlib. -#+ # TODO: When available, given a monkey patch on them, I think -#+ # we ought to be able to use them if the stdlib has identified them -#+ # as suitable. -#+ __implements__.extend([ -#+ '_use_posix_spawn', -#+ '_USE_POSIX_SPAWN' -#+ ]) -#+ -#+ def _use_posix_spawn(): -#+ return False -#+ -#+ _USE_POSIX_SPAWN = False -#+ -# # Some symbols we define that we expect to export; -# # useful for static analysis -# PIPE = "PIPE should be imported" -#@@ -1720,3 +1740,15 @@ def run(*popenargs, **kwargs): -# raise _with_stdout_stderr(CalledProcessError(retcode, process.args, stdout), stderr) -# -# return CompletedProcess(process.args, retcode, stdout, stderr) -#+ -#+def _gevent_did_monkey_patch(*_args): -#+ # Beginning on 3.8 on Mac, the 'spawn' method became the default -#+ # start method. That doesn't fire fork watchers and we can't -#+ # easily patch to make it do so: multiprocessing uses the private -#+ # c accelerated _subprocess module to implement this. Instead we revert -#+ # back to using fork. -#+ from gevent._compat import MAC -#+ if MAC: -#+ import multiprocessing -#+ if hasattr(multiprocessing, 'set_start_method'): -#+ multiprocessing.set_start_method('fork', force=True) -diff --git a/src/gevent/testing/testrunner.py b/src/gevent/testing/testrunner.py -index 3c1c711f8..7a3f8c6bb 100644 ---- a/src/gevent/testing/testrunner.py -+++ b/src/gevent/testing/testrunner.py -@@ -480,17 +480,26 @@ def _setup_environ(debug=False): +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/testing/testrunner.py gevent-1.4.0/src/gevent/testing/testrunner.py +--- gevent-1.4.0.org/src/gevent/testing/testrunner.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/testing/testrunner.py 2021-03-05 09:44:15.299051013 +0100 +@@ -381,17 +381,26 @@ def _setup_environ(debug=False): if 'GEVENT_DEBUG' not in os.environ and debug: os.environ['GEVENT_DEBUG'] = 'debug' @@ -405,11 +377,53 @@ index 3c1c711f8..7a3f8c6bb 100644 def main(): -diff --git a/src/gevent/tests/test__core_fork.py b/src/gevent/tests/test__core_fork.py -index fee42f547..5717cf7d9 100644 ---- a/src/gevent/tests/test__core_fork.py -+++ b/src/gevent/tests/test__core_fork.py -@@ -1,11 +1,13 @@ +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/known_failures.py gevent-1.4.0/src/gevent/tests/known_failures.py +--- gevent-1.4.0.org/src/gevent/tests/known_failures.py 2021-03-05 09:44:15.072377256 +0100 ++++ gevent-1.4.0/src/gevent/tests/known_failures.py 2021-03-05 09:44:15.302384451 +0100 +@@ -610,6 +610,15 @@ RUN_ALONE = [ + 'test__examples.py', + ] + ++if APPVEYOR: ++ # Strange failures sometimes, but only on Python 3.7, reporting ++ # "ConnectionAbortedError: [WinError 10053] An established ++ # connection was aborted by the software in your host machine" ++ # when we've done no such thing. Try running not in parallel ++ RUN_ALONE += [ ++ 'test__ssl.py', ++ 'test__server.py', ++ ] + + + if APPVEYOR or TRAVIS: +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/test__core.py gevent-1.4.0/src/gevent/tests/test__core.py +--- gevent-1.4.0.org/src/gevent/tests/test__core.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/tests/test__core.py 2021-03-05 09:44:15.299051013 +0100 +@@ -2,6 +2,7 @@ + from __future__ import absolute_import, print_function, division + import sys + import unittest ++import sys + import gevent.testing as greentest + + from gevent import core +@@ -130,6 +131,12 @@ class TestWatchersDefault(TestWatchers): + "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1380/job/lrlvid6mkjtyrhn5#L1103 " + "It has also timed out, but only on Appveyor CPython 3.6; local CPython 3.6 does not. " + "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1414/job/yn7yi8b53vtqs8lw#L1523") ++@greentest.skipIf( ++ greentest.LIBUV and greentest.RUNNING_ON_TRAVIS and sys.version_info == (3, 8, 0, 'beta', 4), ++ "Crashes on 3.8.0b4 on TravisCI. " ++ "(https://travis-ci.org/gevent/gevent/jobs/582031266#L215) " ++ "Unable to reproduce locally so far on macOS." ++) + class TestWatchersDefaultDestroyed(TestWatchers): + + def _makeOne(self): +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/test__core_fork.py gevent-1.4.0/src/gevent/tests/test__core_fork.py +--- gevent-1.4.0.org/src/gevent/tests/test__core_fork.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/tests/test__core_fork.py 2021-03-05 09:44:15.299051013 +0100 +@@ -1,11 +1,12 @@ from __future__ import print_function import gevent.monkey gevent.monkey.patch_all() @@ -420,12 +434,11 @@ index fee42f547..5717cf7d9 100644 import multiprocessing +import gevent -+from gevent._compat import MAC + hub = gevent.get_hub() pid = os.getpid() newpid = None -@@ -46,6 +48,7 @@ def test(): +@@ -46,6 +47,7 @@ def test(): if __name__ == '__main__': # Must call for Windows to fork properly; the fork can't be in the top-level multiprocessing.freeze_support() @@ -433,11 +446,59 @@ index fee42f547..5717cf7d9 100644 # fork watchers weren't firing in multi-threading processes. # This test is designed to prove that they are. # However, it fails on Windows: The fork watcher never runs! -diff --git a/src/gevent/tests/test__threading_2.py b/src/gevent/tests/test__threading_2.py -index b425c88a3..cb7f8b91e 100644 ---- a/src/gevent/tests/test__threading_2.py -+++ b/src/gevent/tests/test__threading_2.py -@@ -33,6 +33,7 @@ +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/test__greenness.py gevent-1.4.0/src/gevent/tests/test__greenness.py +--- gevent-1.4.0.org/src/gevent/tests/test__greenness.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/tests/test__greenness.py 2021-03-05 09:44:15.299051013 +0100 +@@ -29,13 +29,15 @@ monkey.patch_all() + import gevent.testing as greentest + + try: +- import urllib2 +-except ImportError: + from urllib import request as urllib2 +-try: +- import BaseHTTPServer +-except ImportError: + from http import server as BaseHTTPServer ++ from http.server import SimpleHTTPRequestHandler ++except ImportError: ++ # Python 2 ++ import urllib2 ++ import BaseHTTPServer ++ from SimpleHTTPServer import SimpleHTTPRequestHandler ++ + + import gevent + from gevent.testing import params +@@ -47,7 +49,8 @@ class TestGreenness(greentest.TestCase): + def setUp(self): + server_address = params.DEFAULT_BIND_ADDR_TUPLE + BaseHTTPServer.BaseHTTPRequestHandler.protocol_version = "HTTP/1.0" +- self.httpd = BaseHTTPServer.HTTPServer(server_address, BaseHTTPServer.BaseHTTPRequestHandler) ++ self.httpd = BaseHTTPServer.HTTPServer(server_address, ++ SimpleHTTPRequestHandler) + self.httpd.request_count = 0 + + def tearDown(self): +@@ -62,10 +65,10 @@ class TestGreenness(greentest.TestCase): + server = gevent.spawn(self.serve) + + port = self.httpd.socket.getsockname()[1] +- with self.assertRaises(urllib2.HTTPError) as exc: +- urllib2.urlopen('http://127.0.0.1:%s' % port) +- self.assertEqual(exc.exception.code, 501) +- server.get(0.01) ++ rsp = urllib2.urlopen('http://127.0.0.1:%s' % port) ++ rsp.read() ++ rsp.close() ++ server.join() + self.assertEqual(self.httpd.request_count, 1) + + +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/test__threading_2.py gevent-1.4.0/src/gevent/tests/test__threading_2.py +--- gevent-1.4.0.org/src/gevent/tests/test__threading_2.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/tests/test__threading_2.py 2021-03-05 09:44:15.299051013 +0100 +@@ -33,6 +33,7 @@ try: from test.support import verbose except ImportError: from test.test_support import verbose @@ -445,7 +506,7 @@ index b425c88a3..cb7f8b91e 100644 import random import re import sys -@@ -46,7 +47,7 @@ +@@ -46,7 +47,7 @@ import unittest import weakref from gevent.tests import lock_tests @@ -454,7 +515,7 @@ index b425c88a3..cb7f8b91e 100644 # A trivial mutable counter. def skipDueToHang(cls): -@@ -132,7 +133,7 @@ def test_various_ops(self): +@@ -132,7 +133,7 @@ class ThreadTests(unittest.TestCase): print('waiting for all tasks to complete') for t in threads: t.join(NUMTASKS) @@ -463,7 +524,7 @@ index b425c88a3..cb7f8b91e 100644 if hasattr(t, 'ident'): self.assertNotEqual(t.ident, 0) self.assertFalse(t.ident is None) -@@ -351,28 +352,33 @@ def test_join_nondaemon_on_shutdown(self): +@@ -351,28 +352,33 @@ class ThreadTests(unittest.TestCase): # Issue 1722344 # Raising SystemExit skipped threading._shutdown import subprocess @@ -503,7 +564,7 @@ index b425c88a3..cb7f8b91e 100644 # On Python 2, importing pkg_resources tends to result in some 'ImportWarning' # being printed to stderr about packages missing __init__.py; the -W ignore is... # ignored. -@@ -410,7 +416,7 @@ def __init__(self, should_raise): +@@ -410,7 +416,7 @@ class ThreadTests(unittest.TestCase): self.should_raise = should_raise self.thread = threading.Thread(target=self._run, args=(self,), @@ -512,7 +573,7 @@ index b425c88a3..cb7f8b91e 100644 self.thread.start() def _run(self, _other_ref, _yet_another): -@@ -463,7 +469,7 @@ def test_1_join_on_shutdown(self): +@@ -463,7 +469,7 @@ class ThreadJoinOnShutdown(unittest.Test t = threading.Thread(target=joiningfunc, args=(threading.current_thread(),)) t.start() @@ -521,30 +582,24 @@ index b425c88a3..cb7f8b91e 100644 print('end of main') """ self._run_and_join(script) -#diff --git a/src/gevent/thread.py b/src/gevent/thread.py -#index a1fe41813..14428df3f 100644 -#--- a/src/gevent/thread.py -#+++ b/src/gevent/thread.py -#@@ -41,6 +41,12 @@ -# 'interrupt_main', -# 'start_new' -# ] -#+ if sys.version_info[:2] >= (3, 8): -#+ # We can't actually produce a value that "may be used -#+ # to identify this particular thread system-wide", right? -#+ # Even if we could, I imagine people will want to pass this to -#+ # non-Python (native) APIs, so we shouldn't mess with it. -#+ __imports__.append('get_native_id') -# -# -# error = __thread__.error -diff --git a/src/gevent/threading.py b/src/gevent/threading.py -index c845fd221..64d989584 100644 ---- a/src/gevent/threading.py -+++ b/src/gevent/threading.py -@@ -160,41 +160,25 @@ def main_native_thread(): - if PY3: - # XXX: Issue 18808 breaks us on Python 3.4+. +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/thread.py gevent-1.4.0/src/gevent/thread.py +--- gevent-1.4.0.org/src/gevent/thread.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/thread.py 2021-03-05 09:44:15.302384451 +0100 +@@ -31,6 +31,8 @@ else: + 'exit_thread', + 'interrupt_main', + 'start_new'] ++ if sys.version_info[:2] >= (3, 8): ++ __imports__.append('get_native_id') + error = __thread__.error + from gevent._compat import PY3 + from gevent._compat import PYPY +diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/threading.py gevent-1.4.0/src/gevent/threading.py +--- gevent-1.4.0.org/src/gevent/threading.py 2019-01-04 12:51:44.000000000 +0100 ++++ gevent-1.4.0/src/gevent/threading.py 2021-03-05 09:44:15.299051013 +0100 +@@ -156,41 +156,25 @@ import sys + if sys.version_info[:2] >= (3, 4): + # XXX: Issue 18808 breaks us on Python 3.4. # Thread objects now expect a callback from the interpreter itself - # (threadmodule.c:release_sentinel). Because this never happens + # (threadmodule.c:release_sentinel) when the C-level PyThreadState @@ -598,7 +653,7 @@ index c845fd221..64d989584 100644 __implements__.append('Thread') -@@ -203,6 +187,8 @@ class Timer(Thread, __threading__.Timer): # pylint:disable=abstract-method,inher +@@ -199,6 +183,8 @@ if sys.version_info[:2] >= (3, 4): __implements__.append('Timer') @@ -607,657 +662,3 @@ index c845fd221..64d989584 100644 # The main thread is patched up with more care # in _gevent_will_monkey_patch - -From 632d3c9990f7db27f76245895bb4c2717818c5d5 Mon Sep 17 00:00:00 2001 -From: Jason Madden -Date: Fri, 6 Sep 2019 18:26:42 -0500 -Subject: [PATCH 2/9] Add the 3.8 test cases. - ---- - src/gevent/_ssl3.py | 14 + - src/gevent/monkey.py | 37 +- - src/gevent/testing/patched_tests_setup.py | 36 +- - src/gevent/testing/sysinfo.py | 3 + - src/greentest/3.8/allsans.pem | 81 + - src/greentest/3.8/badcert.pem | 36 + - src/greentest/3.8/badkey.pem | 40 + - src/greentest/3.8/capath/4e1295a3.0 | 14 + - src/greentest/3.8/capath/5ed36f99.0 | 41 + - src/greentest/3.8/capath/6e88d7b8.0 | 14 + - src/greentest/3.8/capath/99d0fa06.0 | 41 + - src/greentest/3.8/capath/b1930218.0 | 26 + - src/greentest/3.8/capath/ceff1710.0 | 26 + - src/greentest/3.8/ffdh3072.pem | 41 + - src/greentest/3.8/idnsans.pem | 169 + - src/greentest/3.8/keycert.passwd.pem | 68 + - src/greentest/3.8/keycert.pem | 66 + - src/greentest/3.8/keycert2.pem | 66 + - src/greentest/3.8/keycert3.pem | 164 + - src/greentest/3.8/keycert4.pem | 164 + - src/greentest/3.8/keycertecc.pem | 106 + - src/greentest/3.8/nokia.pem | 31 + - src/greentest/3.8/nullbytecert.pem | 90 + - src/greentest/3.8/nullcert.pem | 0 - src/greentest/3.8/pycacert.pem | 99 + - src/greentest/3.8/pycakey.pem | 40 + - src/greentest/3.8/revocation.crl | 14 + - src/greentest/3.8/secp384r1.pem | 7 + - .../3.8/selfsigned_pythontestdotnet.pem | 34 + - src/greentest/3.8/ssl_cert.pem | 26 + - src/greentest/3.8/ssl_key.passwd.pem | 42 + - src/greentest/3.8/ssl_key.pem | 40 + - src/greentest/3.8/talos-2019-0758.pem | 22 + - src/greentest/3.8/test_asyncore.py | 834 +++ - src/greentest/3.8/test_ftplib.py | 1093 +++ - src/greentest/3.8/test_httplib.py | 1977 ++++++ - src/greentest/3.8/test_select.py | 81 + - src/greentest/3.8/test_selectors.py | 564 ++ - src/greentest/3.8/test_smtpd.py | 1013 +++ - src/greentest/3.8/test_socket.py | 6278 +++++++++++++++++ - src/greentest/3.8/test_ssl.py | 4652 ++++++++++++ - src/greentest/3.8/test_subprocess.py | 3330 +++++++++ - src/greentest/3.8/test_threading.py | 1382 ++++ - src/greentest/3.8/test_wsgiref.py | 867 +++ - src/greentest/3.8/version | 1 + - 45 files changed, 23756 insertions(+), 14 deletions(-) - create mode 100644 src/greentest/3.8/allsans.pem - create mode 100644 src/greentest/3.8/badcert.pem - create mode 100644 src/greentest/3.8/badkey.pem - create mode 100644 src/greentest/3.8/capath/4e1295a3.0 - create mode 100644 src/greentest/3.8/capath/5ed36f99.0 - create mode 100644 src/greentest/3.8/capath/6e88d7b8.0 - create mode 100644 src/greentest/3.8/capath/99d0fa06.0 - create mode 100644 src/greentest/3.8/capath/b1930218.0 - create mode 100644 src/greentest/3.8/capath/ceff1710.0 - create mode 100644 src/greentest/3.8/ffdh3072.pem - create mode 100644 src/greentest/3.8/idnsans.pem - create mode 100644 src/greentest/3.8/keycert.passwd.pem - create mode 100644 src/greentest/3.8/keycert.pem - create mode 100644 src/greentest/3.8/keycert2.pem - create mode 100644 src/greentest/3.8/keycert3.pem - create mode 100644 src/greentest/3.8/keycert4.pem - create mode 100644 src/greentest/3.8/keycertecc.pem - create mode 100644 src/greentest/3.8/nokia.pem - create mode 100644 src/greentest/3.8/nullbytecert.pem - create mode 100644 src/greentest/3.8/nullcert.pem - create mode 100644 src/greentest/3.8/pycacert.pem - create mode 100644 src/greentest/3.8/pycakey.pem - create mode 100644 src/greentest/3.8/revocation.crl - create mode 100644 src/greentest/3.8/secp384r1.pem - create mode 100644 src/greentest/3.8/selfsigned_pythontestdotnet.pem - create mode 100644 src/greentest/3.8/ssl_cert.pem - create mode 100644 src/greentest/3.8/ssl_key.passwd.pem - create mode 100644 src/greentest/3.8/ssl_key.pem - create mode 100644 src/greentest/3.8/talos-2019-0758.pem - create mode 100644 src/greentest/3.8/test_asyncore.py - create mode 100644 src/greentest/3.8/test_ftplib.py - create mode 100644 src/greentest/3.8/test_httplib.py - create mode 100644 src/greentest/3.8/test_select.py - create mode 100644 src/greentest/3.8/test_selectors.py - create mode 100644 src/greentest/3.8/test_smtpd.py - create mode 100644 src/greentest/3.8/test_socket.py - create mode 100644 src/greentest/3.8/test_ssl.py - create mode 100644 src/greentest/3.8/test_subprocess.py - create mode 100644 src/greentest/3.8/test_threading.py - create mode 100644 src/greentest/3.8/test_wsgiref.py - create mode 100644 src/greentest/3.8/version - -=== SKIPPED === -From e349789fff94418ff363c3d7ba8d4cf4a5bcd798 Mon Sep 17 00:00:00 2001 -From: Jason Madden -Date: Fri, 6 Sep 2019 18:27:34 -0500 -Subject: [PATCH 3/9] Fix lint. - ---- - src/gevent/tests/test__core_fork.py | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/gevent/tests/test__core_fork.py b/src/gevent/tests/test__core_fork.py -index 5717cf7d9..20dc2a4d1 100644 ---- a/src/gevent/tests/test__core_fork.py -+++ b/src/gevent/tests/test__core_fork.py -@@ -6,7 +6,6 @@ - import multiprocessing - - import gevent --from gevent._compat import MAC - - hub = gevent.get_hub() - pid = os.getpid() - -From 5c5d2bc660b599256734a9f5c9e58c79ec4f1b1b Mon Sep 17 00:00:00 2001 -From: Jason Madden -Date: Fri, 6 Sep 2019 18:28:24 -0500 -Subject: [PATCH 4/9] Fix the other place that refs the version in .travis.yml. - ---- - .travis.yml | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -#diff --git a/.travis.yml b/.travis.yml -#index 05dc24b12..c956f6ae7 100644 -#--- a/.travis.yml -#+++ b/.travis.yml -#@@ -284,10 +284,10 @@ jobs: -# # 3.8 -# - <<: *test-libuv-jobs -# env: TRAVIS_PYTHON_VERSION=3.8 -#- name: libuv36 -#+ name: libuv38 -# - <<: *test-libev-jobs -# env: TRAVIS_PYTHON_VERSION=3.8 -#- name: libev-cffi36 -#+ name: libev-cffi38 -# -# -# # 2.7, no-embed. Run the tests that exercise the libraries we -# -From 0a45f740f3afce22c88fd7f9dbe5e30aa7d95336 Mon Sep 17 00:00:00 2001 -From: Jason Madden -Date: Fri, 6 Sep 2019 18:48:09 -0500 -Subject: [PATCH 5/9] Fix false detection in test__all__. - ---- - .travis.yml | 7 +++++-- - src/gevent/subprocess.py | 45 ++++++++++++++++++++++++---------------- - 2 files changed, 32 insertions(+), 20 deletions(-) - -#diff --git a/.travis.yml b/.travis.yml -#index c956f6ae7..f676bb6e7 100644 -#--- a/.travis.yml -#+++ b/.travis.yml -#@@ -198,9 +198,12 @@ jobs: -# # We only need to do this on one version, and it should be Python 3, because -# # pylint has stopped updating for Python 2. -# - stage: test -#- # We need pylint, since above we're not installing a requirements file -#+ # We need pylint, since above we're not installing a -#+ # requirements file. Code added to _ssl3.SSLContext for Python -#+ # 3.8 triggers an infinite recursion bug in pylint 2.3.1/astroid 2.2.5 -#+ # unless we disable inference. -# install: pip install pylint -#- script: python -m pylint --rcfile=.pylintrc gevent -#+ script: python -m pylint --limit-inference-results=1 --rcfile=.pylintrc gevent -# env: TRAVIS_PYTHON_VERSION=3.7 -# name: lint37 -# -#diff --git a/src/gevent/subprocess.py b/src/gevent/subprocess.py -#index 9b4d13cd2..ed22d863b 100644 -#--- a/src/gevent/subprocess.py -#+++ b/src/gevent/subprocess.py -#@@ -70,24 +70,6 @@ -# __implements__.append("_posixsubprocess") -# _posixsubprocess = None -# -#-if PY38: -#- # Using os.posix_spawn() to start subprocesses -#- # bypasses our child watchers on certain operating systems, -#- # and with certain library versions. Possibly the right -#- # fix is to monkey-patch os.posix_spawn like we do os.fork? -#- # These have no effect, they're just here to match the stdlib. -#- # TODO: When available, given a monkey patch on them, I think -#- # we ought to be able to use them if the stdlib has identified them -#- # as suitable. -#- __implements__.extend([ -#- '_use_posix_spawn', -#- '_USE_POSIX_SPAWN' -#- ]) -#- -#- def _use_posix_spawn(): -#- return False -#- -#- _USE_POSIX_SPAWN = False -# -# # Some symbols we define that we expect to export; -# # useful for static analysis -#@@ -183,6 +165,33 @@ def _use_posix_spawn(): -# 'CREATE_BREAKAWAY_FROM_JOB' -# ]) -# -#+if PY38: -#+ # Using os.posix_spawn() to start subprocesses -#+ # bypasses our child watchers on certain operating systems, -#+ # and with certain library versions. Possibly the right -#+ # fix is to monkey-patch os.posix_spawn like we do os.fork? -#+ # These have no effect, they're just here to match the stdlib. -#+ # TODO: When available, given a monkey patch on them, I think -#+ # we ought to be able to use them if the stdlib has identified them -#+ # as suitable. -#+ __implements__.extend([ -#+ '_use_posix_spawn', -#+ ]) -#+ -#+ def _use_posix_spawn(): -#+ return False -#+ -#+ _USE_POSIX_SPAWN = False -#+ -#+ if __subprocess__._USE_POSIX_SPAWN: -#+ __implements__.extend([ -#+ '_USE_POSIX_SPAWN', -#+ ]) -#+ else: -#+ __imports__.extend([ -#+ '_USE_POSIX_SPAWN', -#+ ]) -#+ -# actually_imported = copy_globals(__subprocess__, globals(), -# only_names=__imports__, -# ignore_missing_names=True) -# -From 412d59d0889bf0d1221c52d902a98a7648f0a829 Mon Sep 17 00:00:00 2001 -From: Jason Madden -Date: Sat, 7 Sep 2019 07:04:09 -0500 -Subject: [PATCH 6/9] Hmm, why is test__core giving fits on py38/libuv/travis? - Can't reproduce locally. - ---- - appveyor.yml | 1 + - src/gevent/libuv/_corecffi_source.c | 16 +++++++++------- - 2 files changed, 10 insertions(+), 7 deletions(-) - -#diff --git a/appveyor.yml b/appveyor.yml -#index 3e5f84f78..ee660e472 100644 -#--- a/appveyor.yml -#+++ b/appveyor.yml -#@@ -11,6 +11,7 @@ environment: -# # too often we get failures to resolve DNS names or failures -# # to connect on AppVeyor. -# GEVENTTEST_USE_RESOURCES: "-network" -#+ PYTHONTRACEMALLOC: 10 -# -# matrix: -# -diff --git a/src/gevent/libuv/_corecffi_source.c b/src/gevent/libuv/_corecffi_source.c -index 83fe82ee9..3b4b8d156 100644 ---- a/src/gevent/libuv/_corecffi_source.c -+++ b/src/gevent/libuv/_corecffi_source.c -@@ -150,32 +150,34 @@ static void _gevent_fs_poll_callback3(void* handlep, int status, const uv_stat_t - - static void gevent_uv_walk_callback_close(uv_handle_t* handle, void* arg) - { -- if( handle && !uv_is_closing(handle) ) { -- uv_close(handle, NULL); -- } -+ if( handle && !uv_is_closing(handle) ) { -+ uv_close(handle, NULL); -+ } - } - - static void gevent_close_all_handles(uv_loop_t* loop) - { -+ if (loop) { - uv_walk(loop, gevent_uv_walk_callback_close, NULL); -+ } - } - - static void gevent_zero_timer(uv_timer_t* handle) - { -- memset(handle, 0, sizeof(uv_timer_t)); -+ memset(handle, 0, sizeof(uv_timer_t)); - } - - static void gevent_zero_check(uv_check_t* handle) - { -- memset(handle, 0, sizeof(uv_check_t)); -+ memset(handle, 0, sizeof(uv_check_t)); - } - - static void gevent_zero_prepare(uv_prepare_t* handle) - { -- memset(handle, 0, sizeof(uv_prepare_t)); -+ memset(handle, 0, sizeof(uv_prepare_t)); - } - - static void gevent_zero_loop(uv_loop_t* handle) - { -- memset(handle, 0, sizeof(uv_loop_t)); -+ memset(handle, 0, sizeof(uv_loop_t)); - } - -From e52ac513ef66dba47f5312f1870fe2e5b020cb19 Mon Sep 17 00:00:00 2001 -From: Jason Madden -Date: Sat, 7 Sep 2019 07:44:37 -0500 -Subject: [PATCH 7/9] Disable that failing test on 3.8b4 for now. - ---- - src/gevent/tests/test__core.py | 7 +++++++ - src/gevent/tests/test__socket.py | 21 ++++++++++----------- - 2 files changed, 17 insertions(+), 11 deletions(-) - -diff --git a/src/gevent/tests/test__core.py b/src/gevent/tests/test__core.py -index 1816e0f89..c538ee7aa 100644 ---- a/src/gevent/tests/test__core.py -+++ b/src/gevent/tests/test__core.py -@@ -2,6 +2,7 @@ - from __future__ import absolute_import, print_function, division - - import unittest -+import sys - import gevent.testing as greentest - - from gevent import core -@@ -128,6 +129,12 @@ def destroyOne(self, loop): - "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1380/job/lrlvid6mkjtyrhn5#L1103 " - "It has also timed out, but only on Appveyor CPython 3.6; local CPython 3.6 does not. " - "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1414/job/yn7yi8b53vtqs8lw#L1523") -+@greentest.skipIf( -+ greentest.LIBUV and greentest.RUNNING_ON_TRAVIS and sys.version_info == (3, 8, 0, 'beta', 4), -+ "Crashes on 3.8.0b4 on TravisCI. " -+ "(https://travis-ci.org/gevent/gevent/jobs/582031266#L215) " -+ "Unable to reproduce locally so far on macOS." -+) - class TestWatchersDefaultDestroyed(TestWatchers): - - def _makeOne(self): -#diff --git a/src/gevent/tests/test__socket.py b/src/gevent/tests/test__socket.py -#index 48f6ee3ed..4a670cdb0 100644 -#--- a/src/gevent/tests/test__socket.py -#+++ b/src/gevent/tests/test__socket.py -#@@ -3,15 +3,15 @@ -# from gevent import monkey; monkey.patch_all() -# -# import sys -#-import os -# import array -# import socket -#-import traceback -# import time -# import unittest -#-import gevent.testing as greentest -# from functools import wraps -# -#+from gevent import get_hub -#+import gevent.testing as greentest -#+ -# from gevent.testing import six -# from gevent.testing import LARGE_TIMEOUT -# from gevent.testing import support -#@@ -34,8 +34,7 @@ def errors_are_fatal(*args, **kwargs): -# try: -# return target(*args, **kwargs) -# except: # pylint:disable=bare-except -#- traceback.print_exc() -#- os._exit(2) -#+ get_hub().throw(*sys.exc_info()) -# -# _Thread.__init__(self, target=errors_are_fatal, **kwargs) -# self.start() -#@@ -91,18 +90,17 @@ def _test_sendall(self, data, match_data=None, client_method='sendall', -# -# def accept_and_read(): -# conn = None -#+ r = None -# try: -# conn, _ = self.listener.accept() -# r = conn.makefile(mode='rb') -# read_data.append(r.read()) -# r.flush() -# r.close() -#- except: # pylint:disable=bare-except -#- server_exc_info.append(sys.exc_info()) -# finally: -#- if conn: -#- conn.close() -#- self.listener.close() -#+ for f in (conn, r, self.listener): -#+ if f is not None: -#+ f.close() -# -# server = Thread(target=accept_and_read) -# client = self.create_connection(**client_args) -#@@ -114,9 +112,10 @@ def accept_and_read(): -# client.close() -# -# server.join() -#+ assert not server.is_alive() -# if match_data is None: -# match_data = self.long_data -#- self.assertEqual(read_data[0], match_data) -#+ self.assertEqual(read_data, [match_data]) -# -# if server_exc_info: -# six.reraise(*server_exc_info[0]) -# -From 271e58658f7cc839dcde74239c66d1d396d675b7 Mon Sep 17 00:00:00 2001 -From: Jason Madden -Date: Sat, 7 Sep 2019 09:02:12 -0500 -Subject: [PATCH 8/9] Whoops, fix Python 2. - ---- - src/gevent/tests/test__greenness.py | 23 +++++++++++++---------- - src/gevent/tests/test__socket.py | 13 ++++++++----- - src/gevent/tests/test__ssl.py | 3 ++- - 3 files changed, 23 insertions(+), 16 deletions(-) - -diff --git a/src/gevent/tests/test__greenness.py b/src/gevent/tests/test__greenness.py -index da4fc948e..71392971f 100644 ---- a/src/gevent/tests/test__greenness.py -+++ b/src/gevent/tests/test__greenness.py -@@ -29,13 +29,15 @@ - import gevent.testing as greentest - - try: -- import urllib2 --except ImportError: - from urllib import request as urllib2 --try: -- import BaseHTTPServer --except ImportError: - from http import server as BaseHTTPServer -+ from http.server import SimpleHTTPRequestHandler -+except ImportError: -+ # Python 2 -+ import urllib2 -+ import BaseHTTPServer -+ from SimpleHTTPServer import SimpleHTTPRequestHandler -+ - - import gevent - from gevent.testing import params -@@ -47,7 +49,8 @@ class TestGreenness(greentest.TestCase): - def setUp(self): - server_address = params.DEFAULT_BIND_ADDR_TUPLE - BaseHTTPServer.BaseHTTPRequestHandler.protocol_version = "HTTP/1.0" -- self.httpd = BaseHTTPServer.HTTPServer(server_address, BaseHTTPServer.BaseHTTPRequestHandler) -+ self.httpd = BaseHTTPServer.HTTPServer(server_address, -+ SimpleHTTPRequestHandler) - self.httpd.request_count = 0 - - def tearDown(self): -@@ -62,10 +65,10 @@ def test_urllib2(self): - server = gevent.spawn(self.serve) - - port = self.httpd.socket.getsockname()[1] -- with self.assertRaises(urllib2.HTTPError) as exc: -- urllib2.urlopen('http://127.0.0.1:%s' % port) -- self.assertEqual(exc.exception.code, 501) -- server.get(0.01) -+ rsp = urllib2.urlopen('http://127.0.0.1:%s' % port) -+ rsp.read() -+ rsp.close() -+ server.join() - self.assertEqual(self.httpd.request_count, 1) - - -#diff --git a/src/gevent/tests/test__socket.py b/src/gevent/tests/test__socket.py -#index 4a670cdb0..195ef1af5 100644 -#--- a/src/gevent/tests/test__socket.py -#+++ b/src/gevent/tests/test__socket.py -#@@ -9,7 +9,7 @@ -# import unittest -# from functools import wraps -# -#-from gevent import get_hub -#+from gevent import getcurrent -# import gevent.testing as greentest -# -# from gevent.testing import six -#@@ -34,7 +34,7 @@ def errors_are_fatal(*args, **kwargs): -# try: -# return target(*args, **kwargs) -# except: # pylint:disable=bare-except -#- get_hub().throw(*sys.exc_info()) -#+ getcurrent().parent.throw(*sys.exc_info()) -# -# _Thread.__init__(self, target=errors_are_fatal, **kwargs) -# self.start() -#@@ -95,13 +95,16 @@ def accept_and_read(): -# conn, _ = self.listener.accept() -# r = conn.makefile(mode='rb') -# read_data.append(r.read()) -#- r.flush() -#- r.close() -# finally: -#- for f in (conn, r, self.listener): -#+ # Order matters. On Python 2, if we close the -#+ # connection before closing the makefile, -#+ # test__ssl fails because the underlying socket -#+ # has been deleted. -#+ for f in (r, conn, self.listener): -# if f is not None: -# f.close() -# -#+ -# server = Thread(target=accept_and_read) -# client = self.create_connection(**client_args) -# -#diff --git a/src/gevent/tests/test__ssl.py b/src/gevent/tests/test__ssl.py -#index 97b70bd98..537e70773 100644 -#--- a/src/gevent/tests/test__ssl.py -#+++ b/src/gevent/tests/test__ssl.py -#@@ -1,3 +1,4 @@ -#+from __future__ import print_function, division, absolute_import -# from gevent import monkey; monkey.patch_all() -# import os -# -#@@ -5,7 +6,7 @@ -# import gevent.testing as greentest -# # Be careful not to have TestTCP as a bare attribute in this module, -# # even aliased, to avoid running duplicate tests -#-import test__socket -#+from gevent.tests import test__socket -# import ssl -# -# -# -From 158ccf26ff07af1c0737307f67ed118e7a1d6ac1 Mon Sep 17 00:00:00 2001 -From: Jason Madden -Date: Sat, 7 Sep 2019 09:27:19 -0500 -Subject: [PATCH 9/9] Implement verify_client_post_handshake; appveyor has TLS - 1.3 now so those tests are running there. - ---- - CHANGES.rst | 2 ++ - src/gevent/_ssl3.py | 5 +++++ - src/gevent/tests/known_failures.py | 9 +++++++++ - src/gevent/tests/test__socket.py | 3 ++- - 4 files changed, 18 insertions(+), 1 deletion(-) - -#diff --git a/CHANGES.rst b/CHANGES.rst -#index 53f4398d2..a4ab7a7ab 100644 -#--- a/CHANGES.rst -#+++ b/CHANGES.rst -#@@ -16,6 +16,8 @@ -# -# - Improve the way joining the main thread works on Python 3. -# -#+- Implement ``SSLSocket.verify_client_post_handshake()`` when available. -#+ -# 1.5a1 (2019-05-02) -# ================== -# -diff --git a/src/gevent/_ssl3.py b/src/gevent/_ssl3.py -index d3de81034..29988cff0 100644 ---- a/src/gevent/_ssl3.py -+++ b/src/gevent/_ssl3.py -@@ -678,6 +678,11 @@ def get_channel_binding(self, cb_type="tls-unique"): - return None - return self._sslobj.tls_unique_cb() - -+ def verify_client_post_handshake(self): -+ # Only present in 3.7.1+; an attributeerror is alright -+ if self._sslobj: -+ return self._sslobj.verify_client_post_handshake() -+ raise ValueError("No SSL wrapper around " + str(self)) - - # Python does not support forward declaration of types - SSLContext.sslsocket_class = SSLSocket -diff --git a/src/gevent/tests/known_failures.py b/src/gevent/tests/known_failures.py -index eb1db0da1..d5f38ba91 100644 ---- a/src/gevent/tests/known_failures.py -+++ b/src/gevent/tests/known_failures.py -@@ -351,6 +351,15 @@ - 'test__example_webproxy.py', - ] - -+if APPVEYOR: -+ # Strange failures sometimes, but only on Python 3.7, reporting -+ # "ConnectionAbortedError: [WinError 10053] An established -+ # connection was aborted by the software in your host machine" -+ # when we've done no such thing. Try running not in parallel -+ RUN_ALONE += [ -+ 'test__ssl.py', -+ 'test__server.py', -+ ] - - - if APPVEYOR or TRAVIS: -#diff --git a/src/gevent/tests/test__socket.py b/src/gevent/tests/test__socket.py -#index 195ef1af5..4976d5767 100644 -#--- a/src/gevent/tests/test__socket.py -#+++ b/src/gevent/tests/test__socket.py -#@@ -29,12 +29,13 @@ class Thread(_Thread): -# -# def __init__(self, **kwargs): -# target = kwargs.pop('target') -#+ caller = getcurrent() -# @wraps(target) -# def errors_are_fatal(*args, **kwargs): -# try: -# return target(*args, **kwargs) -# except: # pylint:disable=bare-except -#- getcurrent().parent.throw(*sys.exc_info()) -#+ caller.throw(*sys.exc_info()) -# -# _Thread.__init__(self, target=errors_are_fatal, **kwargs) -# self.start() ---- gevent-1.4.0/src/gevent/thread.py.orig 2019-01-04 12:51:44.000000000 +0100 -+++ gevent-1.4.0/src/gevent/thread.py 2020-01-03 21:14:08.922889769 +0100 -@@ -31,6 +31,8 @@ - 'exit_thread', - 'interrupt_main', - 'start_new'] -+ if sys.version_info[:2] >= (3, 8): -+ __imports__.append('get_native_id') - error = __thread__.error - from gevent._compat import PY3 - from gevent._compat import PYPY ---- gevent-1.4.0/src/gevent/_tblib.py.orig 2019-01-04 12:51:44.000000000 +0100 -+++ gevent-1.4.0/src/gevent/_tblib.py 2020-01-03 21:25:28.152543399 +0100 -@@ -198,6 +198,9 @@ - while current: - f_code = current.tb_frame.f_code - code = compile('\n' * (current.tb_lineno - 1) + 'raise __traceback_maker', current.tb_frame.f_code.co_filename, 'exec') -- if PY3: -+ if hasattr(code, "replace"): -+ # Python 3.8 and newer -+ code = code.replace(co_argcount=0, co_freevars=(), co_cellvars=()) -+ elif PY3: - code = CodeType( - 0, code.co_kwonlyargcount, ---- gevent-1.4.0/src/gevent/_socketcommon.py.orig 2019-01-04 12:51:44.000000000 +0100 -+++ gevent-1.4.0/src/gevent/_socketcommon.py 2020-01-06 15:00:51.236688228 +0100 -@@ -74,6 +74,12 @@ - from gevent._compat import string_types, integer_types, PY3 - from gevent._util import copy_globals - -+if sys.version_info[:2] >= (3, 8): -+ __imports__.extend([ -+ 'create_server', -+ 'has_dualstack_ipv6' -+ ]) -+ - is_windows = sys.platform == 'win32' - is_macos = sys.platform == 'darwin' - diff --git a/python-gevent.spec b/python-gevent.spec index 479996b..9a07e48 100644 --- a/python-gevent.spec +++ b/python-gevent.spec @@ -19,7 +19,7 @@ Summary: A coroutine-based Python 2 networking library Summary(pl.UTF-8): Biblioteka sieciowa dla Pythona 2 oparta na korutynach Name: python-%{module} Version: 1.4.0 -Release: 1 +Release: 2 Epoch: 1 License: MIT Group: Development/Languages