Krita Source Code Documentation
Loading...
Searching...
No Matches
debugcontroller.py
Go to the documentation of this file.
1"""
2SPDX-FileCopyrightText: 2017 Eliakin Costa <eliakim170@gmail.com>
3
4SPDX-License-Identifier: GPL-2.0-or-later
5"""
6from .debugger_scripter import debugger
7import asyncio
8from builtins import i18n
9
10class DebugController (object):
11
12 def __init__(self, scripter):
13 self._debugger = None
14 self._cmd = None
15 self.scripter = scripter
16
17 def start(self, document):
18 self.setCmd(compile(document.data, document.filePath, "exec"))
19 self._debugger = debugger.Debugger(self.scripter, self._cmd)
20 self._debugger.debugprocess.start()
21 loop = asyncio.get_event_loop()
22 loop.run_until_complete(self._debugger.start())
23 self.updateUIDebugger()
24
25 def step(self):
26 loop = asyncio.get_event_loop()
27 loop.run_until_complete(self._debugger.step())
28 self.scripter.uicontroller.setStepped(True)
29 self.updateUIDebugger()
30
31 def stop(self):
32 loop = asyncio.get_event_loop()
33 loop.run_until_complete(self._debugger.stop())
34 self.updateUIDebugger()
35 self._debugger = None
36
37 def setCmd(self, cmd):
38 self._cmd = cmd
39
40 @property
41 def isActive(self):
42 try:
43 if self._debugger:
44 return self._debugger.debugprocess.is_alive()
45 return False
46 except Exception:
47 return False
48
49 @property
50 def currentLine(self):
51 try:
52 if self._debugger:
53 return int(self.debuggerData['code']['lineNumber'])
54 except Exception:
55 return 0
56
58 widget = self.scripter.uicontroller.findTabWidget(i18n('Debugger'))
59 exception = self._debuggerException()
60
61 if exception:
62 self.scripter.uicontroller.showException(exception)
63 if not self.isActive or self._quitDebugger():
64 widget.disableToolbar(True)
65
66 self.scripter.uicontroller.repaintDebugArea()
67 widget.updateWidget()
68
69 @property
70 def debuggerData(self):
71 try:
72 if self._debugger:
73 return self._debugger.application_data
74 except Exception:
75 return
76
77 def _quitDebugger(self):
78 try:
79 return self.debuggerData['quit']
80 except Exception:
81 return False
82
84 try:
85 return self.debuggerData['exception']
86 except Exception:
87 return False