| 193 | } |
| 194 | |
| 195 | std::string CPythonPluginAlgorithmFactory::getHelp(const std::string &name){ |
| 196 | PyObject *className = getItemStringRef(pluginDict, name.c_str()); |
| 197 | if (!className) { |
| 198 | ASTRA_ERROR("Plugin %s not found!",name.c_str()); |
| 199 | PyErr_Clear(); |
| 200 | return ""; |
| 201 | } |
| 202 | std::string ret = ""; |
| 203 | PyObject *pyclass; |
| 204 | if(PyBytes_Check(className)){ |
| 205 | std::string str = std::string(PyBytes_AsString(className)); |
| 206 | pyclass = getClassFromString(str); |
| 207 | }else{ |
| 208 | pyclass = className; |
| 209 | } |
| 210 | if(pyclass==NULL){ |
| 211 | Py_DECREF(className); |
| 212 | return ""; |
| 213 | } |
| 214 | if(inspect!=NULL){ |
| 215 | PyObject *retVal = PyObject_CallMethod(inspect,"getdoc","O",pyclass); |
| 216 | if(retVal!=NULL){ |
| 217 | if(retVal!=Py_None){ |
| 218 | PyObject *retb = PyUnicode_AsASCIIString(retVal); |
| 219 | if(retb!=NULL){ |
| 220 | ret = std::string(PyBytes_AsString(retb)); |
| 221 | Py_DECREF(retb); |
| 222 | } |
| 223 | } |
| 224 | Py_DECREF(retVal); |
| 225 | }else{ |
| 226 | logPythonError(); |
| 227 | } |
| 228 | } |
| 229 | if(PyBytes_Check(className)){ |
| 230 | Py_DECREF(pyclass); |
| 231 | } |
| 232 | Py_DECREF(className); |
| 233 | return ret; |
| 234 | } |
| 235 | |
| 236 | DEFINE_SINGLETON(CPythonPluginAlgorithmFactory); |
| 237 |
no test coverage detected