|
|
3df28f9 |
From 4b3294d5075489fc9ebf8046c3604e88a3679275 Mon Sep 17 00:00:00 2001
|
|
|
3df28f9 |
From: Julien Enselme <jenselme@localhost.localdomain>
|
|
|
3df28f9 |
Date: Mon, 10 Oct 2016 15:11:56 +0200
|
|
|
3df28f9 |
Subject: [PATCH] Revert "Event loop policy now set by a fixture setup hook
|
|
|
3df28f9 |
wrapper."
|
|
|
3df28f9 |
|
|
|
3df28f9 |
This reverts commit 8dfe3313d7c21be70006c80fcae15ed2b0dd94e8.
|
|
|
3df28f9 |
---
|
|
|
3df28f9 |
pytest_asyncio/plugin.py | 41 +++++++++++++++-------------------------
|
|
|
3df28f9 |
setup.py | 2 +-
|
|
|
3df28f9 |
tests/test_dependent_fixtures.py | 19 -------------------
|
|
|
3df28f9 |
3 files changed, 16 insertions(+), 46 deletions(-)
|
|
|
3df28f9 |
|
|
|
3df28f9 |
diff --git a/pytest_asyncio/plugin.py b/pytest_asyncio/plugin.py
|
|
|
3df28f9 |
index 84a2547..92c8c2f 100644
|
|
|
3df28f9 |
--- a/pytest_asyncio/plugin.py
|
|
|
3df28f9 |
+++ b/pytest_asyncio/plugin.py
|
|
|
3df28f9 |
@@ -49,29 +49,6 @@ def pytest_pycollect_makeitem(collector, name, obj):
|
|
|
3df28f9 |
return list(collector._genfunctions(name, obj))
|
|
|
3df28f9 |
|
|
|
3df28f9 |
|
|
|
3df28f9 |
-@pytest.hookimpl(hookwrapper=True)
|
|
|
3df28f9 |
-def pytest_fixture_setup(fixturedef, request):
|
|
|
3df28f9 |
- """Adjust the event loop policy when an event loop is produced."""
|
|
|
3df28f9 |
- outcome = yield
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
- if fixturedef.argname == "event_loop" and 'asyncio' in request.keywords:
|
|
|
3df28f9 |
- loop = outcome.get_result()
|
|
|
3df28f9 |
- for kw in _markers_2_fixtures.keys():
|
|
|
3df28f9 |
- if kw not in request.keywords:
|
|
|
3df28f9 |
- continue
|
|
|
3df28f9 |
- forbid_global_loop = (request.keywords[kw].kwargs
|
|
|
3df28f9 |
- .get('forbid_global_loop', False))
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
- policy = asyncio.get_event_loop_policy()
|
|
|
3df28f9 |
- if forbid_global_loop:
|
|
|
3df28f9 |
- asyncio.set_event_loop_policy(ForbiddenEventLoopPolicy())
|
|
|
3df28f9 |
- fixturedef.addfinalizer(lambda: asyncio.set_event_loop_policy(policy))
|
|
|
3df28f9 |
- else:
|
|
|
3df28f9 |
- policy.set_event_loop(loop)
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
- return outcome
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
@pytest.mark.tryfirst
|
|
|
3df28f9 |
def pytest_pyfunc_call(pyfuncitem):
|
|
|
3df28f9 |
"""
|
|
|
3df28f9 |
@@ -82,12 +59,24 @@ def pytest_pyfunc_call(pyfuncitem):
|
|
|
3df28f9 |
if marker_name in pyfuncitem.keywords:
|
|
|
3df28f9 |
event_loop = pyfuncitem.funcargs[fixture_name]
|
|
|
3df28f9 |
|
|
|
3df28f9 |
+ forbid_global_loop = pyfuncitem.keywords[marker_name].kwargs.get('forbid_global_loop')
|
|
|
3df28f9 |
+
|
|
|
3df28f9 |
+ policy = asyncio.get_event_loop_policy()
|
|
|
3df28f9 |
+ if forbid_global_loop:
|
|
|
3df28f9 |
+ asyncio.set_event_loop_policy(ForbiddenEventLoopPolicy())
|
|
|
3df28f9 |
+ else:
|
|
|
3df28f9 |
+ policy.set_event_loop(event_loop)
|
|
|
3df28f9 |
+
|
|
|
3df28f9 |
funcargs = pyfuncitem.funcargs
|
|
|
3df28f9 |
testargs = {arg: funcargs[arg]
|
|
|
3df28f9 |
for arg in pyfuncitem._fixtureinfo.argnames}
|
|
|
3df28f9 |
- event_loop.run_until_complete(
|
|
|
3df28f9 |
- asyncio.async(pyfuncitem.obj(**testargs), loop=event_loop))
|
|
|
3df28f9 |
- return True
|
|
|
3df28f9 |
+ try:
|
|
|
3df28f9 |
+ event_loop.run_until_complete(
|
|
|
3df28f9 |
+ asyncio.async(pyfuncitem.obj(**testargs), loop=event_loop))
|
|
|
3df28f9 |
+ return True
|
|
|
3df28f9 |
+ finally:
|
|
|
3df28f9 |
+ if forbid_global_loop:
|
|
|
3df28f9 |
+ asyncio.set_event_loop_policy(policy)
|
|
|
3df28f9 |
|
|
|
3df28f9 |
|
|
|
3df28f9 |
def pytest_runtest_setup(item):
|
|
|
3df28f9 |
diff --git a/setup.py b/setup.py
|
|
|
3df28f9 |
index 8dbcb17..b089eb8 100644
|
|
|
3df28f9 |
--- a/setup.py
|
|
|
3df28f9 |
+++ b/setup.py
|
|
|
3df28f9 |
@@ -42,7 +42,7 @@ setup(
|
|
|
3df28f9 |
"Framework :: Pytest",
|
|
|
3df28f9 |
],
|
|
|
3df28f9 |
install_requires=[
|
|
|
3df28f9 |
- 'pytest >= 3.0.2',
|
|
|
3df28f9 |
+ 'pytest',
|
|
|
3df28f9 |
],
|
|
|
3df28f9 |
extras_require={
|
|
|
3df28f9 |
':python_version == "3.3"': ['asyncio']
|
|
|
3df28f9 |
diff --git a/tests/test_dependent_fixtures.py b/tests/test_dependent_fixtures.py
|
|
|
3df28f9 |
index 018c482..b12ef3b 100644
|
|
|
3df28f9 |
--- a/tests/test_dependent_fixtures.py
|
|
|
3df28f9 |
+++ b/tests/test_dependent_fixtures.py
|
|
|
3df28f9 |
@@ -7,22 +7,3 @@ import pytest
|
|
|
3df28f9 |
def test_dependent_fixture(dependent_fixture):
|
|
|
3df28f9 |
"""Test a dependent fixture."""
|
|
|
3df28f9 |
yield from asyncio.sleep(0.1)
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
-@pytest.fixture
|
|
|
3df28f9 |
-def assert_no_global_loop(event_loop):
|
|
|
3df28f9 |
- """A dummy fixture, to assert the event loop policy has been set."""
|
|
|
3df28f9 |
- assert event_loop
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
- with pytest.raises(NotImplementedError):
|
|
|
3df28f9 |
- asyncio.get_event_loop()
|
|
|
3df28f9 |
- yield
|
|
|
3df28f9 |
- with pytest.raises(NotImplementedError):
|
|
|
3df28f9 |
- asyncio.get_event_loop()
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
-
|
|
|
3df28f9 |
-@pytest.mark.asyncio(forbid_global_loop=True)
|
|
|
3df28f9 |
-@asyncio.coroutine
|
|
|
3df28f9 |
-def test_fixture_no_global_loop(assert_no_global_loop):
|
|
|
3df28f9 |
- """The fixture will assert the correct policy has been set."""
|
|
|
3df28f9 |
- pass
|
|
|
3df28f9 |
\ No newline at end of file
|
|
|
3df28f9 |
--
|
|
|
3df28f9 |
2.9.3
|
|
|
3df28f9 |
|