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