X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FLifeCycleCORBA_SWIG%2FlibSALOME_LifeCycleCORBA.i;h=b931551a7bfa753f8d650110525b1896b84b26f5;hb=d8edd4804d9e6513a17c497c1a30326d4ba0d677;hp=c8bbe000b8b72ec650b9a975eb1e98ce5ebf1832;hpb=e6bfea36374791cd31c274a2f97df90dc60ddaf3;p=modules%2Fkernel.git diff --git a/src/LifeCycleCORBA_SWIG/libSALOME_LifeCycleCORBA.i b/src/LifeCycleCORBA_SWIG/libSALOME_LifeCycleCORBA.i index c8bbe000b..b931551a7 100644 --- a/src/LifeCycleCORBA_SWIG/libSALOME_LifeCycleCORBA.i +++ b/src/LifeCycleCORBA_SWIG/libSALOME_LifeCycleCORBA.i @@ -1,58 +1,58 @@ -// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // - +// ---------------------------------------------------------------------------- +// %module libSALOME_LifeCycleCORBA +%feature("autodoc", "1"); + +%include +%include "std_string.i" + + +// ---------------------------------------------------------------------------- + %{ #include "utilities.h" #include "SALOME_LifeCycleCORBA.hxx" #include "SALOME_FileTransferCORBA.hxx" #include "SALOME_NamingService.hxx" #include "ServiceUnreachable.hxx" +#include "Utils_SALOME_Exception.hxx" +#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) +typedef int Py_ssize_t; +#define PY_SSIZE_T_MAX INT_MAX +#define PY_SSIZE_T_MIN INT_MIN +#endif - using namespace std; - -//--- 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. - +#include +#include +omniORBpyAPI* api=0; - omniORBpyAPI(); - // Constructor for the singleton. Sets up the function pointers. -}; +%} - omniORBpyAPI* api; -%} +// ---------------------------------------------------------------------------- %init @@ -62,32 +62,20 @@ struct omniORBpyAPI { PyObject* omnipy = PyImport_ImportModule((char*)"_omnipy"); if (!omnipy) { - PyErr_SetString(PyExc_ImportError, - (char*)"Cannot import _omnipy"); - return; + PyErr_SetString(PyExc_ImportError, (char*)"Cannot import _omnipy"); + return NULL; } PyObject* pyapi = PyObject_GetAttrString(omnipy, (char*)"API"); - api = (omniORBpyAPI*)PyCObject_AsVoidPtr(pyapi); + api = (omniORBpyAPI*)PyCapsule_GetPointer(pyapi,"_omnipy.API"); Py_DECREF(pyapi); %} -%exception { - try { - $action - } - catch (ServiceUnreachable) { - PyErr_SetString(PyExc_RuntimeError,"Naming Service Unreacheable"); - return NULL; - } - catch (...) { - PyErr_SetString(PyExc_RuntimeError, "unknown exception"); - return NULL; - } -} +// ---------------------------------------------------------------------------- -%typemap(python,out) Engines::Container_ptr, Engines::Component_ptr, Engines::fileRef_ptr +%typemap(out) Engines::Container_ptr, Engines::EngineComponent_ptr, Engines::fileRef_ptr, + Engines::ContainerManager_ptr, Engines::ResourcesManager_ptr { MESSAGE("typemap out on CORBA object ptr"); SCRUTE($1); @@ -95,116 +83,142 @@ struct omniORBpyAPI { SCRUTE($result); } -%typemap(python,out) std::string, - string -{ - MESSAGE("typemap out on std::string"); - SCRUTE($1); - $result = PyString_FromString($1.c_str()); -} - -%typemap(typecheck) const Engines::MachineParameters &, - Engines::MachineParameters const & +%typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) Engines::fileRef_ptr { - $1 = PyDict_Check($input); + $1=PyObject_HasAttrString($input, "__omni_obj"); } -%typemap(typecheck) std::string, - string +%typemap(in) Engines::fileRef_ptr aFileRef { - $1 = PyString_Check($input); + MESSAGE("typemap in on CORBA object ptr"); + try { + CORBA::Object_ptr obj = api->pyObjRefToCxxObjRef($input,1); + $1 = Engines::fileRef::_narrow(obj); + SCRUTE($1); + } + catch (...) { + PyErr_SetString(PyExc_RuntimeError, "not a valid CORBA object ptr"); + } } -%typemap(python,in) std::string, - string +// We use a dictionary to represent ContainerParameters structure instead of the CORBA +// structure itself because it would require a transformation from the Python +// ContainerParameters structure, generated by omniOrbPy, to a C++ ContainerParameters +// structure, generated by omniOrb, and this would be quite complex. +%typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) const Engines::ContainerParameters & { - MESSAGE("typemap in on std::string"); - std::string str; - if (PyString_Check($input) == 1) - { - char* value = PyString_AsString($input); - str = value; - $1 = str; - } - else - { - MESSAGE("Not a string"); - PyErr_SetString(PyExc_TypeError,"Must Be a Python string"); - return NULL; - } + $1 = PyDict_Check($input)? 1 : 0; } - -%typemap(python,in) const Engines::MachineParameters & +%typemap(in) const Engines::ContainerParameters & { - //printf("typemap in on Engines::MachineParameters\n"); - MESSAGE("typemap in on Engines::MachineParameters"); + MESSAGE("typemap in on Engines::ContainerParameters"); if (PyDict_Check($input) == 1) { - Engines::MachineParameters *param = new Engines::MachineParameters ; - param->container_name = CORBA::string_dup(""); - param->hostname = CORBA::string_dup(""); - param->OS = CORBA::string_dup(""); - param->mem_mb = 0; - param->cpu_clock = 0; - param->nb_proc_per_node = 0; - param->nb_node = 0; - param->isMPI = false; + Engines::ContainerParameters *param = new Engines::ContainerParameters ; + SALOME_LifeCycleCORBA::preSet(*param); + PyObject *key, *value; - int pos = 0; + Py_ssize_t pos = 0; while (PyDict_Next($input, &pos, &key, &value)) - { - char* keystr = PyString_AsString(key); - printf("key: %s\n", keystr); - if (strcmp(keystr,"container_name")==0) - { - param->container_name = CORBA::string_dup(PyString_AsString(value)); - } - else if (strcmp(keystr,"hostname")==0) - { - param->hostname = CORBA::string_dup(PyString_AsString(value)); - } - else if (strcmp(keystr,"OS")==0) - { - param->OS = CORBA::string_dup(PyString_AsString(value)); - } - else if (strcmp(keystr,"mem_mb")==0) - { - param->mem_mb = PyLong_AsLong(value); - } - else if (strcmp(keystr,"cpu_clock")==0) - { - param->cpu_clock = PyLong_AsLong(value); - } - else if (strcmp(keystr,"nb_proc_per_node")==0) - { - param->nb_proc_per_node = PyLong_AsLong(value); - } - else if (strcmp(keystr,"nb_node")==0) - { - param->nb_node = PyLong_AsLong(value); - } - else if (strcmp(keystr,"isMPI")==0) - { - param->isMPI = PyLong_AsLong(value); - } - } + { + char* keystr = PyString_AsString(key); + if (strcmp(keystr,"container_name")==0) + { + param->container_name = CORBA::string_dup(PyString_AsString(value)); + } + else if (strcmp(keystr,"resource_name")==0) + { + param->resource_params.name = CORBA::string_dup(PyString_AsString(value)); + } + else if (strcmp(keystr,"hostname")==0) + { + param->resource_params.hostname = CORBA::string_dup(PyString_AsString(value)); + } + else if (strcmp(keystr,"OS")==0) + { + param->resource_params.OS = CORBA::string_dup(PyString_AsString(value)); + } + else if (strcmp(keystr,"mem_mb")==0) + { + param->resource_params.mem_mb = PyLong_AsLong(value); + } + else if (strcmp(keystr,"cpu_clock")==0) + { + param->resource_params.cpu_clock = PyLong_AsLong(value); + } + else if (strcmp(keystr,"nb_proc_per_node")==0) + { + param->resource_params.nb_proc_per_node = PyLong_AsLong(value); + } + else if (strcmp(keystr,"nb_node")==0) + { + param->resource_params.nb_node = PyLong_AsLong(value); + } + else if (strcmp(keystr,"isMPI")==0) + { + param->isMPI = PyLong_AsLong(value); + } + else if (strcmp(keystr,"workingdir")==0) + param->workingdir = CORBA::string_dup(PyString_AsString(value)); + else if (strcmp(keystr,"mode")==0) + param->mode = CORBA::string_dup(PyString_AsString(value)); + else if (strcmp(keystr,"policy")==0) + param->resource_params.policy = CORBA::string_dup(PyString_AsString(value)); + else if (strcmp(keystr,"parallelLib")==0) + { + param->parallelLib = CORBA::string_dup(PyString_AsString(value)); + } + } $1 = param; } else { - MESSAGE("Not a dictionnary"); - PyErr_SetString(PyExc_TypeError,"Must Be a Python Dictionnary"); + MESSAGE("Not a ContainerParameters struct"); + PyErr_SetString(PyExc_TypeError,"Must Be a Python ContainerParameters object"); return NULL; } } -%typemap(python,freearg) const Engines::MachineParameters & +%typemap(freearg) const Engines::ContainerParameters & { MESSAGE("delete $1"); delete $1; } -%include "SALOME_LifeCycleCORBA.hxx" -%include "SALOME_FileTransferCORBA.hxx" +// ---------------------------------------------------------------------------- + +%include + +%exception { + Py_BEGIN_ALLOW_THREADS + try { + $action + } + catch (ServiceUnreachable&) { + Py_BLOCK_THREADS + PyErr_SetString(PyExc_RuntimeError,"Naming Service Unreacheable"); + return NULL; + } + catch (SALOME_Exception &e) { + Py_BLOCK_THREADS + PyErr_SetString(PyExc_RuntimeError,e.what()); + return NULL; + } + catch (SALOME::SALOME_Exception &e) { + Py_BLOCK_THREADS + PyErr_SetString(PyExc_RuntimeError,e.details.text); + return NULL; + } + catch (...) { + Py_BLOCK_THREADS + PyErr_SetString(PyExc_RuntimeError, "unknown exception"); + return NULL; + } + Py_END_ALLOW_THREADS +} + + +%include +%include