python: Improve autmatically generated docstrings.
authorJustus Winter <justus@g10code.com>
Tue, 14 Jun 2016 11:28:37 +0000 (13:28 +0200)
committerJustus Winter <justus@g10code.com>
Thu, 16 Jun 2016 12:19:17 +0000 (14:19 +0200)
* 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>
lang/python/gpgme.i
lang/python/pyme/core.py

index c6ddbb4..8dbb0c2 100644 (file)
 %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;
index c090331..09f71a1 100644 (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