All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
PythonConfig.cpp
Go to the documentation of this file.
1 #include "PythonConfig.h"
2 
3 // boost includes
4 #include "boost/python.hpp"
5 using namespace boost::python;
6 
7 //-----------------------------------------------------------------------------
9  try{
10  // Prepare a Python environment
11  Py_Initialize();
12  object main_module((
13  handle<>(borrowed(PyImport_AddModule("__main__")))));
14  object main_namespace = main_module.attr("__dict__");
15 
16  // make the translator class known to Python
17  main_namespace["PythonAdaptor"] = class_<PythonAdaptor>("PythonAdaptor", boost::python::init<IJobOptionsSvc*>())
18  .def("addPropertyToJobOptions",&PythonAdaptor::addPropertyToJobOptions);
19 
20  // create an instance of it and pass it to Python
21  PythonAdaptor adaptor(m_IJobOptionsSvc);
22  main_namespace["adaptor"] = ptr(&adaptor);
23 
24  // some python helper
25  std::string command(preAction);
26  command += "\nfor name in '";
27  command += filename + "'.split(','): execfile(name)\n";
28  command += "from GaudiKernel.Configurable import expandvars\nfrom GaudiKernel.Proxy.Configurable import applyConfigurableUsers\napplyConfigurableUsers()\n";
29  command += postAction;
30  command += "\nfor n, c in Configurable.allConfigurables.items():\n for p, v in c.getValuedProperties().items() :\n v = expandvars(v)\n if type(v) == str : v = '\"%s\"' % v # need double quotes\n elif type(v) == long: v = '%d' % v # prevent pending 'L'\n adaptor.addPropertyToJobOptions(n,p,str(v))";
31 
32  // Now fire off the translation
33  handle<> ignored(( PyRun_String( command.c_str(),
34  Py_file_input,
35  main_namespace.ptr(),
36  main_namespace.ptr() ) ));
37  } catch( error_already_set ) {
38  std::cout << "Error in python script:" << std::endl;
39  PyErr_Print();
40  return StatusCode::FAILURE;
41  }
42 
43 return StatusCode::SUCCESS;
44 }
T endl(T...args)
StatusCode evaluateConfig(const std::string &filename, const std::string &preAction, const std::string &postAction)
Definition: PythonConfig.cpp:8
void addPropertyToJobOptions(const std::string &client, const std::string &name, const std::string &value)
Definition: PythonConfig.h:15
STL class.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
T c_str(T...args)