Skip to content

Commit adaf077

Browse files
committed
[OMCSessionBase.ask()] define opt as list
1 parent 5b21a06 commit adaf077

File tree

1 file changed

+54
-55
lines changed

1 file changed

+54
-55
lines changed

OMPython/OMCSession.py

Lines changed: 54 additions & 55 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
@@ -105,20 +106,23 @@ def sendExpression(self, command, parsed=True):
105106
"""
106107
pass
107108

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

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

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

123127
try:
124128
res = self.sendExpression(expression, parsed=parsed)
@@ -133,118 +137,118 @@ def ask(self, question, opt=None, parsed=True):
133137

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

138142
def loadModel(self, className):
139-
return self.ask('loadModel', className)
143+
return self._ask(question='loadModel', opt=[className])
140144

141145
def isModel(self, className):
142-
return self.ask('isModel', className)
146+
return self._ask(question='isModel', opt=[className])
143147

144148
def isPackage(self, className):
145-
return self.ask('isPackage', className)
149+
return self._ask(question='isPackage', opt=[className])
146150

147151
def isPrimitive(self, className):
148-
return self.ask('isPrimitive', className)
152+
return self._ask(question='isPrimitive', opt=[className])
149153

150154
def isConnector(self, className):
151-
return self.ask('isConnector', className)
155+
return self._ask(question='isConnector', opt=[className])
152156

153157
def isRecord(self, className):
154-
return self.ask('isRecord', className)
158+
return self._ask(question='isRecord', opt=[className])
155159

156160
def isBlock(self, className):
157-
return self.ask('isBlock', className)
161+
return self._ask(question='isBlock', opt=[className])
158162

159163
def isType(self, className):
160-
return self.ask('isType', className)
164+
return self._ask(question='isType', opt=[className])
161165

162166
def isFunction(self, className):
163-
return self.ask('isFunction', className)
167+
return self._ask(question='isFunction', opt=[className])
164168

165169
def isClass(self, className):
166-
return self.ask('isClass', className)
170+
return self._ask(question='isClass', opt=[className])
167171

168172
def isParameter(self, className):
169-
return self.ask('isParameter', className)
173+
return self._ask(question='isParameter', opt=[className])
170174

171175
def isConstant(self, className):
172-
return self.ask('isConstant', className)
176+
return self._ask(question='isConstant', opt=[className])
173177

174178
def isProtected(self, className):
175-
return self.ask('isProtected', className)
179+
return self._ask(question='isProtected', opt=[className])
176180

177181
def getPackages(self, className="AllLoadedClasses"):
178-
return self.ask('getPackages', className)
182+
return self._ask(question='getPackages', opt=[className])
179183

180184
def getClassRestriction(self, className):
181-
return self.ask('getClassRestriction', className)
185+
return self._ask(question='getClassRestriction', opt=[className])
182186

183187
def getDerivedClassModifierNames(self, className):
184-
return self.ask('getDerivedClassModifierNames', className)
188+
return self._ask(question='getDerivedClassModifierNames', opt=[className])
185189

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

189193
def typeNameStrings(self, className):
190-
return self.ask('typeNameStrings', className)
194+
return self._ask(question='typeNameStrings', opt=[className])
191195

192196
def getComponents(self, className):
193-
return self.ask('getComponents', className)
197+
return self._ask(question='getComponents', opt=[className])
194198

195199
def getClassComment(self, className):
196200
try:
197-
return self.ask('getClassComment', className)
201+
return self._ask(question='getClassComment', opt=[className])
198202
except pyparsing.ParseException as ex:
199203
logger.warning("Method 'getClassComment' failed for %s", className)
200204
logger.warning('OMTypedParser error: %s', ex.message)
201205
return 'No description available'
202206

203207
def getNthComponent(self, className, comp_id):
204208
""" returns with (type, name, description) """
205-
return self.ask('getNthComponent', f'{className}, {comp_id}')
209+
return self._ask(question='getNthComponent', opt=[className, comp_id])
206210

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

210214
def getImportCount(self, className):
211-
return self.ask('getImportCount', className)
215+
return self._ask(question='getImportCount', opt=[className])
212216

213217
def getNthImport(self, className, importNumber):
214218
# [Path, id, kind]
215-
return self.ask('getNthImport', f'{className}, {importNumber}')
219+
return self._ask(question='getNthImport', opt=[className, importNumber])
216220

217221
def getInheritanceCount(self, className):
218-
return self.ask('getInheritanceCount', className)
222+
return self._ask(question='getInheritanceCount', opt=[className])
219223

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

223227
def getParameterNames(self, className):
224228
try:
225-
return self.ask('getParameterNames', className)
229+
return self._ask(question='getParameterNames', opt=[className])
226230
except KeyError as ex:
227231
logger.warning('OMPython error: %s', ex)
228232
# FIXME: OMC returns with a different structure for empty parameter set
229233
return []
230234

231235
def getParameterValue(self, className, parameterName):
232236
try:
233-
return self.ask('getParameterValue', f'{className}, {parameterName}')
237+
return self._ask(question='getParameterValue', opt=[className, parameterName])
234238
except pyparsing.ParseException as ex:
235239
logger.warning('OMTypedParser error: %s', ex.message)
236240
return ""
237241

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

241245
def getComponentModifierValue(self, className, componentName):
242246
try:
243247
# FIXME: OMPython exception UnboundLocalError exception for 'Modelica.Fluid.Machines.ControlledPump'
244-
return self.ask('getComponentModifierValue', f'{className}, {componentName}')
248+
return self._ask('getComponentModifierValue', opt=[className, componentName])
245249
except pyparsing.ParseException as ex:
246250
logger.warning('OMTypedParser error: %s', ex.message)
247-
result = self.ask('getComponentModifierValue', f'{className}, {componentName}', parsed=False)
251+
result = self._ask('getComponentModifierValue', opt=[className, componentName], parsed=False)
248252
try:
249253
answer = OMParser.check_for_values(result)
250254
OMParser.result = {}
@@ -254,15 +258,12 @@ def getComponentModifierValue(self, className, componentName):
254258
return result
255259

256260
def getExtendsModifierNames(self, className, componentName):
257-
return self.ask('getExtendsModifierNames', f'{className}, {componentName}')
258-
259-
def getExtendsModifierValue(self, className, extendsName, modifierName):
260261
try:
261262
# FIXME: OMPython exception UnboundLocalError exception for 'Modelica.Fluid.Machines.ControlledPump'
262-
return self.ask('getExtendsModifierValue', f'{className}, {extendsName}, {modifierName}')
263+
return self._ask('getExtendsModifierValue', opt=[className, componentName])
263264
except pyparsing.ParseException as ex:
264265
logger.warning('OMTypedParser error: %s', ex.message)
265-
result = self.ask('getExtendsModifierValue', f'{className}, {extendsName}, {modifierName}', parsed=False)
266+
result = self._ask('getExtendsModifierValue', opt=[className, componentName], parsed=False)
266267
try:
267268
answer = OMParser.check_for_values(result)
268269
OMParser.result = {}
@@ -276,7 +277,7 @@ def getNthComponentModification(self, className, comp_id):
276277

277278
# get {$Code(....)} field
278279
# \{\$Code\((\S*\s*)*\)\}
279-
value = self.ask('getNthComponentModification', f'{className}, {comp_id}', parsed=False)
280+
value = self._ask(question='getNthComponentModification', opt=[className, comp_id], parsed=False)
280281
value = value.replace("{$Code(", "")
281282
return value[:-3]
282283
# return self.re_Code.findall(value)
@@ -292,15 +293,13 @@ def getNthComponentModification(self, className, comp_id):
292293
# end getClassNames;
293294
def getClassNames(self, className=None, recursive=False, qualified=False, sort=False, builtin=False,
294295
showProtected=False):
295-
value = self.ask(
296-
'getClassNames',
297-
(f'{className}, ' if className else '') +
298-
f'recursive={str(recursive).lower()}, '
299-
f'qualified={str(qualified).lower()}, '
300-
f'sort={str(sort).lower()}, '
301-
f'builtin={str(builtin).lower()}, '
302-
f'showProtected={str(showProtected).lower()}'
303-
)
296+
value = self._ask(question='getClassNames',
297+
opt=[className] if className else [] + [f'recursive={str(recursive).lower()}',
298+
f'qualified={str(qualified).lower()}',
299+
f'sort={str(sort).lower()}',
300+
f'builtin={str(builtin).lower()}',
301+
f'showProtected={str(showProtected).lower()}']
302+
)
304303
return value
305304

306305

0 commit comments

Comments
 (0)