python: Improve autmatically generated docstrings.

* lang/python/gpgme.i: Add comment.
* lang/python/pyme/core.py (__getattr__): Rewrite automatically
generated doctrings for the wrapper methods.

Signed-off-by: Justus Winter <justus@g10code.com>
This commit is contained in:
Justus Winter 2016-06-14 13:28:37 +02:00
parent a324d0cffe
commit 8997d88bf9
2 changed files with 23 additions and 10 deletions

View File

@ -21,11 +21,21 @@
%include "cpointer.i"
%include "cstring.i"
// Generate doc strings for all methods.
/* Generate doc strings for all methods.
This will generate docstrings of the form
gpgme_op_encrypt(ctx, recp, flags, plain, cipher) -> gpgme_error_t
which we transform into
ctx.op_encrypt(recp, flags, plain, cipher) -> gpgme_error_t
for automagically wrapped functions. */
%feature("autodoc", "0");
/* Allow use of Unicode objects, bytes, and None for strings. */
/* Allow use of Unicode objects, bytes, and None for strings. */
%typemap(in) const char * {
if ($input == Py_None)
$1 = NULL;

View File

@ -24,6 +24,7 @@ and the 'Data' class describing buffers of data.
"""
import re
import weakref
from . import pygpgme
from .errors import errorcheck, GPGMEError
@ -107,6 +108,7 @@ class GpgmeWrapper(object):
else:
return get(self)
_munge_docstring = re.compile(r'gpgme_([^(]*)\(([^,]*), (.*\) -> .*)')
def __getattr__(self, key):
"""On-the-fly generation of wrapper methods and properties"""
if key[0] == '_' or self._cprefix == None:
@ -119,27 +121,28 @@ class GpgmeWrapper(object):
func = getattr(pygpgme, name)
if self._errorcheck(name):
def _funcwrap(slf, *args, **kwargs):
result = func(slf.wrapped, *args, **kwargs)
def _funcwrap(slf, *args):
result = func(slf.wrapped, *args)
if slf._callback_excinfo:
pygpgme.pygpgme_raise_callback_exception(slf)
return errorcheck(result, "Invocation of " + name)
else:
def _funcwrap(slf, *args, **kwargs):
result = func(slf.wrapped, *args, **kwargs)
def _funcwrap(slf, *args):
result = func(slf.wrapped, *args)
if slf._callback_excinfo:
pygpgme.pygpgme_raise_callback_exception(slf)
return result
_funcwrap.__doc__ = getattr(func, "__doc__")
doc = self._munge_docstring.sub(r'\2.\1(\3', getattr(func, "__doc__"))
_funcwrap.__doc__ = doc
# Monkey-patch the class.
setattr(self.__class__, key, _funcwrap)
# Bind the method to 'self'.
def wrapper(*args, **kwargs):
return _funcwrap(self, *args, **kwargs)
_funcwrap.__doc__ = getattr(func, "__doc__")
def wrapper(*args):
return _funcwrap(self, *args)
wrapper.__doc__ = doc
return wrapper