@@ -50,6 +50,9 @@ class Unfinished(RequestFromCodeGreenlet):
5050class SystemExitRequest (RequestFromCodeGreenlet ):
5151 """Running code raised a SystemExit"""
5252
53+ def __init__ (self , args ):
54+ self .args = args
55+
5356
5457class 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