class Timeout(object):
- def __init__(self, func):
+ def __init__(self, func, once = True):
self.__func = func
self.__timeoutId = None
+ self.__once = once
def start(self, **kwds):
assert self.__timeoutId is None
+ callback = self._on_once if self.__once else self.__func
+
assert len(kwds) == 1
timeoutInSeconds = kwds["seconds"]
assert 0 <= timeoutInSeconds
+
if timeoutInSeconds == 0:
- self.__timeoutId = gobject.idle_add(self._on_once)
+ self.__timeoutId = gobject.idle_add(callback)
else:
- self.__timeoutId = timeout_add_seconds(timeoutInSeconds, self._on_once)
+ self.__timeoutId = timeout_add_seconds(timeoutInSeconds, callback)
def is_running(self):
return self.__timeoutId is not None
result = func(*args, **kwds)
isError = False
except Exception, e:
- _moduleLogger.error("Error, passing it back to the main thread")
+ _moduleLogger.exception("Error, passing it back to the main thread")
result = e
isError = True
self.__workQueue.task_done()
@misc.log_exception(_moduleLogger)
def on_success(self, result):
- _moduleLogger.debug("Processing success for: %r", self._func)
+ #_moduleLogger.debug("Processing success for: %r", self._func)
try:
trampoline, args, kwds = self._run.send(result)
except StopIteration, e:
@misc.log_exception(_moduleLogger)
def on_error(self, error):
- _moduleLogger.debug("Processing error for: %r", self._func)
+ #_moduleLogger.debug("Processing error for: %r", self._func)
try:
trampoline, args, kwds = self._run.throw(error)
except StopIteration, e:
@misc.log_exception(_moduleLogger)
def __on_destroy(self, widget):
+ _moduleLogger.info("Destroy: %r (%s to clean up)" % (self, len(self.__disconnectPool)))
for widget, id in self.__disconnectPool:
widget.disconnect(id)
del self.__disconnectPool[:]