Skip to content

Commit c4f2362

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

File tree

1 file changed

+53
-51
lines changed

1 file changed

+53
-51
lines changed

OMPython/OMCSession.py

Lines changed: 53 additions & 51 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,20 +107,23 @@ 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 Exception(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)
@@ -134,126 +138,126 @@ def ask(self, question, opt=None, parsed=True):
134138

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

139143
def loadModel(self, className):
140-
return self.ask('loadModel', className)
144+
return self._ask(question='loadModel', opt=[className])
141145

142146
def isModel(self, className):
143-
return self.ask('isModel', className)
147+
return self._ask(question='isModel', opt=[className])
144148

145149
def isPackage(self, className):
146-
return self.ask('isPackage', className)
150+
return self._ask(question='isPackage', opt=[className])
147151

148152
def isPrimitive(self, className):
149-
return self.ask('isPrimitive', className)
153+
return self._ask(question='isPrimitive', opt=[className])
150154

151155
def isConnector(self, className):
152-
return self.ask('isConnector', className)
156+
return self._ask(question='isConnector', opt=[className])
153157

154158
def isRecord(self, className):
155-
return self.ask('isRecord', className)
159+
return self._ask(question='isRecord', opt=[className])
156160

157161
def isBlock(self, className):
158-
return self.ask('isBlock', className)
162+
return self._ask(question='isBlock', opt=[className])
159163

160164
def isType(self, className):
161-
return self.ask('isType', className)
165+
return self._ask(question='isType', opt=[className])
162166

163167
def isFunction(self, className):
164-
return self.ask('isFunction', className)
168+
return self._ask(question='isFunction', opt=[className])
165169

166170
def isClass(self, className):
167-
return self.ask('isClass', className)
171+
return self._ask(question='isClass', opt=[className])
168172

169173
def isParameter(self, className):
170-
return self.ask('isParameter', className)
174+
return self._ask(question='isParameter', opt=[className])
171175

172176
def isConstant(self, className):
173-
return self.ask('isConstant', className)
177+
return self._ask(question='isConstant', opt=[className])
174178

175179
def isProtected(self, className):
176-
return self.ask('isProtected', className)
180+
return self._ask(question='isProtected', opt=[className])
177181

178182
def getPackages(self, className="AllLoadedClasses"):
179-
return self.ask('getPackages', className)
183+
return self._ask(question='getPackages', opt=[className])
180184

181185
def getClassRestriction(self, className):
182-
return self.ask('getClassRestriction', className)
186+
return self._ask(question='getClassRestriction', opt=[className])
183187

184188
def getDerivedClassModifierNames(self, className):
185-
return self.ask('getDerivedClassModifierNames', className)
189+
return self._ask(question='getDerivedClassModifierNames', opt=[className])
186190

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

190194
def typeNameStrings(self, className):
191-
return self.ask('typeNameStrings', className)
195+
return self._ask(question='typeNameStrings', opt=[className])
192196

193197
def getComponents(self, className):
194-
return self.ask('getComponents', className)
198+
return self._ask(question='getComponents', opt=[className])
195199

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

204208
def getNthComponent(self, className, comp_id):
205209
""" returns with (type, name, description) """
206-
return self.ask('getNthComponent', f'{className}, {comp_id}')
210+
return self._ask(question='getNthComponent', opt=[className, comp_id])
207211

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

211215
def getImportCount(self, className):
212-
return self.ask('getImportCount', className)
216+
return self._ask(question='getImportCount', opt=[className])
213217

214218
def getNthImport(self, className, importNumber):
215219
# [Path, id, kind]
216-
return self.ask('getNthImport', f'{className}, {importNumber}')
220+
return self._ask(question='getNthImport', opt=[className, importNumber])
217221

218222
def getInheritanceCount(self, className):
219-
return self.ask('getInheritanceCount', className)
223+
return self._ask(question='getInheritanceCount', opt=[className])
220224

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

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

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

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

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

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

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

251255
def getNthComponentModification(self, className, comp_id):
252256
# FIXME: OMPython exception Results KeyError exception
253257

254258
# get {$Code(....)} field
255259
# \{\$Code\((\S*\s*)*\)\}
256-
value = self.ask('getNthComponentModification', f'{className}, {comp_id}', parsed=False)
260+
value = self._ask(question='getNthComponentModification', opt=[className, comp_id], parsed=False)
257261
value = value.replace("{$Code(", "")
258262
return value[:-3]
259263
# return self.re_Code.findall(value)
@@ -269,15 +273,13 @@ def getNthComponentModification(self, className, comp_id):
269273
# end getClassNames;
270274
def getClassNames(self, className=None, recursive=False, qualified=False, sort=False, builtin=False,
271275
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-
)
276+
value = self._ask(question='getClassNames',
277+
opt=[className] if className else [] + [f'recursive={str(recursive).lower()}',
278+
f'qualified={str(qualified).lower()}',
279+
f'sort={str(sort).lower()}',
280+
f'builtin={str(builtin).lower()}',
281+
f'showProtected={str(showProtected).lower()}']
282+
)
281283
return value
282284

283285

0 commit comments

Comments
 (0)