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
from anki.cards import Card
from anki.hooks import runFilter, runHook
from aqt.qt import QMenu
from aqt.qt import QDialog, QMenu
# New hook/filter handling
##############################################################################
@ -520,6 +520,61 @@ class _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:
"""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 = self.debugDiagShort = QShortcut(QKeySequence("ctrl+shift+l"), d)
s.activated.connect(frm.text.clear)
gui_hooks.debug_console_will_show(d)
d.show()
def _captureOutput(self, on):
@ -1403,9 +1404,17 @@ will be lost. Continue?"""
else:
buf += "... %s\n" % line
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:
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()
# System specific code

View file

@ -11,6 +11,7 @@ import sys
pylib = os.path.join(os.path.dirname(__file__), "..", "..", "pylib")
sys.path.append(pylib)
from tools.hookslib import Hook, update_file
# Hook list
@ -89,6 +90,21 @@ hooks = [
legacy_hook="reviewCleanup",
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
###################
Hook(