4545import sys
4646import tempfile
4747import time
48+ from typing import Optional
4849import uuid
4950import pyparsing
5051import 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