diff --git a/lang/python/gpgme.i b/lang/python/gpgme.i index 0d1322c5..e3c761d4 100644 --- a/lang/python/gpgme.i +++ b/lang/python/gpgme.i @@ -79,37 +79,6 @@ %typemap(newfree) char * "free($1);"; %newobject gpgme_data_release_and_get_mem; -%{ -/* Convert object to a pointer to gpgme type */ -PyObject* object_to_gpgme_t(PyObject* input, const char* objtype, int argnum) { - PyObject *pyname = NULL, *pypointer = NULL; - pyname = PyObject_CallMethod(input, "_getctype", NULL); - if (pyname && PyUnicode_Check(pyname)) - { - if (strcmp(PyUnicode_AsUTF8(pyname), objtype) != 0) - { - PyErr_Format(PyExc_TypeError, - "arg %d: Expected value of type %s, but got %s", - argnum, objtype, PyUnicode_AsUTF8(pyname)); - Py_DECREF(pyname); - return NULL; - } - } - else - return NULL; - - Py_DECREF(pyname); - pypointer = PyObject_GetAttrString(input, "wrapped"); - if (pypointer == NULL) { - PyErr_Format(PyExc_TypeError, - "arg %d: Use of uninitialized Python object %s", - argnum, objtype); - return NULL; - } - return pypointer; -} -%} - %typemap(arginit) gpgme_key_t [] { $1 = NULL; } diff --git a/lang/python/helpers.c b/lang/python/helpers.c index 4b6ac31f..3ecbacc7 100644 --- a/lang/python/helpers.c +++ b/lang/python/helpers.c @@ -146,7 +146,43 @@ PyObject *pygpgme_raise_callback_exception(PyObject *self) return Py_None; } #undef EXCINFO + +/* Argument conversion. */ +/* Convert object to a pointer to gpgme type, generic version. */ +PyObject * +object_to_gpgme_t(PyObject *input, const char *objtype, int argnum) +{ + PyObject *pyname = NULL, *pypointer = NULL; + pyname = PyObject_CallMethod(input, "_getctype", NULL); + if (pyname && PyUnicode_Check(pyname)) + { + if (strcmp(PyUnicode_AsUTF8(pyname), objtype) != 0) + { + PyErr_Format(PyExc_TypeError, + "arg %d: Expected value of type %s, but got %s", + argnum, objtype, PyUnicode_AsUTF8(pyname)); + Py_DECREF(pyname); + return NULL; + } + } + else + return NULL; + + Py_DECREF(pyname); + pypointer = PyObject_GetAttrString(input, "wrapped"); + if (pypointer == NULL) { + PyErr_Format(PyExc_TypeError, + "arg %d: Use of uninitialized Python object %s", + argnum, objtype); + return NULL; + } + return pypointer; +} + + + +/* Callback support. */ static gpgme_error_t pyPassphraseCb(void *hook, const char *uid_hint, const char *passphrase_info, diff --git a/lang/python/helpers.h b/lang/python/helpers.h index 1bfcaa69..952b31f2 100644 --- a/lang/python/helpers.h +++ b/lang/python/helpers.h @@ -28,6 +28,8 @@ void pygpgme_exception_init(void); gpgme_error_t pygpgme_exception2code(void); +PyObject *object_to_gpgme_t(PyObject *input, const char *objtype, int argnum); + void pygpgme_clear_generic_cb(PyObject **cb); PyObject *pygpgme_raise_callback_exception(PyObject *self);