Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pytest-asyncio for
openSUSE:Factory checked in at 2021-07-10 22:54:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-asyncio (Old)
and /work/SRC/openSUSE:Factory/.python-pytest-asyncio.new.2625 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pytest-asyncio"
Sat Jul 10 22:54:00 2021 rev:7 rq:904060 version:0.15.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-pytest-asyncio/python-pytest-asyncio.changes
2020-06-30 21:54:48.810452206 +0200
+++
/work/SRC/openSUSE:Factory/.python-pytest-asyncio.new.2625/python-pytest-asyncio.changes
2021-07-10 22:54:11.807900104 +0200
@@ -1,0 +2,21 @@
+Mon Jul 5 08:38:37 UTC 2021 - Antonio Larrosa <[email protected]>
+
+- Add patch to revert a change in 0.15.1 that removed
+ async_generator support in upstream together with python 3.5
+ support. This revert is needed by python-fakeredis 1.5.2
+ * 0001-removed-support-for-python-3.5.patch
+
+-------------------------------------------------------------------
+Thu Jun 3 09:53:19 UTC 2021 - Antonio Larrosa <[email protected]>
+
+- Update to 0.15.1
+ * Hotfix for errors while closing event loops while replacing
+ them. #209 #210
+- Update to 0.15.0
+ * Add support for Python 3.9
+ * Abandon support for Python 3.5. If you still require support
+ for Python 3.5, please use pytest-asyncio v0.14 or earlier.
+ * Set unused_tcp_port_factory fixture scope to 'session'. #163
+ * Properly close event loops when replacing them. #208
+
+-------------------------------------------------------------------
Old:
----
pytest-asyncio-0.14.0.tar.gz
New:
----
0001-removed-support-for-python-3.5.patch
pytest-asyncio-0.15.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pytest-asyncio.spec ++++++
--- /var/tmp/diff_new_pack.nF44Pe/_old 2021-07-10 22:54:12.355895875 +0200
+++ /var/tmp/diff_new_pack.nF44Pe/_new 2021-07-10 22:54:12.359895845 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-pytest-asyncio
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,12 +19,13 @@
%define skip_python2 1
%{?!python_module:%define python_module() python3-%{**}}
Name: python-pytest-asyncio
-Version: 0.14.0
+Version: 0.15.1
Release: 0
Summary: Pytest support for asyncio
License: Apache-2.0
URL: https://github.com/pytest-dev/pytest-asyncio
Source:
https://github.com/pytest-dev/pytest-asyncio/archive/v%{version}.tar.gz#/pytest-asyncio-%{version}.tar.gz
+Patch0: 0001-removed-support-for-python-3.5.patch
BuildRequires: %{python_module async_generator >= 1.3}
BuildRequires: %{python_module base >= 3.6}
BuildRequires: %{python_module hypothesis >= 5.7.1}
@@ -46,6 +47,7 @@
%prep
%setup -q -n pytest-asyncio-%{version}
sed -ie '1i# -*- coding: utf-8 -*-' setup.py
+%patch0 -p1 -R
%build
%python_build
++++++ 0001-removed-support-for-python-3.5.patch ++++++
>From 057562f8aaf9f18d97326a86dbdb9587e866bfe0 Mon Sep 17 00:00:00 2001
From: Michael Seifert <[email protected]>
Date: Tue, 6 Oct 2020 11:00:21 +0200
Subject: [PATCH] feat!: Removed support for Python 3.5.
This commit:
- Removes Python 3.5 from the tested environments in CI and tox
- Removes instructions specific to Python 3.5 from the README
- Updates the Changelog
- Removes the dependency on async_generator
- Removes instructions in conftest that skip certain test cases if the Python
version is smaller than 3.6
Signed-off-by: Michael Seifert <[email protected]>
---
.travis.yml | 2 -
README.rst | 14 +------
pytest_asyncio/plugin.py | 5 +--
setup.py | 5 +--
.../test_async_gen_fixtures_35.py | 40 -------------------
tests/conftest.py | 6 ---
tox.ini | 2 +-
7 files changed, 4 insertions(+), 70 deletions(-)
delete mode 100644 tests/async_fixtures/test_async_gen_fixtures_35.py
#diff --git a/.travis.yml b/.travis.yml
#index db43fef..a19d5d7 100644
#--- a/.travis.yml
#+++ b/.travis.yml
#@@ -2,8 +2,6 @@ language: python
#
# matrix:
# include:
#- - python: 3.5
#- env: TOX_ENV=py35
# - python: 3.6
# env: TOX_ENV=py36
# - python: 3.7
#diff --git a/README.rst b/README.rst
#index 64698c6..2f282b5 100644
#--- a/README.rst
#+++ b/README.rst
#@@ -127,19 +127,6 @@ to redefine the ``event_loop`` fixture to have the same
or broader scope.
# Async fixtures need the event loop, and so must have the same or narrower
scope
# than the ``event_loop`` fixture.
#
#-If you want to do this with Python 3.5, the ``yield`` statement must be
replaced with ``await yield_()`` and the coroutine
#-function must be decorated with ``@async_generator``, like so:
#-
#-.. code-block:: python3
#-
#- from async_generator import yield_, async_generator
#-
#- @pytest.fixture
#- @async_generator
#- async def async_gen_fixture():
#- await asyncio.sleep(0.1)
#- await yield_('a value')
#-
#
# Markers
# -------
#@@ -178,6 +165,7 @@ Changelog
# 0.15.0 (UNRELEASED)
# ~~~~~~~~~~~~~~~~~~~
# - Add support for Python 3.9
#+- Abandon support for Python 3.5. If you still require support for Python
3.5, please use pytest-asyncio v0.14 or earlier.
#
# 0.14.0 (2020-06-24)
# ~~~~~~~~~~~~~~~~~~~
diff --git a/pytest_asyncio/plugin.py b/pytest_asyncio/plugin.py
index 2fdc5f4..4b7d6fd 100644
--- a/pytest_asyncio/plugin.py
+++ b/pytest_asyncio/plugin.py
@@ -13,10 +13,7 @@ def transfer_markers(*args, **kwargs): # noqa
pass
-try:
- from async_generator import isasyncgenfunction
-except ImportError:
- from inspect import isasyncgenfunction
+from inspect import isasyncgenfunction
def _is_coroutine(obj):
diff --git a/setup.py b/setup.py
index ff3855c..2df6fae 100644
--- a/setup.py
+++ b/setup.py
@@ -33,7 +33,6 @@ def find_version():
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
- "Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
@@ -41,13 +40,11 @@ def find_version():
"Topic :: Software Development :: Testing",
"Framework :: Pytest",
],
- python_requires=">= 3.5",
+ python_requires=">= 3.6",
install_requires=["pytest >= 5.4.0"],
extras_require={
- ':python_version == "3.5"': "async_generator >= 1.3",
"testing": [
"coverage",
- "async_generator >= 1.3",
"hypothesis >= 5.7.1",
],
},
#diff --git a/tests/async_fixtures/test_async_gen_fixtures_35.py
b/tests/async_fixtures/test_async_gen_fixtures_35.py
#deleted file mode 100644
#index 3b552fa..0000000
#--- a/tests/async_fixtures/test_async_gen_fixtures_35.py
#+++ /dev/null
#@@ -1,40 +0,0 @@
#-import unittest.mock
#-
#-import pytest
#-from async_generator import yield_, async_generator
#-
#-START = object()
#-END = object()
#-RETVAL = object()
#-
#-
#[email protected](scope='module')
#-def mock():
#- return unittest.mock.Mock(return_value=RETVAL)
#-
#-
#[email protected]
#-@async_generator
#-async def async_gen_fixture(mock):
#- try:
#- await yield_(mock(START))
#- except Exception as e:
#- mock(e)
#- else:
#- mock(END)
#-
#-
#[email protected]
#-async def test_async_gen_fixture(async_gen_fixture, mock):
#- assert mock.called
#- assert mock.call_args_list[-1] == unittest.mock.call(START)
#- assert async_gen_fixture is RETVAL
#-
#-
#[email protected]
#-async def test_async_gen_fixture_finalized(mock):
#- try:
#- assert mock.called
#- assert mock.call_args_list[-1] == unittest.mock.call(END)
#- finally:
#- mock.reset_mock()
#diff --git a/tests/conftest.py b/tests/conftest.py
#index cc2ec16..1ca63fe 100644
#--- a/tests/conftest.py
#+++ b/tests/conftest.py
#@@ -1,13 +1,7 @@
# import asyncio
#-import sys
#
# import pytest
#
#-collect_ignore = []
#-if sys.version_info[:2] < (3, 6):
#- collect_ignore.append("async_fixtures/test_async_gen_fixtures_36.py")
#- collect_ignore.append("async_fixtures/test_nested_36.py")
#-
#
# @pytest.fixture
# def dependent_fixture(event_loop):
#diff --git a/tox.ini b/tox.ini
#index 6cc4a82..f739cc5 100644
#--- a/tox.ini
#+++ b/tox.ini
#@@ -1,6 +1,6 @@
# [tox]
# minversion = 3.14.0
#-envlist = py35, py36, py37, py38, py39
#+envlist = py36, py37, py38, py39
# skip_missing_interpreters = true
#
# [testenv]
++++++ pytest-asyncio-0.14.0.tar.gz -> pytest-asyncio-0.15.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/.github/workflows/main.yml
new/pytest-asyncio-0.15.1/.github/workflows/main.yml
--- old/pytest-asyncio-0.14.0/.github/workflows/main.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/.github/workflows/main.yml 2021-04-22
01:04:04.000000000 +0200
@@ -0,0 +1,68 @@
+---
+name: CI
+
+on:
+ push:
+ branches: ["master"]
+ pull_request:
+ branches: ["master"]
+ workflow_dispatch:
+
+jobs:
+ tests:
+ name: "Python ${{ matrix.python-version }}"
+ runs-on: "ubuntu-latest"
+ env:
+ USING_COVERAGE: "3.6,3.7,3.8,3.9"
+
+ strategy:
+ matrix:
+ python-version: ["3.6", "3.7", "3.8", "3.9"]
+
+ steps:
+ - uses: "actions/checkout@v2"
+ - uses: "actions/setup-python@v2"
+ with:
+ python-version: "${{ matrix.python-version }}"
+ - name: "Install dependencies"
+ run: |
+ set -xe
+ python -VV
+ python -m site
+ python -m pip install --upgrade pip wheel
+ python -m pip install --upgrade coverage[toml] virtualenv tox
tox-gh-actions
+ - name: "Run tox targets for ${{ matrix.python-version }}"
+ run: "python -m tox"
+
+ # We always use a modern Python version for combining coverage to prevent
+ # parsing errors in older versions for modern code.
+ - uses: "actions/setup-python@v2"
+ with:
+ python-version: "3.9"
+
+ - name: "Upload coverage to Codecov"
+ if: "contains(env.USING_COVERAGE, matrix.python-version)"
+ uses: "codecov/codecov-action@v1"
+ with:
+ fail_ci_if_error: true
+
+ package:
+ name: "Build & verify package"
+ runs-on: "ubuntu-latest"
+
+ steps:
+ - uses: "actions/checkout@v2"
+ - uses: "actions/setup-python@v2"
+ with:
+ python-version: "3.9"
+
+ - name: "Install poetry, check-wheel-content, and twine"
+ run: "python -m pip install wheel twine check-wheel-contents"
+ - name: "Build package"
+ run: "python setup.py sdist bdist_wheel"
+ - name: "List result"
+ run: "ls -l dist"
+ - name: "Check wheel contents"
+ run: "check-wheel-contents dist/*.whl"
+ - name: "Check long_description"
+ run: "python -m twine check dist/*"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/.travis.yml
new/pytest-asyncio-0.15.1/.travis.yml
--- old/pytest-asyncio-0.14.0/.travis.yml 2020-06-24 00:12:15.000000000
+0200
+++ new/pytest-asyncio-0.15.1/.travis.yml 1970-01-01 01:00:00.000000000
+0100
@@ -1,20 +0,0 @@
-language: python
-
-matrix:
- include:
- - python: 3.5
- env: TOX_ENV=py35
- - python: 3.6
- env: TOX_ENV=py36
- - python: 3.7
- env: TOX_ENV=py37
- - python: 3.8
- env: TOX_ENV=py38
-
-install: pip install tox-travis coveralls
-
-script: tox -e $TOX_ENV
-
-after_success:
- - tox -e coverage-report
- - coveralls
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/Makefile
new/pytest-asyncio-0.15.1/Makefile
--- old/pytest-asyncio-0.14.0/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/Makefile 2021-04-22 01:04:04.000000000 +0200
@@ -0,0 +1,25 @@
+.PHONY: clean clean-build clean-pyc clean-test lint
+
+clean: clean-build clean-pyc clean-test ## remove all build, test, coverage
and Python artifacts
+
+clean-build: ## remove build artifacts
+ rm -fr build/
+ rm -fr dist/
+ rm -fr .eggs/
+ find . -name '*.egg-info' -exec rm -fr {} +
+ find . -name '*.egg' -exec rm -f {} +
+
+clean-pyc: ## remove Python file artifacts
+ find . -name '*.pyc' -exec rm -f {} +
+ find . -name '*.pyo' -exec rm -f {} +
+ find . -name '*~' -exec rm -f {} +
+ find . -name '__pycache__' -exec rm -fr {} +
+
+clean-test: ## remove test and coverage artifacts
+ rm -fr .tox/
+ rm -f .coverage
+ rm -fr htmlcov/
+
+lint: ## check style with flake8
+ flake8 pytest_asyncio tests
+ black --check --verbose pytest_asyncio tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/README.rst
new/pytest-asyncio-0.15.1/README.rst
--- old/pytest-asyncio-0.14.0/README.rst 2020-06-24 00:12:15.000000000
+0200
+++ new/pytest-asyncio-0.15.1/README.rst 2021-04-22 01:04:04.000000000
+0200
@@ -5,11 +5,13 @@
:target: https://pypi.python.org/pypi/pytest-asyncio
.. image:: https://travis-ci.org/pytest-dev/pytest-asyncio.svg?branch=master
:target: https://travis-ci.org/pytest-dev/pytest-asyncio
-.. image:: https://coveralls.io/repos/pytest-dev/pytest-asyncio/badge.svg
- :target: https://coveralls.io/r/pytest-dev/pytest-asyncio
+.. image::
https://codecov.io/gh/pytest-dev/pytest-asyncio/branch/master/graph/badge.svg
+ :target: https://codecov.io/gh/pytest-dev/pytest-asyncio
.. image:: https://img.shields.io/pypi/pyversions/pytest-asyncio.svg
:target: https://github.com/pytest-dev/pytest-asyncio
:alt: Supported Python versions
+.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
+ :target: https://github.com/ambv/black
pytest-asyncio is an Apache2 licensed library, written in Python, for testing
asyncio code with pytest.
@@ -127,19 +129,6 @@
Async fixtures need the event loop, and so must have the same or narrower scope
than the ``event_loop`` fixture.
-If you want to do this with Python 3.5, the ``yield`` statement must be
replaced with ``await yield_()`` and the coroutine
-function must be decorated with ``@async_generator``, like so:
-
-.. code-block:: python3
-
- from async_generator import yield_, async_generator
-
- @pytest.fixture
- @async_generator
- async def async_gen_fixture():
- await asyncio.sleep(0.1)
- await yield_('a value')
-
Markers
-------
@@ -175,7 +164,22 @@
Changelog
---------
-0.13.0 (2020-06-24)
+0.15.1 (2021-04-22)
+~~~~~~~~~~~~~~~~~~~
+- Hotfix for errors while closing event loops while replacing them.
+ `#209 <https://github.com/pytest-dev/pytest-asyncio/issues/209>`_
+ `#210 <https://github.com/pytest-dev/pytest-asyncio/issues/210>`_
+
+0.15.0 (2021-04-19)
+~~~~~~~~~~~~~~~~~~~
+- Add support for Python 3.9
+- Abandon support for Python 3.5. If you still require support for Python 3.5,
please use pytest-asyncio v0.14 or earlier.
+- Set ``unused_tcp_port_factory`` fixture scope to 'session'.
+ `#163 <https://github.com/pytest-dev/pytest-asyncio/pull/163>`_
+- Properly close event loops when replacing them.
+ `#208 <https://github.com/pytest-dev/pytest-asyncio/issues/208>`_
+
+0.14.0 (2020-06-24)
~~~~~~~~~~~~~~~~~~~
- Fix `#162 <https://github.com/pytest-dev/pytest-asyncio/issues/162>`_, and
``event_loop`` fixture behavior now is coherent on all scopes.
`#164 <https://github.com/pytest-dev/pytest-asyncio/pull/164>`_
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/pytest_asyncio/__init__.py
new/pytest-asyncio-0.15.1/pytest_asyncio/__init__.py
--- old/pytest-asyncio-0.14.0/pytest_asyncio/__init__.py 2020-06-24
00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/pytest_asyncio/__init__.py 2021-04-22
01:04:04.000000000 +0200
@@ -1,2 +1,2 @@
"""The main point for importing pytest-asyncio items."""
-__version__ = "0.14.0"
+__version__ = "0.15.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/pytest_asyncio/plugin.py
new/pytest-asyncio-0.15.1/pytest_asyncio/plugin.py
--- old/pytest-asyncio-0.14.0/pytest_asyncio/plugin.py 2020-06-24
00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/pytest_asyncio/plugin.py 2021-04-22
01:04:04.000000000 +0200
@@ -6,17 +6,17 @@
import socket
import pytest
+
try:
from _pytest.python import transfer_markers
except ImportError: # Pytest 4.1.0 removes the transfer_marker api (#104)
+
def transfer_markers(*args, **kwargs): # noqa
"""Noop when over pytest 4.1.0"""
pass
-try:
- from async_generator import isasyncgenfunction
-except ImportError:
- from inspect import isasyncgenfunction
+
+from inspect import isasyncgenfunction
def _is_coroutine(obj):
@@ -26,10 +26,12 @@
def pytest_configure(config):
"""Inject documentation."""
- config.addinivalue_line("markers",
- "asyncio: "
- "mark the test as a coroutine, it will be "
- "run using an asyncio event loop")
+ config.addinivalue_line(
+ "markers",
+ "asyncio: "
+ "mark the test as a coroutine, it will be "
+ "run using an asyncio event loop",
+ )
@pytest.mark.tryfirst
@@ -44,12 +46,13 @@
transfer_markers(obj, item.cls, item.module)
item = pytest.Function.from_parent(collector, name=name) # To reload
keywords.
- if 'asyncio' in item.keywords:
+ if "asyncio" in item.keywords:
return list(collector._genfunctions(name, obj))
class FixtureStripper:
"""Include additional Fixture, and then strip them"""
+
REQUEST = "request"
EVENT_LOOP = "event_loop"
@@ -59,10 +62,10 @@
def add(self, name):
"""Add fixture name to fixturedef
- and record in to_strip list (If not previously included)"""
+ and record in to_strip list (If not previously included)"""
if name in self.fixturedef.argnames:
return
- self.fixturedef.argnames += (name, )
+ self.fixturedef.argnames += (name,)
self.to_strip.add(name)
def get_and_strip_from(self, name, data_dict):
@@ -72,6 +75,7 @@
del data_dict[name]
return result
+
@pytest.hookimpl(trylast=True)
def pytest_fixture_post_finalizer(fixturedef, request):
"""Called after fixture teardown"""
@@ -80,7 +84,6 @@
asyncio.set_event_loop_policy(None)
-
@pytest.hookimpl(hookwrapper=True)
def pytest_fixture_setup(fixturedef, request):
"""Adjust the event loop policy when an event loop is produced."""
@@ -88,6 +91,13 @@
outcome = yield
loop = outcome.get_result()
policy = asyncio.get_event_loop_policy()
+ try:
+ old_loop = policy.get_event_loop()
+ if old_loop is not loop:
+ old_loop.close()
+ except RuntimeError:
+ # Swallow this, since it's probably bad event loop hygiene.
+ pass
policy.set_event_loop(loop)
return
@@ -99,10 +109,13 @@
fixture_stripper.add(FixtureStripper.EVENT_LOOP)
fixture_stripper.add(FixtureStripper.REQUEST)
-
def wrapper(*args, **kwargs):
- loop =
fixture_stripper.get_and_strip_from(FixtureStripper.EVENT_LOOP, kwargs)
- request =
fixture_stripper.get_and_strip_from(FixtureStripper.REQUEST, kwargs)
+ loop = fixture_stripper.get_and_strip_from(
+ FixtureStripper.EVENT_LOOP, kwargs
+ )
+ request = fixture_stripper.get_and_strip_from(
+ FixtureStripper.REQUEST, kwargs
+ )
gen_obj = generator(*args, **kwargs)
@@ -112,6 +125,7 @@
def finalizer():
"""Yield again, to finalize."""
+
async def async_finalizer():
try:
await gen_obj.__anext__()
@@ -121,6 +135,7 @@
msg = "Async generator fixture didn't stop."
msg += "Yield only once."
raise ValueError(msg)
+
loop.run_until_complete(async_finalizer())
request.addfinalizer(finalizer)
@@ -134,7 +149,9 @@
fixture_stripper.add(FixtureStripper.EVENT_LOOP)
def wrapper(*args, **kwargs):
- loop =
fixture_stripper.get_and_strip_from(FixtureStripper.EVENT_LOOP, kwargs)
+ loop = fixture_stripper.get_and_strip_from(
+ FixtureStripper.EVENT_LOOP, kwargs
+ )
async def setup():
res = await coro(*args, **kwargs)
@@ -152,16 +169,15 @@
Run asyncio marked test functions in an event loop instead of a normal
function call.
"""
- if 'asyncio' in pyfuncitem.keywords:
- if getattr(pyfuncitem.obj, 'is_hypothesis_test', False):
+ if "asyncio" in pyfuncitem.keywords:
+ if getattr(pyfuncitem.obj, "is_hypothesis_test", False):
pyfuncitem.obj.hypothesis.inner_test = wrap_in_sync(
pyfuncitem.obj.hypothesis.inner_test,
- _loop=pyfuncitem.funcargs['event_loop']
+ _loop=pyfuncitem.funcargs["event_loop"],
)
else:
pyfuncitem.obj = wrap_in_sync(
- pyfuncitem.obj,
- _loop=pyfuncitem.funcargs['event_loop']
+ pyfuncitem.obj, _loop=pyfuncitem.funcargs["event_loop"]
)
yield
@@ -184,22 +200,25 @@
if task.done() and not task.cancelled():
task.exception()
raise
+
return inner
def pytest_runtest_setup(item):
- if 'asyncio' in item.keywords:
+ if "asyncio" in item.keywords:
# inject an event loop fixture for all async tests
- if 'event_loop' in item.fixturenames:
- item.fixturenames.remove('event_loop')
- item.fixturenames.insert(0, 'event_loop')
- if item.get_closest_marker("asyncio") is not None \
- and not getattr(item.obj, 'hypothesis', False) \
- and getattr(item.obj, 'is_hypothesis_test', False):
- pytest.fail(
- 'test function `%r` is using Hypothesis, but pytest-asyncio '
- 'only works with Hypothesis 3.64.0 or later.' % item
- )
+ if "event_loop" in item.fixturenames:
+ item.fixturenames.remove("event_loop")
+ item.fixturenames.insert(0, "event_loop")
+ if (
+ item.get_closest_marker("asyncio") is not None
+ and not getattr(item.obj, "hypothesis", False)
+ and getattr(item.obj, "is_hypothesis_test", False)
+ ):
+ pytest.fail(
+ "test function `%r` is using Hypothesis, but pytest-asyncio "
+ "only works with Hypothesis 3.64.0 or later." % item
+ )
@pytest.fixture
@@ -213,7 +232,7 @@
def _unused_tcp_port():
"""Find an unused localhost TCP port from 1024-65535 and return it."""
with contextlib.closing(socket.socket()) as sock:
- sock.bind(('127.0.0.1', 0))
+ sock.bind(("127.0.0.1", 0))
return sock.getsockname()[1]
@@ -222,7 +241,7 @@
return _unused_tcp_port()
[email protected]
[email protected](scope="session")
def unused_tcp_port_factory():
"""A factory function, producing different unused TCP ports."""
produced = set()
@@ -237,4 +256,5 @@
produced.add(port)
return port
+
return factory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/setup.cfg
new/pytest-asyncio-0.15.1/setup.cfg
--- old/pytest-asyncio-0.14.0/setup.cfg 2020-06-24 00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/setup.cfg 2021-04-22 01:04:04.000000000 +0200
@@ -12,3 +12,6 @@
[metadata]
# ensure LICENSE is included in wheel metadata
license_file = LICENSE
+
+[flake8]
+ignore = E203, E501, W503
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/setup.py
new/pytest-asyncio-0.15.1/setup.py
--- old/pytest-asyncio-0.14.0/setup.py 2020-06-24 00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/setup.py 2021-04-22 01:04:04.000000000 +0200
@@ -33,20 +33,18 @@
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
- "Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
+ "Programming Language :: Python :: 3.9",
"Topic :: Software Development :: Testing",
"Framework :: Pytest",
],
- python_requires=">= 3.5",
+ python_requires=">= 3.6",
install_requires=["pytest >= 5.4.0"],
extras_require={
- ':python_version == "3.5"': "async_generator >= 1.3",
"testing": [
"coverage",
- "async_generator >= 1.3",
"hypothesis >= 5.7.1",
],
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_fixtures.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_fixtures.py
--- old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_fixtures.py
1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_fixtures.py
2021-04-22 01:04:04.000000000 +0200
@@ -0,0 +1,25 @@
+import asyncio
+import unittest.mock
+
+import pytest
+
+START = object()
+END = object()
+RETVAL = object()
+
+
[email protected]
+def mock():
+ return unittest.mock.Mock(return_value=RETVAL)
+
+
[email protected]
+async def async_fixture(mock):
+ return await asyncio.sleep(0.1, result=mock(START))
+
+
[email protected]
+async def test_async_fixture(async_fixture, mock):
+ assert mock.call_count == 1
+ assert mock.call_args_list[-1] == unittest.mock.call(START)
+ assert async_fixture is RETVAL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_fixtures_35.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_fixtures_35.py
--- old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_fixtures_35.py
2020-06-24 00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_fixtures_35.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,25 +0,0 @@
-import asyncio
-import unittest.mock
-
-import pytest
-
-START = object()
-END = object()
-RETVAL = object()
-
-
[email protected]
-def mock():
- return unittest.mock.Mock(return_value=RETVAL)
-
-
[email protected]
-async def async_fixture(mock):
- return await asyncio.sleep(0.1, result=mock(START))
-
-
[email protected]
-async def test_async_fixture(async_fixture, mock):
- assert mock.call_count == 1
- assert mock.call_args_list[-1] == unittest.mock.call(START)
- assert async_fixture is RETVAL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_fixtures_scope.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_fixtures_scope.py
--- old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_fixtures_scope.py
2020-06-24 00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_fixtures_scope.py
2021-04-22 01:04:04.000000000 +0200
@@ -3,16 +3,17 @@
module-scoped too.
"""
import asyncio
+
import pytest
[email protected](scope='module')
[email protected](scope="module")
def event_loop():
"""A module-scoped event loop."""
return asyncio.new_event_loop()
[email protected](scope='module')
[email protected](scope="module")
async def async_fixture():
await asyncio.sleep(0.1)
return 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_fixtures_with_finalizer.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_fixtures_with_finalizer.py
---
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_fixtures_with_finalizer.py
2020-06-24 00:12:15.000000000 +0200
+++
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_fixtures_with_finalizer.py
2021-04-22 01:04:04.000000000 +0200
@@ -1,5 +1,6 @@
import asyncio
import functools
+
import pytest
@@ -8,11 +9,13 @@
await asyncio.sleep(0.01)
assert port_with_event_loop_finalizer
+
@pytest.mark.asyncio
async def
test_module_with_get_event_loop_finalizer(port_with_get_event_loop_finalizer):
await asyncio.sleep(0.01)
assert port_with_get_event_loop_finalizer
+
@pytest.fixture(scope="module")
def event_loop():
"""Change event_loop fixture to module level."""
@@ -29,6 +32,7 @@
# await task using loop provided by event_loop fixture
# RuntimeError is raised if task is created on a different loop
await finalizer
+
event_loop.run_until_complete(port_afinalizer())
worker = asyncio.ensure_future(asyncio.sleep(0.2))
@@ -43,6 +47,7 @@
# await task using loop provided by asyncio.get_event_loop()
# RuntimeError is raised if task is created on a different loop
await finalizer
+
asyncio.get_event_loop().run_until_complete(port_afinalizer())
worker = asyncio.ensure_future(asyncio.sleep(0.2))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_gen_fixtures.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_gen_fixtures.py
--- old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_gen_fixtures.py
1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_gen_fixtures.py
2021-04-22 01:04:04.000000000 +0200
@@ -0,0 +1,38 @@
+import unittest.mock
+
+import pytest
+
+START = object()
+END = object()
+RETVAL = object()
+
+
[email protected](scope="module")
+def mock():
+ return unittest.mock.Mock(return_value=RETVAL)
+
+
[email protected]
+async def async_gen_fixture(mock):
+ try:
+ yield mock(START)
+ except Exception as e:
+ mock(e)
+ else:
+ mock(END)
+
+
[email protected]
+async def test_async_gen_fixture(async_gen_fixture, mock):
+ assert mock.called
+ assert mock.call_args_list[-1] == unittest.mock.call(START)
+ assert async_gen_fixture is RETVAL
+
+
[email protected]
+async def test_async_gen_fixture_finalized(mock):
+ try:
+ assert mock.called
+ assert mock.call_args_list[-1] == unittest.mock.call(END)
+ finally:
+ mock.reset_mock()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_gen_fixtures_35.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_gen_fixtures_35.py
---
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_gen_fixtures_35.py
2020-06-24 00:12:15.000000000 +0200
+++
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_gen_fixtures_35.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,40 +0,0 @@
-import unittest.mock
-
-import pytest
-from async_generator import yield_, async_generator
-
-START = object()
-END = object()
-RETVAL = object()
-
-
[email protected](scope='module')
-def mock():
- return unittest.mock.Mock(return_value=RETVAL)
-
-
[email protected]
-@async_generator
-async def async_gen_fixture(mock):
- try:
- await yield_(mock(START))
- except Exception as e:
- mock(e)
- else:
- mock(END)
-
-
[email protected]
-async def test_async_gen_fixture(async_gen_fixture, mock):
- assert mock.called
- assert mock.call_args_list[-1] == unittest.mock.call(START)
- assert async_gen_fixture is RETVAL
-
-
[email protected]
-async def test_async_gen_fixture_finalized(mock):
- try:
- assert mock.called
- assert mock.call_args_list[-1] == unittest.mock.call(END)
- finally:
- mock.reset_mock()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_gen_fixtures_36.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_gen_fixtures_36.py
---
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_async_gen_fixtures_36.py
2020-06-24 00:12:15.000000000 +0200
+++
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_async_gen_fixtures_36.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,39 +0,0 @@
-import asyncio
-import unittest.mock
-
-import pytest
-
-START = object()
-END = object()
-RETVAL = object()
-
-
[email protected](scope='module')
-def mock():
- return unittest.mock.Mock(return_value=RETVAL)
-
-
[email protected]
-async def async_gen_fixture(mock):
- try:
- yield mock(START)
- except Exception as e:
- mock(e)
- else:
- mock(END)
-
-
[email protected]
-async def test_async_gen_fixture(async_gen_fixture, mock):
- assert mock.called
- assert mock.call_args_list[-1] == unittest.mock.call(START)
- assert async_gen_fixture is RETVAL
-
-
[email protected]
-async def test_async_gen_fixture_finalized(mock):
- try:
- assert mock.called
- assert mock.call_args_list[-1] == unittest.mock.call(END)
- finally:
- mock.reset_mock()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_coroutine_fixtures.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_coroutine_fixtures.py
--- old/pytest-asyncio-0.14.0/tests/async_fixtures/test_coroutine_fixtures.py
2020-06-24 00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/async_fixtures/test_coroutine_fixtures.py
2021-04-22 01:04:04.000000000 +0200
@@ -7,7 +7,9 @@
END = object()
RETVAL = object()
-pytestmark = pytest.mark.skip(reason='@asyncio.coroutine fixtures are not
supported yet')
+pytestmark = pytest.mark.skip(
+ reason="@asyncio.coroutine fixtures are not supported yet"
+)
@pytest.fixture
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_nested.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_nested.py
--- old/pytest-asyncio-0.14.0/tests/async_fixtures/test_nested.py
1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/tests/async_fixtures/test_nested.py
2021-04-22 01:04:04.000000000 +0200
@@ -0,0 +1,26 @@
+import asyncio
+
+import pytest
+
+
[email protected]()
+async def async_inner_fixture():
+ await asyncio.sleep(0.01)
+ print("inner start")
+ yield True
+ print("inner stop")
+
+
[email protected]()
+async def async_fixture_outer(async_inner_fixture, event_loop):
+ await asyncio.sleep(0.01)
+ print("outer start")
+ assert async_inner_fixture is True
+ yield True
+ print("outer stop")
+
+
[email protected]
+async def test_async_fixture(async_fixture_outer):
+ assert async_fixture_outer is True
+ print("test_async_fixture")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/async_fixtures/test_nested_36.py
new/pytest-asyncio-0.15.1/tests/async_fixtures/test_nested_36.py
--- old/pytest-asyncio-0.14.0/tests/async_fixtures/test_nested_36.py
2020-06-24 00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/async_fixtures/test_nested_36.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,25 +0,0 @@
-import asyncio
-import pytest
-
-
[email protected]()
-async def async_inner_fixture():
- await asyncio.sleep(0.01)
- print('inner start')
- yield True
- print('inner stop')
-
-
[email protected]()
-async def async_fixture_outer(async_inner_fixture, event_loop):
- await asyncio.sleep(0.01)
- print('outer start')
- assert async_inner_fixture is True
- yield True
- print('outer stop')
-
-
[email protected]
-async def test_async_fixture(async_fixture_outer):
- assert async_fixture_outer is True
- print('test_async_fixture')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/tests/conftest.py
new/pytest-asyncio-0.15.1/tests/conftest.py
--- old/pytest-asyncio-0.14.0/tests/conftest.py 2020-06-24 00:12:15.000000000
+0200
+++ new/pytest-asyncio-0.15.1/tests/conftest.py 2021-04-22 01:04:04.000000000
+0200
@@ -1,13 +1,7 @@
import asyncio
-import sys
import pytest
-collect_ignore = []
-if sys.version_info[:2] < (3, 6):
- collect_ignore.append("async_fixtures/test_async_gen_fixtures_36.py")
- collect_ignore.append("async_fixtures/test_nested_36.py")
-
@pytest.fixture
def dependent_fixture(event_loop):
@@ -26,3 +20,11 @@
event_loop.run_until_complete(just_a_sleep())
assert counter == 2
+
+
[email protected](scope="session", name="factory_involving_factories")
+def factory_involving_factories_fixture(unused_tcp_port_factory):
+ def factory():
+ return unused_tcp_port_factory()
+
+ return factory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/markers/test_class_marker.py
new/pytest-asyncio-0.15.1/tests/markers/test_class_marker.py
--- old/pytest-asyncio-0.14.0/tests/markers/test_class_marker.py
1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/tests/markers/test_class_marker.py
2021-04-22 01:04:04.000000000 +0200
@@ -0,0 +1,25 @@
+"""Test if pytestmark works when defined on a class."""
+import asyncio
+
+import pytest
+
+
+class TestPyTestMark:
+ pytestmark = pytest.mark.asyncio
+
+ async def test_is_asyncio(self, event_loop, sample_fixture):
+ assert asyncio.get_event_loop()
+ counter = 1
+
+ async def inc():
+ nonlocal counter
+ counter += 1
+ await asyncio.sleep(0)
+
+ await asyncio.ensure_future(inc())
+ assert counter == 2
+
+
[email protected]
+def sample_fixture():
+ return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/markers/test_class_marker_35.py
new/pytest-asyncio-0.15.1/tests/markers/test_class_marker_35.py
--- old/pytest-asyncio-0.14.0/tests/markers/test_class_marker_35.py
2020-06-24 00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/markers/test_class_marker_35.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,23 +0,0 @@
-"""Test if pytestmark works when defined on a class."""
-import asyncio
-import pytest
-
-
-class TestPyTestMark:
- pytestmark = pytest.mark.asyncio
-
- async def test_is_asyncio(self, event_loop, sample_fixture):
- assert asyncio.get_event_loop()
- counter = 1
-
- async def inc():
- nonlocal counter
- counter += 1
- await asyncio.sleep(0)
- await asyncio.ensure_future(inc())
- assert counter == 2
-
-
[email protected]
-def sample_fixture():
- return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/markers/test_module_marker.py
new/pytest-asyncio-0.15.1/tests/markers/test_module_marker.py
--- old/pytest-asyncio-0.14.0/tests/markers/test_module_marker.py
1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/tests/markers/test_module_marker.py
2021-04-22 01:04:04.000000000 +0200
@@ -0,0 +1,39 @@
+"""Test if pytestmark works when defined in a module."""
+import asyncio
+
+import pytest
+
+pytestmark = pytest.mark.asyncio
+
+
+class TestPyTestMark:
+ async def test_is_asyncio(self, event_loop, sample_fixture):
+ assert asyncio.get_event_loop()
+
+ counter = 1
+
+ async def inc():
+ nonlocal counter
+ counter += 1
+ await asyncio.sleep(0)
+
+ await asyncio.ensure_future(inc())
+ assert counter == 2
+
+
+async def test_is_asyncio(event_loop, sample_fixture):
+ assert asyncio.get_event_loop()
+ counter = 1
+
+ async def inc():
+ nonlocal counter
+ counter += 1
+ await asyncio.sleep(0)
+
+ await asyncio.ensure_future(inc())
+ assert counter == 2
+
+
[email protected]
+def sample_fixture():
+ return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/markers/test_module_marker_35.py
new/pytest-asyncio-0.15.1/tests/markers/test_module_marker_35.py
--- old/pytest-asyncio-0.14.0/tests/markers/test_module_marker_35.py
2020-06-24 00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/markers/test_module_marker_35.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,37 +0,0 @@
-"""Test if pytestmark works when defined in a module."""
-import asyncio
-
-import pytest
-
-pytestmark = pytest.mark.asyncio
-
-
-class TestPyTestMark:
- async def test_is_asyncio(self, event_loop, sample_fixture):
- assert asyncio.get_event_loop()
-
- counter = 1
-
- async def inc():
- nonlocal counter
- counter += 1
- await asyncio.sleep(0)
-
- await asyncio.ensure_future(inc())
- assert counter == 2
-
-
-async def test_is_asyncio(event_loop, sample_fixture):
- assert asyncio.get_event_loop()
- counter = 1
- async def inc():
- nonlocal counter
- counter += 1
- await asyncio.sleep(0)
- await asyncio.ensure_future(inc())
- assert counter == 2
-
-
[email protected]
-def sample_fixture():
- return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/tests/multiloop/conftest.py
new/pytest-asyncio-0.15.1/tests/multiloop/conftest.py
--- old/pytest-asyncio-0.14.0/tests/multiloop/conftest.py 2020-06-24
00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/multiloop/conftest.py 2021-04-22
01:04:04.000000000 +0200
@@ -5,6 +5,7 @@
class CustomSelectorLoop(asyncio.SelectorEventLoop):
"""A subclass with no overrides, just to test for presence."""
+
pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/tests/sessionloop/conftest.py
new/pytest-asyncio-0.15.1/tests/sessionloop/conftest.py
--- old/pytest-asyncio-0.14.0/tests/sessionloop/conftest.py 1970-01-01
01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/tests/sessionloop/conftest.py 2021-04-22
01:04:04.000000000 +0200
@@ -0,0 +1,19 @@
+import asyncio
+
+import pytest
+
+
+class CustomSelectorLoopSession(asyncio.SelectorEventLoop):
+ """A subclass with no overrides, just to test for presence."""
+
+ pass
+
+
+loop = CustomSelectorLoopSession()
+
+
[email protected](scope="package")
+def event_loop():
+ """Create an instance of the default event loop for each test case."""
+ yield loop
+ loop.close()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/sessionloop/test_session_loops.py
new/pytest-asyncio-0.15.1/tests/sessionloop/test_session_loops.py
--- old/pytest-asyncio-0.14.0/tests/sessionloop/test_session_loops.py
1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/tests/sessionloop/test_session_loops.py
2021-04-22 01:04:04.000000000 +0200
@@ -0,0 +1,16 @@
+"""Unit tests for overriding the event loop with a session scoped one."""
+import asyncio
+
+import pytest
+
+
[email protected]
+async def test_for_custom_loop():
+ """This test should be executed using the custom loop."""
+ await asyncio.sleep(0.01)
+ assert type(asyncio.get_event_loop()).__name__ ==
"CustomSelectorLoopSession"
+
+
[email protected]
+async def test_dependent_fixture(dependent_fixture):
+ await asyncio.sleep(0.1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/test_dependent_fixtures.py
new/pytest-asyncio-0.15.1/tests/test_dependent_fixtures.py
--- old/pytest-asyncio-0.14.0/tests/test_dependent_fixtures.py 2020-06-24
00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/test_dependent_fixtures.py 2021-04-22
01:04:04.000000000 +0200
@@ -6,3 +6,8 @@
async def test_dependent_fixture(dependent_fixture):
"""Test a dependent fixture."""
await asyncio.sleep(0.1)
+
+
[email protected]
+async def test_factory_involving_factories(factory_involving_factories):
+ factory_involving_factories()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/tests/test_event_loop_scope.py
new/pytest-asyncio-0.15.1/tests/test_event_loop_scope.py
--- old/pytest-asyncio-0.14.0/tests/test_event_loop_scope.py 1970-01-01
01:00:00.000000000 +0100
+++ new/pytest-asyncio-0.15.1/tests/test_event_loop_scope.py 2021-04-22
01:04:04.000000000 +0200
@@ -0,0 +1,22 @@
+"""Test the event loop fixture is properly disposed of.
+
+These tests need to be run together.
+"""
+import asyncio
+
+import pytest
+
+
+def test_1():
+ loop = asyncio.get_event_loop()
+ assert not loop.is_closed()
+
+
[email protected]
+async def test_2():
+ pass
+
+
+def test_3():
+ loop = asyncio.get_event_loop()
+ assert not loop.is_closed()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest-asyncio-0.14.0/tests/test_event_loop_scope_35.py
new/pytest-asyncio-0.15.1/tests/test_event_loop_scope_35.py
--- old/pytest-asyncio-0.14.0/tests/test_event_loop_scope_35.py 2020-06-24
00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/test_event_loop_scope_35.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,21 +0,0 @@
-"""Test the event loop fixture is properly disposed of.
-
-These tests need to be run together.
-"""
-import asyncio
-import pytest
-
-
-def test_1():
- loop = asyncio.get_event_loop()
- assert not loop.is_closed()
-
-
[email protected]
-async def test_2():
- pass
-
-
-def test_3():
- loop = asyncio.get_event_loop()
- assert not loop.is_closed()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/tests/test_simple.py
new/pytest-asyncio-0.15.1/tests/test_simple.py
--- old/pytest-asyncio-0.14.0/tests/test_simple.py 2020-06-24
00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/test_simple.py 2021-04-22
01:04:04.000000000 +0200
@@ -1,20 +1,20 @@
"""Quick'n'dirty unit tests for provided fixtures and markers."""
import asyncio
-import pytest
+import pytest
import pytest_asyncio.plugin
async def async_coro():
await asyncio.sleep(0)
- return 'ok'
+ 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())
- assert ret == 'ok'
+ assert ret == "ok"
@pytest.mark.asyncio
@@ -23,7 +23,7 @@
await asyncio.sleep(0)
[email protected](reason='need a failure', strict=True)
[email protected](reason="need a failure", strict=True)
@pytest.mark.asyncio
def test_asyncio_marker_fail():
assert False
@@ -42,12 +42,10 @@
async def closer(_, writer):
writer.close()
- server1 = await asyncio.start_server(closer, host='localhost',
- port=unused_tcp_port)
+ server1 = await asyncio.start_server(closer, host="localhost",
port=unused_tcp_port)
with pytest.raises(IOError):
- await asyncio.start_server(closer, host='localhost',
- port=unused_tcp_port)
+ await asyncio.start_server(closer, host="localhost",
port=unused_tcp_port)
server1.close()
await server1.wait_closed()
@@ -60,20 +58,19 @@
async def closer(_, writer):
writer.close()
- port1, port2, port3 = (unused_tcp_port_factory(),
unused_tcp_port_factory(),
- unused_tcp_port_factory())
-
- server1 = await asyncio.start_server(closer, host='localhost',
- port=port1)
- server2 = await asyncio.start_server(closer, host='localhost',
- port=port2)
- server3 = await asyncio.start_server(closer, host='localhost',
- port=port3)
+ port1, port2, port3 = (
+ unused_tcp_port_factory(),
+ unused_tcp_port_factory(),
+ unused_tcp_port_factory(),
+ )
+
+ server1 = await asyncio.start_server(closer, host="localhost", port=port1)
+ server2 = await asyncio.start_server(closer, host="localhost", port=port2)
+ server3 = await asyncio.start_server(closer, host="localhost", port=port3)
for port in port1, port2, port3:
with pytest.raises(IOError):
- await asyncio.start_server(closer, host='localhost',
- port=port)
+ await asyncio.start_server(closer, host="localhost", port=port)
server1.close()
await server1.wait_closed()
@@ -96,8 +93,7 @@
else:
return 10000 + counter
- monkeypatch.setattr(pytest_asyncio.plugin, '_unused_tcp_port',
- mock_unused_tcp_port)
+ monkeypatch.setattr(pytest_asyncio.plugin, "_unused_tcp_port",
mock_unused_tcp_port)
assert unused_tcp_port_factory() == 10000
assert unused_tcp_port_factory() > 10000
@@ -110,7 +106,7 @@
async def test_asyncio_marker_method(self, event_loop):
"""Test the asyncio pytest marker in a Test class."""
ret = await async_coro()
- assert ret == 'ok'
+ assert ret == "ok"
class TestUnexistingLoop:
@@ -125,7 +121,7 @@
async def test_asyncio_marker_without_loop(self, remove_loop):
"""Test the asyncio pytest marker in a Test class."""
ret = await async_coro()
- assert ret == 'ok'
+ assert ret == "ok"
class TestEventLoopStartedBeforeFixtures:
@@ -150,7 +146,11 @@
assert await loop.run_in_executor(None, self.foo) == 1
-
@pytest.mark.asyncio
async def test_no_warning_on_skip():
pytest.skip("Test a skip error inside asyncio")
+
+
+def test_async_close_loop(event_loop):
+ event_loop.close()
+ return "ok"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/tests/test_simple_35.py
new/pytest-asyncio-0.15.1/tests/test_simple_35.py
--- old/pytest-asyncio-0.14.0/tests/test_simple_35.py 2020-06-24
00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/test_simple_35.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,83 +0,0 @@
-"""Quick'n'dirty unit tests using async and await syntax."""
-import asyncio
-
-import pytest
-
-
[email protected]
-async def async_coro(loop):
- await asyncio.sleep(0)
- return 'ok'
-
-
[email protected]
-async def test_asyncio_marker():
- """Test the asyncio pytest marker."""
-
-
[email protected]
-async def test_asyncio_marker_with_default_param(a_param=None):
- """Test the asyncio pytest marker."""
-
-
[email protected]
-async def test_unused_port_fixture(unused_tcp_port, event_loop):
- """Test the unused TCP port fixture."""
- async def closer(_, writer):
- writer.close()
-
- server1 = await asyncio.start_server(closer, host='localhost',
- port=unused_tcp_port)
-
- server1.close()
- await server1.wait_closed()
-
-
-def test_unused_port_factory_fixture(unused_tcp_port_factory, event_loop):
- """Test the unused TCP port factory fixture."""
-
- async def closer(_, writer):
- writer.close()
-
- port1, port2, port3 = (unused_tcp_port_factory(),
unused_tcp_port_factory(),
- unused_tcp_port_factory())
-
- async def run_test():
- server1 = await asyncio.start_server(closer, host='localhost',
- port=port1)
- server2 = await asyncio.start_server(closer, host='localhost',
- port=port2)
- server3 = await asyncio.start_server(closer, host='localhost',
- port=port3)
-
- for port in port1, port2, port3:
- with pytest.raises(IOError):
- await asyncio.start_server(closer, host='localhost',
- port=port)
-
- server1.close()
- await server1.wait_closed()
- server2.close()
- await server2.wait_closed()
- server3.close()
- await server3.wait_closed()
-
- event_loop.run_until_complete(run_test())
-
- event_loop.stop()
- event_loop.close()
-
-
-class Test:
- """Test that asyncio marked functions work in test methods."""
-
- @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)
- assert ret == 'ok'
-
-
-def test_async_close_loop(event_loop):
- event_loop.close()
- return 'ok'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/tests/test_subprocess.py
new/pytest-asyncio-0.15.1/tests/test_subprocess.py
--- old/pytest-asyncio-0.14.0/tests/test_subprocess.py 2020-06-24
00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tests/test_subprocess.py 2021-04-22
01:04:04.000000000 +0200
@@ -1,12 +1,11 @@
"""Tests for using subprocesses in tests."""
-import sys
import asyncio
import asyncio.subprocess
+import sys
import pytest
-
-if sys.platform == 'win32':
+if sys.platform == "win32":
# The default asyncio event loop implementation on Windows does not
# support subprocesses. Subprocesses are available for Windows if a
# ProactorEventLoop is used.
@@ -21,7 +20,8 @@
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)
+ sys.executable, "--version", stdout=asyncio.subprocess.PIPE
+ )
await proc.communicate()
@@ -29,5 +29,6 @@
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)
+ sys.executable, "--version", stdout=asyncio.subprocess.PIPE
+ )
await proc.communicate()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest-asyncio-0.14.0/tox.ini
new/pytest-asyncio-0.15.1/tox.ini
--- old/pytest-asyncio-0.14.0/tox.ini 2020-06-24 00:12:15.000000000 +0200
+++ new/pytest-asyncio-0.15.1/tox.ini 2021-04-22 01:04:04.000000000 +0200
@@ -1,15 +1,33 @@
[tox]
minversion = 3.14.0
-envlist = py35, py36, py37, py38
+envlist = py36, py37, py38, py39, lint
skip_missing_interpreters = true
[testenv]
extras = testing
commands = coverage run -m pytest {posargs}
+[testenv:lint]
+skip_install = true
+basepython = python3.9
+extras = tests
+deps =
+ flake8
+ black
+commands =
+ make lint
+
[testenv:coverage-report]
deps = coverage
skip_install = true
commands =
coverage combine
coverage report
+
+[gh-actions]
+python =
+ 3.6: py36
+ 3.7: py37
+ 3.8: py38
+ 3.9: py39, lint
+ pypy3: pypy3