20 #ifndef _PYTHONNODE_HXX_
21 #define _PYTHONNODE_HXX_
25 #include <SALOMEconfig.h>
26 #include CORBA_CLIENT_HEADER(SALOME_PyNode)
27 #include CORBA_CLIENT_HEADER(SALOME_Component)
40 static bool IsProxy( PyObject *ob );
42 static bool GetDestroyStatus( PyObject *ob );
43 static void DoNotTouchFileIfProxy( PyObject *ob );
44 static void UnlinkOnDestructorIfProxy( PyObject *ob );
45 static void IfProxyDoSomething( PyObject *ob,
const char *meth );
59 Engines::Container_var loadPythonAdapter(
InlineNode *reqNode,
bool& isInitializeRequested);
60 void loadRemoteContext(
InlineNode *reqNode, Engines::Container_ptr objContainer,
bool isInitializeRequested);
61 static std::string GetContainerLog(
const std::string& mode,
Container *container,
const Task *askingTask);
62 virtual bool hasImposedResource()
const;
72 static const char SCRIPT_FOR_SIMPLE_SERIALIZATION[];
80 void createRemoteAdaptedPyInterpretor(Engines::Container_ptr objContainer);
81 Engines::PyNodeBase_var retrieveDftRemotePyInterpretorIfAny(Engines::Container_ptr objContainer)
const;
82 void assignRemotePyInterpretor(Engines::PyNodeBase_var remoteInterp);
83 Engines::PyNodeBase_var getRemoteInterpreterHandle();
88 std::string pythonEntryName()
const;
93 virtual void checkBasicConsistency()
const ;
94 virtual void execute();
96 virtual void loadRemote();
97 virtual void loadLocal();
98 virtual void executeRemote();
99 virtual void executeLocal();
100 virtual void shutdown(
int level);
101 void imposeResource(
const std::string& resource_name,
102 const std::string& container_name)
override;
103 bool canAcceptImposedResource()
override;
104 bool hasImposedResource()
const override;
105 bool isUsingPythonCache()
const;
106 std::string getContainerLog();
107 PythonNode* cloneNode(
const std::string& name);
108 virtual std::string
typeName() {
return "YACS__ENGINE__PythonNode"; }
110 void setSqueezeStatusWithExceptions(
bool sqStatus,
const std::vector<std::string>& squeezeExceptions);
113 void squeezeMemorySafe();
114 static void ExecuteLocalInternal(
const std::string& codeStr, PyObject *context, std::string& errorDetails);
116 void executeLocalInternal(
const std::string& codeStr);
118 void squeezeMemory();
119 void squeezeMemoryRemote();
120 void freeKernelPynode();
122 static const char KIND[];
123 static const char IMPL_NAME[];
124 static const char SCRIPT_FOR_SERIALIZATION[];
125 static const char REMOTE_NAME[];
126 static const char DPL_INFO_NAME[];
128 bool _autoSqueeze =
false;
139 void createRemoteAdaptedPyInterpretor(Engines::Container_ptr objContainer);Engines::
140 PyNodeBase_var retrieveDftRemotePyInterpretorIfAny(Engines::Container_ptr objContainer)
const;
141 void assignRemotePyInterpretor(Engines::PyNodeBase_var remoteInterp);
142 Engines::PyNodeBase_var getRemoteInterpreterHandle();
148 virtual void init(
bool start=
true);
149 virtual void checkBasicConsistency()
const ;
150 virtual void execute();
152 virtual void loadRemote();
153 virtual void loadLocal();
154 virtual void executeRemote();
155 virtual void executeLocal();
156 virtual void shutdown(
int level);
157 void imposeResource(
const std::string& resource_name,
158 const std::string& container_name)
override;
159 bool canAcceptImposedResource()
override;
160 bool hasImposedResource()
const override;
161 std::string getContainerLog();
162 PyFuncNode* cloneNode(
const std::string& name);
163 virtual std::string
typeName() {
return "YACS__ENGINE__PyFuncNode"; }
165 static const char SCRIPT_FOR_SERIALIZATION[];
#define YACSRUNTIMESALOME_EXPORT
Base class for all composed nodes.
Class for calculation node (function) inlined (and executed) in the schema.
Class for calculation node (script) inlined (and executed) in the schema.
Base class for all nodes.
virtual std::string typeName()
const char * getSerializationScript() const
Engines::PyNode_var _pynode
virtual const char * getSerializationScript() const =0
std::string _imposedResource
virtual Engines::PyNodeBase_var retrieveDftRemotePyInterpretorIfAny(Engines::Container_ptr objContainer) const =0
returns (if any) an object, you have to deal with (UnRegister)
static PyObject * _pyClsBigObject
PyObject * _pyfuncSimpleSer
virtual void createRemoteAdaptedPyInterpretor(Engines::Container_ptr objContainer)=0
returns an object, you have to deal with (UnRegister)
virtual Engines::PyNodeBase_var getRemoteInterpreterHandle()=0
std::string _imposedContainer
virtual void assignRemotePyInterpretor(Engines::PyNodeBase_var remoteInterp)=0
void setSqueezeStatus(bool sqStatus)
Engines::PyScriptNode_var _pynode
virtual std::string typeName()
std::set< std::string > _nonSqueezableOutputNodes
list on output port name excluded from the squeeze mecanism
const char * getSerializationScript() const
bool getSqueezeStatus() const