-// Copyright (C) 2006-2016 CEA/DEN, EDF R&D
+// Copyright (C) 2006-2023 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
#include "PythonNode.hxx"
#include "SalomeHPContainer.hxx"
#include "SalomeContainerTmpForHP.hxx"
-#include "AutoGIL.hxx"
+#include "PythonCppUtils.hxx"
#include "PythonPorts.hxx"
#include "YacsTrace.hxx"
if(!_container)
throw Exception("No container specified !");
SalomeContainer *containerCast0(dynamic_cast<SalomeContainer *>(_container));
- SalomeHPContainerBase *containerCast1(dynamic_cast<SalomeHPContainerBase *>(_container));
+ SalomeHPContainer *containerCast1(dynamic_cast<SalomeHPContainer *>(_container));
if(containerCast0)
objContainer=containerCast0->getContainerPtr(this);
else if(containerCast1)
{
- objContainer=containerCast1->getContainerPtr(this);
+ YACS::BASES::AutoCppPtr<SalomeContainerTmpForHP> tmpCont(SalomeContainerTmpForHP::BuildFrom(containerCast1,this));
+ objContainer=tmpCont->getContainerPtr(this);
}
else
throw Exception("Unrecognized type of container ! Salome one is expected !");
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;i<serializationInputC.length();i++)
+ serializationInputCorba->length(len+1);
+ for(int i=0;i<len+1;i++)
(*serializationInputCorba)[i]=serializationInputC[i];
Py_DECREF(serializationInput);
}
resultCorbaC[resultCorba->length()]='\0';
for(int i=0;i<resultCorba->length();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;