Skip to content

Commit 81b91f1

Browse files
authored
Merge pull request #63 from tyerq/feature/asyncio-reactor-support
add support for asyncioreactor with --reactor=asyncio
2 parents 9626a90 + 92cafdb commit 81b91f1

File tree

4 files changed

+64
-7
lines changed

4 files changed

+64
-7
lines changed

appveyor.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,22 @@ environment:
1414
- TOXENV: py34-defaultreactor
1515
PYTHON: "C:\\Python34-x64"
1616

17-
- TOXENV: py35-defaultreactor, win-py35-qt5reactor
17+
- TOXENV: py35-defaultreactor, win-py35-qt5reactor, py35-asyncioreactor
1818
PYTHON: "C:\\Python35"
1919

20-
- TOXENV: py35-defaultreactor, win-py35-qt5reactor
20+
- TOXENV: py35-defaultreactor, win-py35-qt5reactor, py35-asyncioreactor
2121
PYTHON: "C:\\Python35-x64"
2222

23-
- TOXENV: py36-defaultreactor, win-py36-qt5reactor
23+
- TOXENV: py36-defaultreactor, win-py36-qt5reactor, py36-asyncioreactor
2424
PYTHON: "C:\\Python36"
2525

26-
- TOXENV: py36-defaultreactor, win-py36-qt5reactor
26+
- TOXENV: py36-defaultreactor, win-py36-qt5reactor, py36-asyncioreactor
2727
PYTHON: "C:\\Python36-x64"
2828

29-
- TOXENV: py37-defaultreactor, win-py37-qt5reactor
29+
- TOXENV: py37-defaultreactor, win-py37-qt5reactor, py37-asyncioreactor
3030
PYTHON: "C:\\Python37"
3131

32-
- TOXENV: py37-defaultreactor, win-py37-qt5reactor
32+
- TOXENV: py37-defaultreactor, win-py37-qt5reactor, py37-asyncioreactor
3333
PYTHON: "C:\\Python37-x64"
3434

3535
install:

pytest_twisted.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,19 @@ def init_qt5_reactor():
168168
)
169169

170170

171+
def init_asyncio_reactor():
172+
from twisted.internet import asyncioreactor
173+
174+
_install_reactor(
175+
reactor_installer=asyncioreactor.install,
176+
reactor_type=asyncioreactor.AsyncioSelectorReactor,
177+
)
178+
179+
171180
reactor_installers = {
172181
"default": init_default_reactor,
173182
"qt5reactor": init_qt5_reactor,
183+
"asyncio": init_asyncio_reactor,
174184
}
175185

176186

testing/test_basic.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,3 +447,49 @@ def main():
447447
assert_outcomes(rr, {"passed": 1, "failed": 1})
448448
# test embedded mode:
449449
assert testdir.run(sys.executable, "runner.py").ret == 0
450+
451+
452+
def test_blockon_in_hook_with_asyncio(testdir, cmd_opts, request):
453+
skip_if_reactor_not(request, "asyncio")
454+
conftest_file = """
455+
import pytest_twisted as pt
456+
from twisted.internet import defer
457+
458+
def pytest_configure(config):
459+
pt.init_asyncio_reactor()
460+
d = defer.Deferred()
461+
462+
from twisted.internet import reactor
463+
464+
reactor.callLater(0.01, d.callback, 1)
465+
pt.blockon(d)
466+
"""
467+
testdir.makeconftest(conftest_file)
468+
test_file = """
469+
from twisted.internet import reactor, defer
470+
471+
def test_succeed():
472+
d = defer.Deferred()
473+
reactor.callLater(0.01, d.callback, 1)
474+
return d
475+
"""
476+
testdir.makepyfile(test_file)
477+
rr = testdir.run(sys.executable, "-m", "pytest", "-v", *cmd_opts)
478+
assert_outcomes(rr, {"passed": 1})
479+
480+
481+
def test_wrong_reactor_with_asyncio(testdir, cmd_opts, request):
482+
skip_if_reactor_not(request, "asyncio")
483+
conftest_file = """
484+
def pytest_addhooks():
485+
import twisted.internet.default
486+
twisted.internet.default.install()
487+
"""
488+
testdir.makeconftest(conftest_file)
489+
test_file = """
490+
def test_succeed():
491+
pass
492+
"""
493+
testdir.makepyfile(test_file)
494+
rr = testdir.run(sys.executable, "-m", "pytest", "-v", *cmd_opts)
495+
assert "WrongReactorAlreadyInstalledError" in rr.stderr.str()

tox.ini

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[tox]
22
envlist=
33
py{27,34}-defaultreactor
4-
py{35,36,37}-{default,qt5}reactor
4+
py{35,36,37}-{default,qt5,asyncio}reactor
55
win-py{35,36,37}-qt5reactor
66
linting
77

@@ -18,6 +18,7 @@ deps=
1818
commands=
1919
defaultreactor: pytest --reactor=default
2020
qt5reactor: pytest --reactor=qt5reactor
21+
asyncioreactor: pytest --reactor=asyncio
2122
sitepackages=False
2223

2324
[testenv:linting]

0 commit comments

Comments
 (0)