[Pkg-gnupg-commit] [gpgme] 95/412: python: Share generated methods between objects.
Daniel Kahn Gillmor
dkg at fifthhorseman.net
Thu Sep 22 21:26:23 UTC 2016
This is an automated email from the git hooks/post-receive script.
dkg pushed a commit to branch master
in repository gpgme.
commit 11314f0db6e57597e3f56351a86fdb36a7a17dd7
Author: Justus Winter <justus at gnupg.org>
Date: Thu May 12 18:29:04 2016 +0200
python: Share generated methods between objects.
* lang/python/pyme/util.py (GpgmeWrapper.__getattr__): Monkey-patch
the class.
* lang/python/tests/t-wrapper.py: Demonstrate the sharing.
Signed-off-by: Justus Winter <justus at gnupg.org>
---
lang/python/pyme/util.py | 26 ++++++++++++++++----------
lang/python/tests/t-wrapper.py | 2 ++
2 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/lang/python/pyme/util.py b/lang/python/pyme/util.py
index a856099..a9fa19d 100644
--- a/lang/python/pyme/util.py
+++ b/lang/python/pyme/util.py
@@ -74,19 +74,25 @@ class GpgmeWrapper(object):
if key[0] == '_' or self._getnameprepend() == None:
return None
name = self._getnameprepend() + key
+ func = getattr(pygpgme, name)
+
if self._errorcheck(name):
- def _funcwrap(*args, **kwargs):
- args = [self.wrapped] + list(args)
- return errorcheck(getattr(pygpgme, name)(*args, **kwargs),
+ def _funcwrap(slf, *args, **kwargs):
+ return errorcheck(func(slf.wrapped, *args, **kwargs),
"Invocation of " + name)
else:
- def _funcwrap(*args, **kwargs):
- args = [self.wrapped] + list(args)
- return getattr(pygpgme, name)(*args, **kwargs)
+ def _funcwrap(slf, *args, **kwargs):
+ return func(slf.wrapped, *args, **kwargs)
+
+ _funcwrap.__doc__ = getattr(func, "__doc__")
+
+ # Monkey-patch the class.
+ setattr(self.__class__, key, _funcwrap)
- _funcwrap.__doc__ = getattr(getattr(pygpgme, name), "__doc__")
+ # Bind the method to 'self'.
+ def wrapper(*args, **kwargs):
+ return _funcwrap(self, *args, **kwargs)
+ _funcwrap.__doc__ = getattr(func, "__doc__")
- # Cache the wrapper function.
- setattr(self, key, _funcwrap)
- return _funcwrap
+ return wrapper
diff --git a/lang/python/tests/t-wrapper.py b/lang/python/tests/t-wrapper.py
index acc2ecf..fab0d81 100755
--- a/lang/python/tests/t-wrapper.py
+++ b/lang/python/tests/t-wrapper.py
@@ -20,4 +20,6 @@
from pyme import core
d0 = core.Data()
+d0.seek # trigger on-demand-wrapping
assert d0.seek == d0.seek, "Generated wrapper functions are not cached"
+assert hasattr(core.Data, 'seek'), "Generated wrapper functions are not shared"
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gpgme.git
More information about the Pkg-gnupg-commit
mailing list