diff --git a/LCS/Messaging/python/messaging/RPC.py b/LCS/Messaging/python/messaging/RPC.py index ac54343d943105c75f4aa04c9e9023a8cb8a5f98..800444fd632451fb9bbf82fa973e292625c5378d 100644 --- a/LCS/Messaging/python/messaging/RPC.py +++ b/LCS/Messaging/python/messaging/RPC.py @@ -59,13 +59,19 @@ class RPC(): if (isinstance(answer,ReplyMessage)): status={} exception=None + errmsg=None + errbacktrace=None try: if (answer.status!="OK"): status["state"]=answer.status status["errmsg"]=answer.errmsg status["backtrace"]=answer.backtrace - if (answer.exception!=""): - exception=pickle.loads(answer.exception) + #if (answer.exception!=""): + # exception=pickle.loads(answer.exception) + if (answer.errmsg!=""): + errmsg=answer.errmsg + if (answer.backtrace!=""): + errbacktrace=answer.backtrace else: status="OK" except Exception as e: @@ -74,8 +80,17 @@ class RPC(): status["backtrace"]="" else: if (self.ForwardExceptions==True): - if (exception!=None): - raise exception[0],exception[1],exception[2] + #if (exception!=None): + # raise exception[0],exception[1],exception[2] + #else: + if (errmsg!=None): + excep_mod=__import__("exceptions") + excep_class_= getattr(excep_mod,errmsg.split(':')[0],None) + if (excep_class_!=None): + instance=excep_class_(errbacktrace) + raise(instance) + else: + raise(Exception(errmsg)) try: answer=(answer.content,status) except Exception as e: diff --git a/LCS/Messaging/python/messaging/Service.py b/LCS/Messaging/python/messaging/Service.py index 921eca9178d41e70f793dc1532a40e24c75790cb..6e969de61dae256b430d815ae8138c81a4f0446e 100644 --- a/LCS/Messaging/python/messaging/Service.py +++ b/LCS/Messaging/python/messaging/Service.py @@ -100,7 +100,7 @@ class Service(): status="unknown" backtrace=None errtxt=None - exception=None + #exception=None # Keep track of number of processed messages self.counter[index]+=1 @@ -131,19 +131,27 @@ class Service(): print errtxt print backtrace replymessage=None - exception=pickle.dumps(exception) + #exception=pickle.dumps(exc_info) self._debug("Done call") - # Compile Event message from reply and status. + # Compose Reply message from reply and status. ToSend=ReplyMessage(replymessage,msg.reply_to) ToSend.status=status - if (errtxt!=None): - ToSend.errmsg=errtxt - if (backtrace!=None): - ToSend.backtrace=backtrace - if (exception!=None): - ToSend.exception=exception + if (status!="OK"): + if (errtxt!=None): + ToSend.errmsg=errtxt + else: + ToSend.errmsg="" + if (backtrace!=None): + ToSend.backtrace=backtrace + else: + ToSend.backtrace="" + #if (exception!=None): + # ToSend.exception=exception + else: + ToSend.exception="" + # ensure to deliver at the destination in the reply_to field #ToSend.subject=msg.reply_to