From 616929b6edf00b4a774b727385d39b785a112b90 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Wed, 8 Jun 2016 17:56:33 +0200 Subject: python: Wrap objects implementing the buffer protocol. * lang/python/Makefile.am: Add the toplevel source directory to CFLAGS when compiling the bindings so that we can use private header files. * lang/python/gpgme.i (gpgme_data_t): Rework the object wrapping. Do not create a Python wrapper object, merely a gpgme_data_t object, and keep references to buffer objects, if any. If necessary, update the buffer after the function call. (pygpgme_wrap_gpgme_data_t): New function. * lang/python/helpers.c (object_to_gpgme_data_t): Rework object wrapping. Also wrap objects implementing the buffer protocol. * lang/python/helpers.h (object_to_gpgme_data_t): Update prototype. (pygpgme_wrap_gpgme_data_t): New prototype. * lang/python/tests/t-idiomatic.py: Demonstrate this. Signed-off-by: Justus Winter --- lang/python/helpers.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'lang/python/helpers.h') diff --git a/lang/python/helpers.h b/lang/python/helpers.h index 24502631..37362aee 100644 --- a/lang/python/helpers.h +++ b/lang/python/helpers.h @@ -1,4 +1,5 @@ /* +# Copyright (C) 2016 g10 Code GmbH # Copyright (C) 2004 Igor Belyi # Copyright (C) 2002 John Goerzen # @@ -30,7 +31,8 @@ gpgme_error_t pygpgme_exception2code(void); PyObject *object_to_gpgme_t(PyObject *input, const char *objtype, int argnum); PyObject *object_to_gpgme_data_t(PyObject *input, int argnum, - PyObject **wrapper); + gpgme_data_t *wrapper, + PyObject **bytesio, Py_buffer *view); void pygpgme_clear_generic_cb(PyObject **cb); PyObject *pygpgme_raise_callback_exception(PyObject *self); @@ -47,3 +49,6 @@ gpgme_error_t pyEditCb(void *opaque, gpgme_status_code_t status, gpgme_error_t pygpgme_data_new_from_cbs(gpgme_data_t *r_data, PyObject *pycbs, PyObject **freelater); + +/* SWIG support for helpers.c */ +PyObject *pygpgme_wrap_gpgme_data_t(gpgme_data_t data); -- cgit v1.2.3