@@ -570,72 +570,76 @@ def sendExpression(self, command, parsed=True):
570
570
self ._omc .close ()
571
571
self ._omc = None
572
572
return None
573
- else :
574
- result = self ._omc .recv_string ()
575
573
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