-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Author : Nicolas REJNERI
#include "SalomeApp_PyInterp.h"
+#include "SUIT_ResourceMgr.h"
/*!
\brief Constructor
*/
-SalomeApp_PyInterp::SalomeApp_PyInterp()
- : PyConsole_Interp(), myFirstRun( true ), myFirstInitStudy( false )
+SalomeApp_PyInterp::SalomeApp_PyInterp( SUIT_ResourceMgr* resMgr )
+ : myFirstRun( true ), myFirstInitStudy( false ), myResourceMgr( resMgr )
{
}
{
}
+/*!
+ * Initialize context dictionaries. GIL is held already.
+ * The code executed in an embedded interpreter is expected to be run at the module
+ * level, in which case local and global context have to be the same dictionary.
+ * See: http://stackoverflow.com/questions/12265756/c-python-running-python-code-within-a-context
+ * for an explanation.
+ */
+bool SalomeApp_PyInterp::initContext()
+{
+ bool ok = PyConsole_Interp::initContext();
+ if ( ok ) {
+ int ret = PyRun_SimpleString( "import salome_iapp; salome_iapp.IN_SALOME_GUI = True" );
+ ok = ok && (ret == 0);
+ }
+ return ok;
+}
+
/*!
\brief Called before each Python command running.
*/
{
if ( myFirstRun ) {
myFirstRun = false;
+ QStringList parameters = myResourceMgr->parameters( "pythonpath" );
+ foreach ( QString parameter, parameters ) {
+ QStringList paths = myResourceMgr->stringValue( "pythonpath", parameter ).split( ";;" );
+ foreach( QString path, paths )
+ simpleRun( QString( "import sys; sys.path.append('%1')" ).arg( path ).toUtf8().constData(), false );
+ }
int ret = simpleRun( "from Help import *", false );
if ( ret )
return ret;
int ret = simpleRun( "import salome", false );
if ( ret )
return ret;
- ret = simpleRun( "salome.salome_init(0,1)", false );
+ ret = simpleRun( "salome.salome_init(embedded=True)", false );
if ( ret )
return ret;
}