Salome HOME
[EDF29852] : Mecanism of fault tolerant in SALOME_Container to resist against emitted...
[modules/kernel.git] / src / Basics / KernelBasis.cxx
1 // Copyright (C) 2021-2024  CEA, EDF
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "KernelBasis.hxx"
21
22 static bool DEFAULT_SSL_MODE = true;
23 static bool GUI_MODE = false;
24
25 // IOR of SALOME_Embedded_NamingService servant
26 static std::string IOR_OF_EMBEDDED_NS;
27
28 bool getSSLMode()
29 {
30   return DEFAULT_SSL_MODE;
31 }
32
33 void setSSLMode(bool sslMode)
34 {
35   DEFAULT_SSL_MODE = sslMode;
36 }
37
38 bool getGUIMode()
39 {
40   return GUI_MODE;
41 }
42
43 void setGUIMode(bool guiMode)
44 {
45   GUI_MODE = guiMode;
46 }
47
48 std::string getIOROfEmbeddedNS()
49 {
50   return IOR_OF_EMBEDDED_NS;
51 }
52
53 void setIOROfEmbeddedNS(const std::string& ior)
54 {
55   IOR_OF_EMBEDDED_NS = ior;
56 }
57
58 #include <iostream>
59
60 /*!
61  * Callable from Python in case if sys.stdout is not connected to tty
62  */
63 void WriteInStdout(const std::string& msg)
64 {
65   std::cout << msg << std::endl << std::flush;
66 }
67
68 /*!
69  * Callable from Python in case if sys.stdout is not connected to tty
70  */
71 void WriteInStderr(const std::string& msg)
72 {
73   std::cerr << msg << std::endl << std::flush;
74 }
75
76 namespace SALOME
77 {
78   static constexpr char IN_PROCESS_VALUE = 0;
79   static constexpr char IN_PROCESS_VALUE_STR[] = "InProcess";
80   static constexpr char OUT_OF_PROCESS_NO_REPLAY_VALUE = 1;
81   static constexpr char OUT_OF_PROCESS_NO_REPLAY_VALUE_STR[] = "OutOfProcessNoReplay";
82   static constexpr char OUT_OF_PROCESS_WITH_REPLAY_VALUE = 2;
83   static constexpr char OUT_OF_PROCESS_WITH_REPLAY_VALUE_STR[] = "OutOfProcessWithReplay";
84
85   static PyExecutionMode FromIntToPyExecutionMode(char value)
86   {
87     switch(value)
88     {
89       case IN_PROCESS_VALUE:
90         return PyExecutionMode::InProcess;
91       case OUT_OF_PROCESS_NO_REPLAY_VALUE:
92         return PyExecutionMode::OutOfProcessNoReplay;
93       case OUT_OF_PROCESS_WITH_REPLAY_VALUE:
94         return PyExecutionMode::OutOfProcessWithReplay;
95     }
96     throw std::range_error("FromIntToPyExecutionMode : Invalid value for Py Execution Mode ! Must be in 0 (InProcess), 1 (OutOfProcessNoReplay) or 2 (OutOfProcessWithReplay) !");
97   }
98   
99   static PyExecutionMode FromStrToPyExecutionMode(const std::string& value)
100   {
101     if(value == IN_PROCESS_VALUE_STR)
102       return PyExecutionMode::InProcess;
103     if(value == OUT_OF_PROCESS_NO_REPLAY_VALUE_STR)
104       return PyExecutionMode::OutOfProcessNoReplay;
105     if(value == OUT_OF_PROCESS_WITH_REPLAY_VALUE_STR)
106       return PyExecutionMode::OutOfProcessWithReplay;
107     throw std::range_error("FromStrToPyExecutionMode : Invalid str value for py execution mode !");
108   }
109
110   static std::string FromExecutionModeToStr(PyExecutionMode execMode)
111   {
112     switch(execMode)
113     {
114       case PyExecutionMode::InProcess:
115         return IN_PROCESS_VALUE_STR;
116       case PyExecutionMode::OutOfProcessNoReplay:
117         return OUT_OF_PROCESS_NO_REPLAY_VALUE_STR;
118       case PyExecutionMode::OutOfProcessWithReplay:
119         return OUT_OF_PROCESS_WITH_REPLAY_VALUE_STR;
120       default:
121         throw std::range_error("FromExecutionModeToStr : Invalid str value for py execution mode !");
122     }
123   }
124 }
125
126 static SALOME::PyExecutionMode DefaultPyExecMode = SALOME::PyExecutionMode::NotSet;
127
128 void SALOME::SetPyExecutionMode(PyExecutionMode mode)
129 {
130   DefaultPyExecMode = mode;
131 }
132
133 void SALOME::SetPyExecutionModeStr(const std::string& mode)
134 {
135   SALOME::SetPyExecutionMode( SALOME::FromStrToPyExecutionMode(mode) );
136 }
137
138 std::vector<std::string> SALOME::GetAllPyExecutionModes()
139 {
140   return {IN_PROCESS_VALUE_STR,OUT_OF_PROCESS_NO_REPLAY_VALUE_STR,OUT_OF_PROCESS_WITH_REPLAY_VALUE_STR};
141 }
142
143 std::string SALOME::GetPyExecutionModeStr()
144 {
145   return SALOME::FromExecutionModeToStr( SALOME::GetPyExecutionMode() );
146 }
147
148 SALOME::PyExecutionMode SALOME::GetPyExecutionMode()
149 {
150   auto isEnvVarSet = []() -> SALOME::PyExecutionMode
151   {
152     const char *envVar = std::getenv("SALOME_PY_EXECUTION_MODE");
153     if (envVar && (envVar[0] != '\0'))
154     {
155       const int numValue = std::stoi(envVar);
156       return SALOME::FromIntToPyExecutionMode( static_cast<char>(numValue) );
157     }
158     return SALOME::PyExecutionMode::InProcess;
159   };
160   if(DefaultPyExecMode == SALOME::PyExecutionMode::NotSet)
161     DefaultPyExecMode = isEnvVarSet();
162   return DefaultPyExecMode;
163 }