4545import sys
4646import tempfile
4747import time
48+ from typing import Optional
4849import uuid
4950import pyparsing
5051import 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 ([str (x ) for x in 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