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