File indexing completed on 2025-03-09 04:10:20
0001 """ 0002 SPDX-FileCopyrightText: 2017 Eliakin Costa <eliakim170@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 """ 0006 from .debugger_scripter import debugger 0007 import sys 0008 if sys.version_info[0] > 2: 0009 import asyncio 0010 else: 0011 # trollius is a port of asyncio for python2. 0012 import trollius as asyncio 0013 0014 0015 class DebugController (object): 0016 0017 def __init__(self, scripter): 0018 self._debugger = None 0019 self._cmd = None 0020 self.scripter = scripter 0021 0022 def start(self, document): 0023 self.setCmd(compile(document.data, document.filePath, "exec")) 0024 self._debugger = debugger.Debugger(self.scripter, self._cmd) 0025 self._debugger.debugprocess.start() 0026 loop = asyncio.get_event_loop() 0027 loop.run_until_complete(self._debugger.start()) 0028 self.updateUIDebugger() 0029 0030 def step(self): 0031 loop = asyncio.get_event_loop() 0032 loop.run_until_complete(self._debugger.step()) 0033 self.scripter.uicontroller.setStepped(True) 0034 self.updateUIDebugger() 0035 0036 def stop(self): 0037 loop = asyncio.get_event_loop() 0038 loop.run_until_complete(self._debugger.stop()) 0039 self.updateUIDebugger() 0040 self._debugger = None 0041 0042 def setCmd(self, cmd): 0043 self._cmd = cmd 0044 0045 @property 0046 def isActive(self): 0047 try: 0048 if self._debugger: 0049 return self._debugger.debugprocess.is_alive() 0050 return False 0051 except Exception: 0052 return False 0053 0054 @property 0055 def currentLine(self): 0056 try: 0057 if self._debugger: 0058 return int(self.debuggerData['code']['lineNumber']) 0059 except Exception: 0060 return 0 0061 0062 def updateUIDebugger(self): 0063 widget = self.scripter.uicontroller.findTabWidget(i18n('Debugger')) 0064 exception = self._debuggerException() 0065 0066 if exception: 0067 self.scripter.uicontroller.showException(exception) 0068 if not self.isActive or self._quitDebugger(): 0069 widget.disableToolbar(True) 0070 0071 self.scripter.uicontroller.repaintDebugArea() 0072 widget.updateWidget() 0073 0074 @property 0075 def debuggerData(self): 0076 try: 0077 if self._debugger: 0078 return self._debugger.application_data 0079 except Exception: 0080 return 0081 0082 def _quitDebugger(self): 0083 try: 0084 return self.debuggerData['quit'] 0085 except Exception: 0086 return False 0087 0088 def _debuggerException(self): 0089 try: 0090 return self.debuggerData['exception'] 0091 except Exception: 0092 return False