28 std::cout <<
"Start preparing PythonService" << std::endl;
31 using namespace boost::python;
33 command_ =
"from "+fileName +
" import *\n";
34 object main_module(( boost::python::handle<>(borrowed(PyImport_AddModule(const_cast<char *>(
"__main__"))))));
35 object main_namespace = main_module.attr(
"__dict__");
37 object result((boost::python::handle<>(PyRun_String(
command_.c_str(),
40 main_namespace.ptr()))));
41 service_ = main_namespace[
"service"];
43 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'.";
68 using namespace boost::python;
69 object main_module((boost::python::handle<>(borrowed(PyImport_AddModule(const_cast<char *>(
"__main__"))))));
70 object main_namespace = main_module.attr(
"__dict__");
71 main_namespace[
"tempService"] =
service_;
74 object result((boost::python::handle<>(PyRun_String(
"tempService.postBeginJob()",
77 main_namespace.ptr()))));
78 }
catch( error_already_set ) {
86 using namespace boost::python;
87 object main_module((boost::python::handle<>(borrowed(PyImport_AddModule(const_cast<char *>(
"__main__"))))));
88 object main_namespace = main_module.attr(
"__dict__");
89 main_namespace[
"tempService"] =
service_;
92 object result((boost::python::handle<>(PyRun_String(
"tempService.postEndJob()",
95 main_namespace.ptr()))));
96 }
catch( error_already_set ) {
110 using namespace boost::python;
111 object main_module((boost::python::handle<>(borrowed(PyImport_AddModule(const_cast<char *>(
"__main__"))))));
112 object main_namespace = main_module.attr(
"__dict__");
113 main_namespace[
"tempService"] =
service_;
116 object result((boost::python::handle<>(PyRun_String(
"tempService.postProcessEvent()",
118 main_namespace.ptr(),
119 main_namespace.ptr()))));
120 }
catch( error_already_set ) {
128 desc.
add<std::string>(
"fileName");
void pythonToCppException(const std::string &iType)
T getParameter(std::string const &) const
void preProcessEvent(const edm::EventID &, const edm::Timestamp &)
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
void watchPostProcessEvent(PostProcessEvent::slot_type const &iSlot)
void addDefault(ParameterSetDescription const &psetDescription)
boost::python::object service_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
PythonService(const edm::ParameterSet &, edm::ActivityRegistry &)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void postProcessEvent(const edm::Event &, const edm::EventSetup &)
void watchPostBeginJob(PostBeginJob::slot_type const &iSlot)
convenience function for attaching to signal