Salome HOME
NRI : Merge from V1_2.
[modules/kernel.git] / src / SALOMEGUI / QAD_PyInterp_mono.cxx
1 //  SALOME SALOMEGUI : implementation of desktop and GUI kernel
2 //
3 //  Copyright (C) 2003  CEA/DEN, EDF R&D
4 //
5 //
6 //
7 //  File   : QAD_PyInterp_mono.cxx
8 //  Author : Paul RASCLE, EDF
9 //  Module : SALOME
10 //  $Header$
11
12 using namespace std;
13 using namespace std;
14 #include "QAD_PyInterp_mono.h"
15 #include "utilities.h"
16
17 /*!
18  * constructor : only one Python interpreter, shared within SALOME studies.
19  * calls initialize method defined in base class, which calls virtual methods
20  * initstate & initcontext redefined here.
21  */
22 QAD_PyInterp_mono::QAD_PyInterp_mono(): PyInterp_base()
23 {
24   initialize();
25 }
26
27 QAD_PyInterp_mono::~QAD_PyInterp_mono()
28 {
29 }
30
31 /*!
32  * EDF-CCAR
33  * When SALOME uses mono  Python interpreter feature,
34  * every study has its own context (dictionnary) but shares builtins
35  * and all the modules (sys, ...) with other studies.
36  * A module imported in a study is seen in another study (pros ans cons !).
37  */
38
39 void QAD_PyInterp_mono::initState()
40 {
41   salomeAcquireLock(); //acquire python global lock (one for all interpreters)
42   _tstate = PyThreadState_Get();
43   PySys_SetArgv(PyInterp_base::_argc,PyInterp_base::_argv);      // initialize sys.argv
44 }
45
46 void QAD_PyInterp_mono::initContext()
47 {
48   _g = PyDict_New();          // create interpreter dictionnary context
49   PyObject *bimod = PyImport_ImportModule("__builtin__");
50   PyDict_SetItemString(_g, "__builtins__", bimod);
51   Py_DECREF(bimod);
52 }
53