]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Clearly identify when we execute Python code from SALOME embedded console.
authorabn <adrien.bruneton@cea.fr>
Mon, 13 Oct 2014 12:03:40 +0000 (14:03 +0200)
committerabn <adrien.bruneton@cea.fr>
Mon, 13 Oct 2014 12:03:40 +0000 (14:03 +0200)
src/PyConsole/PyConsole_Interp.cxx
src/PyConsole/PyConsole_Interp.h
src/PyInterp/PyInterp_Interp.cxx
src/PyInterp/PyInterp_Interp.h

index c200a85c091d2e94bfa7d73a532fdca2db705c44..01c94fe20953b5c1012027d729682f9fb922fefd 100644 (file)
   Creates new python interpreter.
 */
 PyConsole_Interp::PyConsole_Interp(): PyInterp_Interp()
-{
-}
+{}
 
 /*!
   \brief Destructor.
 
   Does nothing for the moment.
 */
-PyConsole_Interp::~PyConsole_Interp()
+PyConsole_Interp::~PyConsole_Interp() { }
+
+/*! Sets the variable "__IN_SALOME_GUI_CONSOLE" to True.
+* This is not attached to a module (like salome_iapp.IN_SALOME_GUI_CONSOLE)
+* since modules are shared across all interpreters in SALOME.
+*
+* (GIL is already acquired here)
+*/
+int PyConsole_Interp::beforeRun()
 {
+  return PyRun_SimpleString("__builtins__.__IN_SALOME_GUI_CONSOLE=True");
 }
  
+int PyConsole_Interp::afterRun()
+{
+  return PyRun_SimpleString("__builtins__.__IN_SALOME_GUI_CONSOLE=False");
+}
index 0b929332efdcb5a6961a7eee085d29966d528938..5434e481347a9f00ef40b54d4e85c42362caf924 100644 (file)
@@ -37,6 +37,9 @@ class PYCONSOLE_EXPORT PyConsole_Interp : public PyInterp_Interp
 public:
   PyConsole_Interp();
   ~PyConsole_Interp();
+
+  virtual int afterRun();
+  virtual int beforeRun();
 };
 
 #endif // PYCONSOLE_INTERP_H
index f76c3c69ef7d4f64b7a10e75368982a43567f641..df95ecfb526fe29867303ea2b6ddd2e3eca30fa4 100644 (file)
@@ -293,7 +293,10 @@ bool PyInterp_Interp::initContext()
   _global_context = PyModule_GetDict(m);          // get interpreter global variable context
   Py_INCREF(_global_context);
   _local_context = _global_context;
-  return true;
+
+  int ret = PyRun_SimpleString("import salome_iapp;salome_iapp.IN_SALOME_GUI=True");
+
+  return ret == 0;
 }
 
 /*!
@@ -412,7 +415,9 @@ static int compile_command(const char *command, PyObject * global_ctxt, PyObject
 int PyInterp_Interp::run(const char *command)
 {
   beforeRun();
-  return simpleRun(command);
+  int ret = simpleRun(command);
+  afterRun();
+  return ret;
 }
 
 /**
@@ -424,6 +429,15 @@ int PyInterp_Interp::beforeRun()
   return 0;
 }
 
+/**
+ * Called after a command is run (when calling run() method). Not thread-safe. Caller's responsability
+ * to acquire GIL if needed.
+ */
+int PyInterp_Interp::afterRun()
+{
+  return 0;
+}
+
 /*!
   \brief Run Python command (used internally). Not thread-safe. GIL acquisition is caller's responsability.
   \param command Python command
index 33c6a2d4762a4dc8edefb94cc4d314b47ff38a92..7883cd4ec99dccdd1e628f6d0b4dbd857db06eb6 100644 (file)
@@ -89,6 +89,7 @@ protected:
   std::list<std::string>::iterator _ith;
 
   virtual int beforeRun();
+  virtual int afterRun();
   int simpleRun(const char* command, const bool addToHistory = true);
 
   virtual void initPython();