diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/debugger_scripter/debugger.py b/plugins/extensions/pykrita/plugin/plugins/scripter/debugger_scripter/debugger.py --- a/plugins/extensions/pykrita/plugin/plugins/scripter/debugger_scripter/debugger.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/debugger_scripter/debugger.py @@ -5,6 +5,9 @@ import re +from . import debuggerformatter + + class Debugger(bdb.Bdb): def __init__(self, scripter, cmd): @@ -38,11 +41,12 @@ "lineNumber": str(frame.f_lineno) }, "frame": { "firstLineNumber": co.co_firstlineno, - "locals": self.format_data(frame.f_locals), - "globals": self.format_data(frame.f_globals) + "locals": debuggerformatter.format_data(frame.f_locals), + "globals": debuggerformatter.format_data(frame.f_globals) }, "trace": "line" }) + if self.quit: return self.set_quit() @@ -68,21 +72,6 @@ def user_exception(self, frame, exception): name = frame.f_code.co_name or "" - def format_data(self, data): - globals()['types'] = __import__('types') - - exclude_keys = ['copyright', 'credits', 'False', - 'True', 'None', 'Ellipsis', 'quit'] - exclude_valuetypes = [types.BuiltinFunctionType, - types.BuiltinMethodType, - types.ModuleType, - types.FunctionType] - - return [{k: v} for k, v in data.items() if not (k in exclude_keys or - type(v) in exclude_valuetypes or - re.search(r'^(__).*\1$', k))] - - async def display(self): """Coroutine for updating the UI""" diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/debugger_scripter/debuggerformatter.py b/plugins/extensions/pykrita/plugin/plugins/scripter/debugger_scripter/debuggerformatter.py new file mode 100644 --- /dev/null +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/debugger_scripter/debuggerformatter.py @@ -0,0 +1,26 @@ +import re +import inspect + + +def format_data(data): + globals()['types'] = __import__('types') + + exclude_keys = ['copyright', 'credits', 'False', + 'True', 'None', 'Ellipsis', 'quit', + 'QtCriticalMsg', 'krita_path', + 'QtWarningMsg', 'QWIDGETSIZE_MAX', + 'QtFatalMsg', 'PYQT_CONFIGURATION', + 'on_load', 'PYQT_VERSION', 'on_pykrita_unloading', + 'on_unload', 'QT_VERSION', 'QtInfoMsg', + 'PYQT_VERSION_STR', 'qApp', 'QtSystemMsg', + 'QtDebugMsg', 'on_pykrita_loaded', 'QT_VERSION_STR'] + exclude_valuetypes = [types.BuiltinFunctionType, + types.BuiltinMethodType, + types.ModuleType, + types.FunctionType] + + return [{k: v} for k, v in data.items() if not (k in exclude_keys or + type(v) in exclude_valuetypes or + re.search(r'^(__).*\1$', k) or + inspect.isclass(v) or + inspect.isfunction(v))] diff --git a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/stackwidgets/debuggerwidget/debuggertable.py b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/stackwidgets/debuggerwidget/debuggertable.py --- a/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/stackwidgets/debuggerwidget/debuggertable.py +++ b/plugins/extensions/pykrita/plugin/plugins/scripter/ui_scripter/stackwidgets/debuggerwidget/debuggertable.py @@ -6,33 +6,28 @@ def __init__(self, parent=None): super(DebuggerTable, self).__init__(parent) - self.setRowCount(10) self.setColumnCount(4) tableHeader = ['Scope', 'Name', 'Value', 'Type'] self.setHorizontalHeaderLabels(tableHeader) self.setEditTriggers(self.NoEditTriggers) def updateTable(self, data): self.clearContents() + self.setRowCount(0) if data and not data.get('quit'): - line = 0 locals_list = data['frame']['locals'] globals_list = data['frame']['globals'] - # for item in locals_list: - # for key, value in item.items(): - # self.setItem(line, 0, QTableWidgetItem('locals')) - # self.setItem(line, 1, QTableWidgetItem(key)) - # self.setItem(line, 2, QTableWidgetItem(str(value))) - # self.setItem(line, 3, QTableWidgetItem(str(type(value)))) - # line += 1 - # - # for item in globals_list: - # for key, value in item.items(): - # self.setItem(line, 0, QTableWidgetItem('globals')) - # self.setItem(line, 1, QTableWidgetItem(key)) - # self.setItem(line, 2, QTableWidgetItem(str(value))) - # self.setItem(line, 3, QTableWidgetItem(str(type(value)))) - # line += 1 + all_variables = {'locals': locals_list, 'globals': globals_list} + + for scope_key in all_variables: + for item in all_variables[scope_key]: + for key, value in item.items(): + row = self.rowCount() + self.insertRow(row) + self.setItem(row, 0, QTableWidgetItem(str(scope_key))) + self.setItem(row, 1, QTableWidgetItem(key)) + self.setItem(row, 2, QTableWidgetItem(str(value))) + self.setItem(row, 3, QTableWidgetItem(str(type(value))))