Merge pull request #494 from Arthur-Milchior/debug_hook

Debug hook
This commit is contained in:
Damien Elmes 2020-03-09 19:07:36 +10:00 committed by GitHub
commit 722fe70632
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 83 additions and 3 deletions

View file

@ -13,7 +13,7 @@ import anki
import aqt import aqt
from anki.cards import Card from anki.cards import Card
from anki.hooks import runFilter, runHook from anki.hooks import runFilter, runHook
from aqt.qt import QMenu from aqt.qt import QDialog, QMenu
# New hook/filter handling # New hook/filter handling
############################################################################## ##############################################################################
@ -520,6 +520,61 @@ class _CurrentNoteTypeDidChangeHook:
current_note_type_did_change = _CurrentNoteTypeDidChangeHook() current_note_type_did_change = _CurrentNoteTypeDidChangeHook()
class _DebugConsoleDidEvaluatePythonFilter:
"""Allows processing the debug result. E.g. logging queries and
result, saving last query to display it later..."""
_hooks: List[Callable[[str, str, QDialog], str]] = []
def append(self, cb: Callable[[str, str, QDialog], str]) -> None:
"""(output: str, query: str, debug_window: QDialog)"""
self._hooks.append(cb)
def remove(self, cb: Callable[[str, str, QDialog], str]) -> None:
if cb in self._hooks:
self._hooks.remove(cb)
def __call__(self, output: str, query: str, debug_window: QDialog) -> str:
for filter in self._hooks:
try:
output = filter(output, query, debug_window)
except:
# if the hook fails, remove it
self._hooks.remove(filter)
raise
return output
debug_console_did_evaluate_python = _DebugConsoleDidEvaluatePythonFilter()
class _DebugConsoleWillShowHook:
"""Allows editing the debug window. E.g. setting a default code, or
previous code."""
_hooks: List[Callable[[QDialog], None]] = []
def append(self, cb: Callable[[QDialog], None]) -> None:
"""(debug_window: QDialog)"""
self._hooks.append(cb)
def remove(self, cb: Callable[[QDialog], None]) -> None:
if cb in self._hooks:
self._hooks.remove(cb)
def __call__(self, debug_window: QDialog) -> None:
for hook in self._hooks:
try:
hook(debug_window)
except:
# if the hook fails, remove it
self._hooks.remove(hook)
raise
debug_console_will_show = _DebugConsoleWillShowHook()
class _DeckBrowserDidRenderHook: class _DeckBrowserDidRenderHook:
"""Allow to update the deck browser window. E.g. change its title.""" """Allow to update the deck browser window. E.g. change its title."""

View file

@ -1342,6 +1342,7 @@ will be lost. Continue?"""
s.activated.connect(frm.log.clear) s.activated.connect(frm.log.clear)
s = self.debugDiagShort = QShortcut(QKeySequence("ctrl+shift+l"), d) s = self.debugDiagShort = QShortcut(QKeySequence("ctrl+shift+l"), d)
s.activated.connect(frm.text.clear) s.activated.connect(frm.text.clear)
gui_hooks.debug_console_will_show(d)
d.show() d.show()
def _captureOutput(self, on): def _captureOutput(self, on):
@ -1403,9 +1404,17 @@ will be lost. Continue?"""
else: else:
buf += "... %s\n" % line buf += "... %s\n" % line
try: try:
frm.log.appendPlainText(buf + (self._output or "<no output>")) to_append = buf + (self._output or "<no output>")
to_append = gui_hooks.debug_console_did_evaluate_python(
to_append, text, frm
)
frm.log.appendPlainText(to_append)
except UnicodeDecodeError: except UnicodeDecodeError:
frm.log.appendPlainText(_("<non-unicode text>")) to_append = _("<non-unicode text>")
to_append = gui_hooks.debug_console_did_evaluate_python(
to_append, text, frm
)
frm.log.appendPlainText(to_append)
frm.log.ensureCursorVisible() frm.log.ensureCursorVisible()
# System specific code # System specific code

View file

@ -11,6 +11,7 @@ import sys
pylib = os.path.join(os.path.dirname(__file__), "..", "..", "pylib") pylib = os.path.join(os.path.dirname(__file__), "..", "..", "pylib")
sys.path.append(pylib) sys.path.append(pylib)
from tools.hookslib import Hook, update_file from tools.hookslib import Hook, update_file
# Hook list # Hook list
@ -89,6 +90,21 @@ hooks = [
legacy_hook="reviewCleanup", legacy_hook="reviewCleanup",
doc="Called before Anki transitions from the review screen to another screen.", doc="Called before Anki transitions from the review screen to another screen.",
), ),
# Debug
###################
Hook(
name="debug_console_will_show",
args=["debug_window: QDialog"],
doc="""Allows editing the debug window. E.g. setting a default code, or
previous code.""",
),
Hook(
name="debug_console_did_evaluate_python",
args=["output: str", "query: str", "debug_window: QDialog"],
return_type="str",
doc="""Allows processing the debug result. E.g. logging queries and
result, saving last query to display it later...""",
),
# Card layout # Card layout
################### ###################
Hook( Hook(