Skip to content

Commit b6af53c

Browse files
committed
[OMCSessionBase.ask()] define opt as list
1 parent b1ca2dc commit b6af53c

1 file changed

Lines changed: 55 additions & 54 deletions

File tree

OMPython/OMCSession.py

Lines changed: 55 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import sys
4646
import tempfile
4747
import time
48+
from typing import Optional
4849
import uuid
4950
import pyparsing
5051
import zmq
@@ -106,26 +107,28 @@ def sendExpression(self, command, parsed=True):
106107
"""
107108
pass
108109

109-
def ask(self, question, opt=None, parsed=True):
110-
p = (question, opt, parsed)
110+
def _ask(self, question: str, opt: Optional[list[str]] = None, parsed: Optional[bool] = True):
111+
112+
if opt is None:
113+
expression = question
114+
elif isinstance(opt, list):
115+
expression = f"{question}({','.join(opt)})"
116+
else:
117+
raise OMCSessionException(f"Invalid definition of options for {repr(question)}: {repr(opt)}")
118+
119+
p = (expression, parsed)
111120

112121
if self._readonly and question != 'getErrorString':
113122
# can use cache if readonly
114123
if p in self._omc_cache:
115124
return self._omc_cache[p]
116125

117-
if opt:
118-
expression = f'{question}({opt})'
119-
else:
120-
expression = question
121-
122-
logger.debug('OMC ask: %s - parsed: %s', expression, parsed)
126+
logger.debug('OMC ask: %s (parsed=%s)', expression, parsed)
123127

124128
try:
125129
res = self.sendExpression(expression, parsed=parsed)
126-
except OMCSessionException:
127-
logger.error("OMC failed: %s, %s, parsed=%s", question, opt, parsed)
128-
raise
130+
except OMCSessionException as ex:
131+
raise OMCSessionException("OMC ask failed: %s (parsed=%s)", expression, parsed) from ex
129132

130133
# save response
131134
self._omc_cache[p] = res
@@ -134,126 +137,126 @@ def ask(self, question, opt=None, parsed=True):
134137

135138
# TODO: Open Modelica Compiler API functions. Would be nice to generate these.
136139
def loadFile(self, filename):
137-
return self.ask('loadFile', f'"{filename}"')
140+
return self._ask(question='loadFile', opt=[f'"{filename}"'])
138141

139142
def loadModel(self, className):
140-
return self.ask('loadModel', className)
143+
return self._ask(question='loadModel', opt=[className])
141144

142145
def isModel(self, className):
143-
return self.ask('isModel', className)
146+
return self._ask(question='isModel', opt=[className])
144147

145148
def isPackage(self, className):
146-
return self.ask('isPackage', className)
149+
return self._ask(question='isPackage', opt=[className])
147150

148151
def isPrimitive(self, className):
149-
return self.ask('isPrimitive', className)
152+
return self._ask(question='isPrimitive', opt=[className])
150153

151154
def isConnector(self, className):
152-
return self.ask('isConnector', className)
155+
return self._ask(question='isConnector', opt=[className])
153156

154157
def isRecord(self, className):
155-
return self.ask('isRecord', className)
158+
return self._ask(question='isRecord', opt=[className])
156159

157160
def isBlock(self, className):
158-
return self.ask('isBlock', className)
161+
return self._ask(question='isBlock', opt=[className])
159162

160163
def isType(self, className):
161-
return self.ask('isType', className)
164+
return self._ask(question='isType', opt=[className])
162165

163166
def isFunction(self, className):
164-
return self.ask('isFunction', className)
167+
return self._ask(question='isFunction', opt=[className])
165168

166169
def isClass(self, className):
167-
return self.ask('isClass', className)
170+
return self._ask(question='isClass', opt=[className])
168171

169172
def isParameter(self, className):
170-
return self.ask('isParameter', className)
173+
return self._ask(question='isParameter', opt=[className])
171174

172175
def isConstant(self, className):
173-
return self.ask('isConstant', className)
176+
return self._ask(question='isConstant', opt=[className])
174177

175178
def isProtected(self, className):
176-
return self.ask('isProtected', className)
179+
return self._ask(question='isProtected', opt=[className])
177180

178181
def getPackages(self, className="AllLoadedClasses"):
179-
return self.ask('getPackages', className)
182+
return self._ask(question='getPackages', opt=[className])
180183

181184
def getClassRestriction(self, className):
182-
return self.ask('getClassRestriction', className)
185+
return self._ask(question='getClassRestriction', opt=[className])
183186

184187
def getDerivedClassModifierNames(self, className):
185-
return self.ask('getDerivedClassModifierNames', className)
188+
return self._ask(question='getDerivedClassModifierNames', opt=[className])
186189

187190
def getDerivedClassModifierValue(self, className, modifierName):
188-
return self.ask('getDerivedClassModifierValue', f'{className}, {modifierName}')
191+
return self._ask(question='getDerivedClassModifierValue', opt=[className, modifierName])
189192

190193
def typeNameStrings(self, className):
191-
return self.ask('typeNameStrings', className)
194+
return self._ask(question='typeNameStrings', opt=[className])
192195

193196
def getComponents(self, className):
194-
return self.ask('getComponents', className)
197+
return self._ask(question='getComponents', opt=[className])
195198

196199
def getClassComment(self, className):
197200
try:
198-
return self.ask('getClassComment', className)
201+
return self._ask(question='getClassComment', opt=[className])
199202
except pyparsing.ParseException as ex:
200203
logger.warning("Method 'getClassComment' failed for %s", className)
201204
logger.warning('OMTypedParser error: %s', ex.msg)
202205
return 'No description available'
203206

204207
def getNthComponent(self, className, comp_id):
205208
""" returns with (type, name, description) """
206-
return self.ask('getNthComponent', f'{className}, {comp_id}')
209+
return self._ask(question='getNthComponent', opt=[className, comp_id])
207210

208211
def getNthComponentAnnotation(self, className, comp_id):
209-
return self.ask('getNthComponentAnnotation', f'{className}, {comp_id}')
212+
return self._ask(question='getNthComponentAnnotation', opt=[className, comp_id])
210213

211214
def getImportCount(self, className):
212-
return self.ask('getImportCount', className)
215+
return self._ask(question='getImportCount', opt=[className])
213216

214217
def getNthImport(self, className, importNumber):
215218
# [Path, id, kind]
216-
return self.ask('getNthImport', f'{className}, {importNumber}')
219+
return self._ask(question='getNthImport', opt=[className, importNumber])
217220

218221
def getInheritanceCount(self, className):
219-
return self.ask('getInheritanceCount', className)
222+
return self._ask(question='getInheritanceCount', opt=[className])
220223

221224
def getNthInheritedClass(self, className, inheritanceDepth):
222-
return self.ask('getNthInheritedClass', f'{className}, {inheritanceDepth}')
225+
return self._ask(question='getNthInheritedClass', opt=[className, inheritanceDepth])
223226

224227
def getParameterNames(self, className):
225228
try:
226-
return self.ask('getParameterNames', className)
229+
return self._ask(question='getParameterNames', opt=[className])
227230
except KeyError as ex:
228231
logger.warning('OMPython error: %s', ex)
229232
# FIXME: OMC returns with a different structure for empty parameter set
230233
return []
231234

232235
def getParameterValue(self, className, parameterName):
233236
try:
234-
return self.ask('getParameterValue', f'{className}, {parameterName}')
237+
return self._ask(question='getParameterValue', opt=[className, parameterName])
235238
except pyparsing.ParseException as ex:
236239
logger.warning('OMTypedParser error: %s', ex.msg)
237240
return ""
238241

239242
def getComponentModifierNames(self, className, componentName):
240-
return self.ask('getComponentModifierNames', f'{className}, {componentName}')
243+
return self._ask(question='getComponentModifierNames', opt=[className, componentName])
241244

242245
def getComponentModifierValue(self, className, componentName):
243-
return self.ask(question='getComponentModifierValue', opt=f'{className}, {componentName}')
246+
return self._ask(question='getComponentModifierValue', opt=[className, componentName])
244247

245248
def getExtendsModifierNames(self, className, componentName):
246-
return self.ask('getExtendsModifierNames', f'{className}, {componentName}')
249+
return self._ask(question='getExtendsModifierNames', opt=[className, componentName])
247250

248251
def getExtendsModifierValue(self, className, extendsName, modifierName):
249-
return self.ask(question='getExtendsModifierValue', opt=f'{className}, {extendsName}, {modifierName}')
252+
return self._ask(question='getExtendsModifierValue', opt=[className, extendsName, modifierName])
250253

251254
def getNthComponentModification(self, className, comp_id):
252255
# FIXME: OMPython exception Results KeyError exception
253256

254257
# get {$Code(....)} field
255258
# \{\$Code\((\S*\s*)*\)\}
256-
value = self.ask('getNthComponentModification', f'{className}, {comp_id}', parsed=False)
259+
value = self._ask(question='getNthComponentModification', opt=[className, comp_id], parsed=False)
257260
value = value.replace("{$Code(", "")
258261
return value[:-3]
259262
# return self.re_Code.findall(value)
@@ -269,15 +272,13 @@ def getNthComponentModification(self, className, comp_id):
269272
# end getClassNames;
270273
def getClassNames(self, className=None, recursive=False, qualified=False, sort=False, builtin=False,
271274
showProtected=False):
272-
value = self.ask(
273-
'getClassNames',
274-
(f'{className}, ' if className else '') +
275-
f'recursive={str(recursive).lower()}, '
276-
f'qualified={str(qualified).lower()}, '
277-
f'sort={str(sort).lower()}, '
278-
f'builtin={str(builtin).lower()}, '
279-
f'showProtected={str(showProtected).lower()}'
280-
)
275+
value = self._ask(question='getClassNames',
276+
opt=[className] if className else [] + [f'recursive={str(recursive).lower()}',
277+
f'qualified={str(qualified).lower()}',
278+
f'sort={str(sort).lower()}',
279+
f'builtin={str(builtin).lower()}',
280+
f'showProtected={str(showProtected).lower()}']
281+
)
281282
return value
282283

283284

0 commit comments

Comments
 (0)