CMS 3D CMS Logo

pythonFileToConfigure.cc

Go to the documentation of this file.
00001 /*
00002  *  pythonToConfigure.cpp
00003  *  CMSSW
00004  *
00005  *  Created by Chris Jones on 10/3/06.
00006  *  Copyright 2006 __MyCompanyName__. All rights reserved.
00007  *
00008  */
00009 
00010 #include <boost/python.hpp>
00011 #include "FWCore/ParameterSet/interface/pythonFileToConfigure.h"
00012 #include "FWCore/ParameterSet/src/PythonWrapper.h"
00013 
00014 
00015 std::string edm::pythonFileToConfigure(const std::string& iPythonFileName)
00016 {
00017   std::string returnValue;
00018   std::string initCommand("import FWCore.ParameterSet.Config as cms\n"
00019                           "fileDict = dict()\n"
00020                           "execfile('");
00021   initCommand += iPythonFileName+"',fileDict)";
00022   
00023   Py_InitializeEx(0);
00024   using namespace boost::python;
00025   
00026   object main_module((
00027                       boost::python::handle<PyObject>(borrowed(PyImport_AddModule("__main__")))));
00028   object main_namespace = main_module.attr("__dict__");
00029   try {
00030     try {
00031       object result((boost::python::handle<>(PyRun_String(initCommand.c_str(),
00032                                                           Py_file_input,
00033                                                           main_namespace.ptr(),
00034                                                           main_namespace.ptr()))));
00035     } catch(error_already_set) {
00036       edm::pythonToCppException("Configuration");
00037     }
00038     try {
00039       std::string command("cms.findProcess(fileDict).dumpConfig()");
00040       object result((handle<>(PyRun_String(command.c_str(),
00041                                            Py_eval_input,
00042                                            main_namespace.ptr(),
00043                                            main_namespace.ptr()))));
00044       returnValue= extract<std::string>(result);
00045       
00046     }catch( error_already_set ) {
00047       edm::pythonToCppException("Configuration");
00048     }
00049   }catch(...) {
00050     Py_Finalize();
00051     throw;
00052   }
00053   Py_Finalize();
00054   return returnValue;
00055 }
00056 

Generated on Tue Jun 9 17:36:29 2009 for CMSSW by  doxygen 1.5.4