@@ -729,6 +729,8 @@ def sendExpression(self, command: str, parsed: bool = True) -> Any:
729729 self .omc_zmq .send_string ('getMessagesStringInternal()' , flags = zmq .NOBLOCK )
730730 error_raw = self .omc_zmq .recv_string ()
731731 # run error handling only if there is something to check
732+ msg_long_list = []
733+ has_error = False
732734 if error_raw != "{}\n " :
733735 if not self ._re_log_entries :
734736 self ._re_log_entries = re .compile (pattern = r'record OpenModelica\.Scripting\.ErrorMessage'
@@ -737,41 +739,64 @@ def sendExpression(self, command: str, parsed: bool = True) -> Any:
737739 flags = re .MULTILINE | re .DOTALL )
738740 if not self ._re_log_raw :
739741 self ._re_log_raw = re .compile (
740- pattern = r"\s+message = \"(.*?)\",\n" # message
741- r"\s+kind = .OpenModelica.Scripting.ErrorKind.(.*?),\n" # kind
742- r"\s+level = .OpenModelica.Scripting.ErrorLevel.(.*?),\n" # level
743- r"\s+id = (.*?)" # id
744- "(,\n |\n )" , # end marker
742+ pattern = r"\s*info = record OpenModelica\.Scripting\.SourceInfo\n"
743+ r"\s*filename = \"(.*?)\",\n"
744+ r"\s*readonly = (.*?),\n"
745+ r"\s*lineStart = (\d+),\n"
746+ r"\s*columnStart = (\d+),\n"
747+ r"\s*lineEnd = (\d+),\n"
748+ r"\s*columnEnd = (\d+)\n"
749+ r"\s*end OpenModelica\.Scripting\.SourceInfo;,\n"
750+ r"\s*message = \"(.*?)\",\n" # message
751+ r"\s*kind = \.OpenModelica\.Scripting\.ErrorKind\.(.*?),\n" # kind
752+ r"\s*level = \.OpenModelica\.Scripting\.ErrorLevel\.(.*?),\n" # level
753+ r"\s*id = (\d+)" , # id
745754 flags = re .MULTILINE | re .DOTALL )
746755
747756 # extract all ErrorMessage records
748757 log_entries = self ._re_log_entries .findall (string = error_raw )
749758 for log_entry in reversed (log_entries ):
750759 log_raw = self ._re_log_raw .findall (string = log_entry )
751- if len (log_raw ) != 1 or len (log_raw [0 ]) != 5 :
760+ if len (log_raw ) != 1 or len (log_raw [0 ]) != 10 :
752761 logger .warning ("Invalid ErrorMessage record returned by 'getMessagesStringInternal()':"
753762 f" { repr (log_entry )} !" )
754763 continue
755764
756- log_message = log_raw [0 ][0 ].encode ().decode ('unicode_escape' )
757- log_kind = log_raw [0 ][1 ]
758- log_level = log_raw [0 ][2 ]
759- log_id = log_raw [0 ][3 ]
765+ log_filename = log_raw [0 ][0 ]
766+ log_readonly = log_raw [0 ][1 ]
767+ log_lstart = log_raw [0 ][2 ]
768+ log_cstart = log_raw [0 ][3 ]
769+ log_lend = log_raw [0 ][4 ]
770+ log_cend = log_raw [0 ][5 ]
771+ log_message = log_raw [0 ][6 ].encode ().decode ('unicode_escape' )
772+ log_kind = log_raw [0 ][7 ]
773+ log_level = log_raw [0 ][8 ]
774+ log_id = log_raw [0 ][9 ]
760775
761- msg = (f"[OMC log for 'sendExpression({ command } , { parsed } )']: "
762- f"[{ log_kind } :{ log_level } :{ log_id } ] { log_message } " )
776+ msg_short = (f"[OMC log for 'sendExpression({ command } , { parsed } )']: "
777+ f"[{ log_kind } :{ log_level } :{ log_id } ] { log_message } " )
763778
764779 # response according to the used log level
765780 # see: https://build.openmodelica.org/Documentation/OpenModelica.Scripting.ErrorLevel.html
766781 if log_level == 'error' :
767- raise OMCSessionException ( msg )
768-
769- if log_level == 'warning' :
770- logger .warning (msg )
782+ logger . error ( msg_short )
783+ has_error = True
784+ elif log_level == 'warning' :
785+ logger .warning (msg_short )
771786 elif log_level == 'notification' :
772- logger .info (msg )
787+ logger .info (msg_short )
773788 else : # internal
774- logger .debug (msg )
789+ logger .debug (msg_short )
790+
791+ # track all messages such that this list can be reported if an error occurred
792+ msg_long = (f"[{ log_kind } :{ log_level } :{ log_id } ] "
793+ f"[{ log_filename } :{ log_readonly } :{ log_lstart } :{ log_cstart } :{ log_lend } :{ log_cend } ] "
794+ f"{ log_message } " )
795+ msg_long_list .append (msg_long )
796+ if has_error :
797+ msg_long_str = '\n ' .join (f"{ idx :02d} : { msg } " for idx , msg in enumerate (msg_long_list ))
798+ raise OMCSessionException (f"OMC error occurred for 'sendExpression({ command } , { parsed } ):\n "
799+ f"{ msg_long_str } " )
775800
776801 if parsed is False :
777802 return result
0 commit comments