Skip to content

Commit edcac00

Browse files
committed
init_reactor() -> init_default_reactor() and do reactor type checking
1 parent 277b3d1 commit edcac00

File tree

2 files changed

+52
-9
lines changed

2 files changed

+52
-9
lines changed

pytest_twisted.py

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import inspect
2+
13
import decorator
24
import greenlet
35
import pytest
@@ -117,26 +119,53 @@ def twisted_greenlet(request, reactor):
117119
return _instances.gr_twisted
118120

119121

120-
def init_reactor():
122+
def init_default_reactor():
123+
import twisted.internet.default
124+
125+
module = inspect.getmodule(twisted.internet.default.install)
126+
127+
module_name = module.__name__.split('.')[-1]
128+
reactor_type_name, = (
129+
x
130+
for x in dir(module)
131+
if x.lower() == module_name
132+
)
133+
reactor_type = getattr(module, reactor_type_name)
134+
135+
_install_reactor(
136+
reactor_installer=twisted.internet.default.install,
137+
reactor_type=reactor_type,
138+
)
139+
140+
141+
def init_qt5_reactor(qapp):
142+
import qt5reactor
143+
144+
_install_reactor(
145+
reactor_installer=qt5reactor.install,
146+
reactor_type=qt5reactor.QtReactor,
147+
)
148+
149+
150+
def _init_reactor():
121151
import twisted.internet.reactor
122152
_instances.reactor = twisted.internet.reactor
123153
init_twisted_greenlet()
124154

125155

126-
def init_qt5_reactor(qapp):
127-
import qt5reactor
156+
def _install_reactor(reactor_installer, reactor_type):
128157
try:
129-
qt5reactor.install()
158+
reactor_installer()
130159
except error.ReactorAlreadyInstalledError:
131160
import twisted.internet.reactor
132-
if not isinstance(twisted.internet.reactor, qt5reactor.QtReactor):
161+
if not isinstance(twisted.internet.reactor, reactor_type):
133162
raise WrongReactorAlreadyInstalledError(
134163
'expected {0} but found {1}'.format(
135-
qt5reactor.QtReactor,
164+
reactor_type,
136165
type(twisted.internet.reactor),
137166
)
138167
)
139-
init_reactor()
168+
_init_reactor()
140169

141170

142171
def pytest_addoption(parser):
@@ -150,7 +179,7 @@ def pytest_addoption(parser):
150179

151180
def pytest_configure(config):
152181
reactor_fixture = {
153-
'default': init_reactor,
182+
'default': init_default_reactor,
154183
'qt5reactor': init_qt5_reactor,
155184
}[config.getoption('reactor')]
156185

testing/test_basic.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ def test_blockon_in_hook(testdir):
145145
from twisted.internet import reactor, defer
146146
147147
def pytest_configure(config):
148-
pt.init_reactor()
148+
pt.init_default_reactor()
149149
d = defer.Deferred()
150150
reactor.callLater(0.01, d.callback, 1)
151151
pt.blockon(d)
@@ -162,6 +162,20 @@ def test_succeed():
162162
assert_outcomes(rr, {'passed': 1})
163163

164164

165+
@skip_if_reactor_not('default')
166+
def test_wrong_reactor(testdir):
167+
testdir.makepyfile("""
168+
import twisted.internet.reactor
169+
twisted.internet.reactor = None
170+
171+
def test_succeed():
172+
pass
173+
""")
174+
rr = testdir.run(sys.executable, "-m", "pytest", "-v")
175+
assert 'WrongReactorAlreadyInstalledError' in rr.stdout.str()
176+
assert_outcomes(rr, {'error': 1})
177+
178+
165179
@skip_if_reactor_not('qt5reactor')
166180
def test_blockon_in_hook_with_qt5reactor(testdir):
167181
testdir.makeconftest("""

0 commit comments

Comments
 (0)