Author: dmeyer
Date: Sun Mar 16 14:20:45 2008
New Revision: 3197

Log:
add InProgressSignals class to wait for signals

Modified:
   trunk/base/src/notifier/__init__.py
   trunk/base/src/notifier/async.py

Modified: trunk/base/src/notifier/__init__.py
==============================================================================
--- trunk/base/src/notifier/__init__.py (original)
+++ trunk/base/src/notifier/__init__.py Sun Mar 16 14:20:45 2008
@@ -39,7 +39,7 @@
 from signals import Signal, Signals
 
 # InProgress class
-from async import TimeoutException, InProgress, InProgressCallback
+from async import TimeoutException, InProgress, InProgressCallback, 
InProgressSignals
 
 # Thread callbacks, helper functions and decorators
 from thread import MainThreadCallback, NamedThreadCallback, ThreadCallback, \

Modified: trunk/base/src/notifier/async.py
==============================================================================
--- trunk/base/src/notifier/async.py    (original)
+++ trunk/base/src/notifier/async.py    Sun Mar 16 14:20:45 2008
@@ -29,8 +29,8 @@
 #
 # -----------------------------------------------------------------------------
 
-__all__ = [ 'TimeoutException', 'InProgress', 'InProgressCallback', 
'AsyncException',
-            'AsyncExceptionBase', 'make_exception_class' ]
+__all__ = [ 'TimeoutException', 'InProgress', 'InProgressCallback', 
'InProgressSignals',
+            'AsyncException', 'AsyncExceptionBase', 'make_exception_class' ]
 
 # python imports
 import sys
@@ -82,7 +82,7 @@
         if attr.startswith('_kaa'):
             return super(AsyncExceptionBase, self).__getattribute__(attr)
         return getattr(self._kaa_exc, attr)
-    
+
     def __getattr__(self, attr):
         # Used by python 2.4, where exceptions are old-style classes.
         exc = self._kaa_exc
@@ -454,3 +454,26 @@
             # return as list
             return self.finish(args)
         return self.finish(None)
+
+
+class InProgressSignals(InProgress):
+    """
+    InProgress object that will be finished if one of the provided
+    signals is emited. The return value is the number of the signal
+    starting with 0.
+    """
+    def __init__(self, *signals):
+        for num, signal in enumerate(signals):
+            signal.connect_once(self.finish, num).set_ignore_caller_args()
+        self._signals = signals
+        super(InProgressSignals, self).__init__()
+
+
+    def finish(self, result):
+        """
+        Callback when one signal is emited.
+        """
+        for num, signal in enumerate(self._signals):
+            signal.disconnect(self.finish, num)
+        self._signals = []
+        return super(InProgressSignals, self).finish(result)

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to