8 return PyUnicode_Check(python_string) || PyBytes_Check(python_string);
13 Py2NRNString(PyObject* python_string,
bool disable_release =
false) {
16 if (PyUnicode_Check(python_string)) {
17 PyObject* py_bytes = PyUnicode_AsASCIIString(python_string);
19 str_ = strdup(PyBytes_AsString(py_bytes));
21 PyErr_SetString(PyExc_MemoryError,
"strdup in Py2NRNString");
25 }
else if (PyBytes_Check(python_string)) {
26 str_ = strdup(PyBytes_AsString(python_string));
30 PyErr_SetString(PyExc_MemoryError,
"strdup in Py2NRNString");
33 PyErr_SetString(PyExc_TypeError,
"Neither Unicode or PyBytes");
45 PyObject* ptype =
NULL;
46 PyObject* pvalue =
NULL;
47 PyObject* ptraceback =
NULL;
49 PyErr_Fetch(&ptype, &pvalue, &ptraceback);
51 if (pvalue && ptype) {
52 PyObject* umes = PyUnicode_FromFormat(
"%s (Note: %S: %S)", message, ptype, pvalue);
53 PyErr_SetObject(type, umes);
56 PyErr_SetString(type, message);
60 Py_XDECREF(ptraceback);
63 PyObject* ptype =
NULL;
64 PyObject* pvalue =
NULL;
65 PyObject* ptraceback =
NULL;
67 PyErr_Fetch(&ptype, &pvalue, &ptraceback);
69 PyObject* pstr = PyObject_Str(pvalue);
71 const char* err_msg = PyUnicode_AsUTF8(pstr);
73 str_ = strdup(err_msg);
75 str_ = strdup(
"get_pyerr failed at PyUnicode_AsUTF8");
79 str_ = strdup(
"get_pyerr failed at PyObject_Str");
82 str_ = strdup(
"get_pyerr failed at PyErr_Fetch");
88 Py_XDECREF(ptraceback);
105 : state_(PyGILState_Ensure())
115 PyGILState_Release(state_);
131 #define CHECK_SEC_INVALID(sec) {if (!sec->prop) { nrnpy_sec_referr(); return NULL;}}
Py2NRNString(PyObject *python_string, bool disable_release=false)
Py2NRNString & operator=(const Py2NRNString &)
bool is_python_string(PyObject *python_string)
void set_pyerr(PyObject *type, const char *message)