From b1ef8b410c334debee1e9ff577a69c6a21220100 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Thu, 26 Aug 2021 09:50:14 -0400 Subject: [PATCH] gnu: python-pytest-asyncio: Enable tests and patch for Python 3.8. * gnu/packages/patches/python-pytest-asyncio-python-3.8.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/check.scm (python-pytest-asyncio) [source]: Fetch from git and apply above patch. [phases]: Override the check phase, enabling tests. --- gnu/local.mk | 1 + gnu/packages/check.scm | 21 +- .../python-pytest-asyncio-python-3.8.patch | 238 ++++++++++++++++++ 3 files changed, 257 insertions(+), 3 deletions(-) create mode 100644 gnu/packages/patches/python-pytest-asyncio-python-3.8.patch diff --git a/gnu/local.mk b/gnu/local.mk index ebcb4c82f5..a0da1a96d8 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1657,6 +1657,7 @@ dist_patch_DATA = \ %D%/packages/patches/python-pydot-regression-test.patch \ %D%/packages/patches/python2-pygobject-2-deprecation.patch \ %D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch \ + %D%/packages/patches/python-pytest-asyncio-python-3.8.patch \ %D%/packages/patches/python-pytorch-runpath.patch \ %D%/packages/patches/python-pytorch-system-libraries.patch \ %D%/packages/patches/python-robotframework-source-date-epoch.patch \ diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm index b384b8297a..43689c3670 100644 --- a/gnu/packages/check.scm +++ b/gnu/packages/check.scm @@ -1730,14 +1730,29 @@ (define-public python2-coverage (define-public python-pytest-asyncio (package (name "python-pytest-asyncio") + ;; Version 0.10.0 is the last version which is compatible with Pytest <= + ;; 5.4.0. (version "0.10.0") (source (origin - (method url-fetch) - (uri (pypi-uri "pytest-asyncio" version)) + (method git-fetch) ;for tests + (uri (git-reference + (url "https://github.com/pytest-dev/pytest-asyncio") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 "1bysy4nii13bm7h345wxf8fxcjhab7l374pqdv7vwv3izl053b4z")))) + (base32 + "1m63b7nbph5z20mn8jgh6j9ac873i1k4in29x44vrkw3qwfwg13y")) + (patches (search-patches "python-pytest-asyncio-python-3.8.patch")))) (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs tests? #:allow-other-keys) + (when tests? + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv"))))))) (native-inputs `(("python-coverage" ,python-coverage) ("python-async-generator" ,python-async-generator) diff --git a/gnu/packages/patches/python-pytest-asyncio-python-3.8.patch b/gnu/packages/patches/python-pytest-asyncio-python-3.8.patch new file mode 100644 index 0000000000..519f92c047 --- /dev/null +++ b/gnu/packages/patches/python-pytest-asyncio-python-3.8.patch @@ -0,0 +1,238 @@ +# Modified to apply on 0.10.0. + +From c7a111180b3f35f2fe5a07ead185e4e792f9dfa0 Mon Sep 17 00:00:00 2001 +From: Andrew Svetlov +Date: Thu, 9 Apr 2020 08:44:46 +0200 +Subject: [PATCH] Test on Python 3.8, drop 3.3 and 3.4 + +--- + .travis.yml | 7 +++--- + setup.py | 1 + + tests/conftest.py | 2 +- + tests/test_hypothesis_integration.py | 2 +- + tests/test_simple.py | 32 +++++++++++----------------- + tests/test_simple_35.py | 17 ++++++--------- + tests/test_subprocess.py | 6 ++---- + tox.ini | 5 +++-- + 8 files changed, 29 insertions(+), 43 deletions(-) + +diff --git a/.travis.yml b/.travis.yml +index fe90234..b93377a 100644 +--- a/.travis.yml ++++ b/.travis.yml +@@ -1,4 +1,5 @@ + language: python ++ + matrix: + include: + - python: 3.5 +@@ -7,10 +8,8 @@ matrix: + env: TOX_ENV=py36 + - python: 3.7 + env: TOX_ENV=py37 +- # TODO: the dist and sudo keys are currently needed to use Python 3.7. +- # They should be removed once Travis-CI supports 3.7 on the default image. +- dist: xenial +- sudo: true ++ - python: 3.8 ++ env: TOX_ENV=py38 + + install: pip install tox-travis coveralls + +diff --git a/setup.py b/setup.py +index 18566bf..6175711 100644 +--- a/setup.py ++++ b/setup.py +@@ -36,6 +36,7 @@ def find_version(): + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", ++ "Programming Language :: Python :: 3.8", + "Topic :: Software Development :: Testing", + "Framework :: Pytest", + ], +diff --git a/tests/conftest.py b/tests/conftest.py +index 6203cf8..cc2ec16 100644 +--- a/tests/conftest.py ++++ b/tests/conftest.py +@@ -17,7 +17,7 @@ def dependent_fixture(event_loop): + async def just_a_sleep(): + """Just sleep a little while.""" + nonlocal event_loop +- await asyncio.sleep(0.1, loop=event_loop) ++ await asyncio.sleep(0.1) + nonlocal counter + counter += 1 + +diff --git a/tests/test_simple.py b/tests/test_simple.py +index 1627139..00c07fc 100644 +--- a/tests/test_simple.py ++++ b/tests/test_simple.py +@@ -1,28 +1,26 @@ + """Quick'n'dirty unit tests for provided fixtures and markers.""" + import asyncio +-import os + import pytest + + import pytest_asyncio.plugin + + +-async def async_coro(loop=None): +- """A very simple coroutine.""" +- await asyncio.sleep(0, loop=loop) ++async def async_coro(): ++ await asyncio.sleep(0) + return 'ok' + + + def test_event_loop_fixture(event_loop): + """Test the injection of the event_loop fixture.""" + assert event_loop +- ret = event_loop.run_until_complete(async_coro(event_loop)) ++ ret = event_loop.run_until_complete(async_coro()) + assert ret == 'ok' + + + @pytest.mark.asyncio +-def test_asyncio_marker(): ++async def test_asyncio_marker(): + """Test the asyncio pytest marker.""" +- yield # sleep(0) ++ await asyncio.sleep(0) + + + @pytest.mark.xfail(reason='need a failure', strict=True) +@@ -45,13 +43,11 @@ async def closer(_, writer): + writer.close() + + server1 = await asyncio.start_server(closer, host='localhost', +- port=unused_tcp_port, +- loop=event_loop) ++ port=unused_tcp_port) + + with pytest.raises(IOError): + await asyncio.start_server(closer, host='localhost', +- port=unused_tcp_port, +- loop=event_loop) ++ port=unused_tcp_port) + + server1.close() + await server1.wait_closed() +@@ -68,20 +64,16 @@ async def closer(_, writer): + unused_tcp_port_factory()) + + server1 = await asyncio.start_server(closer, host='localhost', +- port=port1, +- loop=event_loop) ++ port=port1) + server2 = await asyncio.start_server(closer, host='localhost', +- port=port2, +- loop=event_loop) ++ port=port2) + server3 = await asyncio.start_server(closer, host='localhost', +- port=port3, +- loop=event_loop) ++ port=port3) + + for port in port1, port2, port3: + with pytest.raises(IOError): + await asyncio.start_server(closer, host='localhost', +- port=port, +- loop=event_loop) ++ port=port) + + server1.close() + await server1.wait_closed() +@@ -117,7 +109,7 @@ class Test: + @pytest.mark.asyncio + async def test_asyncio_marker_method(self, event_loop): + """Test the asyncio pytest marker in a Test class.""" +- ret = await async_coro(event_loop) ++ ret = await async_coro() + assert ret == 'ok' + + +diff --git a/tests/test_simple_35.py b/tests/test_simple_35.py +index 1e4d697..4141fb0 100644 +--- a/tests/test_simple_35.py ++++ b/tests/test_simple_35.py +@@ -6,7 +6,7 @@ + + @pytest.mark.asyncio + async def async_coro(loop): +- await asyncio.sleep(0, loop=loop) ++ await asyncio.sleep(0) + return 'ok' + + +@@ -27,8 +27,7 @@ async def closer(_, writer): + writer.close() + + server1 = await asyncio.start_server(closer, host='localhost', +- port=unused_tcp_port, +- loop=event_loop) ++ port=unused_tcp_port) + + server1.close() + await server1.wait_closed() +@@ -45,20 +44,16 @@ async def closer(_, writer): + + async def run_test(): + server1 = await asyncio.start_server(closer, host='localhost', +- port=port1, +- loop=event_loop) ++ port=port1) + server2 = await asyncio.start_server(closer, host='localhost', +- port=port2, +- loop=event_loop) ++ port=port2) + server3 = await asyncio.start_server(closer, host='localhost', +- port=port3, +- loop=event_loop) ++ port=port3) + + for port in port1, port2, port3: + with pytest.raises(IOError): + await asyncio.start_server(closer, host='localhost', +- port=port, +- loop=event_loop) ++ port=port) + + server1.close() + await server1.wait_closed() +diff --git a/tests/test_subprocess.py b/tests/test_subprocess.py +index 83490e8..069c6c2 100644 +--- a/tests/test_subprocess.py ++++ b/tests/test_subprocess.py +@@ -21,8 +21,7 @@ def event_loop(): + async def test_subprocess(event_loop): + """Starting a subprocess should be possible.""" + proc = await asyncio.subprocess.create_subprocess_exec( +- sys.executable, '--version', stdout=asyncio.subprocess.PIPE, +- loop=event_loop) ++ sys.executable, '--version', stdout=asyncio.subprocess.PIPE) + await proc.communicate() + + +@@ -30,6 +29,5 @@ async def test_subprocess(event_loop): + async def test_subprocess_forbid(event_loop): + """Starting a subprocess should be possible.""" + proc = await asyncio.subprocess.create_subprocess_exec( +- sys.executable, '--version', stdout=asyncio.subprocess.PIPE, +- loop=event_loop) ++ sys.executable, '--version', stdout=asyncio.subprocess.PIPE) + await proc.communicate() +diff --git a/tox.ini b/tox.ini +index 13d5155..eed6fb6 100644 +--- a/tox.ini ++++ b/tox.ini +@@ -1,6 +1,7 @@ + [tox] +-envlist = py35, py36, py37 +-minversion = 2.5.0 ++minversion = 3.14.0 ++envlist = py35, py36, py37, py38 ++skip_missing_interpreters = true + + [testenv] + extras = testing