aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/pyme/core.py
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/pyme/core.py')
-rw-r--r--lang/python/pyme/core.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/lang/python/pyme/core.py b/lang/python/pyme/core.py
index 216e26fd..b25808dc 100644
--- a/lang/python/pyme/core.py
+++ b/lang/python/pyme/core.py
@@ -31,6 +31,7 @@ from . import pygpgme
from .errors import errorcheck, GPGMEError
from . import constants
from . import errors
+from . import util
class GpgmeWrapper(object):
"""Base wrapper class
@@ -467,6 +468,55 @@ class Context(GpgmeWrapper):
plainbytes = data.read()
return plainbytes, result
+ def assuan_transact(self, command,
+ data_cb=None, inquire_cb=None, status_cb=None):
+ """Issue a raw assuan command
+
+ This function can be used to issue a raw assuan command to the
+ engine.
+
+ If command is a string or bytes, it will be used as-is. If it
+ is an iterable of strings, it will be properly escaped and
+ joined into an well-formed assuan command.
+
+ Keyword arguments:
+ data_cb -- a callback receiving data lines
+ inquire_cb -- a callback providing more information
+ status_cb -- a callback receiving status lines
+
+ Returns:
+ result -- the result of command as GPGMEError
+
+ Raises:
+ GPGMEError -- as signaled by the underlying library
+
+ """
+
+ if isinstance(command, (str, bytes)):
+ cmd = command
+ else:
+ cmd = " ".join(util.percent_escape(f) for f in command)
+
+ errptr = pygpgme.new_gpgme_error_t_p()
+
+ err = pygpgme.gpgme_op_assuan_transact_ext(
+ self.wrapped,
+ cmd,
+ (weakref.ref(self), data_cb) if data_cb else None,
+ (weakref.ref(self), inquire_cb) if inquire_cb else None,
+ (weakref.ref(self), status_cb) if status_cb else None,
+ errptr)
+
+ if self._callback_excinfo:
+ pygpgme.pygpgme_raise_callback_exception(self)
+
+ errorcheck(err)
+
+ status = pygpgme.gpgme_error_t_p_value(errptr)
+ pygpgme.delete_gpgme_error_t_p(errptr)
+
+ return GPGMEError(status) if status != 0 else None
+
@property
def signers(self):
"""Keys used for signing"""