python: Extend SWIG gpgme_{sub,}key with a __repr__ method.

* lang/python/gpgme.i: Added a genericrepr macro and use it for
gpgme_key, gpgme_subkey, and gpgme_key_sig.
--

To look nicer in Python's REPL.

We define a generic __repr__ as a SWIG macro and use that to extend some
defined SWIG objects.

The alternative would have been to write a custom __repr__ function for
each class but that would need to be changed everytime the object's
structure changes. The bindings should be easy to maintain, I guess.
This comes at the expense that the reprs are now relatively long and
contain, for example, both keyid and fingerprint.

Signed-off-by: Tobias Mueller <muelli@cryptobitch.de>
This commit is contained in:
Tobias Mueller 2016-12-20 18:02:36 +01:00 committed by Justus Winter
parent aa49be1ab8
commit 01d5c17587
No known key found for this signature in database
GPG Key ID: DD1A52F9DA8C9020

View File

@ -649,3 +649,30 @@ _gpg_unwrap_gpgme_ctx_t(PyObject *wrapped)
/* ... but only the public definitions here. They will be exposed to /* ... but only the public definitions here. They will be exposed to
the Python world, so let's be careful. */ the Python world, so let's be careful. */
%include "helpers.h" %include "helpers.h"
%define genericrepr(cls)
%pythoncode %{
def __repr__(self):
names = [name for name in dir(self)
if not name.startswith("_") and name != "this"]
props = ", ".join(("{}={!r}".format(name, getattr(self, name))
for name in names)
)
return "cls({})".format(props)
%}
%enddef
%extend _gpgme_key {
genericrepr(Key)
};
%extend _gpgme_subkey {
genericrepr(SubKey)
};
%extend _gpgme_key_sig {
genericrepr(KeySig)
};