From: Nicolas Geimer Date: Tue, 18 Apr 2017 12:47:11 +0000 (+0200) Subject: [PYTHON 3] WIP X-Git-Tag: Before_python3_27062017~12 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=07d0c0bc5b63896b75dc523ece75f739e28efadb;p=modules%2Fyacs.git [PYTHON 3] WIP --- diff --git a/doc/advancepy.rst b/doc/advancepy.rst index 5d09877f2..1fe66b225 100644 --- a/doc/advancepy.rst +++ b/doc/advancepy.rst @@ -18,7 +18,7 @@ The protocol name appears in the first part of the type Repository ID (before th The Python protocol ++++++++++++++++++++++ -The Python protocol is based on serialisation done by the cPickle module (C implementation of the pickle module). +The Python protocol is based on serialisation done by the pickle module. All that is necessary is to define an object reference type with the Python protocol so that Python objects can be exchanged between Python inline nodes and with SALOME components implemented in Python. SALOME components implemented in Python that are required to support this exchange type must be designed @@ -61,14 +61,14 @@ The implementation of component compo1 must handle serialisation / deserialisati way as the example in the run method described below:: def run(self,s): - o=cPickle.loads(s) + o=pickle.loads(s) ret={'a':6, 'b':[1,2,3]} - return cPickle.dumps(ret,-1) + return pickle.dumps(ret,-1) The json protocol ++++++++++++++++++++++ The json protocol is based on `JSON `_ (JavaScript Object Notation) -serialisation / deserialisation instead of cPickle. JSON supports fewer data types and requires that +serialisation / deserialisation instead of pickle. JSON supports fewer data types and requires that the simplejson Python module should be installed, but it has the advantage that it is more interoperable. In particular, there are C++ libraries that serialise/deserialise the JSON. diff --git a/src/engine_swig/CMakeLists.txt b/src/engine_swig/CMakeLists.txt index 4c525af2e..4e1f10a52 100644 --- a/src/engine_swig/CMakeLists.txt +++ b/src/engine_swig/CMakeLists.txt @@ -31,6 +31,7 @@ ENDIF() INCLUDE_DIRECTORIES( ${PTHREAD_INCLUDE_DIR} ${OMNIORB_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${PYTHON_INCLUDE_DIRS} ${PROJECT_BINARY_DIR}/idl ${PROJECT_BINARY_DIR} diff --git a/src/engine_swig/engtypemaps.i b/src/engine_swig/engtypemaps.i index d31e8870f..611e55ccf 100644 --- a/src/engine_swig/engtypemaps.i +++ b/src/engine_swig/engtypemaps.i @@ -32,27 +32,8 @@ #ifdef OMNIORB #include -//--- from omniORBpy.h (not present on Debian Sarge packages) -struct omniORBPYAPI -{ - PyObject* (*cxxObjRefToPyObjRef)(const CORBA::Object_ptr cxx_obj, - CORBA::Boolean hold_lock); - // Convert a C++ object reference to a Python object reference. - // If is true, caller holds the Python interpreter lock. - - CORBA::Object_ptr (*pyObjRefToCxxObjRef)(PyObject* py_obj, - CORBA::Boolean hold_lock); - // Convert a Python object reference to a C++ object reference. - // Raises BAD_PARAM if the Python object is not an object reference. - // If is true, caller holds the Python interpreter lock. - - PyObject* (*handleCxxSystemException)(const CORBA::SystemException& ex); - // Sets the Python exception state to reflect the given C++ system - // exception. Always returns NULL. The caller must hold the Python - // interpreter lock. -}; - -omniORBPYAPI* api; +#include +omniORBpyAPI* api=0; #define OMNIPY_CATCH_AND_HANDLE_SYSTEM_EXCEPTIONS \ catch (const CORBA::SystemException& ex) { \ diff --git a/src/engine_swig/pilot.i b/src/engine_swig/pilot.i index 6b93d6614..34a28121a 100644 --- a/src/engine_swig/pilot.i +++ b/src/engine_swig/pilot.i @@ -71,10 +71,10 @@ using namespace YACS::ENGINE; if (!omnipy) { PyErr_SetString(PyExc_ImportError,(char*)"Cannot import _omnipy"); - return; + return NULL; } PyObject* pyapi = PyObject_GetAttrString(omnipy, (char*)"API"); - api = (omniORBPYAPI*)PyCObject_AsVoidPtr(pyapi); + api = (omniORBpyAPI*)PyCapsule_GetPointer(pyapi,"_omnipy.API"); Py_DECREF(pyapi); #endif %} @@ -420,7 +420,7 @@ EXCEPTION(YACS::ENGINE::ExecutorSwig::waitPause) // param 0 PyObject *ret0Py(PyList_New(ret0.size())); for(std::size_t i=0;i(_ptr)); @@ -220,7 +220,7 @@ void YACSEvalInputPort::setDefaultValue(const YACSEvalAny *parameter) } else if(par1) { - PyObject *obj(PyInt_FromLong(par1->toInt())); + PyObject *obj(PyLong_FromLong(par1->toInt())); i0->put(obj); Py_XDECREF(obj); } diff --git a/src/evalyfx/YACSEvalSeqAny.cxx b/src/evalyfx/YACSEvalSeqAny.cxx index 4206e551d..0f0730494 100644 --- a/src/evalyfx/YACSEvalSeqAny.cxx +++ b/src/evalyfx/YACSEvalSeqAny.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2016 CEA/DEN, EDF R&D + // Copyright (C) 2012-2016 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 @@ -120,7 +120,7 @@ void YACSEvalSeqAnyInt::initialize(YACS::ENGINE::InputPyPort *p) const PyObject *ob(PyList_New(sz)); for(std::size_t i=0;iput(ob); p->exSaveInit(); diff --git a/src/evalyfx/YACSEvalSession.cxx b/src/evalyfx/YACSEvalSession.cxx index 3a91c4e2f..02886cbfb 100644 --- a/src/evalyfx/YACSEvalSession.cxx +++ b/src/evalyfx/YACSEvalSession.cxx @@ -72,7 +72,7 @@ void YACSEvalSession::launch() _salomeInstance=PyObject_Call(startMeth,myArgs,myKWArgs);//new YACS::ENGINE::AutoPyRef getPortMeth(PyObject_GetAttrString(_salomeInstance,const_cast("get_port")));//new YACS::ENGINE::AutoPyRef portPy(PyObject_CallObject(getPortMeth,0));//new - _port=PyInt_AsLong(portPy); + _port=PyLong_AsLong(portPy); // int dummy; _corbaConfigFileName=GetConfigAndPort(dummy); @@ -119,7 +119,7 @@ std::string YACSEvalSession::GetPathToAdd() PyObject *kernelRootDir(0);// os.environ["KERNEL_ROOT_DIR"] { YACS::ENGINE::AutoPyRef environPy(PyObject_GetAttrString(osPy,const_cast("environ")));//new - YACS::ENGINE::AutoPyRef kernelRootDirStr(PyString_FromString(const_cast(KERNEL_ROOT_DIR)));//new + YACS::ENGINE::AutoPyRef kernelRootDirStr(PyBytes_FromString(const_cast(KERNEL_ROOT_DIR)));//new kernelRootDir=PyObject_GetItem(environPy,kernelRootDirStr);//new } { @@ -127,11 +127,11 @@ std::string YACSEvalSession::GetPathToAdd() YACS::ENGINE::AutoPyRef joinPy(PyObject_GetAttrString(pathPy,const_cast("join")));//new YACS::ENGINE::AutoPyRef myArgs(PyTuple_New(4)); Py_XINCREF(kernelRootDir); PyTuple_SetItem(myArgs,0,kernelRootDir); - PyTuple_SetItem(myArgs,1,PyString_FromString(const_cast("bin"))); - PyTuple_SetItem(myArgs,2,PyString_FromString(const_cast("salome"))); - PyTuple_SetItem(myArgs,3,PyString_FromString(const_cast("appliskel"))); + PyTuple_SetItem(myArgs,1,PyBytes_FromString(const_cast("bin"))); + PyTuple_SetItem(myArgs,2,PyBytes_FromString(const_cast("salome"))); + PyTuple_SetItem(myArgs,3,PyBytes_FromString(const_cast("appliskel"))); YACS::ENGINE::AutoPyRef res(PyObject_CallObject(joinPy,myArgs)); - ret=PyString_AsString(res); + ret=PyBytes_AsString(res); } Py_XDECREF(kernelRootDir); return ret; @@ -142,13 +142,13 @@ std::string YACSEvalSession::GetConfigAndPort(int& port) YACS::ENGINE::AutoPyRef osPy(PyImport_ImportModule(const_cast("os")));//new YACS::ENGINE::AutoPyRef environPy(PyObject_GetAttrString(osPy,const_cast("environ")));//new // - YACS::ENGINE::AutoPyRef corbaConfigStr(PyString_FromString(const_cast(CORBA_CONFIG_ENV_VAR_NAME)));//new + YACS::ENGINE::AutoPyRef corbaConfigStr(PyBytes_FromString(const_cast(CORBA_CONFIG_ENV_VAR_NAME)));//new YACS::ENGINE::AutoPyRef corbaConfigFileNamePy(PyObject_GetItem(environPy,corbaConfigStr));//new - std::string ret(PyString_AsString(corbaConfigFileNamePy)); + std::string ret(PyBytes_AsString(corbaConfigFileNamePy)); // - YACS::ENGINE::AutoPyRef nsPortStr(PyString_FromString(const_cast(NSPORT_VAR_NAME)));//new + YACS::ENGINE::AutoPyRef nsPortStr(PyBytes_FromString(const_cast(NSPORT_VAR_NAME)));//new YACS::ENGINE::AutoPyRef nsPortValuePy(PyObject_GetItem(environPy,nsPortStr));//new - std::string portStr(PyString_AsString(nsPortValuePy)); + std::string portStr(PyBytes_AsString(nsPortValuePy)); std::istringstream iss(portStr); iss >> port; return ret; diff --git a/src/evalyfx/YACSEvalSessionInternal.cxx b/src/evalyfx/YACSEvalSessionInternal.cxx index d5bf80b15..09a1971c2 100644 --- a/src/evalyfx/YACSEvalSessionInternal.cxx +++ b/src/evalyfx/YACSEvalSessionInternal.cxx @@ -48,7 +48,7 @@ Engines::SalomeLauncher_var YACSEvalSession::YACSEvalSessionInternal::goFetching const char fetchPyCmd[]="import salome,CORBA\nsalome.salome_init()\nsl=salome.naming_service.Resolve(\"/SalomeLauncher\")\nif not CORBA.is_nil(sl):\n return salome.orb.object_to_string(sl)\nelse:\n raise Exception(\"Impossible to locate salome launcher !\")"; YACS::ENGINE::AutoPyRef func(YACS::ENGINE::evalPy(methName,fetchPyCmd)); YACS::ENGINE::AutoPyRef val(YACS::ENGINE::evalFuncPyWithNoParams(func)); - std::string ior(PyString_AsString(val)); + std::string ior(PyBytes_AsString(val)); CORBA::Object_var obj(string_to_object(ior)); if(CORBA::is_nil(obj)) throw YACS::Exception("goFetchingSalomeLauncherInNS : fetched ior is NIL !"); diff --git a/src/evalyfx/YACSEvalYFXPattern.cxx b/src/evalyfx/YACSEvalYFXPattern.cxx index 43b6b6b9d..d8128ebed 100644 --- a/src/evalyfx/YACSEvalYFXPattern.cxx +++ b/src/evalyfx/YACSEvalYFXPattern.cxx @@ -261,7 +261,7 @@ YACSEvalSeqAny *YACSEvalYFXPattern::BuildValueInPort(YACS::ENGINE::InputPyPort * for(std::size_t i=0;i elt(new YACSEvalSeqAnyInt(eltCpp)); return elt.dettach(); @@ -869,10 +869,10 @@ void YACSEvalYFXGraphGenCluster::generateGraph() // YACS::ENGINE::AutoPyRef func(YACS::ENGINE::evalPy(EFXGenFileName,EFXGenContent)); YACS::ENGINE::AutoPyRef val(YACS::ENGINE::evalFuncPyWithNoParams(func)); - _locSchemaFile=PyString_AsString(val); + _locSchemaFile=PyBytes_AsString(val); func=YACS::ENGINE::evalPy(EFXGenFileName,EFXGenContent2); val=YACS::ENGINE::evalFuncPyWithNoParams(func); - _jobName=PyString_AsString(val); + _jobName=PyBytes_AsString(val); // static const char LISTPYOBJ_STR[]="list[pyobj]"; if(getBoss()->getOutputsOfInterest().empty()) diff --git a/src/evalyfx_swig/CMakeLists.txt b/src/evalyfx_swig/CMakeLists.txt index 38cd7b29b..9aedfcdc9 100644 --- a/src/evalyfx_swig/CMakeLists.txt +++ b/src/evalyfx_swig/CMakeLists.txt @@ -28,6 +28,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/yacsloader_swig ${PROJECT_SOURCE_DIR}/src/evalyfx ${OMNIORB_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${PYTHON_INCLUDE_DIRS} ) diff --git a/src/evalyfx_swig/evalyfx.i b/src/evalyfx_swig/evalyfx.i index a53030902..6796ada92 100644 --- a/src/evalyfx_swig/evalyfx.i +++ b/src/evalyfx_swig/evalyfx.i @@ -46,7 +46,7 @@ static void convertPyToIntArr(PyObject *pyLi, std::vector& arr) PyObject *o=PyList_GetItem(pyLi,i); if(PyInt_Check(o)) { - int val=(int)PyInt_AS_LONG(o); + int val=(int)PyLong_AS_LONG(o); arr[i]=val; } else @@ -60,9 +60,9 @@ static void convertPyToIntArr(PyObject *pyLi, std::vector& arr) for(int i=0;i& arr) std::size_t sz(arr.size()); PyObject *ret(PyList_New(sz)); for(std::size_t i=0;i& retCpp std::size_t sz2(zeArr->size()); PyObject *ret2(PyList_New(sz2)); for(std::size_t i2=0;i2setDefaultValue(&tmp); } else @@ -507,7 +507,7 @@ public: PyObject *ret0Py(ret0?Py_True:Py_False); Py_XINCREF(ret0Py); PyTuple_SetItem(ret,0,ret0Py); - PyTuple_SetItem(ret,1,PyInt_FromLong(ret1)); + PyTuple_SetItem(ret,1,PyLong_FromLong(ret1)); return ret; } } diff --git a/src/genericgui/CMakeLists.txt b/src/genericgui/CMakeLists.txt index 3525093bc..f9e4e3ce4 100644 --- a/src/genericgui/CMakeLists.txt +++ b/src/genericgui/CMakeLists.txt @@ -25,6 +25,7 @@ INCLUDE(UseQtExt) INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_DIR} ${OMNIORB_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ${GRAPHVIZ_INCLUDE_DIRS} ${QT_INCLUDES} diff --git a/src/genericgui/FormContainerDecorator.cxx b/src/genericgui/FormContainerDecorator.cxx index f5f33b74d..df2a1d314 100644 --- a/src/genericgui/FormContainerDecorator.cxx +++ b/src/genericgui/FormContainerDecorator.cxx @@ -179,6 +179,6 @@ void FormContainerDecorator::checkAndRepareTypeIfNecessary(YACS::ENGINE::Contain void FormContainerDecorator::connectForTyp() { connect(_typ->cb_resource,SIGNAL(mousePressed()),this,SLOT(onResMousePressed())); - connect(_typ->cb_resource,SIGNAL(activated(int)),this,SLOT(onResActivated)); - connect(tb_container,SIGNAL(toggled(bool)),this,SLOT(onContToggled())); + connect(_typ->cb_resource,SIGNAL(activated(int)),this,SLOT(onResActivated(int))); + connect(tb_container,SIGNAL(toggled(bool)),this,SLOT(onContToggled(bool))); } diff --git a/src/genericgui/FormParamContainer.ui b/src/genericgui/FormParamContainer.ui index 41c36c1dd..010589813 100644 --- a/src/genericgui/FormParamContainer.ui +++ b/src/genericgui/FormParamContainer.ui @@ -72,7 +72,7 @@ - + name of the resource hosting container when manually set @@ -120,6 +120,13 @@ + + + ComboBox + QComboBox +
FormComponent.hxx
+
+
diff --git a/src/genericgui/ListJobs_GUI.cxx b/src/genericgui/ListJobs_GUI.cxx index fa6299c06..8ce983ddc 100644 --- a/src/genericgui/ListJobs_GUI.cxx +++ b/src/genericgui/ListJobs_GUI.cxx @@ -20,8 +20,8 @@ #include #include -#include "ListJobs_GUI.hxx" #include "RuntimeSALOME.hxx" +#include "ListJobs_GUI.hxx" #include "GenericGui.hxx" #include "QtGuiContext.hxx" #include "YACSGuiLoader.hxx" diff --git a/src/hmi/CMakeLists.txt b/src/hmi/CMakeLists.txt index adb718783..5d9c12206 100644 --- a/src/hmi/CMakeLists.txt +++ b/src/hmi/CMakeLists.txt @@ -27,6 +27,7 @@ ENDIF(SALOME_YACS_USE_KERNEL) # additional include directories INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ${PYTHON_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/src/bases diff --git a/src/hmi/guiObservers.cxx b/src/hmi/guiObservers.cxx index e1414cfd1..8e160166e 100644 --- a/src/hmi/guiObservers.cxx +++ b/src/hmi/guiObservers.cxx @@ -197,11 +197,11 @@ void Subject::select(bool isSelected) void Subject::update(GuiEvent event,int type, Subject* son) { - //DEBTRACE("Subject::update " << type << "," << GuiObserver::eventName(event) << "," << son); + std::cerr << "Subject::update " << type << "," << GuiObserver::eventName(event) << "," << son << std::endl; set copySet = _setObs; for (set::iterator it = copySet.begin(); it != copySet.end(); ++it) { - //DEBTRACE("Subject::update " << *it); + std::cerr << "Subject::update " << *it << std::endl; try { (*it)->update(event, type, son); @@ -209,11 +209,13 @@ void Subject::update(GuiEvent event,int type, Subject* son) catch(Exception& ex) { std::cerr << "Internal error in Subject::update: " << ex.what() << std::endl; + std::cerr << "ERREUR ICI" << std::endl; } - catch(...) - { - std::cerr << "Internal error in Subject::update: " << std::endl; - } + //catch(...) + // { + // std::cerr << "Internal error in Subject::update: " << std::endl; + // std::cerr << "ERREUR OU LA " << std::endl; + // } } } diff --git a/src/py2yacs/CMakeLists.txt b/src/py2yacs/CMakeLists.txt index d5c4ce3ba..76db23ac8 100644 --- a/src/py2yacs/CMakeLists.txt +++ b/src/py2yacs/CMakeLists.txt @@ -19,6 +19,7 @@ INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${SALOME_INCL_PATH} ${PROJECT_SOURCE_DIR}/src/bases ${PROJECT_SOURCE_DIR}/src/engine diff --git a/src/py2yacs/py2yacs.cxx b/src/py2yacs/py2yacs.cxx index 9e3644006..982b0124c 100644 --- a/src/py2yacs/py2yacs.cxx +++ b/src/py2yacs/py2yacs.cxx @@ -86,7 +86,7 @@ std::string copyList(PyObject *pyList, std::list& cppList) for(int i=0; i& cppList) } else { - const char * portName = PyString_AsString(elem); + const char * portName = PyBytes_AsString(elem); cppList.push_back(portName); } } @@ -113,14 +113,14 @@ std::string getPyErrorText() PyObject *pystr, *module_name, *pyth_module, *pyth_func; PyErr_Fetch(&ptype, &pvalue, &ptraceback); pystr = PyObject_Str(pvalue); - result = PyString_AsString(pystr); + result = PyBytes_AsString(pystr); result += "\n"; Py_DECREF(pystr); /* See if we can get a full traceback */ if(ptraceback) { - module_name = PyString_FromString("traceback"); + module_name = PyBytes_FromString("traceback"); pyth_module = PyImport_Import(module_name); Py_DECREF(module_name); if (pyth_module) @@ -136,7 +136,7 @@ std::string getPyErrorText() for(int i=0; ilength(serializationInputC.length()); @@ -213,7 +213,7 @@ void DistributedPythonNode::execute() { AutoGIL agil; args = PyTuple_New(1); - PyObject* resultPython=PyString_FromString(resultCorbaC); + PyObject* resultPython=PyBytes_FromString(resultCorbaC); delete [] resultCorbaC; PyTuple_SetItem(args,0,resultPython); PyObject *finalResult=PyObject_CallObject(_pyfuncUnser,args); diff --git a/src/runtime/PyStdout.cxx b/src/runtime/PyStdout.cxx index cc939672c..0c1cf83de 100644 --- a/src/runtime/PyStdout.cxx +++ b/src/runtime/PyStdout.cxx @@ -78,49 +78,49 @@ static PyMemberDef PyStdOut_memberlist[] = { static PyTypeObject PyStdOut_Type = { /* The ob_type field must be initialized in the module init function * to be portable to Windows without using C++. */ - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "PyOut", /*tp_name*/ - sizeof(PyStdOut), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + PyVarObject_HEAD_INIT(NULL, 0) + /*0,*/ /*ob_size*/ + "PyOut", /*tp_name*/ + sizeof(PyStdOut), /*tp_basicsize*/ + 0, /*tp_itemsize*/ /* methods */ (destructor)PyStdOut_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - PyObject_GenericGetAttr, /*tp_getattro*/ - /* softspace is writable: we must supply tp_setattro */ - PyObject_GenericSetAttr, /* tp_setattro */ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - PyStdOut_methods, /*tp_methods*/ - PyStdOut_memberlist, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + PyObject_GenericGetAttr, /*tp_getattro*/ + /* softspace is writable: we must supply tp_setattro */ + PyObject_GenericSetAttr, /* tp_setattro */ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + PyStdOut_methods, /*tp_methods*/ + PyStdOut_memberlist, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ }; @@ -168,7 +168,7 @@ PyObject *evalPy(const std::string& funcName, const std::string& strToEval) std::ostringstream oss; oss << "evalPy failed : " << errorDetails; throw Exception(oss.str()); } - AutoPyRef res(PyEval_EvalCode(reinterpret_cast((PyObject *)code),context,context)); + AutoPyRef res(PyEval_EvalCode((PyObject *)code,context,context)); PyObject *ret(PyDict_GetItemString(context,funcName.c_str())); //borrowed ref if(!ret) throw YACS::Exception("evalPy : Error on returned func !"); diff --git a/src/runtime/PythonNode.cxx b/src/runtime/PythonNode.cxx index b6b7bc47d..02e8e302c 100644 --- a/src/runtime/PythonNode.cxx +++ b/src/runtime/PythonNode.cxx @@ -48,32 +48,32 @@ typedef int Py_ssize_t; using namespace YACS::ENGINE; using namespace std; -const char PythonEntry::SCRIPT_FOR_SIMPLE_SERIALIZATION[]="import cPickle\n" +const char PythonEntry::SCRIPT_FOR_SIMPLE_SERIALIZATION[]="import pickle\n" "def pickleForVarSimplePyth2009(val):\n" - " return cPickle.dumps(val,-1)\n" + " return pickle.dumps(val,-1)\n" "\n"; const char PythonNode::IMPL_NAME[]="Python"; const char PythonNode::KIND[]="Python"; -const char PythonNode::SCRIPT_FOR_SERIALIZATION[]="import cPickle\n" +const char PythonNode::SCRIPT_FOR_SERIALIZATION[]="import pickle\n" "def pickleForDistPyth2009(kws):\n" - " return cPickle.dumps(((),kws),-1)\n" + " return pickle.dumps(((),kws),-1)\n" "\n" "def unPickleForDistPyth2009(st):\n" - " args=cPickle.loads(st)\n" + " args=pickle.loads(st)\n" " return args\n"; const char PythonNode::REMOTE_NAME[]="remote"; const char PythonNode::DPL_INFO_NAME[]="my_dpl_localization"; -const char PyFuncNode::SCRIPT_FOR_SERIALIZATION[]="import cPickle\n" +const char PyFuncNode::SCRIPT_FOR_SERIALIZATION[]="import pickle\n" "def pickleForDistPyth2009(*args,**kws):\n" - " return cPickle.dumps((args,kws),-1)\n" + " return pickle.dumps((args,kws),-1)\n" "\n" "def unPickleForDistPyth2009(st):\n" - " args=cPickle.loads(st)\n" + " args=pickle.loads(st)\n" " return args\n"; @@ -424,7 +424,7 @@ void PythonNode::executeRemote() //The pickled string may contain NULL characters so use PyString_AsStringAndSize char *serializationInputC(0); Py_ssize_t len; - if (PyString_AsStringAndSize(serializationInput, &serializationInputC, &len)) + if (PyBytes_AsStringAndSize(serializationInput, &serializationInputC, &len)) throw Exception("DistributedPythonNode problem in python pickle"); serializationInputCorba->length(len); for(int i=0; i < len ; i++) @@ -476,7 +476,7 @@ void PythonNode::executeRemote() { AutoGIL agil; PyObject *args(0),*ob(0); - PyObject* resultPython=PyString_FromStringAndSize(resultCorbaC,resultCorba->length()); + PyObject* resultPython=PyBytes_FromStringAndSize(resultCorbaC,resultCorba->length()); delete [] resultCorbaC; args = PyTuple_New(1); PyTuple_SetItem(args,0,resultPython); @@ -573,7 +573,7 @@ void PythonNode::executeLocal() PyObject* code=Py_CompileString(_script.c_str(), stream.str().c_str(), Py_file_input); if(code == NULL) { - _errorDetails=""; + _errorDetails=""; PyObject* new_stderr = newPyStdOut(_errorDetails); PySys_SetObject((char*)"stderr", new_stderr); PyErr_Print(); @@ -581,7 +581,7 @@ void PythonNode::executeLocal() Py_DECREF(new_stderr); throw Exception("Error during execution"); } - PyObject *res = PyEval_EvalCode((PyCodeObject *)code, _context, _context); + PyObject *res = PyEval_EvalCode( code, _context, _context); Py_DECREF(code); Py_XDECREF(res); @@ -737,7 +737,7 @@ void PythonNode::applyDPLScope(ComposedNode *gfn) { const std::pair& p(ret[i]); PyObject *elt(PyTuple_New(2)); - PyTuple_SetItem(elt,0,PyString_FromString(p.first.c_str())); + PyTuple_SetItem(elt,0,PyBytes_FromString(p.first.c_str())); PyTuple_SetItem(elt,1,PyLong_FromLong(p.second)); PyList_SetItem(ob,i,elt); } @@ -751,7 +751,7 @@ void PythonNode::applyDPLScope(ComposedNode *gfn) Py_XDECREF(ob); char *serializationInputC(0); Py_ssize_t len; - if (PyString_AsStringAndSize(serializationInput, &serializationInputC, &len)) + if (PyBytes_AsStringAndSize(serializationInput, &serializationInputC, &len)) throw Exception("DistributedPythonNode problem in python pickle"); serializationInputCorba->length(len); for(int i=0; i < len ; i++) @@ -897,7 +897,7 @@ void PyFuncNode::loadLocal() Py_DECREF(new_stderr); throw Exception("Error during execution"); } - PyObject *res = PyEval_EvalCode((PyCodeObject *)code, _context, _context); + PyObject *res = PyEval_EvalCode( code, _context, _context); Py_DECREF(code); Py_XDECREF(res); @@ -981,7 +981,7 @@ void PyFuncNode::executeRemote() //The pickled string may contain NULL characters so use PyString_AsStringAndSize char *serializationInputC(0); Py_ssize_t len; - if (PyString_AsStringAndSize(serializationInput, &serializationInputC, &len)) + if (PyBytes_AsStringAndSize(serializationInput, &serializationInputC, &len)) throw Exception("DistributedPythonNode problem in python pickle"); serializationInputCorba->length(len); @@ -1019,7 +1019,7 @@ void PyFuncNode::executeRemote() { AutoGIL agil; - PyObject *resultPython(PyString_FromStringAndSize(resultCorbaC,resultCorba->length())); + PyObject *resultPython(PyBytes_FromStringAndSize(resultCorbaC,resultCorba->length())); delete [] resultCorbaC; PyObject *args(PyTuple_New(1)),*ob(0); PyTuple_SetItem(args,0,resultPython); diff --git a/src/runtime/PythonPorts.cxx b/src/runtime/PythonPorts.cxx index f9a218a59..8de6f05e3 100644 --- a/src/runtime/PythonPorts.cxx +++ b/src/runtime/PythonPorts.cxx @@ -38,9 +38,9 @@ void releasePyObj(PyObject* data) if (PyObject_HasAttrString(data, (char*)"_is_a")) { PyObject *result = PyObject_CallMethod(data, (char*)"_is_a", (char*)"s",(char*)"IDL:SALOME/GenericObj:1.0"); - if(result && PyInt_Check(result)) + if(result && PyLong_Check(result)) { - if(PyInt_AS_LONG(result)) + if(PyLong_AS_LONG(result)) { PyObject* o=PyObject_CallMethod(data, (char*)"Destroy", (char*)""); if(o) @@ -74,9 +74,9 @@ void registerPyObj(PyObject* data) if (PyObject_HasAttrString(data, (char*)"_is_a")) { PyObject *result = PyObject_CallMethod(data, (char*)"_is_a", (char*)"s",(char*)"IDL:SALOME/GenericObj:1.0"); - if(result && PyInt_Check(result)) + if(result && PyLong_Check(result)) { - if(PyInt_AS_LONG(result)) + if(PyLong_AS_LONG(result)) { PyObject* o= PyObject_CallMethod(data, (char*)"Register", (char*)"") ; if(o) @@ -198,7 +198,7 @@ std::string InputPyPort::getHumanRepr() if(!ret) return dump(); std::string retCpp; - char *val(PyString_AsString(ret)); + char *val(PyBytes_AsString(ret)); if(val) retCpp=val; Py_XDECREF(ret); @@ -262,11 +262,11 @@ std::string InputPyPort::dump() std::string InputPyPort::valToStr() { - int isString = PyString_Check(getPyObj()); + int isString = PyBytes_Check(getPyObj()); //DEBTRACE("isString=" << isString); PyObject *strPyObj = PyObject_Str(getPyObj()); //DEBTRACE(PyString_Size(strPyObj)); - string val = PyString_AsString(strPyObj); + string val = PyBytes_AsString(strPyObj); if (isString) val = "\"" + val + "\""; //DEBTRACE(val); @@ -361,7 +361,7 @@ std::string OutputPyPort::dump() std::string OutputPyPort::valToStr() { PyObject *strPyObj = PyObject_Str(getPyObj()); - string val = PyString_AsString(strPyObj); + string val = PyBytes_AsString(strPyObj); Py_DECREF(strPyObj); return val; } diff --git a/src/runtime/RuntimeSALOME.cxx b/src/runtime/RuntimeSALOME.cxx index 31985cf2f..d8f746fe5 100644 --- a/src/runtime/RuntimeSALOME.cxx +++ b/src/runtime/RuntimeSALOME.cxx @@ -287,14 +287,26 @@ void RuntimeSALOME::init(long flags, int argc, char* argv[]) Py_InitializeEx(0); // do not install signal handlers #endif if (argc > 0 && argv != NULL) - PySys_SetArgv(argc, argv); + { + wchar_t **changed_argv = new wchar_t*[argc]; + for (int i = 0; i < argc; i++) + { + changed_argv[i] = Py_DecodeLocale(argv[i], NULL); + } + PySys_SetArgv(argc, changed_argv); + } else { int pyArgc = 1; char* pyArgv[1]; char defaultName[] = "SALOME_YACS_RUNTIME"; + wchar_t **changed_pyArgv = new wchar_t*[pyArgc]; pyArgv[0] = defaultName; - PySys_SetArgv(pyArgc, pyArgv); + for (int i = 0; i < pyArgc; i++) + { + changed_pyArgv[i] = Py_DecodeLocale(pyArgv[i], NULL); + } + PySys_SetArgv(pyArgc, changed_pyArgv); } PyEval_InitThreads(); /* Create (and acquire) the interpreter lock (for threads)*/ PyEval_SaveThread(); /* Release the thread state */ @@ -336,7 +348,7 @@ void RuntimeSALOME::init(long flags, int argc, char* argv[]) { goto out; } - _api = (omniORBpyAPI*)PyCObject_AsVoidPtr(pyapi); + _api = (omniORBpyAPI*)PyCapsule_GetPointer(pyapi,"_omnipy.API"); Py_DECREF(pyapi); res=PyRun_String("\n" diff --git a/src/runtime/RuntimeSALOME.hxx b/src/runtime/RuntimeSALOME.hxx index d9ba31c23..85c98309e 100644 --- a/src/runtime/RuntimeSALOME.hxx +++ b/src/runtime/RuntimeSALOME.hxx @@ -33,31 +33,11 @@ #include #include +#include #include "Runtime.hxx" #include #include - -//--- from omniORBpy.h (not present on Debian Sarge packages) -struct omniORBpyAPI -{ - PyObject* (*cxxObjRefToPyObjRef)(const CORBA::Object_ptr cxx_obj, - CORBA::Boolean hold_lock); - // Convert a C++ object reference to a Python object reference. - // If is true, caller holds the Python interpreter lock. - - CORBA::Object_ptr (*pyObjRefToCxxObjRef)(PyObject* py_obj, - CORBA::Boolean hold_lock); - // Convert a Python object reference to a C++ object reference. - // Raises BAD_PARAM if the Python object is not an object reference. - // If is true, caller holds the Python interpreter lock. - - PyObject* (*handleCxxSystemException)(const CORBA::SystemException& ex); - // Sets the Python exception state to reflect the given C++ system - // exception. Always returns NULL. The caller must hold the Python - // interpreter lock. -}; -//--- end of from omniORBpy.h (not present on Debian Sarge packages) namespace YACS { diff --git a/src/runtime/SalomePythonNode.cxx b/src/runtime/SalomePythonNode.cxx index ceb54864e..6ea978712 100644 --- a/src/runtime/SalomePythonNode.cxx +++ b/src/runtime/SalomePythonNode.cxx @@ -72,7 +72,7 @@ void SalomePythonNode::load() cerr << "---------------SalomePythonNode::load function---------------" << endl; list::iterator iter; string value2Export=((SalomePythonComponent*)_component)->getStringValueToExportInInterp(this); - PyObject* ob=PyString_FromString(value2Export.c_str()); + PyObject* ob=PyBytes_FromString(value2Export.c_str()); PyDict_SetItemString(_context,PLACEMENT_VAR_NAME_IN_INTERP,ob); for(iter = _setOfOutputPort.begin(); iter != _setOfOutputPort.end(); iter++) { diff --git a/src/runtime/Test/CMakeLists.txt b/src/runtime/Test/CMakeLists.txt index c498db26c..027fa3da1 100644 --- a/src/runtime/Test/CMakeLists.txt +++ b/src/runtime/Test/CMakeLists.txt @@ -26,6 +26,7 @@ INCLUDE_DIRECTORIES( ${CPPUNIT_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIR} ${OMNIORB_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${KERNEL_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/../../bases @@ -127,4 +128,4 @@ INSTALL(TARGETS runtimeTestEchoSrv DESTINATION ${LOCAL_TEST_DIR}) INSTALL(TARGETS echo_clt DESTINATION ${LOCAL_TEST_DIR}) INSTALL(FILES CTestTestfileInstall.cmake DESTINATION ${LOCAL_TEST_DIR} - RENAME CTestTestfile.cmake) \ No newline at end of file + RENAME CTestTestfile.cmake) diff --git a/src/runtime/Test/runtimeTest.cxx b/src/runtime/Test/runtimeTest.cxx index c2ac9edfc..68c964de6 100644 --- a/src/runtime/Test/runtimeTest.cxx +++ b/src/runtime/Test/runtimeTest.cxx @@ -1155,107 +1155,134 @@ void RuntimeTest::manualExecuteNoThread() ((ElementaryNode*)_nodeMap["Node_10"])->load(); ((ElementaryNode*)_nodeMap["Node_10"])->execute(); // CPPUNIT_ASSERT_DOUBLES_EQUAL(10.51, (ElementaryNode*)_nodeMap["Node_10"]) - + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution Python Node_11" ); + std::cerr << __LINE__ << std::endl; ((ElementaryNode*)_nodeMap["Node_11"])->load(); + std::cerr << __LINE__ << std::endl; ((ElementaryNode*)_nodeMap["Node_11"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution Python Node_12" ); ((ElementaryNode*)_nodeMap["Node_12"])->load(); ((ElementaryNode*)_nodeMap["Node_12"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_16" ); ((ElementaryNode*)_nodeMap["Node_16"])->load(); ((ElementaryNode*)_nodeMap["Node_16"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_17" ); ((ElementaryNode*)_nodeMap["Node_17"])->load(); ((ElementaryNode*)_nodeMap["Node_17"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_18" ); ((ElementaryNode*)_nodeMap["Node_18"])->load(); ((ElementaryNode*)_nodeMap["Node_18"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_19" ); ((ElementaryNode*)_nodeMap["Node_19"])->load(); ((ElementaryNode*)_nodeMap["Node_19"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_20" ); ((ElementaryNode*)_nodeMap["Node_20"])->load(); ((ElementaryNode*)_nodeMap["Node_20"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_21" ); ((ElementaryNode*)_nodeMap["Node_21"])->load(); ((ElementaryNode*)_nodeMap["Node_21"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_29" ); ((ElementaryNode*)_nodeMap["Node_29"])->load(); ((ElementaryNode*)_nodeMap["Node_29"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution Python Node_13" ); ((ElementaryNode*)_nodeMap["Node_13"])->load(); ((ElementaryNode*)_nodeMap["Node_13"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_22" ); ((ElementaryNode*)_nodeMap["Node_22"])->load(); ((ElementaryNode*)_nodeMap["Node_22"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_23" ); ((ElementaryNode*)_nodeMap["Node_23"])->load(); ((ElementaryNode*)_nodeMap["Node_23"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_24" ); ((ElementaryNode*)_nodeMap["Node_24"])->load(); ((ElementaryNode*)_nodeMap["Node_24"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_27" ); ((ElementaryNode*)_nodeMap["Node_27"])->load(); ((ElementaryNode*)_nodeMap["Node_27"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_28" ); ((ElementaryNode*)_nodeMap["Node_28"])->load(); ((ElementaryNode*)_nodeMap["Node_28"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_30" ); ((ElementaryNode*)_nodeMap["Node_30"])->load(); ((ElementaryNode*)_nodeMap["Node_30"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_32" ); ((ElementaryNode*)_nodeMap["Node_32"])->load(); ((ElementaryNode*)_nodeMap["Node_32"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_26" ); ((ElementaryNode*)_nodeMap["Node_26"])->load(); ((ElementaryNode*)_nodeMap["Node_26"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_31" ); ((ElementaryNode*)_nodeMap["Node_31"])->load(); ((ElementaryNode*)_nodeMap["Node_31"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution Python Node_14" ); ((ElementaryNode*)_nodeMap["Node_14"])->load(); ((ElementaryNode*)_nodeMap["Node_14"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution Python Node_15" ); ((ElementaryNode*)_nodeMap["Node_15"])->load(); ((ElementaryNode*)_nodeMap["Node_15"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution XML Node_36" ); ((ElementaryNode*)_nodeMap["Node_36"])->load(); ((ElementaryNode*)_nodeMap["Node_36"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_33" ); ((ElementaryNode*)_nodeMap["Node_33"])->load(); ((ElementaryNode*)_nodeMap["Node_33"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_34" ); ((ElementaryNode*)_nodeMap["Node_34"])->load(); ((ElementaryNode*)_nodeMap["Node_34"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- execution CORBA Node_35" ); ((ElementaryNode*)_nodeMap["Node_35"])->load(); ((ElementaryNode*)_nodeMap["Node_35"])->execute(); + std::cerr << __LINE__ << std::endl; DEBTRACE(" --- end of execution" ); } diff --git a/src/runtime/TypeConversions.cxx b/src/runtime/TypeConversions.cxx index 2134240b3..e33fae634 100644 --- a/src/runtime/TypeConversions.cxx +++ b/src/runtime/TypeConversions.cxx @@ -695,8 +695,6 @@ namespace YACS double x; if (PyFloat_Check(o)) x=PyFloat_AS_DOUBLE(o); - else if (PyInt_Check(o)) - x=PyInt_AS_LONG(o); else if(PyLong_Check(o)) x=PyLong_AsLong(o); else @@ -718,9 +716,7 @@ namespace YACS static inline long convert(const TypeCode *t,PyObject* o,void*) { long l; - if (PyInt_Check(o)) - l=PyInt_AS_LONG(o); - else if(PyLong_Check(o)) + if(PyLong_Check(o)) l=PyLong_AsLong(o); else { @@ -741,8 +737,8 @@ namespace YACS static inline std::string convert(const TypeCode *t,PyObject* o,void*) { std::string s; - if (PyString_Check(o)) - s= PyString_AS_STRING(o); + if (PyBytes_Check(o)) + s= PyBytes_AS_STRING(o); else { stringstream msg; @@ -764,8 +760,6 @@ namespace YACS bool l; if (PyBool_Check(o)) l=(o==Py_True); - else if (PyInt_Check(o)) - l=(PyInt_AS_LONG(o)!=0); else if(PyLong_Check(o)) l=(PyLong_AsLong(o)!=0); else @@ -786,15 +780,15 @@ namespace YACS { static inline std::string convert(const TypeCode *t,PyObject* o,void*,int protocol) { - if (PyString_Check(o) && strncmp(t->id(),"python",6)!=0) + if (PyBytes_Check(o) && strncmp(t->id(),"python",6)!=0) { // the objref is used by Python as a string (prefix:value) keep it as a string - return PyString_AS_STRING(o); + return PyBytes_AS_STRING(o); } if(strncmp(t->id(),"python",6)==0) { // It's a native Python object pickle it - PyObject* mod=PyImport_ImportModule("cPickle"); + PyObject* mod=PyImport_ImportModule("pickle"); PyObject *pickled=PyObject_CallMethod(mod,(char *)"dumps",(char *)"Oi",o,protocol); DEBTRACE(PyObject_REPR(pickled) ); Py_DECREF(mod); @@ -803,7 +797,7 @@ namespace YACS PyErr_Print(); throw YACS::ENGINE::ConversionException("Problem in convertToYacsObjref @@ -978,12 +972,12 @@ namespace YACS if(t->isA(Runtime::_tc_file)) { //It's an objref file. Convert it specially - return PyString_FromString(o.c_str()); + return PyBytes_FromString(o.c_str()); } if(strncmp(t->id(),"python",6)==0) { //It's a python pickled object, unpickled it - PyObject* mod=PyImport_ImportModule("cPickle"); + PyObject* mod=PyImport_ImportModule("pickle"); PyObject *ob=PyObject_CallMethod(mod,(char *)"loads",(char *)"s#",o.c_str(),o.length()); DEBTRACE(PyObject_REPR(ob)); Py_DECREF(mod); @@ -1864,11 +1858,11 @@ namespace YACS } PyGILState_STATE gstate = PyGILState_Ensure(); - PyObject* mod=PyImport_ImportModule("cPickle"); + PyObject* mod=PyImport_ImportModule("pickle"); PyObject *ob=PyObject_CallMethod(mod,(char *)"loads",(char *)"s#",s,buffer->length()); PyObject *pickled=PyObject_CallMethod(mod,(char *)"dumps",(char *)"Oi",ob,protocol); DEBTRACE(PyObject_REPR(pickled)); - std::string mystr=PyString_AsString(pickled); + std::string mystr=PyBytes_AsString(pickled); Py_DECREF(mod); Py_DECREF(ob); Py_DECREF(pickled); @@ -2291,7 +2285,7 @@ namespace YACS PyObject *s; PyGILState_STATE gstate = PyGILState_Ensure(); s=PyObject_Str(ob); - std::string ss(PyString_AsString(s),PyString_Size(s)); + std::string ss(PyBytes_AsString(s),PyBytes_Size(s)); Py_DECREF(s); PyGILState_Release(gstate); return ss; @@ -2493,8 +2487,6 @@ namespace YACS { if (PyFloat_Check(o)) return true; - else if (PyInt_Check(o)) - return true; else if(PyLong_Check(o)) return true; else @@ -2507,7 +2499,7 @@ namespace YACS template<> inline bool checkInt(const TypeCode *t,PyObject* o,void* aux) { - if (PyInt_Check(o) || PyLong_Check(o)) + if (PyLong_Check(o)) return true; else { @@ -2521,8 +2513,6 @@ namespace YACS { if (PyBool_Check(o)) return true; - else if (PyInt_Check(o)) - return true; else if(PyLong_Check(o)) return true; else @@ -2536,7 +2526,7 @@ namespace YACS template<> inline bool checkString(const TypeCode *t,PyObject* o,void* aux) { - if (PyString_Check(o)) + if (PyBytes_Check(o)) return true; else { @@ -2548,7 +2538,7 @@ namespace YACS template<> inline bool checkObjref(const TypeCode *t,PyObject* o,void* aux) { - if (PyString_Check(o)) + if (PyBytes_Check(o)) return true; if(strncmp(t->id(),"python",6)==0) // a Python object is expected (it's always true) return true; diff --git a/src/runtime_swig/CMakeLists.txt b/src/runtime_swig/CMakeLists.txt index 1f3e47394..ef7d9c195 100644 --- a/src/runtime_swig/CMakeLists.txt +++ b/src/runtime_swig/CMakeLists.txt @@ -30,6 +30,7 @@ INCLUDE_DIRECTORIES( ${SALOME_INCL_PATH} ${PTHREAD_INCLUDE_DIRS} ${OMNIORB_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ${PYTHON_INCLUDE_DIRS} ${PROJECT_BINARY_DIR}/idl diff --git a/src/runtime_swig/SALOMERuntime.i b/src/runtime_swig/SALOMERuntime.i index d0d45bb55..db43272d6 100644 --- a/src/runtime_swig/SALOMERuntime.i +++ b/src/runtime_swig/SALOMERuntime.i @@ -76,10 +76,10 @@ if (!omnipy) { PyErr_SetString(PyExc_ImportError,(char*)"Cannot import _omnipy"); - return; + return NULL; } PyObject* pyapi = PyObject_GetAttrString(omnipy, (char*)"API"); - api = (omniORBPYAPI*)PyCObject_AsVoidPtr(pyapi); + api = (omniORBpyAPI*)PyCapsule_GetPointer(pyapi,"_omnipy.API"); Py_DECREF(pyapi); %} diff --git a/src/yacsloader/CMakeLists.txt b/src/yacsloader/CMakeLists.txt index 20052f372..91901249c 100644 --- a/src/yacsloader/CMakeLists.txt +++ b/src/yacsloader/CMakeLists.txt @@ -51,6 +51,7 @@ ENDIF(SALOME_YACS_USE_KERNEL) # additional include directories INCLUDE_DIRECTORIES( ${OMNIORB_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${PYTHON_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/src/bases ${PROJECT_SOURCE_DIR}/src/engine diff --git a/src/yacsloader/Test/CMakeLists.txt b/src/yacsloader/Test/CMakeLists.txt index e226522b3..559570263 100644 --- a/src/yacsloader/Test/CMakeLists.txt +++ b/src/yacsloader/Test/CMakeLists.txt @@ -26,6 +26,7 @@ INCLUDE_DIRECTORIES( ${CPPUNIT_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIR} ${OMNIORB_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${KERNEL_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/../../bases diff --git a/src/yacsloader/Test/YacsLoaderTest.cxx b/src/yacsloader/Test/YacsLoaderTest.cxx index aded3b161..394a68b68 100644 --- a/src/yacsloader/Test/YacsLoaderTest.cxx +++ b/src/yacsloader/Test/YacsLoaderTest.cxx @@ -238,7 +238,7 @@ void YacsLoaderTest::eschema() if (p) { PyObject *data = ((OutputPyPort*)p->nodeMap["node2"]->getOutputPort("p1"))->get(); - char *text = PyString_AsString(data); + char *text = PyBytes_AsString(data); CPPUNIT_ASSERT_EQUAL(string("coucoucoucoucoucoucoucou"), string(text)); delete p; } @@ -254,7 +254,7 @@ void YacsLoaderTest::fschema() if (p) { PyObject *data = ((OutputPyPort*)p->nodeMap["node2"]->getOutputPort("p1"))->get(); - char *text = PyString_AsString(data);; + char *text = PyBytes_AsString(data);; CPPUNIT_ASSERT_EQUAL(string("coucoucoucoucoucoucoucou"), string(text) ); delete p; } diff --git a/src/yacsloader/pmml/CMakeLists.txt b/src/yacsloader/pmml/CMakeLists.txt index c43db5279..c578f3655 100755 --- a/src/yacsloader/pmml/CMakeLists.txt +++ b/src/yacsloader/pmml/CMakeLists.txt @@ -27,6 +27,7 @@ ADD_DEFINITIONS( INCLUDE_DIRECTORIES( ${CPPUNIT_INCLUDE_DIRS} ${PTHREADS_INCLUDE_DIRS} + ${OMNIORBPY_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/ ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/../../bases diff --git a/src/yacsloader_swig/CMakeLists.txt b/src/yacsloader_swig/CMakeLists.txt index a2ffe302d..49a00815f 100644 --- a/src/yacsloader_swig/CMakeLists.txt +++ b/src/yacsloader_swig/CMakeLists.txt @@ -33,6 +33,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/yacsloader ${PROJECT_BINARY_DIR}/src/engine_swig ${OMNIORB_INCLUDE_DIR} + ${OMNIORBPY_INCLUDE_DIR} ${PYTHON_INCLUDE_DIRS} ) diff --git a/src/ydfx_gui/YDFXGUIHostParametrizer.cxx b/src/ydfx_gui/YDFXGUIHostParametrizer.cxx index e83c6d946..6410c08d9 100644 --- a/src/ydfx_gui/YDFXGUIHostParametrizer.cxx +++ b/src/ydfx_gui/YDFXGUIHostParametrizer.cxx @@ -131,7 +131,7 @@ void YDFXGUIHostParametrizer::applyToEFX() YACSEvalParamsForCluster& ps(res->getAddParamsForCluster()); _clusterAdvInfo->applyToParams(ps); } - emit readyForRunSignal(true); + Q_EMIT readyForRunSignal(true); } QString YDFXGUIHostParametrizer::getNameOfHost() @@ -148,7 +148,7 @@ void YDFXGUIHostParametrizer::changeMachine(const QString& newMachineSelected) ok->setDisabled(!isInterac && !_clusterAdvInfo->isOK()); if(_wasInteractive!=isInterac) { - emit interactivityChanged(isInterac); + Q_EMIT interactivityChanged(isInterac); _wasInteractive=isInterac; } } @@ -346,7 +346,7 @@ void YDFXGUIBatchInfo::loadFromSettings(const QSettings& settings) } bool newOK(isOK()); _wasOK=newOK; - emit statusOfEntryChanged(newOK); + Q_EMIT statusOfEntryChanged(newOK); } void YDFXGUIBatchInfo::learnSettings(QSettings& settings) const @@ -379,7 +379,7 @@ QString YDFXGUIBatchInfo::getNameOfHost() void YDFXGUIBatchInfo::somethingChanged() { - emit statusOfEntryChanged(isOK()); + Q_EMIT statusOfEntryChanged(isOK()); } QString YDFXGUIBatchInfo::NormalizeDuration(const QString& txt) diff --git a/src/ydfx_gui/YDFXGUIMain.hxx b/src/ydfx_gui/YDFXGUIMain.hxx index 80509ce29..a0a99f7e4 100644 --- a/src/ydfx_gui/YDFXGUIMain.hxx +++ b/src/ydfx_gui/YDFXGUIMain.hxx @@ -29,8 +29,6 @@ #include #include -#include "Python.h" - class YACSEvalSession; class YACSEvalYFXWrap; class YDFXGUIAllPorts; diff --git a/src/ydfx_gui/YDFXGUIPortsSelector.cxx b/src/ydfx_gui/YDFXGUIPortsSelector.cxx index f54c4c094..2ee3c7717 100644 --- a/src/ydfx_gui/YDFXGUIPortsSelector.cxx +++ b/src/ydfx_gui/YDFXGUIPortsSelector.cxx @@ -305,7 +305,7 @@ void YDFXGUIInputPortValueEditor::setText(const QString& text) { if(wasKO) { - emit statusChanged(); + Q_EMIT statusChanged(); disconnect(this,SIGNAL(changeLook()),this,SLOT(applyModificationOfLook())); } } @@ -414,7 +414,7 @@ bool YDFXGUIInputPortValueEditor::toggleRandom() bool oldOK(isOK()); bool oldStatus(_inp->isRandomVar()); _inp->declareRandomnessStatus(!oldStatus); - emit statusChanged(); // always emit because this even if newOK and oldOK are the same the upon status can changed ! + Q_EMIT statusChanged(); // always Q_EMIT because this even if newOK and oldOK are the same the upon status can changed ! updateGeometry(); update(); return _inp->isRandomVar(); @@ -563,7 +563,7 @@ void InputLabel::paintIfNotOn(QPaintEvent *event) void InputLabel::pressOccured() { - emit randomnessStatusChanged(); + Q_EMIT randomnessStatusChanged(); } std::vector InputLabel::textForEmulatedPushButton() const @@ -651,7 +651,7 @@ void OutputLabel::pressOccured() { bool oldStatus(_outp->isQOfInterest()); _outp->setQOfInterestStatus(!oldStatus); - emit clicked(); + Q_EMIT clicked(); } std::vector OutputLabel::textForEmulatedPushButton() const @@ -719,7 +719,7 @@ void YDFXGUIGatherPorts::somebodyChangedStatus() update(); setWasOKStatus(newStatus); } - emit theGlobalStatusChanged(newStatus);// emit signal always because of input ports and sequences definitions. + Q_EMIT theGlobalStatusChanged(newStatus);// Q_EMIT signal always because of input ports and sequences definitions. } ////////////////// @@ -820,7 +820,7 @@ void YDFXGUIInputPortsSelector::timerEvent(QTimerEvent *e) YDFXGUIInputPortValueEditor *childc(qobject_cast(child)); if(childc) { - emit childc->changeLook(); + Q_EMIT childc->changeLook(); } } } @@ -977,10 +977,10 @@ void YDFXGUIAllPorts::somethingChangedInPorts(bool status) bool step1(_in->isOK() && _out->isOK()); if(!step1) { - emit sequencesCanBeDefinedSignal(false); - emit canBeExecutedSignal(false); + Q_EMIT sequencesCanBeDefinedSignal(false); + Q_EMIT canBeExecutedSignal(false); return ; } - emit sequencesCanBeDefinedSignal(true); - emit canBeExecutedSignal(_in->areSeqWellDefined()); + Q_EMIT sequencesCanBeDefinedSignal(true); + Q_EMIT canBeExecutedSignal(_in->areSeqWellDefined()); } diff --git a/src/ydfx_gui/YDFXGUIPushButtons.cxx b/src/ydfx_gui/YDFXGUIPushButtons.cxx index b76d3d643..29b497238 100644 --- a/src/ydfx_gui/YDFXGUIPushButtons.cxx +++ b/src/ydfx_gui/YDFXGUIPushButtons.cxx @@ -18,11 +18,11 @@ // // Author : Anthony Geay (EDF R&D) +#include "YDFXGUIPyThreadSaver.hxx" #include "YDFXGUIPushButtons.hxx" #include "YDFXGUIWrap.hxx" #include "YDFXGUISeqInit.hxx" -#include "YDFXGUIPyThreadSaver.hxx" #include "YDFXGUIHostParametrizer.hxx" #include "YACSEvalSession.hxx" @@ -95,7 +95,7 @@ void YDFXGUISeqInitButton::sequenceInitRequested() if(dial.exec()) { _state=zeWidget->saveState(); - emit sequenceWellDefined(true); + Q_EMIT sequenceWellDefined(true); } } @@ -111,7 +111,7 @@ void YDFXGUIRunInfo::startComputation() std::fill(_items.begin(),_items.end(),0); _computationInProgress=true; _mut.unlock(); - emit somethingChanged(); + Q_EMIT somethingChanged(); } void YDFXGUIRunInfo::endComputation() @@ -119,7 +119,7 @@ void YDFXGUIRunInfo::endComputation() _mut.lock(); _computationInProgress=false; _mut.unlock(); - emit somethingChanged(); + Q_EMIT somethingChanged(); } void YDFXGUIRunInfo::sampleOK(int pos) @@ -127,7 +127,7 @@ void YDFXGUIRunInfo::sampleOK(int pos) _mut.lock(); _items[pos]=1; _mut.unlock(); - emit somethingChanged(); + Q_EMIT somethingChanged(); } void YDFXGUIRunInfo::sampleKO(int pos) @@ -135,7 +135,7 @@ void YDFXGUIRunInfo::sampleKO(int pos) _mut.lock(); _items[pos]=2; _mut.unlock(); - emit somethingChanged(); + Q_EMIT somethingChanged(); } std::vector YDFXGUIRunInfo::getItems() const diff --git a/src/ydfx_gui/YDFXGUIPyThreadSaver.hxx b/src/ydfx_gui/YDFXGUIPyThreadSaver.hxx index d10ee7c67..6ac1c9930 100644 --- a/src/ydfx_gui/YDFXGUIPyThreadSaver.hxx +++ b/src/ydfx_gui/YDFXGUIPyThreadSaver.hxx @@ -21,9 +21,10 @@ #ifndef __YDFXGUIPYTHREADSAVER_HXX__ #define __YDFXGUIPYTHREADSAVER_HXX__ +#include "Python.h" + #include "ydfxwidgetsExport.hxx" -#include "Python.h" class QThread; diff --git a/src/ydfx_gui/YDFXGUISeqInit.cxx b/src/ydfx_gui/YDFXGUISeqInit.cxx index 500ec1ad3..05a92e0ed 100644 --- a/src/ydfx_gui/YDFXGUISeqInit.cxx +++ b/src/ydfx_gui/YDFXGUISeqInit.cxx @@ -18,6 +18,7 @@ // // Author : Anthony Geay (EDF R&D) +#include "Python.h" #include "YDFXGUISeqInit.hxx" #include @@ -31,7 +32,6 @@ #include #include -#include "Python.h" #include "AutoGIL.hxx" @@ -101,7 +101,7 @@ bool YDFXGUISeqSetterP::executeScript(int& sz) // if(_fileName.isEmpty()) { - emit problemDetected(QString("For \"%1\" : no file defined !").arg(zeBossc->getName())); + Q_EMIT problemDetected(QString("For \"%1\" : no file defined !").arg(zeBossc->getName())); return false; } QFile file(_fileName); @@ -117,7 +117,7 @@ bool YDFXGUISeqSetterP::executeScript(int& sz) double v(line2.toDouble(&isOK)); if(!isOK) { - emit problemDetected(QString("For \"%1\" : At line %2 it is not a float !").arg(zeBossc->getName()).arg(i)); + Q_EMIT problemDetected(QString("For \"%1\" : At line %2 it is not a float !").arg(zeBossc->getName()).arg(i)); return false; } _vect.push_back(v); @@ -203,22 +203,22 @@ bool YDFXGUISeqSetterT::executeScript(int& sz) AutoPyRef code(Py_CompileString(txt.c_str(),TMP_FILENAME, Py_file_input)); if(code.get() == NULL) { - emit problemDetected(QString("For \"%1\" : python code is invalid !").arg(zeBossc->getName())); + Q_EMIT problemDetected(QString("For \"%1\" : python code is invalid !").arg(zeBossc->getName())); return false; } AutoPyRef context(PyDict_New()); PyDict_SetItemString( context, "__builtins__", PyEval_GetBuiltins() ); - AutoPyRef res(PyEval_EvalCode((PyCodeObject *)code.get(), context, context)); + AutoPyRef res(PyEval_EvalCode(code.get(), context, context)); PyObject *item(PyDict_GetItemString(context,name.c_str())); // if(!item) { - emit problemDetected(QString("For \"%1\" : Py var %1 is not defined !").arg(zeBossc->getName())); + Q_EMIT problemDetected(QString("For \"%1\" : Py var %1 is not defined !").arg(zeBossc->getName())); return false; } if(!PyList_Check(item)) { - emit problemDetected(QString("For \"%1\" : Py var %1 must be a list !").arg(zeBossc->getName())); + Q_EMIT problemDetected(QString("For \"%1\" : Py var %1 must be a list !").arg(zeBossc->getName())); return false; } sz=PyList_Size(item); @@ -228,7 +228,7 @@ bool YDFXGUISeqSetterT::executeScript(int& sz) PyObject *val(PyList_GetItem(item,i)); if(!PyFloat_Check(val)) { - emit problemDetected(QString("For \"%1\" : At pos %2 of python list, it is not a float !").arg(zeBossc->getName()).arg(i)); + Q_EMIT problemDetected(QString("For \"%1\" : At pos %2 of python list, it is not a float !").arg(zeBossc->getName()).arg(i)); return false; } _vect[i]=PyFloat_AS_DOUBLE(val); @@ -409,7 +409,7 @@ YDFXGUISeqLine::YDFXGUISeqLine(QWidget *parent, YACSEvalInputPort *inp):_combo(0 connect(_combo,SIGNAL(currentIndexChanged(int)),this,SLOT(typeOfAssignmentChanged(int))); horizontalLayout->addWidget(_setter); _combo->setCurrentIndex(0); - emit _combo->currentIndexChanged(0);//to be sure to sync widgets + Q_EMIT _combo->currentIndexChanged(0);//to be sure to sync widgets } void YDFXGUISeqLine::loadState(const QMap& state) @@ -551,7 +551,7 @@ void YDFXGUISeqInitEff::assignButtonClicked() { int sz; bool verdict(checkConsistency(sz)); - emit configurationIsOK(verdict); + Q_EMIT configurationIsOK(verdict); } void YDFXGUISeqInitEff::applyOnEFX() @@ -572,7 +572,7 @@ bool YDFXGUISeqInitEff::checkConsistency(int& sz) refSz=locSz; if(locSz!=refSz) { - emit line->setter()->problemDetected(QString("Var %1 does not have the same number of elts than others !").arg(line->getName())); + Q_EMIT line->setter()->problemDetected(QString("Var %1 does not have the same number of elts than others !").arg(line->getName())); return false; } } diff --git a/src/ydfx_gui/YDFXGUIWrap.cxx b/src/ydfx_gui/YDFXGUIWrap.cxx index 6c85bf55a..477ff7b2d 100644 --- a/src/ydfx_gui/YDFXGUIWrap.cxx +++ b/src/ydfx_gui/YDFXGUIWrap.cxx @@ -74,7 +74,7 @@ void YACSEvalYFXWrap::registerObserver(YACSEvalObserver *observer) void YACSEvalYFXWrap::unlockAll() { _efx->unlockAll(); - emit lockSignal(false); + Q_EMIT lockSignal(false); } void YACSEvalYFXWrap::lockPortsForEvaluation() @@ -97,7 +97,7 @@ void YACSEvalYFXWrap::lockPortsForEvaluation() _efx->lockPortsForEvaluation(inps2,outps2); _efx->giveResources();//do not remove this line to generate resource info if(!lockedOrNot) - emit lockSignal(true); + Q_EMIT lockSignal(true); } int YACSEvalYFXWrap::getNbOfItems() const @@ -132,7 +132,7 @@ YACSEvalYFXWrap::~YACSEvalYFXWrap() void YACSEvalYFXWrap::setRunningStatus(bool status) { if(_isRunning!=status) - emit runSignal(status); + Q_EMIT runSignal(status); _isRunning=status; } @@ -143,7 +143,7 @@ void YACSEvalYFXWrap::updateSequencesStatus() if(_isSeqOfValsSet!=newStatus) { _isSeqOfValsSet=newStatus; - emit sequencesAreSetSignal(_isSeqOfValsSet); + Q_EMIT sequencesAreSetSignal(_isSeqOfValsSet); } }