Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[OMCSessionBase] simplify the two use cases of OMParser.om_parse_basic()
  • Loading branch information
syntron committed Apr 25, 2025
commit 12edd0d03872e44a9ff98d3945ff1c12fe61997c
46 changes: 22 additions & 24 deletions OMPython/OMCSession.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,24 @@ def ask(self, question, opt=None, parsed=True):

return res

def _ask_with_fallback(self, question: str, opt: str = None):
"""
Version of ask() with OMTypedParser as fallback for OMParser which is used in ask() => sendExpression() if
parsed is set to True.
"""
try:
# FIXME: OMPython exception UnboundLocalError exception for 'Modelica.Fluid.Machines.ControlledPump'
return self.ask(question=question, opt=opt)
except pyparsing.ParseException as ex:
logger.warning('OMTypedParser error: %s', ex.msg)
result = self.ask(question=question, opt=opt, parsed=False)
try:
answer = om_parser_basic(result)
return answer[2:]
except (TypeError, UnboundLocalError) as ex:
logger.warning('OMParser error: %s', ex)
return result

# TODO: Open Modelica Compiler API functions. Would be nice to generate these.
def loadFile(self, filename):
return self.ask('loadFile', f'"{filename}"')
Expand Down Expand Up @@ -236,35 +254,15 @@ def getComponentModifierNames(self, className, componentName):
return self.ask('getComponentModifierNames', f'{className}, {componentName}')

def getComponentModifierValue(self, className, componentName):
try:
# FIXME: OMPython exception UnboundLocalError exception for 'Modelica.Fluid.Machines.ControlledPump'
return self.ask('getComponentModifierValue', f'{className}, {componentName}')
except pyparsing.ParseException as ex:
logger.warning('OMTypedParser error: %s', ex.msg)
result = self.ask('getComponentModifierValue', f'{className}, {componentName}', parsed=False)
try:
answer = om_parser_basic(result)
return answer[2:]
except (TypeError, UnboundLocalError) as ex:
logger.warning('OMParser error: %s', ex)
return result
return self._ask_with_fallback(question='getComponentModifierValue',
opt=f'{className}, {componentName}')

def getExtendsModifierNames(self, className, componentName):
return self.ask('getExtendsModifierNames', f'{className}, {componentName}')

def getExtendsModifierValue(self, className, extendsName, modifierName):
try:
# FIXME: OMPython exception UnboundLocalError exception for 'Modelica.Fluid.Machines.ControlledPump'
return self.ask('getExtendsModifierValue', f'{className}, {extendsName}, {modifierName}')
except pyparsing.ParseException as ex:
logger.warning('OMTypedParser error: %s', ex.msg)
result = self.ask('getExtendsModifierValue', f'{className}, {extendsName}, {modifierName}', parsed=False)
try:
answer = om_parser_basic(result)
return answer[2:]
except (TypeError, UnboundLocalError) as ex:
logger.warning('OMParser error: %s', ex)
return result
return self._ask_with_fallback(question='getExtendsModifierValue',
opt=f'{className}, {extendsName}, {modifierName}')

def getNthComponentModification(self, className, comp_id):
# FIXME: OMPython exception Results KeyError exception
Expand Down