X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fruntime%2FDistributedPythonNode.cxx;h=40f75b1187aa4d558bc7b49776b2324e00ea6438;hb=97f6e90e5168153d69e5b4a90f05878142a3b61d;hp=88dff018532dff40366d2a74c46a07dc45eba5b2;hpb=07d0c0bc5b63896b75dc523ece75f739e28efadb;p=modules%2Fyacs.git diff --git a/src/runtime/DistributedPythonNode.cxx b/src/runtime/DistributedPythonNode.cxx index 88dff0185..40f75b118 100644 --- a/src/runtime/DistributedPythonNode.cxx +++ b/src/runtime/DistributedPythonNode.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2006-2016 CEA/DEN, EDF R&D +// Copyright (C) 2006-2019 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -113,13 +113,12 @@ void DistributedPythonNode::load() if(!_container) throw Exception("No container specified !"); SalomeContainer *containerCast0(dynamic_cast(_container)); - SalomeHPContainer *containerCast1(dynamic_cast(_container)); + SalomeHPContainerBase *containerCast1(dynamic_cast(_container)); if(containerCast0) objContainer=containerCast0->getContainerPtr(this); else if(containerCast1) { - YACS::BASES::AutoCppPtr tmpCont(SalomeContainerTmpForHP::BuildFrom(containerCast1,this)); - objContainer=tmpCont->getContainerPtr(this); + objContainer=containerCast1->getContainerPtr(this); } else throw Exception("Unrecognized type of container ! Salome one is expected !"); @@ -181,11 +180,12 @@ void DistributedPythonNode::execute() PyTuple_SetItem(args,pos,ob); } PyObject *serializationInput=PyObject_CallObject(_pyfuncSer,args); - std::string serializationInputC=PyBytes_AsString(serializationInput); + Py_ssize_t len = PyBytes_Size(serializationInput); + char* serializationInputC = PyBytes_AsString(serializationInput); + //int ret = PyBytes_AsStringAndSize(serializationInput, &serializationInputC, &len); serializationInputCorba=new Engines::pickledArgs; - int len=serializationInputC.length(); - serializationInputCorba->length(serializationInputC.length()); - for(int i=0;ilength(len+1); + for(int i=0;ilength()]='\0'; for(int i=0;ilength();i++) resultCorbaC[i]=(*resultCorba)[i]; + int lenResCorba=resultCorba->length(); delete resultCorba; { AutoGIL agil; args = PyTuple_New(1); - PyObject* resultPython=PyBytes_FromString(resultCorbaC); + //PyObject* resultPython=PyBytes_FromString(resultCorbaC); + PyObject* resultPython=PyBytes_FromStringAndSize(resultCorbaC,lenResCorba); delete [] resultCorbaC; PyTuple_SetItem(args,0,resultPython); PyObject *finalResult=PyObject_CallObject(_pyfuncUnser,args); DEBTRACE( "-----------------DistributedPythonNode::outputs-----------------" ); + if(finalResult == NULL) + { + std::stringstream msg; + msg << "Conversion with pickle of output ports failed !"; + msg << " : " << __FILE__ << ":" << __LINE__; + _errorDetails=msg.str(); + throw YACS::ENGINE::ConversionException(msg.str()); + } int nres=1; if(finalResult == Py_None) nres=0; @@ -238,7 +248,7 @@ void DistributedPythonNode::execute() { OutputPyPort *p=(OutputPyPort *)*iter; DEBTRACE( "port name: " << p->getName() ); - DEBTRACE( "port kind: " << p->edGetType()->kind() ); + DEBTRACE( "port kind: " << p->typeName() ); DEBTRACE( "port pos : " << pos ); if(PyTuple_Check(finalResult))ob=PyTuple_GetItem(finalResult,pos) ; else ob=finalResult;