#include <FWCore/Python/src/PythonService.h>
Public Member Functions | |
void | postBeginJob () |
void | postEndJob () |
void | postProcessEvent (const edm::Event &, const edm::EventSetup &) |
void | preProcessEvent (const edm::EventID &, const edm::Timestamp &) |
PythonService (const edm::ParameterSet &, edm::ActivityRegistry &) | |
~PythonService () | |
Static Public Member Functions | |
static void | fillDescriptions (edm::ConfigurationDescriptions &descriptions) |
Private Attributes | |
std::string | command_ |
std::string | fileName_ |
PythonManagerHandle | handle_ |
boost::python::object | service_ |
Description: interface to write EDMService in Python
Usage: <usage>
Definition at line 32 of file PythonService.h.
PythonService::PythonService | ( | const edm::ParameterSet & | iConfig, |
edm::ActivityRegistry & | iRegistry | ||
) |
Definition at line 24 of file PythonService.cc.
References command_, gather_cfg::cout, Exception, convertXMLtoSQLite_cfg::fileName, edm::ParameterSet::getParameter(), postBeginJob(), postEndJob(), postProcessEvent(), query::result, service_, edm::ActivityRegistry::watchPostBeginJob(), edm::ActivityRegistry::watchPostEndJob(), and edm::ActivityRegistry::watchPostProcessEvent().
: handle_(PythonManager::handle()) { std::cout << "Start preparing PythonService" << std::endl; std::string const fileName = iConfig.getParameter<std::string>("fileName"); using namespace boost::python; command_ = "from " + fileName + " import *\n"; object main_module((boost::python::handle<>(borrowed(PyImport_AddModule(const_cast<char*>("__main__")))))); object main_namespace = main_module.attr("__dict__"); try { object result((boost::python::handle<>(PyRun_String(command_.c_str(), Py_file_input, main_namespace.ptr(), main_namespace.ptr())))); service_ = main_namespace["service"]; } catch(...) { throw cms::Exception("Configuration") << "No 'service' python variable defined in given fileName parameter.\n Please create an instance of the python class you want to use and pass that instance to the variable named 'service'."; } // connect methods and signals // later on here will be a check what python methods are present // for now we expect postBeginJob, postEndJob and postProcessEvent iRegistry.watchPostBeginJob(this,&PythonService::postBeginJob); iRegistry.watchPostEndJob(this,&PythonService::postEndJob); iRegistry.watchPostProcessEvent(this,&PythonService::postProcessEvent); }
PythonService::~PythonService | ( | ) |
Definition at line 57 of file PythonService.cc.
{ }
void PythonService::fillDescriptions | ( | edm::ConfigurationDescriptions & | descriptions | ) | [static] |
Definition at line 115 of file PythonService.cc.
References edm::ParameterSetDescription::add(), and edm::ConfigurationDescriptions::addDefault().
{ edm::ParameterSetDescription desc; desc.add<std::string>("fileName"); descriptions.addDefault(desc); }
void PythonService::postBeginJob | ( | ) |
Definition at line 63 of file PythonService.cc.
References pythonToCppException(), query::result, and service_.
Referenced by PythonService().
{ using namespace boost::python; object main_module((boost::python::handle<>(borrowed(PyImport_AddModule(const_cast<char *>("__main__")))))); object main_namespace = main_module.attr("__dict__"); main_namespace["tempService"] = service_; try { object result((boost::python::handle<>(PyRun_String("tempService.postBeginJob()", Py_eval_input, main_namespace.ptr(), main_namespace.ptr())))); } catch(error_already_set) { pythonToCppException("RuntimeError"); } }
void PythonService::postEndJob | ( | ) |
Definition at line 79 of file PythonService.cc.
References pythonToCppException(), query::result, and service_.
Referenced by PythonService().
{ using namespace boost::python; object main_module((boost::python::handle<>(borrowed(PyImport_AddModule(const_cast<char *>("__main__")))))); object main_namespace = main_module.attr("__dict__"); main_namespace["tempService"] = service_; try { object result((boost::python::handle<>(PyRun_String("tempService.postEndJob()", Py_eval_input, main_namespace.ptr(), main_namespace.ptr())))); } catch(error_already_set) { pythonToCppException("RuntimeError"); } }
void PythonService::postProcessEvent | ( | const edm::Event & | , |
const edm::EventSetup & | |||
) |
Definition at line 98 of file PythonService.cc.
References pythonToCppException(), query::result, and service_.
Referenced by PythonService().
{ using namespace boost::python; object main_module((boost::python::handle<>(borrowed(PyImport_AddModule(const_cast<char *>("__main__")))))); object main_namespace = main_module.attr("__dict__"); main_namespace["tempService"] = service_; try { object result((boost::python::handle<>(PyRun_String("tempService.postProcessEvent()", Py_eval_input, main_namespace.ptr(), main_namespace.ptr())))); } catch(error_already_set) { pythonToCppException("RuntimeError"); } }
void PythonService::preProcessEvent | ( | const edm::EventID & | , |
const edm::Timestamp & | |||
) |
Definition at line 95 of file PythonService.cc.
{ }
std::string PythonService::command_ [private] |
Definition at line 47 of file PythonService.h.
Referenced by PythonService().
std::string PythonService::fileName_ [private] |
Definition at line 46 of file PythonService.h.
PythonManagerHandle PythonService::handle_ [private] |
Definition at line 44 of file PythonService.h.
boost::python::object PythonService::service_ [private] |
Definition at line 45 of file PythonService.h.
Referenced by postBeginJob(), postEndJob(), postProcessEvent(), and PythonService().