diff options
author | Tobias Mueller <[email protected]> | 2016-12-20 17:02:36 +0000 |
---|---|---|
committer | Justus Winter <[email protected]> | 2017-02-14 10:19:50 +0000 |
commit | 01d5c17587578c729bbbb60f8a65635975e35592 (patch) | |
tree | 392609c38a1c2ef1dd07683f68e3d91b6622cca6 | |
parent | python: Remove the -builtin flag for SWIG. (diff) | |
download | gpgme-01d5c17587578c729bbbb60f8a65635975e35592.tar.gz gpgme-01d5c17587578c729bbbb60f8a65635975e35592.zip |
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 <[email protected]>
-rw-r--r-- | lang/python/gpgme.i | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lang/python/gpgme.i b/lang/python/gpgme.i index e21aa6c9..c0993eed 100644 --- a/lang/python/gpgme.i +++ b/lang/python/gpgme.i @@ -649,3 +649,30 @@ _gpg_unwrap_gpgme_ctx_t(PyObject *wrapped) /* ... but only the public definitions here. They will be exposed to the Python world, so let's be careful. */ %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) +}; |