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.py64
1 files changed, 17 insertions, 47 deletions
diff --git a/lang/python/pyme/core.py b/lang/python/pyme/core.py
index 64dc7878..e5a50617 100644
--- a/lang/python/pyme/core.py
+++ b/lang/python/pyme/core.py
@@ -220,9 +220,6 @@ class Context(GpgmeWrapper):
pygpgme.delete_gpgme_ctx_t_p(tmp)
self.own = True
super().__init__(wrapped)
- self.last_passcb = None
- self.last_progresscb = None
- self.last_statuscb = None
self.armor = armor
self.textmode = textmode
self.offline = offline
@@ -247,30 +244,6 @@ class Context(GpgmeWrapper):
def __exit__(self, type, value, tb):
self.__del__()
- def _free_passcb(self):
- if self.last_passcb != None:
- if pygpgme.pygpgme_clear_generic_cb:
- pygpgme.pygpgme_clear_generic_cb(self.last_passcb)
- if pygpgme.delete_PyObject_p_p:
- pygpgme.delete_PyObject_p_p(self.last_passcb)
- self.last_passcb = None
-
- def _free_progresscb(self):
- if self.last_progresscb != None:
- if pygpgme.pygpgme_clear_generic_cb:
- pygpgme.pygpgme_clear_generic_cb(self.last_progresscb)
- if pygpgme.delete_PyObject_p_p:
- pygpgme.delete_PyObject_p_p(self.last_progresscb)
- self.last_progresscb = None
-
- def _free_statuscb(self):
- if self.last_statuscb != None:
- if pygpgme.pygpgme_clear_generic_cb:
- pygpgme.pygpgme_clear_generic_cb(self.last_statuscb)
- if pygpgme.delete_PyObject_p_p:
- pygpgme.delete_PyObject_p_p(self.last_statuscb)
- self.last_statuscb = None
-
def op_keylist_all(self, *args, **kwargs):
self.op_keylist_start(*args, **kwargs)
key = self.op_keylist_next()
@@ -341,16 +314,18 @@ class Context(GpgmeWrapper):
Please see the GPGME manual for more information.
"""
- self._free_passcb()
if func == None:
hookdata = None
else:
- self.last_passcb = pygpgme.new_PyObject_p_p()
if hook == None:
hookdata = (weakref.ref(self), func)
else:
hookdata = (weakref.ref(self), func, hook)
- pygpgme.pygpgme_set_passphrase_cb(self.wrapped, hookdata, self.last_passcb)
+ pygpgme.pygpgme_set_passphrase_cb(self, hookdata)
+
+ def _free_passcb(self):
+ if pygpgme.pygpgme_set_passphrase_cb:
+ self.set_passphrase_cb(None)
def set_progress_cb(self, func, hook=None):
"""Sets the progress meter callback to the function specified by FUNC.
@@ -364,16 +339,18 @@ class Context(GpgmeWrapper):
Please see the GPGME manual for more information.
"""
- self._free_progresscb()
if func == None:
hookdata = None
else:
- self.last_progresscb = pygpgme.new_PyObject_p_p()
if hook == None:
hookdata = (weakref.ref(self), func)
else:
hookdata = (weakref.ref(self), func, hook)
- pygpgme.pygpgme_set_progress_cb(self.wrapped, hookdata, self.last_progresscb)
+ pygpgme.pygpgme_set_progress_cb(self, hookdata)
+
+ def _free_progresscb(self):
+ if pygpgme.pygpgme_set_progress_cb:
+ self.set_progress_cb(None)
def set_status_cb(self, func, hook=None):
"""Sets the status callback to the function specified by FUNC. If
@@ -386,17 +363,18 @@ class Context(GpgmeWrapper):
Please see the GPGME manual for more information.
"""
- self._free_statuscb()
if func == None:
hookdata = None
else:
- self.last_statuscb = pygpgme.new_PyObject_p_p()
if hook == None:
hookdata = (weakref.ref(self), func)
else:
hookdata = (weakref.ref(self), func, hook)
- pygpgme.pygpgme_set_status_cb(self.wrapped, hookdata,
- self.last_statuscb)
+ pygpgme.pygpgme_set_status_cb(self, hookdata)
+
+ def _free_statuscb(self):
+ if pygpgme.pygpgme_set_status_cb:
+ self.set_status_cb(None)
def get_engine_info(self):
"""Returns this context specific engine info"""
@@ -547,12 +525,7 @@ class Data(GpgmeWrapper):
self.__del__()
def _free_datacbs(self):
- if self.data_cbs != None:
- if pygpgme.pygpgme_clear_generic_cb:
- pygpgme.pygpgme_clear_generic_cb(self.data_cbs)
- if pygpgme.delete_PyObject_p_p:
- pygpgme.delete_PyObject_p_p(self.data_cbs)
- self.data_cbs = None
+ self._data_cbs = None
def new(self):
tmp = pygpgme.new_gpgme_data_t_p()
@@ -579,8 +552,6 @@ class Data(GpgmeWrapper):
pygpgme.delete_gpgme_data_t_p(tmp)
def new_from_cbs(self, read_cb, write_cb, seek_cb, release_cb, hook=None):
- assert self.data_cbs == None
- self.data_cbs = pygpgme.new_PyObject_p_p()
tmp = pygpgme.new_gpgme_data_t_p()
if hook != None:
hookdata = (weakref.ref(self),
@@ -588,8 +559,7 @@ class Data(GpgmeWrapper):
else:
hookdata = (weakref.ref(self),
read_cb, write_cb, seek_cb, release_cb)
- errorcheck(
- pygpgme.pygpgme_data_new_from_cbs(tmp, hookdata, self.data_cbs))
+ pygpgme.pygpgme_data_new_from_cbs(self, hookdata, tmp)
self.wrapped = pygpgme.gpgme_data_t_p_value(tmp)
pygpgme.delete_gpgme_data_t_p(tmp)