diff options
| -rw-r--r-- | lang/python/gpgme.i | 14 | ||||
| -rw-r--r-- | lang/python/pyme/core.py | 19 | 
2 files changed, 23 insertions, 10 deletions
| diff --git a/lang/python/gpgme.i b/lang/python/gpgme.i index c6ddbb40..8dbb0c2c 100644 --- a/lang/python/gpgme.i +++ b/lang/python/gpgme.i @@ -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; diff --git a/lang/python/pyme/core.py b/lang/python/pyme/core.py index c0903312..09f71a1a 100644 --- a/lang/python/pyme/core.py +++ b/lang/python/pyme/core.py @@ -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 | 
