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