Skip to content

Commit a5eefc2

Browse files
committed
Use objects and pass SystemExit error codes
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
1 parent 6870362 commit a5eefc2

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

bpython/curtsiesfrontend/coderunner.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ class Unfinished(RequestFromCodeGreenlet):
5050
class SystemExitRequest(RequestFromCodeGreenlet):
5151
"""Running code raised a SystemExit"""
5252

53+
def __init__(self, args):
54+
self.args = args
55+
5356

5457
class CodeRunner(object):
5558
"""Runs user code in an interpreter.
@@ -139,22 +142,22 @@ def run_code(self, for_code=None):
139142
request = self.code_greenlet.switch(for_code)
140143

141144
logger.debug('request received from code was %r', request)
142-
if not issubclass(request, RequestFromCodeGreenlet):
145+
if not isinstance(request, RequestFromCodeGreenlet):
143146
raise ValueError("Not a valid value from code greenlet: %r" %
144147
request)
145-
if request in [Wait, Refresh]:
148+
if isinstance(request, (Wait, Refresh)):
146149
self.code_is_waiting = True
147-
if request == Refresh:
150+
if isinstance(request, Refresh):
148151
self.request_refresh()
149152
return False
150-
elif request in [Done, Unfinished]:
153+
elif isinstance(request, (Done, Unfinished)):
151154
self._unload_code()
152155
signal.signal(signal.SIGINT, self.orig_sigint_handler)
153156
self.orig_sigint_handler = None
154157
return request
155-
elif request in [SystemExitRequest]:
158+
elif isinstance(request, SystemExitRequest):
156159
self._unload_code()
157-
raise SystemExitFromCodeGreenlet()
160+
raise SystemExitFromCodeGreenlet(request.args)
158161

159162
def sigint_handler(self, *args):
160163
"""SIGINT handler to use while code is running or request being
@@ -170,19 +173,19 @@ def sigint_handler(self, *args):
170173
def _blocking_run_code(self):
171174
try:
172175
unfinished = self.interp.runsource(self.source)
173-
except SystemExit:
174-
return SystemExitRequest
175-
return Unfinished if unfinished else Done
176+
except SystemExit as e:
177+
return SystemExitRequest(e.args)
178+
return Unfinished() if unfinished else Done()
176179

177180
def request_from_main_greenlet(self, force_refresh=False):
178181
"""Return the argument passed in to .run_code(for_code)
179182
180183
Nothing means calls to run_code must be... ???
181184
"""
182185
if force_refresh:
183-
value = self.main_greenlet.switch(Refresh)
186+
value = self.main_greenlet.switch(Refresh())
184187
else:
185-
value = self.main_greenlet.switch(Wait)
188+
value = self.main_greenlet.switch(Wait())
186189
if value is SigintHappened:
187190
raise KeyboardInterrupt()
188191
return value

0 commit comments

Comments
 (0)