#include <PyAthenaSvc.h>
|
| | Svc (const std::string &name, ISvcLocator *svcLocator) |
| | Constructor with parameters:
|
| virtual | ~Svc () |
| | Destructor:
|
| virtual StatusCode | initialize () override |
| | Gaudi Service Implementation.
|
| virtual StatusCode | reinitialize () override |
| virtual StatusCode | start () override |
| virtual StatusCode | stop () override |
| virtual StatusCode | finalize () override |
| virtual StatusCode | sysInitialize () override |
| const char * | typeName () const override |
| | return the std::type_info name of the underlying py-component This is used by concrete implementations to connect a python component to its C++ counter-part
|
| virtual PyObject * | self () override |
| | return associated python object.
|
| virtual void | handle (const Incident &incident) override |
| | callback method for the IIncidentSvc
|
|
| virtual bool | setPyAttr (PyObject *pyobj) override |
| | attach the C++ component to its python cousin
|
Definition at line 31 of file PyAthenaSvc.h.
◆ Svc() [1/2]
| PyAthena::Svc::Svc |
( |
const std::string & | name, |
|
|
ISvcLocator * | svcLocator ) |
Constructor with parameters:
Definition at line 41 of file PyAthenaSvc.cxx.
41 :
42 base_class( name, svcLocator ),
44{}
PyObject * m_self
Pointer to self (from the python world)
◆ ~Svc()
◆ Svc() [2/2]
◆ finalize()
| StatusCode PyAthena::Svc::finalize |
( |
| ) |
|
|
overridevirtual |
◆ handle()
| void PyAthena::Svc::handle |
( |
const Incident & | incident | ) |
|
|
overridevirtual |
callback method for the IIncidentSvc
Definition at line 122 of file PyAthenaSvc.cxx.
123{
124 RootUtils::PyGILStateEnsure ensure;
125 if (0 == PyObject_HasAttrString (
m_self, (
char*)
"handle")) {
126
127
128
129 return;
130 }
131
132 PyObject *o = TPython::CPPInstance_FromVoidPtr ((
void*)(&inc),
"Incident");
133 if (0 == o) {
134 Py_XDECREF (o);
136 }
137
139 (char*)"handle",
140 (char*)"O", o);
143 Py_DECREF (o);
145 }
146
148 Py_DECREF (o);
149 return;
150}
std::pair< std::vector< unsigned int >, bool > res
void throw_py_exception(bool display=true)
helper function to capture the boilerplate code for user friendly stack trace display
◆ initialize()
| StatusCode PyAthena::Svc::initialize |
( |
| ) |
|
|
overridevirtual |
◆ reinitialize()
| StatusCode PyAthena::Svc::reinitialize |
( |
| ) |
|
|
overridevirtual |
Definition at line 64 of file PyAthenaSvc.cxx.
65{
67 return PyAthena::callPyMethod(
m_self,
"sysReinitialize" );
68}
◆ self()
| virtual PyObject * PyAthena::Svc::self |
( |
| ) |
|
|
inlineoverridevirtual |
return associated python object.
BORROWED reference.
Definition at line 68 of file PyAthenaSvc.h.
◆ setPyAttr()
| bool PyAthena::Svc::setPyAttr |
( |
PyObject * | pyobj | ) |
|
|
overrideprotectedvirtual |
attach the C++ component to its python cousin
Definition at line 154 of file PyAthenaSvc.cxx.
155{
156
157 RootUtils::PyGILStateEnsure ensure;
158 PyObject* pyobj = TPython::CPPInstance_FromVoidPtr
160 if ( !pyobj ) {
161 PyErr_Clear();
162
163 pyobj = TPython::CPPInstance_FromVoidPtr ((void*)this, "PyAthena::Svc");
165 (
"could not dyncast component [" <<
name() <<
"] to a python "
166 <<
"object of type [" << this->
typeName() <<
"] (probably a missing "
167 <<
"dictionary)" <<
endmsg
168 << "fallback to [PyAthena::Svc]...");
169 }
170 if ( !pyobj ) {
171 PyErr_Clear();
173 (
"Could not dyncast component [" <<
name() <<
"] to a pyobject of type ["
175 } else {
176 if ( -1 == PyObject_SetAttrString(o, "_cppHandle", pyobj) ) {
177 PyErr_Clear();
179 (
"Could not attach C++ handle [" <<
name() <<
"] to its python "
180 << "cousin !");
181 if ( -1 == PyObject_SetAttrString(o, "_cppHandle", Py_None) ) {
182 PyErr_Clear();
184 (
"could not attach a dummy C++ handle [" <<
name() <<
"] to its "
185 << "python cousin !");
186 }
187 } else {
188 return true;
189 }
190 }
191 return false;
192}
#define ATH_MSG_WARNING(x)
const char * typeName() const override
return the std::type_info name of the underlying py-component This is used by concrete implementation...
◆ start()
| StatusCode PyAthena::Svc::start |
( |
| ) |
|
|
overridevirtual |
◆ stop()
| StatusCode PyAthena::Svc::stop |
( |
| ) |
|
|
overridevirtual |
◆ sysInitialize()
| StatusCode PyAthena::Svc::sysInitialize |
( |
| ) |
|
|
overridevirtual |
Definition at line 90 of file PyAthenaSvc.cxx.
91{
92 ServiceHandle<IPyComponentMgr> pyMgr
93 (
"PyAthena::PyComponentMgr/PyComponentMgr",
name() );
94 if ( !pyMgr.retrieve().isSuccess() ) {
96 ("Could not retrieve service [" << pyMgr.typeAndName() << "] !!");
97 return StatusCode::FAILURE;
98 }
99
100
101 m_self = pyMgr->pyObject(
this );
102
103 if (
m_self == Py_None ) {
105 return StatusCode::FAILURE;
106 }
107
108
109 return SvcBase_t::sysInitialize();
110}
◆ typeName()
| const char * PyAthena::Svc::typeName |
( |
| ) |
const |
|
override |
return the std::type_info name of the underlying py-component This is used by concrete implementations to connect a python component to its C++ counter-part
Definition at line 114 of file PyAthenaSvc.cxx.
115{
116 static const std::string tname = System::typeinfoName(typeid(*this));
117 return tname.c_str();
118}
◆ m_self
Pointer to self (from the python world)
Definition at line 89 of file PyAthenaSvc.h.
The documentation for this class was generated from the following files: