{
if(!_pyClsBigObject)
return false;
- return PyObject_IsInstance( ob, _pyClsBigObject) == 1;
+ if( PyObject_IsInstance( ob, _pyClsBigObject) == 1 )
+ {
+ return true;
+ }
+ else
+ {
+ if( PyList_Check( ob ) )
+ {
+ auto sz = PyList_Size( ob );
+ for( auto i = 0 ; i < sz ; ++i )
+ {
+ PyObject *elt = PyList_GetItem( ob, i );
+ if( PythonEntry::IsProxy(elt) )
+ return true;
+ }
+ }
+ }
+ return false;
}
bool PythonEntry::GetDestroyStatus( PyObject *ob )
}
return false;
}
+ else
+ {
+ if( PyList_Check( ob ) )
+ {
+ auto sz = PyList_Size( ob );
+ for( auto i = 0 ; i < sz ; ++i )
+ {
+ PyObject *elt = PyList_GetItem( ob, i );
+ if( PythonEntry::GetDestroyStatus(elt) )
+ return true;
+ }
+ }
+ }
return false;
}
AutoPyRef unlinkOnDestructor = PyObject_GetAttrString(ob,meth);
AutoPyRef tmp = PyObject_CallFunctionObjArgs(unlinkOnDestructor,nullptr);
}
+ else
+ {
+ if( PyList_Check( ob ) )
+ {
+ auto sz = PyList_Size( ob );
+ for( auto i = 0 ; i < sz ; ++i )
+ {
+ PyObject *elt = PyList_GetItem( ob, i );
+ PythonEntry::IfProxyDoSomething( elt, meth );
+ }
+ }
+ }
}
void PythonEntry::DoNotTouchFileIfProxy( PyObject *ob )
IfProxyDoSomething(ob,"unlinkOnDestructor");
}
-PythonNode::PythonNode(const PythonNode& other, ComposedNode *father):InlineNode(other,father),_autoSqueeze(other._autoSqueeze)
+PythonNode::PythonNode(const PythonNode& other, ComposedNode *father):
+InlineNode(other,father),_autoSqueeze(other._autoSqueeze),_nonSqueezableOutputNodes(other._nonSqueezableOutputNodes)
{
_pynode = Engines::PyScriptNode::_nil();
_implementation=IMPL_NAME;
DEBTRACE( "++++++++++++++ End PyNode::execute: " << getName() << " ++++++++++++++++++++" );
}
+/*!
+ * [EDF28562]
+ * \param in squeezeExceptions list on output port name excluded from the squeeze mecanism
+ */
+void PythonNode::setSqueezeStatusWithExceptions(bool sqStatus, const std::vector<std::string>& squeezeExceptions)
+{
+ this->setSqueezeStatus(sqStatus);
+ this->_nonSqueezableOutputNodes = std::set<std::string>(squeezeExceptions.begin(), squeezeExceptions.end());
+}
+
void PythonNode::squeezeMemorySafe()
{
AutoGIL agil;
}
for(auto p : _setOfOutputPort)
{
+ if (!this->_nonSqueezableOutputNodes.empty() && this->_nonSqueezableOutputNodes.find(p->getName()) != this->_nonSqueezableOutputNodes.end())
+ continue;
PyDict_DelItemString(_context,p->getName().c_str());
OutputPyPort *p2(static_cast<OutputPyPort *>(p));
p2->putWithoutForward(Py_None);
}
for(auto p : _setOfOutputPort)
{
+ if (!this->_nonSqueezableOutputNodes.empty() && this->_nonSqueezableOutputNodes.find(p->getName()) != this->_nonSqueezableOutputNodes.end())
+ continue;
OutputPyPort *p2(static_cast<OutputPyPort *>(p));
p2->putWithoutForward(Py_None);
}