From 15d3c2477510229e1b49c60fccfde5ffe94b2a76 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Fri, 8 Oct 2021 03:18:04 -0700 Subject: Python 3.10 partial support Everything below is specific to changes in Python 3.10. https://github.com/eventlet/eventlet/pull/715 - Only wrap socket.timeout on Python < 3.10 socket.timeout is TimeoutError, which our is_timeout() helper func already knows. fixes https://github.com/eventlet/eventlet/issues/687 - Working greenio._open _pyio.open is now a staticmethod, so we've got to go down to _pyio.open.__wrapped__ to get to the python function object. - Test using eventlet.is_timeout rather than requiring an is_timeout attribute on errors. TimeoutErrors (which are covered by is_timeout) can't necessarily have attributes added to them. - Fix backdoor tests Skip build info line at interpreter startup. Also, start printing the banner as we read it to aid in future debugging. - Tolerate __builtins__ being a dict (rather than module) in is_timeout (@tipabu) still not sure how this happens, but somehow it does in socket_test.test_error_is_timeout. --- tests/__init__.py | 2 +- tests/backdoor_test.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/__init__.py b/tests/__init__.py index c0b64fd..1883667 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -383,7 +383,7 @@ def run_isolated(path, prefix='tests/isolated/', **kwargs): def check_is_timeout(obj): value_text = getattr(obj, 'is_timeout', '(missing)') - assert obj.is_timeout, 'type={0} str={1} .is_timeout={2}'.format(type(obj), str(obj), value_text) + assert eventlet.is_timeout(obj), 'type={0} str={1} .is_timeout={2}'.format(type(obj), str(obj), value_text) @contextlib.contextmanager diff --git a/tests/backdoor_test.py b/tests/backdoor_test.py index 03a5692..1e09f09 100644 --- a/tests/backdoor_test.py +++ b/tests/backdoor_test.py @@ -1,5 +1,6 @@ import os import os.path +import sys import eventlet @@ -22,7 +23,9 @@ class BackdoorTest(tests.LimitedTestCase): def _run_test_on_client_and_server(self, client, server_thread): f = client.makefile('rw') assert 'Python' in f.readline() - f.readline() # build info + if sys.version_info < (3, 10): + # Starting in py310, build info is included in version line + f.readline() # build info f.readline() # help info assert 'InteractiveConsole' in f.readline() self.assertEqual('>>> ', f.read(4)) -- cgit v1.2.1