@@ -570,72 +570,76 @@ def sendExpression(self, command, parsed=True):
570570 self ._omc .close ()
571571 self ._omc = None
572572 return None
573- else :
574- result = self ._omc .recv_string ()
575573
576- if command == "getErrorString()" :
577- # no error handling if 'getErrorString()' is called
578- pass
579- elif command == "getMessagesStringInternal()" :
580- # no error handling if 'getMessagesStringInternal()' is called; parsing NOT possible!
581- if parsed :
582- logger .warning ("Result of 'getMessagesStringInternal()' cannot be parsed - set parsed to False!" )
583- parsed = False
584- else :
585- # allways check for error
586- self ._omc .send_string ('getMessagesStringInternal()' , flags = zmq .NOBLOCK )
587- error_raw = self ._omc .recv_string ()
588- # run error handling only if there is something to check
589- if error_raw != "{}\n " :
590- if not self ._re_log_entries :
591- self ._re_log_entries = re .compile (pattern = r'record OpenModelica\.Scripting\.ErrorMessage'
592- '(.*?)'
593- r'end OpenModelica\.Scripting\.ErrorMessage;' ,
594- flags = re .MULTILINE | re .DOTALL )
595- if not self ._re_log_raw :
596- self ._re_log_raw = re .compile (
597- pattern = r"\s+message = \"(.*?)\",\n" # message
598- r"\s+kind = .OpenModelica.Scripting.ErrorKind.(.*?),\n" # kind
599- r"\s+level = .OpenModelica.Scripting.ErrorLevel.(.*?),\n" # level
600- r"\s+id = (.*?)" # id
601- "(,\n |\n )" , # end marker
602- flags = re .MULTILINE | re .DOTALL )
603-
604- # extract all ErrorMessage records
605- log_entries = self ._re_log_entries .findall (string = error_raw )
606- for log_entry in reversed (log_entries ):
607- log_raw = self ._re_log_raw .findall (string = log_entry )
608- if len (log_raw ) != 1 or len (log_raw [0 ]) != 5 :
609- logger .warning ("Invalid ErrorMessage record returned by 'getMessagesStringInternal()':"
610- f" { repr (log_entry )} !" )
611-
612- log_message = log_raw [0 ][0 ].encode ().decode ('unicode_escape' )
613- log_kind = log_raw [0 ][1 ]
614- log_level = log_raw [0 ][2 ]
615- log_id = log_raw [0 ][3 ]
616-
617- msg = (f"[OMC log for 'sendExpression({ command } , { parsed } )']: "
618- f"[{ log_kind } :{ log_level } :{ log_id } ] { log_message } " )
619-
620- # response according to the used log level
621- # see: https://build.openmodelica.org/Documentation/OpenModelica.Scripting.ErrorLevel.html
622- if log_level == 'error' :
623- raise OMCSessionException (msg )
624- elif log_level == 'warning' :
625- logger .warning (msg )
626- elif log_level == 'notification' :
627- logger .info (msg )
628- else : # internal
629- logger .debug (msg )
630-
631- if parsed is True :
632- try :
633- return om_parser_typed (result )
634- except pyparsing .ParseException as ex :
635- logger .warning ('OMTypedParser error: %s. Returning the basic parser result.' , ex .msg )
636- try :
637- return om_parser_basic (result )
638- except (TypeError , UnboundLocalError ) as ex :
639- raise OMCSessionException ("Cannot parse OMC result" ) from ex
640- else :
641- return result
574+ result = self ._omc .recv_string ()
575+
576+ if command == "getErrorString()" :
577+ # no error handling if 'getErrorString()' is called
578+ if parsed :
579+ logger .warning ("Result of 'getErrorString()' cannot be parsed!" )
580+ return result
581+
582+ if command == "getMessagesStringInternal()" :
583+ # no error handling if 'getMessagesStringInternal()' is called
584+ if parsed :
585+ logger .warning ("Result of 'getMessagesStringInternal()' cannot be parsed!" )
586+ return result
587+
588+ # always check for error
589+ self ._omc .send_string ('getMessagesStringInternal()' , flags = zmq .NOBLOCK )
590+ error_raw = self ._omc .recv_string ()
591+ # run error handling only if there is something to check
592+ if error_raw != "{}\n " :
593+ if not self ._re_log_entries :
594+ self ._re_log_entries = re .compile (pattern = r'record OpenModelica\.Scripting\.ErrorMessage'
595+ '(.*?)'
596+ r'end OpenModelica\.Scripting\.ErrorMessage;' ,
597+ flags = re .MULTILINE | re .DOTALL )
598+ if not self ._re_log_raw :
599+ self ._re_log_raw = re .compile (
600+ pattern = r"\s+message = \"(.*?)\",\n" # message
601+ r"\s+kind = .OpenModelica.Scripting.ErrorKind.(.*?),\n" # kind
602+ r"\s+level = .OpenModelica.Scripting.ErrorLevel.(.*?),\n" # level
603+ r"\s+id = (.*?)" # id
604+ "(,\n |\n )" , # end marker
605+ flags = re .MULTILINE | re .DOTALL )
606+
607+ # extract all ErrorMessage records
608+ log_entries = self ._re_log_entries .findall (string = error_raw )
609+ for log_entry in reversed (log_entries ):
610+ log_raw = self ._re_log_raw .findall (string = log_entry )
611+ if len (log_raw ) != 1 or len (log_raw [0 ]) != 5 :
612+ logger .warning ("Invalid ErrorMessage record returned by 'getMessagesStringInternal()':"
613+ f" { repr (log_entry )} !" )
614+ continue
615+
616+ log_message = log_raw [0 ][0 ].encode ().decode ('unicode_escape' )
617+ log_kind = log_raw [0 ][1 ]
618+ log_level = log_raw [0 ][2 ]
619+ log_id = log_raw [0 ][3 ]
620+
621+ msg = (f"[OMC log for 'sendExpression({ command } , { parsed } )']: "
622+ f"[{ log_kind } :{ log_level } :{ log_id } ] { log_message } " )
623+
624+ # response according to the used log level
625+ # see: https://build.openmodelica.org/Documentation/OpenModelica.Scripting.ErrorLevel.html
626+ if log_level == 'error' :
627+ raise OMCSessionException (msg )
628+ elif log_level == 'warning' :
629+ logger .warning (msg )
630+ elif log_level == 'notification' :
631+ logger .info (msg )
632+ else : # internal
633+ logger .debug (msg )
634+
635+ if parsed is False :
636+ return result
637+
638+ try :
639+ return om_parser_typed (result )
640+ except pyparsing .ParseException as ex :
641+ logger .warning ('OMTypedParser error: %s. Returning the basic parser result.' , ex .msg )
642+ try :
643+ return om_parser_basic (result )
644+ except (TypeError , UnboundLocalError ) as ex :
645+ raise OMCSessionException ("Cannot parse OMC result" ) from ex
0 commit comments