Reviewers: ,


Please review this at http://codereview.tryton.org/549003/

Affected files:
  M tryton/common/common.py


Index: tryton/common/common.py
===================================================================
--- a/tryton/common/common.py
+++ b/tryton/common/common.py
@@ -988,6 +988,8 @@

 def process_exception(exception, *args, **kwargs):

+    rpc_execute = kwargs.get('rpc_execute', rpc.execute)
+
     if isinstance(exception, TrytonError):
         if exception.faultCode == 'BadFingerprint':
             warning(
@@ -1013,14 +1015,15 @@
                         'always': (res == 'always'),
                         }, rpc.CONTEXT)
                 try:
-                    rpc.execute(*args2)
+                    rpc_execute(*args2)
                 except TrytonServerError, exception:
                     process_exception(exception, *args2)
                 if args:
                     try:
-                        return rpc.execute(*args)
+                        return rpc_execute(*args)
                     except TrytonServerError, exception:
-                        return process_exception(exception, *args)
+                        return process_exception(exception, *args,
+                            rpc_execute=rpc_execute)
                 return True
             return False
         elif exception.faultCode == 'UserError':
@@ -1033,9 +1036,10 @@
                     if '_timestamp' in args[5]:
                         del args[5]['_timestamp']
                     try:
-                        return rpc.execute(*args)
+                        return rpc_execute(*args)
                     except TrytonServerError, exception:
-                        return process_exception(exception, *args)
+                        return process_exception(exception, *args,
+                            rpc_execute=rpc_execute)
                 return False
             else:
message(_('Concurrency Exception'), msg_type=gtk.MESSAGE_ERROR)
@@ -1063,9 +1067,10 @@
                         continue
                     if args:
                         try:
-                            return rpc.execute(*args)
+                            return rpc_execute(*args)
                         except TrytonServerError, exception:
-                            return process_exception(exception, *args)
+                            return process_exception(exception, *args,
+                                rpc_execute=rpc_execute)
                     return True
             finally:
                 PLOCK.release()
@@ -1243,12 +1248,14 @@
             self.parent.window.set_cursor(None)
         if self.exception:
             if process_exception_p:
-                if process_exception(self.exception):
-                    self.res = None
-                    self.error = False
-                    self.exception = None
-                    return self.run(process_exception_p)
-                raise RPCException(self.exception)
+                def rpc_execute(*args):
+                    return RPCProgress('execute',
+                        args).run(process_exception_p, main_iteration_p)
+                result = process_exception(self.exception, *self.args,
+                    rpc_execute=rpc_execute)
+                if result is False:
+                    raise RPCException(self.exception)
+                return result
             else:
                 raise self.exception
         return self.res


--
[email protected] mailing list

Reply via email to