117{
119
120 const std::string pyModuleName = "AthenaPython.Configurables";
121
122
123 RootUtils::PyGILStateEnsure ensure;
124 ATH_MSG_DEBUG(
"Importing module [" << pyModuleName <<
"]...");
125 PyObject*
module = PyImport_ImportModule(
const_cast<char*
>(pyModuleName.c_str()) );
126 if ( !module || !PyModule_Check( module ) ) {
127 ATH_MSG_ERROR(
"Could not import [" << pyModuleName <<
"] !!");
128 Py_XDECREF (module);
129 throw CPyCppyy::PyException();
130 }
131
132 const std::string pyClassName = "PyComponents";
134 pyClass = PyDict_GetItemString( PyModule_GetDict( module ),
135 const_cast<char*>( pyClassName.c_str() ) );
136
137
138 Py_XINCREF( pyClass );
139
140 if ( !pyClass ) {
142 << "] from module [" << pyModuleName << "] !!");
143 Py_XDECREF(pyClass);
144 Py_DECREF (module);
145 return StatusCode::FAILURE;
146 }
147
148 m_dict = PyObject_GetAttrString( pyClass,
149 const_cast<char*>( "instances" ) );
151 ATH_MSG_ERROR(
"Could not retrieve attribute [instances] from class ["
152 << pyClassName << "] !!");
153 Py_DECREF (pyClass);
154 Py_DECREF (module);
155 return StatusCode::FAILURE;
156 }
157 Py_DECREF(pyClass);
158
159
160
161
162 {
164 fancy_attr = PyDict_GetItemString(PyModule_GetDict(module),
165 (char*)"_install_fancy_attrs");
166
167 Py_XINCREF(fancy_attr);
168 if (!fancy_attr) {
169 PyErr_Clear();
171 ("could not retrieve function [_install_fancy_attrs] from module ["
172 << pyModuleName << "]");
173 } else {
174 PyObject* ret = PyObject_CallFunction(fancy_attr, NULL);
175 Py_XDECREF(ret);
176 }
177 Py_XDECREF(fancy_attr);
178 }
179 Py_DECREF (module);
180
181
182 const std::string pyRootFixes = "RootUtils.PyROOTFixes";
183 ATH_MSG_DEBUG(
"Importing module [" << pyRootFixes <<
"]...");
185 rootFixes = PyImport_ImportModule(const_cast<char*>(pyRootFixes.c_str()));
186 if ( !rootFixes || !PyModule_Check( rootFixes ) ) {
187 PyErr_Print();
188 PyErr_Clear();
191 << "Some problem may appear with some C++->python binded classes (YMMV)");
192 }
193 Py_XDECREF(rootFixes);
194 return StatusCode::SUCCESS;
195}
#define ATH_MSG_WARNING(x)