aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/helpers.c
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2016-06-02 15:14:53 +0000
committerJustus Winter <[email protected]>2016-06-06 12:16:04 +0000
commit26c3accc95ab77ddbe60db822e2938ad5f480d41 (patch)
tree238748aaac8674b7b7ab73beb1229653a6084903 /lang/python/helpers.c
parentpython: Fix error handling. (diff)
downloadgpgme-26c3accc95ab77ddbe60db822e2938ad5f480d41.tar.gz
gpgme-26c3accc95ab77ddbe60db822e2938ad5f480d41.zip
python: Move helper function.
* lang/python/gpgme.i (object_to_gpgme_t): Move... * lang/python/helpers.c: ... here. * lang/python/helpers.h (object_to_gpgme_t): New prototype. Signed-off-by: Justus Winter <[email protected]>
Diffstat (limited to 'lang/python/helpers.c')
-rw-r--r--lang/python/helpers.c36
1 files changed, 36 insertions, 0 deletions
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,