Author: dmeyer
Date: Sun Sep 16 15:19:34 2007
New Revision: 2822

Log:
handle unpickable exceptions

Modified:
   trunk/base/src/rpc.py

Modified: trunk/base/src/rpc.py
==============================================================================
--- trunk/base/src/rpc.py       (original)
+++ trunk/base/src/rpc.py       Sun Sep 16 15:19:34 2007
@@ -417,6 +417,17 @@
         self._send_packet(seq, packet_type, payload)
 
 
+    def _send_delayed_exception(self, payload, seq, packet_type):
+        """
+        Send delayed exception when callback returns InProgress.
+        """
+        try:
+            payload = cPickle.dumps(payload, pickle.HIGHEST_PROTOCOL)
+        except cPickle.UnpickleableError:
+            payload = cPickle.dumps(Exception(str(payload)))
+        self._send_packet(seq, packet_type, payload)
+
+
     def _handle_packet_after_auth(self, seq, type, payload):
         """
         Handle incoming packet (called from _handle_write) after 
@@ -432,7 +443,7 @@
                 payload = self._callbacks[function](*args, **kwargs)
                 if isinstance(payload, kaa.notifier.InProgress):
                     payload.connect(self._send_delayed_answer, seq, 'RETN')
-                    
payload.exception_handler.connect(self._send_delayed_answer, seq, 'EXCP')
+                    
payload.exception_handler.connect(self._send_delayed_exception, seq, 'EXCP')
                     return True
                 packet_type = 'RETN'
             except (SystemExit, KeyboardInterrupt):

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
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