Fixing some orientation issues
[watersofshiloah] / src / util / go_utils.py
index 16bcf89..97d671c 100644 (file)
@@ -95,20 +95,24 @@ class Async(object):
 
 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
@@ -187,7 +191,7 @@ class AsyncPool(object):
                                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()
@@ -217,7 +221,7 @@ class AsyncLinearExecution(object):
 
        @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:
@@ -233,7 +237,7 @@ class AsyncLinearExecution(object):
 
        @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:
@@ -260,6 +264,7 @@ class AutoSignal(object):
 
        @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[:]