00001
00002
00003
00004
00005
00006
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