itom  4.1.0
pythonEngine.h
1 /* ********************************************************************
2  itom software
3  URL: http://www.uni-stuttgart.de/ito
4  Copyright (C) 2020, Institut fuer Technische Optik (ITO),
5  Universitaet Stuttgart, Germany
6 
7  This file is part of itom.
8 
9  itom is free software; you can redistribute it and/or modify it
10  under the terms of the GNU Library General Public Licence as published by
11  the Free Software Foundation; either version 2 of the Licence, or (at
12  your option) any later version.
13 
14  itom is distributed in the hope that it will be useful, but
15  WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
17  General Public Licence for more details.
18 
19  You should have received a copy of the GNU Library General Public License
20  along with itom. If not, see <http://www.gnu.org/licenses/>.
21 *********************************************************************** */
22 
23 #ifndef PYTHONENGINE_H
24 #define PYTHONENGINE_H
25 
26 /*if you add any include to this file you will DIE an immediate, horrible, painful death*/
27 
28 #include <string>
29 #include <exception>
30 //#ifndef Q_MOC_RUN
31 // #define PY_ARRAY_UNIQUE_SYMBOL itom_ARRAY_API
32 // #define NO_IMPORT_ARRAY
33 //#endif
34 
35 #include "pythonJedi.h"
36 
37 #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION //see comment in pythonNpDataObject.cpp
38 
39 #ifndef Q_MOC_RUN
40  //python
41  // see http://vtk.org/gitweb?p=VTK.git;a=commitdiff;h=7f3f750596a105d48ea84ebfe1b1c4ca03e0bab3
42  #if (defined _DEBUG) && (defined WIN32)
43  #undef _DEBUG
44  #include "pythonWrapper.h"
45  #include "node.h"
46  #include "numpy/arrayobject.h"
47  #define _DEBUG
48  #else
49  #include "pythonWrapper.h"
50  #include "node.h"
51  #include "numpy/arrayobject.h"
52  #endif
53 
54 #endif // Q_MOC_RUN
55 
56 /* includes */
57 
58 #include "pythonItom.h"
59 #include "pythonProxy.h"
60 #include "pythonStream.h"
61 #include "pythonCommon.h"
62 #include "pythonJediRunner.h"
63 
64 #include "../models/breakPointModel.h"
65 #include "../../common/sharedStructuresQt.h"
66 #include "../../common/addInInterface.h"
67 #include "../../common/functionCancellationAndObserver.h"
68 #include "../codeEditor/codeCheckerItem.h"
69 #include "../global.h"
70 
71 #include "pythonWorkspace.h"
72 
73 #include <qstringlist.h>
74 #include <qqueue.h>
75 #include <qset.h>
76 #include <qpointer.h>
77 #include <qatomic.h>
78 
79 
80 /* definition and macros */
81 
82 /* global variables (avoid) */
83 
84 /* content */
85 
86 class QDesktopWidget;
87 class QTimer;
88 
89 namespace ito
90 {
91 
93 {
94 public:
95  FuncWeakRef();
96  FuncWeakRef(PythonProxy::PyProxy *proxyObject, PyObject *argTuple = NULL);
97  FuncWeakRef(const FuncWeakRef &rhs);
98  ~FuncWeakRef();
99  FuncWeakRef& operator =(FuncWeakRef rhs);
100 
101  PythonProxy::PyProxy* getProxyObject() const { return m_proxyObject; } //borrowed reference
102  PyObject* getArguments() const { return m_argument; } //borrowed reference
103  bool isValid() const { return (m_proxyObject != NULL); }
104 
105  void setHandle(const size_t &handle);
106  size_t getHandle() const { return m_handle; }
107 private:
108  PythonProxy::PyProxy *m_proxyObject;
109  PyObject *m_argument;
110  size_t m_handle;
111 };
112 
113 
114 class PythonEngine : public QObject
115 {
116  Q_OBJECT
117 
118 public:
119  PythonEngine(); //constructor
120  ~PythonEngine(); //destructor
121 
122  Q_INVOKABLE void pythonSetup(ito::RetVal *retValue, QSharedPointer<QVariantMap> infoMessages); //setup
123  Q_INVOKABLE ito::RetVal scanAndRunAutostartFolder(QString currentDirAfterScan = QString() );
124  Q_INVOKABLE ito::RetVal pythonShutdown(ItomSharedSemaphore *aimWait = NULL); //shutdown
125  Q_INVOKABLE ito::RetVal stringEncodingChanged();
126 
127  inline ito::BreakPointModel *getBreakPointModel() const { return bpModel; }
128  inline bool isPythonBusy() const { return m_pythonState != ito::pyStateIdle; }
129  inline bool isPythonDebugging() const { return (m_pythonState == ito::pyStateDebuggingWaitingButBusy || m_pythonState == ito::pyStateDebugging || m_pythonState == ito::pyStateDebuggingWaiting); }
130  inline bool isPythonDebuggingAndWaiting() const { return m_pythonState == ito::pyStateDebuggingWaiting; }
131  inline bool execInternalCodeByDebugger() const { return m_executeInternalPythonCodeInDebugMode; }
132  inline void setExecInternalCodeByDebugger(bool value) { m_executeInternalPythonCodeInDebugMode = value; }
133  void printPythonErrorWithoutTraceback();
134  void pythonDebugFunction(PyObject *callable, PyObject *argTuple, bool gilExternal = false);
135  void pythonRunFunction(PyObject *callable, PyObject *argTuple, bool gilExternal = false);
136  inline PyObject *getGlobalDictionary() const { return m_pGlobalDictionary; }
137  inline bool pySyntaxCheckAvailable() const { return (m_pyModCodeChecker != NULL); }
138  bool tryToLoadJediIfNotYetDone(); //returns true, if Jedi is already loaded or could be loaded; else false
139  QList<int> parseAndSplitCommandInMainComponents(const char *str, QByteArray &encoding) const; //can be directly called from different thread
140  QString getPythonExecutable() const { return m_pythonExecutable; }
141  Qt::HANDLE getPythonThreadId() const { return m_pythonThreadId; }
142 
145 
148 
151 
153  void enqueueJediGetHelpRequest(const ito::JediGetHelpRequest &request);
154 
155  static bool isInterruptQueued();
156  static const PythonEngine *getInstance();
157 
159  void addFunctionCancellationAndObserver(QWeakPointer<ito::FunctionCancellationAndObserver> observer);
160 
162  void removeFunctionCancellationAndObserver(ito::FunctionCancellationAndObserver* observer = NULL);
163 
164 protected:
165  ito::RetVal runPyFile(const QString &pythonFileName); // run file pythonFileName
166  ito::RetVal debugFile(const QString &pythonFileName); // debug file pythonFileName
167  ito::RetVal runString(const QString &command); // run string command
168  ito::RetVal debugString(const QString &command); // debug string command
169  ito::RetVal debugFunction(PyObject *callable, PyObject *argTuple, bool gilExternal = false);
170  ito::RetVal runFunction(PyObject *callable, PyObject *argTuple, bool gilExternal = false);
171 
172  ito::RetVal modifyTracebackDepth(int NrOfLevelsToPopAtFront = -1, bool showTraceback = true);
173 
174  PyObject* setPyErrFromException(const std::exception &exc);
175 
176  void connectNotify(const QMetaMethod &signal);
177 
178  enum DebuggerErrorCode
179  {
180  DbgErrorNo = 0,
181  DbgErrorInvalidBp = 1, // the breakpoint candidate could not be set and will be deleted
182  DbgErrorOther = 2 // any other error
183  };
184 
185 private:
186  enum DictUpdateFlag
187  {
188  DictUpdate,
189  DictReset,
190  DictNoAction
191  };
192 
193  static PythonEngine *getInstanceInternal();
194 
197  inline PyObject *getLocalDictionary() { return m_pLocalDictionary; }
198 
199  PyObject *getPyObjectByFullName(bool globalNotLocal, const QStringList &fullNameSplittedByDelimiter, QString *validVariableName = NULL); //Python GIL must be locked when calling this function!
200  PyObject *getPyObjectByFullName(bool globalNotLocal, const QString &fullName, QString *validVariableName = NULL); //Python GIL must be locked when calling this function!
201 
202  void setGlobalDictionary(PyObject* mainDict = NULL);
203  void setLocalDictionary(PyObject* localDict);
204 
205  void emitPythonDictionary(DictUpdateFlag globalDict, DictUpdateFlag localDict, bool lockGIL);
206 
207  ito::RetVal pickleDictionary(PyObject *dict, const QString &filename);
208  ito::RetVal unpickleDictionary(PyObject *destinationDict, const QString &filename, bool overwrite);
209 
211  void pythonRunString(QString cmd);
212 
214  void pythonDebugString(QString cmd);
215 
216  //methods for debugging
217  void enqueueDbgCmd(ito::tPythonDbgCmd dbgCmd);
218  ito::tPythonDbgCmd dequeueDbgCmd();
219  bool DbgCommandsAvailable();
220  void clearDbgCmdLoop();
221 
222  ito::RetVal pythonStateTransition(tPythonTransitions transition, bool immediate = true);
223 
224  //methods for breakpoint
225  ito::RetVal pythonAddBreakpoint(const BreakPointItem &breakpoint, int &pyBpNumber);
226  ito::RetVal pythonEditBreakpoint(const int pyBpNumber, const BreakPointItem &newBreakpoint);
227  ito::RetVal pythonDeleteBreakpoint(const int pyBpNumber);
229 
230  ito::RetVal autoReloaderCheck();
231 
232  static int queuedInterrupt(void *arg);
233 
234  PyObject* getAndCheckIdentifier(const QString &identifier, ito::RetVal &retval) const;
235 
236  QVariantMap checkCodeCheckerRequirements();
237 
239  {
241  bool includeItomModuleBeforeCheck;
244  };
245 
246  //member variables
247  bool m_started;
248  CodeCheckerOptions m_codeCheckerOptions;
249 
250  QMutex dbgCmdMutex;
251  QMutex pythonStateChangeMutex;
252  QDesktopWidget *m_pDesktopWidget;
253  QQueue<ito::tPythonDbgCmd> debugCommandQueue;
254  ito::tPythonDbgCmd debugCommand;
255 
256  ito::tPythonState m_pythonState;
257 
258  ito::BreakPointModel *bpModel;
259 
260  PyObject* mainModule;
261  PyObject* m_pMainDictionary;
262  PyObject* m_pLocalDictionary;
264  PyObject *itomDbgModule;
265  PyObject *itomDbgInstance;
266  PyObject *itomModule;
267  PyObject *itomFunctions;
268  PyObject *m_pyModGC;
269  PyObject *m_pyModCodeChecker;
272 
273  QSharedPointer<PythonJediRunner> m_jediRunner;
274 
275  Qt::HANDLE m_pythonThreadId;
276 
277  PyObject *dictUnicode;
278  PyObject *slotsUnicode;
279 
280  QSet<ito::PyWorkspaceContainer*> m_mainWorkspaceContainer;
281  QSet<ito::PyWorkspaceContainer*> m_localWorkspaceContainer;
282  QHash<size_t, FuncWeakRef> m_pyFuncWeakRefHashes;
283  size_t m_pyFuncWeakRefAutoInc;
284 
286 
289 
292 
294  QString m_includeItomImportString;
295 
296  wchar_t *m_pUserDefinedPythonHome;
297 
298  QList<QWeakPointer<ito::FunctionCancellationAndObserver> > m_activeFunctionCancellations;
299 
300  struct AutoReload
301  {
302  PyObject *modAutoReload;
303  PyObject *classAutoReload;
304  bool enabled;
305  bool checkFileExec;
306  bool checkStringExec;
307  bool checkFctExec;
308  };
309 
311 
313  static PyMethodDef PyMethodItomDbg[];
314  static PyModuleDef PyModuleItomDbg;
315  static PyObject* PyInitItomDbg(void);
316  static PyObject* PyDbgCommandLoop(PyObject *pSelf, PyObject *pArgs);
317 
318  //helper methods
319  //static PyObject* checkForTimeoutHelper(ItomSharedSemaphore* semaphore, int timeout, PyObject *retValueOk);
320 
321  //other static members
322  static QMutex instantiated;
323  static QMutex instancePtrProtection;
324  static QString fctHashPrefix;
325 
326  static PythonEngine* instance;
327 
328  QAtomicInt m_interruptCounter; //protects that a python interrupt can only be placed if there is no interrupt event queued yet.
329 
330  // friend class
331  friend class ito::PythonItom;
332  friend class ito::PyStream;
333 
334 signals:
335  void pythonDebugPositionChanged(QString filename, int lineNo);
336  void pythonStateChanged(tPythonTransitions pyTransition, bool immediate);
337  void pythonModifyLocalDict(PyObject* localDict, ItomSharedSemaphore* semaphore);
338  void pythonModifyGlobalDict(PyObject* globalDict, ItomSharedSemaphore* semaphore);
339  void pythonCurrentDirChanged();
340  void updateCallStack(QStringList filenames, IntList lines, QStringList methods);
341  void deleteCallStack();
342 
343  void pythonSetCursor(const Qt::CursorShape cursor);
344  void pythonResetCursor();
345  void pythonAutoReloadChanged(bool enabled, bool checkFile, bool checkCmd, bool checkFct);
346  void clearCommandLine();
347  void startInputCommandLine(QSharedPointer<QByteArray> buffer, ItomSharedSemaphore *semaphore);
348 
349 public slots:
350  void pythonExecStringFromCommandLine(QString cmd);
351  void pythonRunFile(QString filename);
352  void pythonDebugFile(QString filename);
353  void pythonRunStringOrFunction(QString cmdOrFctHash);
354  void pythonDebugStringOrFunction(QString cmdOrFctHash);
355  void pythonInterruptExecutionThreadSafe(bool *interruptActuatorsAndTimers = NULL); //if interruptActuatorsAndTimers is NULL, the itom settings will be read, else this boolean variable decides
356  void pythonDebugCommand(tPythonDbgCmd cmd);
357 
358  void setAutoReloader(bool enabled, bool checkFile, bool checkCmd, bool checkFct);
359 
360  // Settings are neccesary for automatic itom inclusion and syntax check
361  void readSettings();
362  void propertiesChanged();
363 
364  void pythonCodeCheck(const QString &code, const QString &filename, bool fileSaved, QPointer<QObject> sender, QByteArray callbackFctName);
365 
367  void breakPointAdded(BreakPointItem bp, int row);
368  void breakPointDeleted(QString filename, int lineNo, int pyBpNumber);
369  void breakPointChanged(BreakPointItem oldBp, BreakPointItem newBp);
370  ito::RetVal setupBreakPointDebugConnections();
371  ito::RetVal shutdownBreakPointDebugConnections();
372 
373  bool renameVariable(bool globalNotLocal, const QString &oldFullItemName, QString newKey, ItomSharedSemaphore *semaphore = NULL);
374  bool deleteVariable(bool globalNotLocal, const QStringList &fullItemNames, ItomSharedSemaphore *semaphore = NULL);
375  ito::RetVal pickleVariables(bool globalNotLocal, QString filename, QStringList varNames, ItomSharedSemaphore *semaphore = NULL);
376  ito::RetVal pickleSingleParam(QString filename, QSharedPointer<ito::Param> value, const QString &valueName, ItomSharedSemaphore *semaphore = NULL);
377  ito::RetVal unpickleVariables(bool globalNotLocal, QString filename, QString packedVarName, ItomSharedSemaphore *semaphore = NULL);
378  ito::RetVal saveMatlabVariables(bool globalNotLocal, QString filename, QStringList varNames, ItomSharedSemaphore *semaphore = NULL);
379  ito::RetVal saveMatlabSingleParam(QString filename, QSharedPointer<ito::Param> value, const QString &valueName, ItomSharedSemaphore *semaphore = NULL);
380  ito::RetVal loadMatlabVariables(bool globalNotLocal, QString filename, QString packedVarName, ItomSharedSemaphore *semaphore = NULL);
381  ito::RetVal registerAddInInstance(QString varname, ito::AddInBase *instance, ItomSharedSemaphore *semaphore = NULL);
382  ito::RetVal getSysModules(QSharedPointer<QStringList> modNames, QSharedPointer<QStringList> modFilenames, QSharedPointer<IntList> modTypes, ItomSharedSemaphore *semaphore = NULL);
383  ito::RetVal reloadSysModules(QSharedPointer<QStringList> modNames, ItomSharedSemaphore *semaphore = NULL);
384 
385  void registerWorkspaceContainer(PyWorkspaceContainer *container, bool registerNotUnregister, bool globalNotLocal);
386  void workspaceGetChildNode(PyWorkspaceContainer *container, QString fullNameParentItem);
387  void workspaceGetValueInformation(PyWorkspaceContainer *container, const QString &fullItemName, QSharedPointer<QString> extendedValue, ItomSharedSemaphore *semaphore = NULL);
388 
389  ito::RetVal checkVarnamesInWorkspace(bool globalNotLocal, const QStringList &names, QSharedPointer<IntList> existing, ItomSharedSemaphore *semaphore = NULL);
390  ito::RetVal putParamsToWorkspace(bool globalNotLocal, const QStringList &names, const QVector<SharedParamBasePointer > &values, ItomSharedSemaphore *semaphore = NULL);
391  ito::RetVal getVarnamesListInWorkspace(bool globalNotLocal, const QString &find, QSharedPointer<QStringList> varnameList, ItomSharedSemaphore *semaphore /*= NULL*/);
392  ito::RetVal getParamsFromWorkspace(bool globalNotLocal, const QStringList &names, QVector<int> paramBaseTypes, QSharedPointer<SharedParamBasePointerVector > values, ItomSharedSemaphore *semaphore = NULL);
393 
394  ito::RetVal pythonGetClearAllValues();
395  ito::RetVal pythonClearAll();
396 
397 };
398 
399 } //end namespace ito
400 
401 
402 #endif
CodeCheckerMessageType
Definition: pythonCommon.h:92
static PyObject * PyDbgCommandLoop(PyObject *pSelf, PyObject *pArgs)
Definition: pythonEngine.cpp:4090
ito::RetVal debugFile(const QString &pythonFileName)
Definition: pythonEngine.cpp:1946
PyMethodDef * PythonAdditionalModuleITOM
decides if itom is automatically included in every source file before it is handed to the syntax chec...
Definition: pythonEngine.h:288
Definition: pythonItom.h:52
DataObject arg(const DataObject &dObj)
high-level value which calculates the argument value of each element of the input source data object ...
Definition: dataobj.cpp:10131
void enqueueJediCalltipRequest(const ito::JediCalltipRequest &request)
thread-safe method (can be called from any thread) to enqueue a jedi calltip request ...
Definition: pythonEngine.cpp:2178
Definition: pythonEngine.h:114
QHash< size_t, FuncWeakRef > m_pyFuncWeakRefHashes
hash table containing weak reference to callable python methods or functions and as second...
Definition: pythonEngine.h:282
void enqueueJediCompletionRequest(const ito::JediCompletionRequest &request)
thread-safe method (can be called from any thread) to enqueue a jedi calltip request ...
Definition: pythonEngine.cpp:2196
PyObject * getGlobalDictionary() const
Definition: pythonEngine.h:136
static PythonEngine * getInstanceInternal()
Definition: pythonEngine.cpp:156
PyObject * itomDbgModule
debugger module
Definition: pythonEngine.h:264
Class for managing status values (like errors or warning)
Definition: retVal.h:54
ito::RetVal checkVarnamesInWorkspace(bool globalNotLocal, const QStringList &names, QSharedPointer< IntList > existing, ItomSharedSemaphore *semaphore=NULL)
Definition: pythonEngine.cpp:5034
Base class for all plugins.
Definition: addInInterface.h:385
ito::RetVal debugString(const QString &command)
Definition: pythonEngine.cpp:2056
CodeCheckerMode
< mode that can be chosen for the code checker
Definition: pythonCommon.h:83
Definition: pythonProxy.h:48
Definition: pythonJedi.h:94
void pythonCodeCheck(const QString &code, const QString &filename, bool fileSaved, QPointer< QObject > sender, QByteArray callbackFctName)
these slots are only connected if python in debug-mode; while waiting these slots will be treated due...
Definition: pythonEngine.cpp:2228
Definition: pythonEngine.h:238
Definition: apiFunctionsGraph.cpp:39
Definition: pythonEngine.h:300
bool m_pyModCodeCheckerHasFlake8
true if m_pyModCodeChecker could be loaded and pretends to have the syntax and style check feature (p...
Definition: pythonEngine.h:271
void submitAllBreakpointsToDebugger()
< submits all breakpoints to the debugger. This should be called before code is debugged.
Definition: pythonEngine.cpp:2403
ito::RetVal unpickleDictionary(PyObject *destinationDict, const QString &filename, bool overwrite)
runs the given Python string command
Definition: pythonEngine.cpp:6260
PyObject * m_pLocalDictionary
local dictionary of python [borrowed], usually NULL unless if debugger is in "interaction-mode", then m_pGlobalDictionary is equal to the local dictionary of the current frame
Definition: pythonEngine.h:262
This class can be passed to a long running method (e.g. as QSharedPointer instance) for two reasons: ...
Definition: functionCancellationAndObserver.h:56
ito::RetVal debugFunction(PyObject *callable, PyObject *argTuple, bool gilExternal=false)
Definition: pythonEngine.cpp:1833
semaphore which can be used for asychronous thread communication. By using this class it is possible ...
Definition: sharedStructuresQt.h:57
PyObject * itomDbgInstance
debugger instance
Definition: pythonEngine.h:265
ito::RetVal pythonAddBreakpoint(const BreakPointItem &breakpoint, int &pyBpNumber)
Definition: pythonEngine.cpp:2452
bool m_pyModCodeCheckerHasPyFlakes
true if m_pyModCodeChecker could be loaded and pretends to have the syntax check feature (package: py...
Definition: pythonEngine.h:270
static class which implements a new python type. The members cout and cerr of the python system are s...
Definition: pythonStream.h:45
PyObject * itomFunctions
ito functions [additional python methods] [new ref]
Definition: pythonEngine.h:267
bool m_includeItomImportBeforeCodeAnalysis
string that is prepended to each script before syntax check (if m_includeItomImportBeforeCodeAnalysis...
Definition: pythonEngine.h:291
ito::RetVal saveMatlabSingleParam(QString filename, QSharedPointer< ito::Param > value, const QString &valueName, ItomSharedSemaphore *semaphore=NULL)
Definition: pythonEngine.cpp:4766
bool m_executeInternalPythonCodeInDebugMode
if true, button events, user interface connections to python methods... will be executed by debugger ...
Definition: pythonEngine.h:287
QByteArray furtherPropertiesJson
these parameters are parsed from a QVariantMap to json and will be passed to itomSyntaxCheck.py
Definition: pythonEngine.h:243
void enqueueGoToAssignmentRequest(const ito::JediAssignmentRequest &request)
thread-safe method (can be called from any thread) to enqueue a jedi get-help request ...
Definition: pythonEngine.cpp:2205
void addFunctionCancellationAndObserver(QWeakPointer< ito::FunctionCancellationAndObserver > observer)
will remove the given observer from the list of function cancellations and observers. Even if observer is NULL, the list of current observers will be cleanup from deleted instances
Definition: pythonEngine.cpp:3969
PyObject * itomModule
itom module [new ref]
Definition: pythonEngine.h:266
Qt::HANDLE getPythonThreadId() const
thread-safe method (can be called from any thread) to enqueue a jedi completion request ...
Definition: pythonEngine.h:141
void pythonRunString(QString cmd)
debugs the given Python string command
Definition: pythonEngine.cpp:2835
Q_INVOKABLE void pythonSetup(ito::RetVal *retValue, QSharedPointer< QVariantMap > infoMessages)
Definition: pythonEngine.cpp:313
Definition: pythonJedi.h:123
Definition: pythonJedi.h:64
PyObject * m_pMainDictionary
main dictionary of python [borrowed]
Definition: pythonEngine.h:261
void setAutoReloader(bool enabled, bool checkFile, bool checkCmd, bool checkFct)
Definition: pythonEngine.cpp:1376
Definition: pythonEngine.h:92
Definition: pythonJedi.h:34
PyObject * getAndCheckIdentifier(const QString &identifier, ito::RetVal &retval) const
get the unicode object from identifier and checks if it is a valid python identifier (variable name)...
Definition: pythonEngine.cpp:5650
QString m_pythonExecutable
absolute path to the python executable
Definition: pythonEngine.h:285
PyObject * m_pGlobalDictionary
global dictionary of python [borrowed], equals to m_pMainDictionary unless if debugger is in "interac...
Definition: pythonEngine.h:263
Definition: pythonWorkspace.h:99
PyObject * mainModule
main module of python (builtin) [borrowed]
Definition: pythonEngine.h:260
ito::RetVal pythonStateTransition(tPythonTransitions transition, bool immediate=true)
< signals a state change of the Python interpreter
Definition: pythonEngine.cpp:3230
PythonCommon::CodeCheckerMessageType minVisibleMessageTypeLevel
minimum message class that should be shown in editor margin
Definition: pythonEngine.h:242
static const PythonEngine * getInstance()
add a new function cancellation / observer. Each valid observer on the list will be requested to be c...
Definition: pythonEngine.cpp:148
AutoReload m_autoReload
debugger functionality
Definition: pythonEngine.h:310
item of BreakPointModel
Definition: breakPointModel.h:42
ito::RetVal pickleSingleParam(QString filename, QSharedPointer< ito::Param > value, const QString &valueName, ItomSharedSemaphore *semaphore=NULL)
Definition: pythonEngine.cpp:5920