itom  3.0.0
ito::PythonEngine Class Reference
Inheritance diagram for ito::PythonEngine:

Classes

struct  AutoReload
 

Public Slots

void pythonRunString (QString cmd)
 
void pythonDebugString (QString cmd)
 
void pythonExecStringFromCommandLine (QString cmd)
 
void pythonRunFile (QString filename)
 
void pythonDebugFile (QString filename)
 
void pythonRunStringOrFunction (QString cmdOrFctHash)
 
void pythonDebugStringOrFunction (QString cmdOrFctHash)
 
void pythonInterruptExecution ()
 
void pythonDebugCommand (tPythonDbgCmd cmd)
 
void setAutoReloader (bool enabled, bool checkFile, bool checkCmd, bool checkFct)
 
void readSettings ()
 
void propertiesChanged ()
 
void pythonSyntaxCheck (const QString &code, QPointer< QObject > sender)
 public slot invoked by the scriptEditorWidget More...
 
void pythonGenericSlot (PyObject *callable, PyObject *argumentTuple)
 these slots are only connected if python in debug-mode; while waiting these slots will be treated due to progressEvents-call in PythonEngine::PyDbgCommandLoop
 
void breakPointAdded (BreakPointItem bp, int row)
 
void breakPointDeleted (QString filename, int lineNo, int pyBpNumber)
 
void breakPointChanged (BreakPointItem oldBp, BreakPointItem newBp)
 
ito::RetVal setupBreakPointDebugConnections ()
 
ito::RetVal shutdownBreakPointDebugConnections ()
 
bool renameVariable (bool globalNotLocal, const QString &oldFullItemName, QString newKey, ItomSharedSemaphore *semaphore=NULL)
 
bool deleteVariable (bool globalNotLocal, const QStringList &fullItemNames, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal pickleVariables (bool globalNotLocal, QString filename, QStringList varNames, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal pickleSingleParam (QString filename, QSharedPointer< ito::Param > value, const QString &valueName, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal unpickleVariables (bool globalNotLocal, QString filename, QString packedVarName, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal saveMatlabVariables (bool globalNotLocal, QString filename, QStringList varNames, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal saveMatlabSingleParam (QString filename, QSharedPointer< ito::Param > value, const QString &valueName, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal loadMatlabVariables (bool globalNotLocal, QString filename, QString packedVarName, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal registerAddInInstance (QString varname, ito::AddInBase *instance, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal getSysModules (QSharedPointer< QStringList > modNames, QSharedPointer< QStringList > modFilenames, QSharedPointer< IntList > modTypes, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal reloadSysModules (QSharedPointer< QStringList > modNames, ItomSharedSemaphore *semaphore=NULL)
 
void registerWorkspaceContainer (PyWorkspaceContainer *container, bool registerNotUnregister, bool globalNotLocal)
 
void workspaceGetChildNode (PyWorkspaceContainer *container, QString fullNameParentItem)
 
void workspaceGetValueInformation (PyWorkspaceContainer *container, const QString &fullItemName, QSharedPointer< QString > extendedValue, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal checkVarnamesInWorkspace (bool globalNotLocal, const QStringList &names, QSharedPointer< IntList > existing, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal putParamsToWorkspace (bool globalNotLocal, const QStringList &names, const QVector< SharedParamBasePointer > &values, ItomSharedSemaphore *semaphore=NULL)
 
ito::RetVal getVarnamesListInWorkspace (bool globalNotLocal, const QString &find, QSharedPointer< QStringList > varnameList, ItomSharedSemaphore *semaphore)
 
ito::RetVal getParamsFromWorkspace (bool globalNotLocal, const QStringList &names, QVector< int > paramBaseTypes, QSharedPointer< SharedParamBasePointerVector > values, ItomSharedSemaphore *semaphore=NULL)
 

Signals

void pythonDebugPositionChanged (QString filename, int lineNo)
 
void pythonStateChanged (tPythonTransitions pyTransition)
 
void pythonModifyLocalDict (PyObject *localDict, ItomSharedSemaphore *semaphore)
 
void pythonModifyGlobalDict (PyObject *globalDict, ItomSharedSemaphore *semaphore)
 
void pythonCurrentDirChanged ()
 
void updateCallStack (QStringList filenames, IntList lines, QStringList methods)
 
void deleteCallStack ()
 
void pythonSetCursor (const Qt::CursorShape cursor)
 
void pythonResetCursor ()
 
void pythonAutoReloadChanged (bool enabled, bool checkFile, bool checkCmd, bool checkFct)
 
void clearCommandLine ()
 
void startInputCommandLine (QSharedPointer< QByteArray > buffer, ItomSharedSemaphore *semaphore)
 

Public Member Functions

Q_INVOKABLE void pythonSetup (ito::RetVal *retValue)
 
Q_INVOKABLE ito::RetVal scanAndRunAutostartFolder (QString currentDirAfterScan=QString())
 
Q_INVOKABLE ito::RetVal pythonShutdown (ItomSharedSemaphore *aimWait=NULL)
 
Q_INVOKABLE ito::RetVal stringEncodingChanged ()
 
ito::BreakPointModel * getBreakPointModel () const
 
bool isPythonBusy () const
 
bool isPythonDebugging () const
 
bool isPythonDebuggingAndWaiting () const
 
bool execInternalCodeByDebugger () const
 
void setExecInternalCodeByDebugger (bool value)
 
ito::RetVal checkForPyExceptions ()
 
void printPythonErrorWithoutTraceback ()
 
void pythonDebugFunction (PyObject *callable, PyObject *argTuple, bool gilExternal=false)
 
void pythonRunFunction (PyObject *callable, PyObject *argTuple, bool gilExternal=false)
 
PyObject * getGlobalDictionary () const
 
bool pySyntaxCheckAvailable () const
 
QList< int > parseAndSplitCommandInMainComponents (const char *str, QByteArray &encoding) const
 
QString getPythonExecutable () const
 
Qt::HANDLE getPythonThreadId () const
 

Static Public Member Functions

static bool isInterruptQueued ()
 
static const PythonEnginegetInstance ()
 

Protected Member Functions

ito::RetVal runPyFile (const QString &pythonFileName)
 
ito::RetVal debugFile (const QString &pythonFileName)
 
ito::RetVal runString (const QString &command)
 
ito::RetVal debugString (const QString &command)
 
ito::RetVal debugFunction (PyObject *callable, PyObject *argTuple, bool gilExternal=false)
 
ito::RetVal runFunction (PyObject *callable, PyObject *argTuple, bool gilExternal=false)
 
ito::RetVal modifyTracebackDepth (int NrOfLevelsToPopAtFront=-1, bool showTraceback=true)
 
PyObject * setPyErrFromException (const std::exception &exc)
 
void connectNotify (const char *signal)
 

Private Member Functions

PyObject * getLocalDictionary ()
 
PyObject * getPyObjectByFullName (bool globalNotLocal, const QStringList &fullNameSplittedByDelimiter, QString *validVariableName=NULL)
 
PyObject * getPyObjectByFullName (bool globalNotLocal, const QString &fullName, QString *validVariableName=NULL)
 
void setGlobalDictionary (PyObject *mainDict=NULL)
 
void setLocalDictionary (PyObject *localDict)
 
void emitPythonDictionary (bool emitGlobal, bool emitLocal, PyObject *globalDict, PyObject *localDict)
 
ito::RetVal pickleDictionary (PyObject *dict, const QString &filename)
 
ito::RetVal unpickleDictionary (PyObject *destinationDict, const QString &filename, bool overwrite)
 
void enqueueDbgCmd (ito::tPythonDbgCmd dbgCmd)
 
ito::tPythonDbgCmd dequeueDbgCmd ()
 
bool DbgCommandsAvailable ()
 
void clearDbgCmdLoop ()
 
ito::RetVal pythonStateTransition (tPythonTransitions transition)
 
ito::RetVal pythonAddBreakpoint (const QString &filename, const int lineno, const bool enabled, const bool temporary, const QString &condition, const int ignoreCount, int &pyBpNumber)
 
ito::RetVal pythonEditBreakpoint (const int pyBpNumber, const QString &filename, const int lineno, const bool enabled, const bool temporary, const QString &condition, const int ignoreCount)
 
ito::RetVal pythonDeleteBreakpoint (const int pyBpNumber)
 
ito::RetVal autoReloaderCheck ()
 
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). This returns a new reference of the unicode object or NULL with a corresponding error message (python error flag is cleared)
 

Static Private Member Functions

static PythonEnginegetInstanceInternal ()
 
static int queuedInterrupt (void *state)
 
static PyObject * PyInitItomDbg (void)
 
static PyObject * PyDbgCommandLoop (PyObject *pSelf, PyObject *pArgs)
 

Private Attributes

bool m_started
 
QMutex dbgCmdMutex
 
QMutex pythonStateChangeMutex
 
QMutex dictChangeMutex
 
QDesktopWidget * m_pDesktopWidget
 
QQueue< ito::tPythonDbgCmd > debugCommandQueue
 
ito::tPythonDbgCmd debugCommand
 
ito::tPythonState pythonState
 
ito::BreakPointModel * bpModel
 
PyObject * mainModule
 main module of python (builtin) [borrowed]
 
PyObject * mainDictionary
 main dictionary of python [borrowed]
 
PyObject * localDictionary
 local dictionary of python [borrowed], usually NULL unless if debugger is in "interaction-mode", then globalDictionary is equal to the local dictionary of the current frame
 
PyObject * globalDictionary
 global dictionary of python [borrowed], equals to mainDictionary unless if debugger is in "interaction-mode", then globalDictionary is equal to the global dictionary of the current frame
 
PyObject * itomDbgModule
 debugger module
 
PyObject * itomDbgInstance
 debugger instance
 
PyObject * itomModule
 itom module [new ref]
 
PyObject * itomFunctions
 ito functions [additional python methods] [new ref]
 
PyObject * m_pyModGC
 
PyObject * m_pyModSyntaxCheck
 
Qt::HANDLE m_pythonThreadId
 
PyObject * dictUnicode
 
QSet< ito::PyWorkspaceContainer * > m_mainWorkspaceContainer
 
QSet< ito::PyWorkspaceContainer * > m_localWorkspaceContainer
 
QHash< size_t, FuncWeakRefm_pyFuncWeakRefHashes
 hash table containing weak reference to callable python methods or functions and as second, optional PyObject* an tuple, passed as argument to that function. These functions are for example executed by menu-clicks in the main window.
 
size_t m_pyFuncWeakRefAutoInc
 
QString m_pythonExecutable
 absolute path to the python executable
 
bool m_executeInternalPythonCodeInDebugMode
 if true, button events, user interface connections to python methods... will be executed by debugger
 
PyMethodDef * PythonAdditionalModuleITOM
 
bool m_includeItomImportBeforeSyntaxCheck
 
QString m_includeItomImportString
 string that is prepended to each script before syntax check (if m_includeItomImportBeforeSyntaxCheck is true)
 
wchar_t * m_pUserDefinedPythonHome
 
AutoReload m_autoReload
 debugger functionality
 
QAtomicInt m_interruptCounter
 

Static Private Attributes

static PyMethodDef PyMethodItomDbg []
 
static PyModuleDef PyModuleItomDbg
 
static QMutex instatiated
 
static QMutex instancePtrProtection
 
static QString fctHashPrefix = ":::itomfcthash:::"
 
static PythonEngineinstance = NULL
 

Friends

class ito::PythonItom
 
class ito::PyStream
 

Member Function Documentation

ito::RetVal ito::PythonEngine::checkVarnamesInWorkspace ( bool  globalNotLocal,
const QStringList &  names,
QSharedPointer< IntList >  existing,
ItomSharedSemaphore semaphore = NULL 
)
slot

check if variable already exist in workspace, existing is 0 (non existing), 1 (existing, but can be overwritten), 2 (existing, not overwritable, e.g. function, method...)

ito::RetVal ito::PythonEngine::debugFile ( const QString &  pythonFileName)
protected

< first, clear all existing breakpoints

< syntax error

< disconnect connections for live-changes in breakpoints

ito::RetVal ito::PythonEngine::debugFunction ( PyObject *  callable,
PyObject *  argTuple,
bool  gilExternal = false 
)
protected

< syntax error

< disconnect connections for live-changes in breakpoints

ito::RetVal ito::PythonEngine::debugString ( const QString &  command)
protected

< first, clear all existing breakpoints

< syntax error

< disconnect connections for live-changes in breakpoints

PyObject* ito::PythonEngine::getGlobalDictionary ( ) const
inline

returns reference to main dictionary (main workspace)

PyObject* ito::PythonEngine::getLocalDictionary ( )
inlineprivate

returns reference to local dictionary (workspace of method, which is handled right now). Is NULL if no method is executed right now.

ito::RetVal ito::PythonEngine::pickleSingleParam ( QString  filename,
QSharedPointer< ito::Param value,
const QString &  valueName,
ItomSharedSemaphore semaphore = NULL 
)
slot

save a single DataObject, PointCloud or PolygonMesh to an *.idc file using the python module 'pickle'.

Invoke this method by another thread (e.g. any GUI) to save a single object to an 'idc' file.

Parameters
filenameis the filename of the idc file
valueis the given DataObject, PointCloud or PolygonMesh in terms of ito::Param
valueNameis the name of the variable in the idc file
semaphoreis the control semaphore for an asychronous call.
PyObject * ito::PythonEngine::PyDbgCommandLoop ( PyObject *  pSelf,
PyObject *  pArgs 
)
staticprivate

< check if key interrupt occurred

< do_quit instead of set_quit, since one member-variable is set in itoDebugger.py

ito::RetVal ito::PythonEngine::pythonAddBreakpoint ( const QString &  filename,
const int  lineno,
const bool  enabled,
const bool  temporary,
const QString &  condition,
const int  ignoreCount,
int &  pyBpNumber 
)
private

retNumber is new pyBpNumber, must now be added to BreakPointModel

void ito::PythonEngine::pythonSetup ( ito::RetVal retValue)

< add all static, known function calls to python-module itom

< add all static, known function calls to python-module itomdbg

< must be called after any PyImport_AppendInittab-call

< prepare Python multithreading

< borrowed reference

< http://bytes.com/topic/python/answers/649229-_pyobject_new-pyobject_init-pyinstance_new-etc, new reference

void ito::PythonEngine::pythonSyntaxCheck ( const QString &  code,
QPointer< QObject >  sender 
)
slot

public slot invoked by the scriptEditorWidget

This function calls the frosted python module. This module is able to check the syntax. It called from ScriptEditorWidget::checkSyntax() and delivers the results by calling ScriptEditorWidget::syntaxCheckResult(...).

Parameters
codeThis QString contains the code that frosted is supposed to check
senderthis is a pointer to the object that called this method
Returns
no real return value. Results are returned by invoking ScriptEditorWidget::syntaxCheckResult(...)
ito::RetVal ito::PythonEngine::saveMatlabSingleParam ( QString  filename,
QSharedPointer< ito::Param value,
const QString &  valueName,
ItomSharedSemaphore semaphore = NULL 
)
slot

save a single DataObject, PointCloud or PolygonMesh to a Matlab *.mat file using the python module 'scipy'.

Invoke this method by another thread (e.g. any GUI) to save a single object to an 'mat' file.

Parameters
filenameis the filename of the mat file
valueis the given DataObject, PointCloud or PolygonMesh in terms of ito::Param
valueNameis the name of the variable in the mat file
semaphoreis the control semaphore for an asychronous call.
void ito::PythonEngine::setAutoReloader ( bool  enabled,
bool  checkFile,
bool  checkCmd,
bool  checkFct 
)
slot

Member Data Documentation

PyMethodDef ito::PythonEngine::PyMethodItomDbg
staticprivate
Initial value:
= {
{"pyDbgCommandLoop", PythonEngine::PyDbgCommandLoop, METH_VARARGS, "will be invoked if debugger stopped at the given filename and line"},
{NULL, NULL, 0, NULL}
}
PyModuleDef ito::PythonEngine::PyModuleItomDbg
staticprivate
Initial value:
= {
PyModuleDef_HEAD_INIT, "itomDbgWrapper", NULL, -1, PythonEngine::PyMethodItomDbg,
NULL, NULL, NULL, NULL
}

The documentation for this class was generated from the following files: