#include <PyAthenaTool.h>
|
| | Tool (const std::string &type, const std::string &name, const IInterface *parent) |
| | Constructor with parameters:
|
| virtual | ~Tool () |
| | Destructor:
|
| virtual StatusCode | initialize () override |
| virtual StatusCode | sysInitialize () override |
| virtual StatusCode | finalize () override |
| virtual 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 bool | setPyAttr (PyObject *pyobj) override |
| | attach the C++ component to its python cousin
|
Definition at line 30 of file PyAthenaTool.h.
◆ Tool() [1/2]
| Tool::Tool |
( |
const std::string & | type, |
|
|
const std::string & | name, |
|
|
const IInterface * | parent ) |
Constructor with parameters:
Definition at line 36 of file PyAthenaTool.cxx.
38 :
39 base_class( type, name, parent ),
41{
42
43
44
45
46
47}
◆ ~Tool()
Destructor:
Definition at line 51 of file PyAthenaTool.cxx.
52{
55 RootUtils::PyGILStateEnsure ensure;
58 }
59}
◆ Tool() [2/2]
◆ finalize()
| StatusCode Tool::finalize |
( |
| ) |
|
|
overridevirtual |
◆ initialize()
| StatusCode Tool::initialize |
( |
| ) |
|
|
overridevirtual |
◆ self()
| virtual PyObject * PyAthena::Tool::self |
( |
| ) |
|
|
inlineoverridevirtual |
return associated python object.
BORROWED reference.
Definition at line 64 of file PyAthenaTool.h.
◆ setPyAttr()
| bool Tool::setPyAttr |
( |
PyObject * | pyobj | ) |
|
|
overrideprotectedvirtual |
attach the C++ component to its python cousin
Definition at line 108 of file PyAthenaTool.cxx.
109{
110
111 RootUtils::PyGILStateEnsure ensure;
112 PyObject* pyobj = TPython::CPPInstance_FromVoidPtr
114 if ( !pyobj ) {
115 PyErr_Clear();
116
117 pyobj = TPython::CPPInstance_FromVoidPtr ((void*)this, "PyAthena::Tool");
119 (
"could not dyncast component [" <<
name() <<
"] to a python "
120 <<
"object of type [" << this->
typeName() <<
"] (probably a missing "
121 <<
"dictionary)" <<
endmsg
122 << "fallback to [PyAthena::Tool]...");
123 }
124 if ( !pyobj ) {
125 PyErr_Clear();
127 <<
name() <<
"] to a pyobject of type ["
128 << this->
typeName() <<
"] (missing reflex dict ?)");
129 } else {
130 if ( -1 == PyObject_SetAttrString(o, "_cppHandle", pyobj) ) {
131 PyErr_Clear();
133 (
"Could not attach C++ handle [" <<
name() <<
"] to its python "
134 << "cousin !");
135 if ( -1 == PyObject_SetAttrString(o, "_cppHandle", Py_None) ) {
136 PyErr_Clear();
138 (
"could not attach a dummy C++ handle [" <<
name() <<
"] to its "
139 << "python cousin !");
140 }
141 } else {
142 return true;
143 }
144 }
145 return false;
146}
#define ATH_MSG_WARNING(x)
◆ sysInitialize()
| StatusCode Tool::sysInitialize |
( |
| ) |
|
|
overridevirtual |
Definition at line 76 of file PyAthenaTool.cxx.
77{
78 ServiceHandle<IPyComponentMgr> pyMgr
79 ( "PyAthena::PyComponentMgr/PyComponentMgr",
81 if ( !pyMgr.retrieve().isSuccess() ) {
82 ATH_MSG_ERROR(
"Could not retrieve service [" << pyMgr.typeAndName() <<
"] !!");
83 return StatusCode::FAILURE;
84 }
85
86
87 m_self = pyMgr->pyObject(
this );
88
91 return StatusCode::FAILURE;
92 }
93
94
96}
virtual StatusCode sysInitialize() override
◆ typeName()
| const char * Tool::typeName |
( |
| ) |
const |
|
overridevirtual |
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 100 of file PyAthenaTool.cxx.
101{
102 static const std::string tname = System::typeinfoName(typeid(*this));
103 return tname.c_str();
104}
◆ m_self
Pointer to self (from the python world)
Definition at line 80 of file PyAthenaTool.h.
The documentation for this class was generated from the following files: