itom 2.2.1
ito::PythonEngine Class Reference

List of all members.

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
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)
ito::RetVal addMethodToModule (PyMethodDef *def)
ito::RetVal delMethodFromModule (const char *ml_name)
ito::RetVal pythonAddBuiltinMethods ()
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::addMethodToModule ( PyMethodDef *  def) [private]

< module-dictionary (borrowed)

< function object for new dynamic function call (new reference)

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

ito::RetVal ito::PythonEngine::delMethodFromModule ( const char *  ml_name) [private]

< module-dictionary (borrowed)

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

returns reference to main dictionary (main workspace)

PyObject* ito::PythonEngine::getLocalDictionary ( ) [inline, private]

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 
) [static, private]

< 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

ito::RetVal ito::PythonEngine::pythonAddBuiltinMethods ( ) [private]

< insert all dynamic function calls to PythonAdditionalModuleITOM, which must be "alive" until Py_Finalize()

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 [static, private]
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 [static, private]
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:
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Properties Friends