mirror of
https://github.com/ankitects/anki.git
synced 2025-11-09 06:07:11 -05:00
allow statements in debug console
This commit is contained in:
parent
8d2a74a6b5
commit
2d11b6e7d7
2 changed files with 73 additions and 28 deletions
63
aqt/main.py
63
aqt/main.py
|
|
@ -885,26 +885,57 @@ will be lost. Continue?"""))
|
|||
d = self.debugDiag = QDialog()
|
||||
frm = aqt.forms.debug.Ui_Dialog()
|
||||
frm.setupUi(d)
|
||||
d.connect(frm.line, SIGNAL("returnPressed()"), lambda: self.onDebugRet(frm))
|
||||
d.show()
|
||||
s = self.debugDiagShort = QShortcut(QKeySequence("ctrl+return"), d)
|
||||
self.connect(s, SIGNAL("activated()"),
|
||||
lambda: self.onDebugRet(frm))
|
||||
s = self.debugDiagShort = QShortcut(
|
||||
QKeySequence("ctrl+shift+return"), d)
|
||||
self.connect(s, SIGNAL("activated()"),
|
||||
lambda: self.onDebugPrint(frm))
|
||||
d.exec_()
|
||||
|
||||
def _captureOutput(self, on):
|
||||
mw = self
|
||||
class Stream(object):
|
||||
def write(self, data):
|
||||
mw._output += data
|
||||
if on:
|
||||
self._output = ""
|
||||
self._oldStderr = sys.stderr
|
||||
self._oldStdout = sys.stdout
|
||||
s = Stream()
|
||||
sys.stderr = s
|
||||
sys.stdout = s
|
||||
else:
|
||||
sys.stderr = self._oldStderr
|
||||
sys.stdout = self._oldStdout
|
||||
|
||||
def _debugCard(self):
|
||||
return self.reviewer.card.__dict__
|
||||
|
||||
def onDebugPrint(self, frm):
|
||||
frm.text.setPlainText("pp(%s)" % frm.text.toPlainText())
|
||||
self.onDebugRet(frm)
|
||||
|
||||
def onDebugRet(self, frm):
|
||||
import pprint, traceback
|
||||
line = frm.line.text()
|
||||
if not line:
|
||||
return
|
||||
def card():
|
||||
return self.reviewer.card.__dict__
|
||||
locals = dict(mw=self, card=card)
|
||||
newline = "\n"
|
||||
text = frm.text.toPlainText()
|
||||
card = self._debugCard
|
||||
mw = self
|
||||
pp = pprint.pprint
|
||||
self._captureOutput(True)
|
||||
try:
|
||||
ret = eval(line, globals(), locals)
|
||||
except Exception, e:
|
||||
newline = ""
|
||||
ret = traceback.format_exc()
|
||||
if not isinstance(ret, basestring):
|
||||
ret = pprint.pformat(ret)
|
||||
frm.log.appendPlainText(">>> %s\n%s%s" % (line, ret, newline))
|
||||
exec text
|
||||
except:
|
||||
self._output += traceback.format_exc()
|
||||
self._captureOutput(False)
|
||||
buf = ""
|
||||
for c, line in enumerate(text.strip().split("\n")):
|
||||
if c == 0:
|
||||
buf += ">>> %s\n" % line
|
||||
else:
|
||||
buf += "... %s\n" % line
|
||||
frm.log.appendPlainText(buf + (self._output or "<no output>"))
|
||||
frm.log.ensureCursorVisible()
|
||||
|
||||
# System specific code
|
||||
|
|
|
|||
|
|
@ -15,21 +15,35 @@
|
|||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Expression:</string>
|
||||
<widget class="QPlainTextEdit" name="text">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>100</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="line"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPlainTextEdit" name="log">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>8</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Courier</family>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::ClickFocus</enum>
|
||||
</property>
|
||||
|
|
|
|||
Loading…
Reference in a new issue