mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fixed IPython and debug console broken by console execution model changes.
This commit is contained in:
@@ -132,9 +132,9 @@ class StdIn(BaseStdIn):
|
||||
return '\n'
|
||||
|
||||
|
||||
class ExecCode:
|
||||
def __init__(self, code, is_single_line=True):
|
||||
self.code = code
|
||||
class CodeFragment:
|
||||
def __init__(self, text, is_single_line=True):
|
||||
self.text = text
|
||||
self.is_single_line = is_single_line
|
||||
|
||||
#=======================================================================================================================
|
||||
@@ -171,7 +171,7 @@ class BaseInterpreterInterface:
|
||||
return self.needMoreForCode(source)
|
||||
|
||||
|
||||
def addExec(self, command):
|
||||
def addExec(self, codeFragment):
|
||||
original_in = sys.stdin
|
||||
try:
|
||||
help = None
|
||||
@@ -210,7 +210,7 @@ class BaseInterpreterInterface:
|
||||
|
||||
try:
|
||||
self.startExec()
|
||||
more = self.doAddExec(command)
|
||||
more = self.doAddExec(codeFragment)
|
||||
self.finishExec()
|
||||
finally:
|
||||
if help is not None:
|
||||
@@ -236,7 +236,7 @@ class BaseInterpreterInterface:
|
||||
return more, need_input
|
||||
|
||||
|
||||
def doAddExec(self, command):
|
||||
def doAddExec(self, codeFragment):
|
||||
'''
|
||||
Subclasses should override.
|
||||
|
||||
@@ -316,7 +316,7 @@ class BaseInterpreterInterface:
|
||||
|
||||
def execLine(self, line):
|
||||
try:
|
||||
self.exec_queue.put(ExecCode(line, True))
|
||||
self.exec_queue.put(CodeFragment(line, True))
|
||||
return self.needMore(self.buffer, line)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
@@ -325,7 +325,7 @@ class BaseInterpreterInterface:
|
||||
|
||||
def execMultipleLines(self, lines):
|
||||
try:
|
||||
self.exec_queue.put(ExecCode(lines, False))
|
||||
self.exec_queue.put(CodeFragment(lines, False))
|
||||
return self.needMoreForCode(lines)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
|
||||
@@ -39,14 +39,14 @@ class InterpreterInterface(BaseInterpreterInterface):
|
||||
def get_greeting_msg(self):
|
||||
return self.interpreter.get_greeting_msg()
|
||||
|
||||
def doAddExec(self, command):
|
||||
def doAddExec(self, codeFragment):
|
||||
self.notify_about_magic()
|
||||
if (command.rstrip().endswith('??')):
|
||||
if (codeFragment.text.rstrip().endswith('??')):
|
||||
print('IPython-->')
|
||||
try:
|
||||
res = bool(self.interpreter.addExec(command))
|
||||
res = bool(self.interpreter.addExec(codeFragment.text))
|
||||
finally:
|
||||
if (command.rstrip().endswith('??')):
|
||||
if (codeFragment.text.rstrip().endswith('??')):
|
||||
print('<--IPython')
|
||||
|
||||
return res
|
||||
|
||||
@@ -50,6 +50,7 @@ except NameError: # version < 2.3 -- didn't have the True/False builtins
|
||||
setattr(__builtin__, 'False', 0)
|
||||
|
||||
from pydev_console_utils import BaseInterpreterInterface
|
||||
from pydev_console_utils import CodeFragment
|
||||
|
||||
IS_PYTHON_3K = False
|
||||
|
||||
@@ -120,8 +121,8 @@ class InterpreterInterface(BaseInterpreterInterface):
|
||||
self._input_error_printed = False
|
||||
|
||||
|
||||
def doAddExec(self, command):
|
||||
command = Command(self.interpreter, command)
|
||||
def doAddExec(self, codeFragment):
|
||||
command = Command(self.interpreter, codeFragment)
|
||||
Sync(command)
|
||||
return command.more
|
||||
|
||||
@@ -153,11 +154,11 @@ def process_exec_queue(interpreter):
|
||||
while 1:
|
||||
try:
|
||||
try:
|
||||
command = interpreter.exec_queue.get(block=True, timeout=0.05)
|
||||
codeFragment = interpreter.exec_queue.get(block=True, timeout=0.05)
|
||||
except _queue.Empty:
|
||||
continue
|
||||
|
||||
if not interpreter.addExec(command): #TODO: think about locks here
|
||||
if not interpreter.addExec(codeFragment): #TODO: think about locks here
|
||||
interpreter.buffer = []
|
||||
except KeyboardInterrupt:
|
||||
interpreter.buffer = []
|
||||
@@ -308,17 +309,17 @@ def get_completions(text, token, globals, locals):
|
||||
def get_frame():
|
||||
return interpreterInterface.getFrame()
|
||||
|
||||
def exec_expression(expression, globals, locals):
|
||||
def exec_code(code, globals, locals):
|
||||
interpreterInterface = get_interpreter()
|
||||
|
||||
interpreterInterface.interpreter.update(globals, locals)
|
||||
|
||||
res = interpreterInterface.needMore(None, expression)
|
||||
res = interpreterInterface.needMore(None, code.text)
|
||||
|
||||
if res:
|
||||
return True
|
||||
|
||||
interpreterInterface.addExec(expression)
|
||||
interpreterInterface.addExec(code)
|
||||
|
||||
return False
|
||||
|
||||
@@ -368,7 +369,7 @@ def consoleExec(thread_id, frame_id, expression):
|
||||
updated_globals.update(frame.f_locals) #locals later because it has precedence over the actual globals
|
||||
|
||||
if IPYTHON:
|
||||
return exec_expression(expression, updated_globals, frame.f_locals)
|
||||
return exec_code(CodeFragment(expression), updated_globals, frame.f_locals)
|
||||
|
||||
interpreter = ConsoleWriter()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user