@@ -722,6 +722,8 @@ def sendExpression(self, command: str, parsed: bool = True) -> Any:
722722 self .omc_zmq .send_string ('getMessagesStringInternal()' , flags = zmq .NOBLOCK )
723723 error_raw = self .omc_zmq .recv_string ()
724724 # run error handling only if there is something to check
725+ msg_long_list = []
726+ has_error = False
725727 if error_raw != "{}\n " :
726728 if not self ._re_log_entries :
727729 self ._re_log_entries = re .compile (pattern = r'record OpenModelica\.Scripting\.ErrorMessage'
@@ -730,41 +732,63 @@ def sendExpression(self, command: str, parsed: bool = True) -> Any:
730732 flags = re .MULTILINE | re .DOTALL )
731733 if not self ._re_log_raw :
732734 self ._re_log_raw = re .compile (
733- pattern = r"\s+message = \"(.*?)\",\n" # message
734- r"\s+kind = .OpenModelica.Scripting.ErrorKind.(.*?),\n" # kind
735- r"\s+level = .OpenModelica.Scripting.ErrorLevel.(.*?),\n" # level
736- r"\s+id = (.*?)" # id
737- "(,\n |\n )" , # end marker
735+ pattern = r"\s*info = record OpenModelica\.Scripting\.SourceInfo\n"
736+ r"\s*filename = \"(.*?)\",\n"
737+ r"\s*readonly = (.*?),\n"
738+ r"\s*lineStart = (\d+),\n"
739+ r"\s*columnStart = (\d+),\n"
740+ r"\s*lineEnd = (\d+),\n"
741+ r"\s*columnEnd = (\d+)\n"
742+ r"\s*end OpenModelica\.Scripting\.SourceInfo;,\n"
743+ r"\s*message = \"(.*?)\",\n" # message
744+ r"\s*kind = \.OpenModelica\.Scripting\.ErrorKind\.(.*?),\n" # kind
745+ r"\s*level = \.OpenModelica\.Scripting\.ErrorLevel\.(.*?),\n" # level
746+ r"\s*id = (\d+)" , # id
738747 flags = re .MULTILINE | re .DOTALL )
739748
740749 # extract all ErrorMessage records
741750 log_entries = self ._re_log_entries .findall (string = error_raw )
742751 for log_entry in reversed (log_entries ):
743752 log_raw = self ._re_log_raw .findall (string = log_entry )
744- if len (log_raw ) != 1 or len (log_raw [0 ]) != 5 :
753+ if len (log_raw ) != 1 or len (log_raw [0 ]) != 10 :
745754 logger .warning ("Invalid ErrorMessage record returned by 'getMessagesStringInternal()':"
746755 f" { repr (log_entry )} !" )
747756 continue
748757
749- log_message = log_raw [0 ][0 ].encode ().decode ('unicode_escape' )
750- log_kind = log_raw [0 ][1 ]
751- log_level = log_raw [0 ][2 ]
752- log_id = log_raw [0 ][3 ]
758+ log_filename = log_raw [0 ][0 ]
759+ log_readonly = log_raw [0 ][1 ]
760+ log_lstart = log_raw [0 ][2 ]
761+ log_cstart = log_raw [0 ][3 ]
762+ log_lend = log_raw [0 ][4 ]
763+ log_cend = log_raw [0 ][5 ]
764+ log_message = log_raw [0 ][6 ].encode ().decode ('unicode_escape' )
765+ log_kind = log_raw [0 ][7 ]
766+ log_level = log_raw [0 ][8 ]
767+ log_id = log_raw [0 ][9 ]
753768
754- msg = (f"[OMC log for 'sendExpression({ command } , { parsed } )']: "
755- f"[{ log_kind } :{ log_level } :{ log_id } ] { log_message } " )
769+ msg_short = (f"[OMC log for 'sendExpression({ command } , { parsed } )']: "
770+ f"[{ log_kind } :{ log_level } :{ log_id } ] { log_message } " )
756771
757772 # response according to the used log level
758773 # see: https://build.openmodelica.org/Documentation/OpenModelica.Scripting.ErrorLevel.html
759774 if log_level == 'error' :
760- raise OMCSessionException ( msg )
761-
762- if log_level == 'warning' :
763- logger .warning (msg )
775+ logger . error ( msg_short )
776+ has_error = True
777+ elif log_level == 'warning' :
778+ logger .warning (msg_short )
764779 elif log_level == 'notification' :
765- logger .info (msg )
780+ logger .info (msg_short )
766781 else : # internal
767- logger .debug (msg )
782+ logger .debug (msg_short )
783+
784+ # track all messages such that this list can be reported if an error occurred
785+ msg_long = (f"[{ log_kind } :{ log_level } :{ log_id } ] "
786+ f"[{ log_filename } :{ log_readonly } :{ log_lstart } :{ log_cstart } :{ log_lend } :{ log_cend } ] "
787+ f"{ log_message } " )
788+ msg_long_list .append (msg_long )
789+ if has_error :
790+ raise OMCSessionException (f"OMC error occurred for 'sendExpression({ command } , { parsed } ):\n "
791+ f"{ '\n ' .join (f"{ idx :2d} : { msg } " for idx , msg in enumerate (msg_long_list ))} " )
768792
769793 if parsed is False :
770794 return result
0 commit comments