Merged the wxPy_newswig branch into the HEAD branch (main trunk)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24541 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,8 +1,125 @@
|
||||
"""Interpreter executes Python commands."""
|
||||
|
||||
"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
|
||||
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
||||
__cvsid__ = "$Id$"
|
||||
__revision__ = "$Revision$"[11:-2]
|
||||
|
||||
from wx import _rename
|
||||
from wxPython.py import interpreter
|
||||
_rename(globals(), interpreter.__dict__, modulename='py.interpreter')
|
||||
del interpreter
|
||||
del _rename
|
||||
import os
|
||||
import sys
|
||||
from code import InteractiveInterpreter
|
||||
import dispatcher
|
||||
import introspect
|
||||
|
||||
try:
|
||||
True
|
||||
except NameError:
|
||||
True = 1==1
|
||||
False = 1==0
|
||||
|
||||
|
||||
class Interpreter(InteractiveInterpreter):
|
||||
"""Interpreter based on code.InteractiveInterpreter."""
|
||||
|
||||
revision = __revision__
|
||||
|
||||
def __init__(self, locals=None, rawin=None,
|
||||
stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr):
|
||||
"""Create an interactive interpreter object."""
|
||||
InteractiveInterpreter.__init__(self, locals=locals)
|
||||
self.stdin = stdin
|
||||
self.stdout = stdout
|
||||
self.stderr = stderr
|
||||
if rawin:
|
||||
import __builtin__
|
||||
__builtin__.raw_input = rawin
|
||||
del __builtin__
|
||||
copyright = 'Type "help", "copyright", "credits" or "license"'
|
||||
copyright += ' for more information.'
|
||||
self.introText = 'Python %s on %s%s%s' % \
|
||||
(sys.version, sys.platform, os.linesep, copyright)
|
||||
try:
|
||||
sys.ps1
|
||||
except AttributeError:
|
||||
sys.ps1 = '>>> '
|
||||
try:
|
||||
sys.ps2
|
||||
except AttributeError:
|
||||
sys.ps2 = '... '
|
||||
self.more = 0
|
||||
# List of lists to support recursive push().
|
||||
self.commandBuffer = []
|
||||
self.startupScript = os.environ.get('PYTHONSTARTUP')
|
||||
|
||||
def push(self, command):
|
||||
"""Send command to the interpreter to be executed.
|
||||
|
||||
Because this may be called recursively, we append a new list
|
||||
onto the commandBuffer list and then append commands into
|
||||
that. If the passed in command is part of a multi-line
|
||||
command we keep appending the pieces to the last list in
|
||||
commandBuffer until we have a complete command. If not, we
|
||||
delete that last list."""
|
||||
command = str(command) # In case the command is unicode.
|
||||
if not self.more:
|
||||
try: del self.commandBuffer[-1]
|
||||
except IndexError: pass
|
||||
if not self.more: self.commandBuffer.append([])
|
||||
self.commandBuffer[-1].append(command)
|
||||
source = '\n'.join(self.commandBuffer[-1])
|
||||
more = self.more = self.runsource(source)
|
||||
dispatcher.send(signal='Interpreter.push', sender=self,
|
||||
command=command, more=more, source=source)
|
||||
return more
|
||||
|
||||
def runsource(self, source):
|
||||
"""Compile and run source code in the interpreter."""
|
||||
stdin, stdout, stderr = sys.stdin, sys.stdout, sys.stderr
|
||||
sys.stdin, sys.stdout, sys.stderr = \
|
||||
self.stdin, self.stdout, self.stderr
|
||||
more = InteractiveInterpreter.runsource(self, source)
|
||||
# If sys.std* is still what we set it to, then restore it.
|
||||
# But, if the executed source changed sys.std*, assume it was
|
||||
# meant to be changed and leave it. Power to the people.
|
||||
if sys.stdin == self.stdin:
|
||||
sys.stdin = stdin
|
||||
if sys.stdout == self.stdout:
|
||||
sys.stdout = stdout
|
||||
if sys.stderr == self.stderr:
|
||||
sys.stderr = stderr
|
||||
return more
|
||||
|
||||
def getAutoCompleteKeys(self):
|
||||
"""Return list of auto-completion keycodes."""
|
||||
return [ord('.')]
|
||||
|
||||
def getAutoCompleteList(self, command='', *args, **kwds):
|
||||
"""Return list of auto-completion options for a command.
|
||||
|
||||
The list of options will be based on the locals namespace."""
|
||||
stdin, stdout, stderr = sys.stdin, sys.stdout, sys.stderr
|
||||
sys.stdin, sys.stdout, sys.stderr = \
|
||||
self.stdin, self.stdout, self.stderr
|
||||
l = introspect.getAutoCompleteList(command, self.locals,
|
||||
*args, **kwds)
|
||||
sys.stdin, sys.stdout, sys.stderr = stdin, stdout, stderr
|
||||
return l
|
||||
|
||||
def getCallTip(self, command='', *args, **kwds):
|
||||
"""Return call tip text for a command.
|
||||
|
||||
Call tip information will be based on the locals namespace."""
|
||||
return introspect.getCallTip(command, self.locals, *args, **kwds)
|
||||
|
||||
|
||||
class InterpreterAlaCarte(Interpreter):
|
||||
"""Demo Interpreter."""
|
||||
|
||||
def __init__(self, locals, rawin, stdin, stdout, stderr,
|
||||
ps1='main prompt', ps2='continuation prompt'):
|
||||
"""Create an interactive interpreter object."""
|
||||
Interpreter.__init__(self, locals=locals, rawin=rawin,
|
||||
stdin=stdin, stdout=stdout, stderr=stderr)
|
||||
sys.ps1 = ps1
|
||||
sys.ps2 = ps2
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user