From a2465bbcdec77711790317ea53d82c045ffaa985fadbd7ff15a5494445f2f837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Thu, 20 Aug 2020 07:18:19 +0000 Subject: [PATCH] Accepting request 827910 from home:jayvdb:py-submit - Add pr_1.patch for Python 3.7+ support - Activate test suite on Python 3.7+ OBS-URL: https://build.opensuse.org/request/show/827910 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-aioeventlet?expand=0&rev=11 --- pr_1.patch | 57 ++++++++++++++++++++++++++++++++++++++ python-aioeventlet.changes | 6 ++++ python-aioeventlet.spec | 16 ++++++++++- 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 pr_1.patch diff --git a/pr_1.patch b/pr_1.patch new file mode 100644 index 0000000..f0eb43e --- /dev/null +++ b/pr_1.patch @@ -0,0 +1,57 @@ +commit fb25301bd9dc5dbf77a66349b2434ee672868fd2 +Author: John Vandenberg +Date: Wed Aug 19 17:21:53 2020 +0700 + + aioeventlet: Fix breakage in Python 3.7+ asyncio + +Index: aioeventlet-0.5.1/aioeventlet.py +=================================================================== +--- aioeventlet-0.5.1.orig/aioeventlet.py ++++ aioeventlet-0.5.1/aioeventlet.py +@@ -10,6 +10,12 @@ logger = logging.getLogger('aioeventlet' + + try: + import asyncio ++ try: ++ import selectors ++ except ImportError: ++ pass ++ else: ++ asyncio.selectors = selectors + + if sys.platform == 'win32': + from asyncio.windows_utils import socketpair +@@ -212,16 +218,16 @@ class EventLoop(asyncio.SelectorEventLoo + # the selector + self._write_to_self() + +- def call_soon(self, callback, *args): +- handle = super(EventLoop, self).call_soon(callback, *args) ++ def call_soon(self, callback, *args, **kwargs): ++ handle = super(EventLoop, self).call_soon(callback, *args, **kwargs) + if self._selector is not None and self._selector._event: + # selector.select() is running: write into the self-pipe to wake up + # the selector + self._write_to_self() + return handle + +- def call_at(self, when, callback, *args): +- handle = super(EventLoop, self).call_at(when, callback, *args) ++ def call_at(self, when, callback, *args, **kwargs): ++ handle = super(EventLoop, self).call_at(when, callback, *args, **kwargs) + if self._selector is not None and self._selector._event: + # selector.select() is running: write into the self-pipe to wake up + # the selector +@@ -329,7 +335,11 @@ def yield_future(future, loop=None): + The function must not be called from the greenthread + running the aioeventlet event loop. + """ +- future = asyncio.async(future, loop=loop) ++ if hasattr(asyncio, "ensure_future"): ++ ensure_future = asyncio.ensure_future ++ else: # use of async keyword has been Deprecated since Python 3.4.4 ++ ensure_future = getattr(asyncio, "async") ++ future = ensure_future(future, loop=loop) + if future._loop._greenthread == eventlet.getcurrent(): + raise RuntimeError("yield_future() must not be called from " + "the greenthread of the aioeventlet event loop") diff --git a/python-aioeventlet.changes b/python-aioeventlet.changes index 66807a9..449c7be 100644 --- a/python-aioeventlet.changes +++ b/python-aioeventlet.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Aug 19 10:34:12 UTC 2020 - John Vandenberg + +- Add pr_1.patch for Python 3.7+ support +- Activate test suite on Python 3.7+ + ------------------------------------------------------------------- Tue Nov 5 09:20:03 UTC 2019 - Tomáš Chvátal diff --git a/python-aioeventlet.spec b/python-aioeventlet.spec index 15f01e4..008a2a4 100644 --- a/python-aioeventlet.spec +++ b/python-aioeventlet.spec @@ -1,7 +1,7 @@ # # spec file for package python-aioeventlet # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -26,6 +26,10 @@ Summary: Asyncio event loop scheduling callbacks in eventlet License: Apache-2.0 URL: https://pypi.org/project/aioeventlet/ Source: https://files.pythonhosted.org/packages/source/a/aioeventlet/aioeventlet-%{version}.tar.gz +# pr_1.patch is Python 3.7+ support +Patch0: pr_1.patch +BuildRequires: %{python_module eventlet} +BuildRequires: %{python_module pytest} BuildRequires: %{python_module setuptools} BuildRequires: python-rpm-macros Requires: python-eventlet @@ -51,6 +55,7 @@ parallel. %prep %setup -q -n aioeventlet-%{intver} +%patch0 -p1 %build %python_build @@ -58,6 +63,15 @@ parallel. %install %python_install +%check +# Python 2 requires trollius which is not in devel project, +# and test setup fails on Python 3.6 as it tries to reach live DNS server +%{python_expand PYTHON_VERSION=%{$python_version_nodots} +if [[ ${PYTHON_VERSION:0:1} -eq 3 && ${PYTHON_VERSION:1:2} -gt 6 ]]; then + # Some tests in test_eventlet.py halt + $python -m pytest -k 'EventletTests or test_wrap_invalid_type or test_wrap_greenlet_dead or test_wrap_greenlet_running or test_greenlet' +fi} + %files %{python_files} %license COPYING %doc README