--- /dev/null
+#Batch_test.py
+
+# pratique
+import readline
+import rlcompleter
+readline.parse_and_bind('tab: complete')
+
+# Importation de la bibliotheque de classes Batch
+from libBatch_Swig import *
+
+def work():
+ # Definition d'un job...
+ job=Job()
+ # ... de ses parametres ...
+ p={}
+ p['EXECUTABLE']='/home/dutka/tmp/job'
+ p['NAME']='MonJob'
+ p['OUTFILE']=[('/tmp/stdout', 'stdout'), ('/tmp/stderr', 'stderr')]
+ job.setParametre(p)
+ # ... et de son environnement
+ job.setEnvironnement({})
+ print job
+
+ # Appel au catalogue de BatchManager pour accéder au serveur cli70cu
+ # Instanciation du catalogue (quasi-singleton)
+ c=BatchManagerCatalog()
+ # Instanciation d'une Factory de BatchManager de type 'PBS'
+ # fbm=c('PBS')
+
+ # Creation d'un BatchManager de type PBS sur le serveur cli70cu
+ bm=c('PBS')('cli70cu')
+
+ # Soumission du job au BatchManager
+ jobid=bm.submitJob(job)
+ print jobid
+
+ # Interrogation de l'etat du job
+ jobid.queryJob()
+
+ # On attend que le job soit termine
+ try:
+ while 1: jinfo = jobid.queryJob()
+ except:
+ print "Job", jobid, "is done"
+
+ pass
+
+if __name__ == "__main__":
+ work()
+ pass
+
+
+
--- /dev/null
+# Copyright (C) 2003 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
+# 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
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+#
+#
+#
+# File : Makefile.in
+# Author : Paul RASCLE, EDF
+# Module : SALOME
+# $Header$
+
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@:@top_srcdir@/idl
+
+
+@COMMENCE@
+
+# Libraries targets
+
+LIB = libBatch_Swigcmodule.la
+LIB_SRC =
+
+SWIG_DEF = libBatch_Swig.i
+EXPORT_PYSCRIPTS = libBatch_Swig.py Batch_test.py
+
+CPPFLAGS += $(PYTHON_INCLUDES) $(OPENPBS_INCLUDES)
+
+LDFLAGS += $(OPENPBS_LIBDIR)
+
+LIBS += $(PYTHON_LIBS) $(OPENPBS_LIBS) -lSalomeBatch
+
+@CONCLUDE@
--- /dev/null
+/*
+ * libBatch_Swig.i :
+ *
+ * Auteur : Ivan DUTKA-MALEN - EDF R&D
+ * Date : Septembre 2003
+ * Projet : SALOME 2
+ *
+ */
+
+/* ATTENTION:
+ ==========
+ Certaines classes ont des methodes surchargees et SWIG ne gere pas bien
+ ces surcharges, d'ou un probleme d'utilisation en Python de celles-ci.
+ En bref, ça ne marche pas et il faudra corriger le probleme...
+
+ TODO : corriger le probleme de surcharge des methodes en Python
+
+ IDM.
+*/
+
+
+/* Le nom du module Python tel qu'il est importe */
+%module libBatch_Swig
+
+/* Inclusion des conversions de type */
+%include libBatch_Swig_typemap.i
+
+/* Inclusion de la gestion des exceptions */
+%include libBatch_Swig_exception.i
+
+%{
+#include "Batch_Job.hxx"
+#include "Batch_JobId.hxx"
+#include "Batch_JobInfo.hxx"
+
+#include "Batch_BatchManager.hxx"
+#include "Batch_BatchManagerCatalog.hxx"
+#include "Batch_FactBatchManager.hxx"
+using namespace Batch;
+%}
+
+/* Les classes exportees en Python */
+%include Batch_Job.hxx
+%include Batch_JobId.hxx
+%include Batch_JobInfo.hxx
+
+%include Batch_BatchManager.hxx
+%include Batch_BatchManagerCatalog.hxx
+%include Batch_FactBatchManager.hxx
+
+
+
+/* Les methodes alterJob (surchargees et mal gerees en Python) sont
+ remplacees par des methodes setParametre et setEnvironnement.
+ cf. remarque ci-dessus.
+*/
+%ignore JobId::alterJob(const Parametre & param, const Environnement & env) const;
+%ignore JobId::alterJob(const Parametre & param) const;
+%ignore JobId::alterJob(const Environnement & env) const;
--- /dev/null
+/*
+ * _typemap.i :
+ *
+ * Auteur : Ivan DUTKA-MALEN - EDF R&D
+ * Date : Septembre 2003
+ * Projet : SALOME 2
+ *
+ */
+
+%{
+#include <string>
+#include <list>
+#include <map>
+#include "Batch_Parametre.hxx"
+#include "Batch_PyVersatile.hxx"
+#include "Batch_JobId.hxx"
+#include "Batch_FactBatchManager.hxx"
+%}
+
+# // supprime toutes les definitions par defaut => sert au debug
+# %typemap(in) SWIGTYPE ;
+
+
+# // construction d'un dictionnaire Python a partir d'un objet BatchManagerCatalog C++
+%typemap(out) map<string, Batch::FactBatchManager *> *
+{
+ $result = PyDict_New();
+
+ // on itere sur toutes les clefs de la map
+ for(map<string, FactBatchManager *>::const_iterator it=(* $1).begin(); it!=(* $1).end(); it++) {
+ string key = (*it).first;
+ PyObject * obj = SWIG_NewPointerObj((void *) (*it).second, SWIGTYPE_p_Batch__FactBatchManager, 0);
+ PyDict_SetItem($result, PyString_FromString(key.c_str()), obj);
+ }
+}
+
+
+# // construction d'un dictionnaire Python a partir d'un objet Parametre C++
+%typemap(out) Parametre
+{
+ $result = PyDict_New();
+
+ // on itere sur toutes les clefs de la map, et on passe par la classe PyVersatile
+ // qui convertit un Versatile en PyObject et vice versa
+ for(Parametre::const_iterator it=$1.begin(); it!=$1.end(); it++) {
+ string key = (*it).first;
+ PyVersatile PyV = (*it).second;
+ PyDict_SetItem($result, PyString_FromString(key.c_str()), PyV);
+ }
+}
+
+
+# // construction d'un objet Parametre C++ a partir d'un dictionnaire Python
+%typemap(in) Parametre & (Parametre PM)
+{
+ if (!PyDict_Check($input)) {
+ PyErr_SetString(PyExc_ValueError,"Expected a dictionnary");
+ return NULL;
+ }
+
+ try {
+ // on itere sur toutes les clefs du dictionnaire, et on passe par la classe PyVersatile
+ // qui convertit un Versatile en PyObject et vice versa
+ PyObject *key, *value;
+ int pos = 0;
+ while (PyDict_Next($input, &pos, &key, &value)) {
+ string mk = PyString_AsString(key);
+ PyVersatile PyV = value;
+ PyV.setName(mk);
+ PM[mk] = PyV;
+ }
+
+ $1 = &PM; // $1 est une reference donc on lui passe une adresse
+ }
+ catch (GenericException & ex) {
+ string msg = ex.type + " : " + ex.message;
+ PyErr_SetString(PyExc_RuntimeWarning, msg.c_str());
+ return NULL;
+ }
+ catch (...) {
+ PyErr_SetString(PyExc_RuntimeWarning, "unknown exception");
+ return NULL;
+ }
+}
+
+
+# // construction d'un objet Parametre C++ a partir d'un dictionnaire Python
+%typemap(in) Parametre (Parametre PM)
+{
+ if (!PyDict_Check($input)) {
+ PyErr_SetString(PyExc_ValueError,"Expected a dictionnary");
+ return NULL;
+ }
+
+ try {
+ // on itere sur toutes les clefs du dictionnaire, et on passe par la classe PyVersatile
+ // qui convertit un Versatile en PyObject et vice versa
+ PyObject *key, *value;
+ int pos = 0;
+ while (PyDict_Next($input, &pos, &key, &value)) {
+ string mk = PyString_AsString(key);
+ PyVersatile PyV = value;
+ PyV.setName(mk);
+ PM[mk] = PyV;
+ }
+
+ $1 = PM;
+ }
+ catch (GenericException & ex) {
+ string msg = ex.type + " : " + ex.message;
+ PyErr_SetString(PyExc_RuntimeWarning, msg.c_str());
+ return NULL;
+ }
+ catch (...) {
+ PyErr_SetString(PyExc_RuntimeWarning, "unknown exception");
+ return NULL;
+ }
+}
+
+
+# // construction d'un dictionnaire Python a partir d'un objet Environnement C++
+%typemap(out) Environnement
+{
+ $result = PyDict_New();
+
+ // on itere sur toutes les clefs de la map
+ for(Environnement::const_iterator it=$1.begin(); it!=$1.end(); it++) {
+ string key = (*it).first;
+ string val = (*it).second;
+ PyDict_SetItem($result,
+ PyString_FromString(key.c_str()),
+ PyString_FromString(val.c_str()));
+ }
+}
+
+
+# // construction d'un objet Environnement C++ a partir d'un dictionnaire Python
+%typemap(in) Environnement & (Environnement E)
+{
+ if (!PyDict_Check($input)) {
+ PyErr_SetString(PyExc_ValueError,"Expected a dictionnary");
+ return NULL;
+ }
+
+ // on itere sur toutes les clefs du dictionnaire
+ PyObject *key, *value;
+ int pos = 0;
+ while (PyDict_Next($input, &pos, &key, &value)) {
+ string mk = PyString_AsString(key);
+ string val = PyString_AsString(value);
+ E[mk] = val;
+ }
+
+ $1 = &E; // $1 est une reference donc on lui passe une adresse
+}
+
+
+
+# // construction d'un objet Environnement C++ a partir d'un dictionnaire Python
+%typemap(in) Environnement (Environnement E)
+{
+ if (!PyDict_Check($input)) {
+ PyErr_SetString(PyExc_ValueError,"Expected a dictionnary");
+ return NULL;
+ }
+
+ // on itere sur toutes les clefs du dictionnaire
+ PyObject *key, *value;
+ int pos = 0;
+ while (PyDict_Next($input, &pos, &key, &value)) {
+ string mk = PyString_AsString(key);
+ string val = PyString_AsString(value);
+ E[mk] = val;
+ }
+
+ $1 = E;
+}
+
+
+
+# // construction d'une string Python a partir d'une string STL
+%typemap(python,out) string
+{
+ $result = PyString_FromString($1.c_str());
+}
+
+
+
+# // construction d'une string STL a partir d'une string Python
+#%typemap(in) string & (string S)
+#{
+## if (!PyString_Check($input)) {
+# PyErr_SetString(PyExc_ValueError,"Expected a string");
+# return NULL;
+# }
+#
+# S = string(PyString_AsString($input));
+# $1 = &S; // $1 est une reference donc on lui passe une adresse
+#}
+
+
+
+# // construction d'une string STL a partir d'une string Python
+#%typemap(in) string (string S)
+#{
+## if (!PyString_Check($input)) {
+# PyErr_SetString(PyExc_ValueError,"Expected a string");
+# return NULL;
+# }
+#
+# S = string(PyString_AsString($input));
+# $1 = S;
+#}