]> git.saurik.com Git - wxWidgets.git/blame_incremental - wxPython/contrib/activex/activex.py
new configure flags
[wxWidgets.git] / wxPython / contrib / activex / activex.py
... / ...
CommitLineData
1# This file was created automatically by SWIG.
2# Don't modify this file, modify the SWIG interface instead.
3
4import _activex
5
6def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
7 if (name == "this"):
8 if isinstance(value, class_type):
9 self.__dict__[name] = value.this
10 if hasattr(value,"thisown"): self.__dict__["thisown"] = value.thisown
11 del value.thisown
12 return
13 method = class_type.__swig_setmethods__.get(name,None)
14 if method: return method(self,value)
15 if (not static) or hasattr(self,name) or (name == "thisown"):
16 self.__dict__[name] = value
17 else:
18 raise AttributeError("You cannot add attributes to %s" % self)
19
20def _swig_setattr(self,class_type,name,value):
21 return _swig_setattr_nondynamic(self,class_type,name,value,0)
22
23def _swig_getattr(self,class_type,name):
24 method = class_type.__swig_getmethods__.get(name,None)
25 if method: return method(self)
26 raise AttributeError,name
27
28import types
29try:
30 _object = types.ObjectType
31 _newclass = 1
32except AttributeError:
33 class _object : pass
34 _newclass = 0
35del types
36
37
38def _swig_setattr_nondynamic_method(set):
39 def set_attr(self,name,value):
40 if hasattr(self,name) or (name in ("this", "thisown")):
41 set(self,name,value)
42 else:
43 raise AttributeError("You cannot add attributes to %s" % self)
44 return set_attr
45
46
47import _core
48wx = _core
49__docfilter__ = wx.__DocFilter(globals())
50#---------------------------------------------------------------------------
51
52class CLSID(object):
53 """
54 This class wraps the Windows CLSID structure and is used to
55 specify the class of the ActiveX object that is to be created. A
56 CLSID can be constructed from either a ProgID string, (such as
57 'WordPad.Document.1') or a classID string, (such as
58 '{CA8A9783-280D-11CF-A24D-444553540000}').
59 """
60 def __repr__(self):
61 return "<%s.%s; proxy of C++ CLSID instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
62 def __init__(self, *args, **kwargs):
63 """
64 __init__(self, String id) -> CLSID
65
66 This class wraps the Windows CLSID structure and is used to
67 specify the class of the ActiveX object that is to be created. A
68 CLSID can be constructed from either a ProgID string, (such as
69 'WordPad.Document.1') or a classID string, (such as
70 '{CA8A9783-280D-11CF-A24D-444553540000}').
71 """
72 newobj = _activex.new_CLSID(*args, **kwargs)
73 self.this = newobj.this
74 self.thisown = 1
75 del newobj.thisown
76 def __del__(self, destroy=_activex.delete_CLSID):
77 """__del__(self)"""
78 try:
79 if self.thisown: destroy(self)
80 except: pass
81
82 def GetCLSIDString(*args, **kwargs):
83 """GetCLSIDString(self) -> String"""
84 return _activex.CLSID_GetCLSIDString(*args, **kwargs)
85
86 def GetProgIDString(*args, **kwargs):
87 """GetProgIDString(self) -> String"""
88 return _activex.CLSID_GetProgIDString(*args, **kwargs)
89
90 def __str__(self): return self.GetCLSIDString()
91
92class CLSIDPtr(CLSID):
93 def __init__(self, this):
94 self.this = this
95 if not hasattr(self,"thisown"): self.thisown = 0
96 self.__class__ = CLSID
97_activex.CLSID_swigregister(CLSIDPtr)
98
99#---------------------------------------------------------------------------
100
101class ParamX(object):
102 """Proxy of C++ ParamX class"""
103 def __init__(self): raise RuntimeError, "No constructor defined"
104 def __repr__(self):
105 return "<%s.%s; proxy of C++ wxParamX instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
106 flags = property(_activex.ParamX_flags_get)
107 isPtr = property(_activex.ParamX_isPtr_get)
108 isSafeArray = property(_activex.ParamX_isSafeArray_get)
109 isOptional = property(_activex.ParamX_isOptional_get)
110 vt = property(_activex.ParamX_vt_get)
111 name = property(_activex.ParamX_name_get)
112 vt_type = property(_activex.ParamX_vt_type_get)
113
114 isIn = property(_activex.ParamX_IsIn)
115
116 isOut = property(_activex.ParamX_IsOut)
117
118 isRetVal = property(_activex.ParamX_IsRetVal)
119
120
121class ParamXPtr(ParamX):
122 def __init__(self, this):
123 self.this = this
124 if not hasattr(self,"thisown"): self.thisown = 0
125 self.__class__ = ParamX
126_activex.ParamX_swigregister(ParamXPtr)
127
128class FuncX(object):
129 """Proxy of C++ FuncX class"""
130 def __init__(self): raise RuntimeError, "No constructor defined"
131 def __repr__(self):
132 return "<%s.%s; proxy of C++ wxFuncX instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
133 name = property(_activex.FuncX_name_get)
134 memid = property(_activex.FuncX_memid_get)
135 hasOut = property(_activex.FuncX_hasOut_get)
136 retType = property(_activex.FuncX_retType_get)
137 params = property(_activex.FuncX_params_get)
138
139class FuncXPtr(FuncX):
140 def __init__(self, this):
141 self.this = this
142 if not hasattr(self,"thisown"): self.thisown = 0
143 self.__class__ = FuncX
144_activex.FuncX_swigregister(FuncXPtr)
145
146class PropX(object):
147 """Proxy of C++ PropX class"""
148 def __init__(self): raise RuntimeError, "No constructor defined"
149 def __repr__(self):
150 return "<%s.%s; proxy of C++ wxPropX instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
151 name = property(_activex.PropX_name_get)
152 memid = property(_activex.PropX_memid_get)
153 type = property(_activex.PropX_type_get)
154 arg = property(_activex.PropX_arg_get)
155 putByRef = property(_activex.PropX_putByRef_get)
156 canGet = property(_activex.PropX_CanGet)
157
158 canSet = property(_activex.PropX_CanSet)
159
160
161class PropXPtr(PropX):
162 def __init__(self, this):
163 self.this = this
164 if not hasattr(self,"thisown"): self.thisown = 0
165 self.__class__ = PropX
166_activex.PropX_swigregister(PropXPtr)
167
168class ParamXArray(object):
169 """Proxy of C++ ParamXArray class"""
170 def __init__(self): raise RuntimeError, "No constructor defined"
171 def __repr__(self):
172 return "<%s.%s; proxy of C++ wxParamXArray instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
173 def __nonzero__(*args, **kwargs):
174 """__nonzero__(self) -> bool"""
175 return _activex.ParamXArray___nonzero__(*args, **kwargs)
176
177 def __len__(*args, **kwargs):
178 """__len__(self) -> int"""
179 return _activex.ParamXArray___len__(*args, **kwargs)
180
181 def __getitem__(*args, **kwargs):
182 """__getitem__(self, int idx) -> ParamX"""
183 return _activex.ParamXArray___getitem__(*args, **kwargs)
184
185
186class ParamXArrayPtr(ParamXArray):
187 def __init__(self, this):
188 self.this = this
189 if not hasattr(self,"thisown"): self.thisown = 0
190 self.__class__ = ParamXArray
191_activex.ParamXArray_swigregister(ParamXArrayPtr)
192
193class FuncXArray(object):
194 """Proxy of C++ FuncXArray class"""
195 def __init__(self): raise RuntimeError, "No constructor defined"
196 def __repr__(self):
197 return "<%s.%s; proxy of C++ wxFuncXArray instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
198 def __nonzero__(*args, **kwargs):
199 """__nonzero__(self) -> bool"""
200 return _activex.FuncXArray___nonzero__(*args, **kwargs)
201
202 def __len__(*args, **kwargs):
203 """__len__(self) -> int"""
204 return _activex.FuncXArray___len__(*args, **kwargs)
205
206 def __getitem__(*args, **kwargs):
207 """__getitem__(self, int idx) -> FuncX"""
208 return _activex.FuncXArray___getitem__(*args, **kwargs)
209
210
211class FuncXArrayPtr(FuncXArray):
212 def __init__(self, this):
213 self.this = this
214 if not hasattr(self,"thisown"): self.thisown = 0
215 self.__class__ = FuncXArray
216_activex.FuncXArray_swigregister(FuncXArrayPtr)
217
218class PropXArray(object):
219 """Proxy of C++ PropXArray class"""
220 def __init__(self): raise RuntimeError, "No constructor defined"
221 def __repr__(self):
222 return "<%s.%s; proxy of C++ wxPropXArray instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
223 def __nonzero__(*args, **kwargs):
224 """__nonzero__(self) -> bool"""
225 return _activex.PropXArray___nonzero__(*args, **kwargs)
226
227 def __len__(*args, **kwargs):
228 """__len__(self) -> int"""
229 return _activex.PropXArray___len__(*args, **kwargs)
230
231 def __getitem__(*args, **kwargs):
232 """__getitem__(self, int idx) -> PropX"""
233 return _activex.PropXArray___getitem__(*args, **kwargs)
234
235
236class PropXArrayPtr(PropXArray):
237 def __init__(self, this):
238 self.this = this
239 if not hasattr(self,"thisown"): self.thisown = 0
240 self.__class__ = PropXArray
241_activex.PropXArray_swigregister(PropXArrayPtr)
242
243#---------------------------------------------------------------------------
244
245class ActiveXWindow(_core.Window):
246 """
247 ActiveXWindow derives from wxWindow and the constructor accepts a
248 CLSID for the ActiveX Control that should be created. The
249 ActiveXWindow class simply adds methods that allow you to query
250 some of the TypeInfo exposed by the ActiveX object, and also to
251 get/set properties or call methods by name. The Python
252 implementation automatically handles converting parameters and
253 return values to/from the types expected by the ActiveX code as
254 specified by the TypeInfo.
255
256 """
257 def __repr__(self):
258 return "<%s.%s; proxy of C++ wxActiveXWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
259 def __init__(self, *args, **kwargs):
260 """
261 __init__(self, Window parent, CLSID clsId, int id=-1, Point pos=DefaultPosition,
262 Size size=DefaultSize, long style=0,
263 String name=PanelNameStr) -> ActiveXWindow
264
265 Creates an ActiveX control from the clsID given and makes it act
266 as much like a regular wx.Window as possible.
267 """
268 newobj = _activex.new_ActiveXWindow(*args, **kwargs)
269 self.this = newobj.this
270 self.thisown = 1
271 del newobj.thisown
272 self._setOORInfo(self)
273
274 def GetCLSID(*args, **kwargs):
275 """
276 GetCLSID(self) -> CLSID
277
278 Return the CLSID used to construct this ActiveX window
279 """
280 return _activex.ActiveXWindow_GetCLSID(*args, **kwargs)
281
282 def GetAXEventCount(*args, **kwargs):
283 """
284 GetAXEventCount(self) -> int
285
286 Number of events defined for this control
287 """
288 return _activex.ActiveXWindow_GetAXEventCount(*args, **kwargs)
289
290 def GetAXEventDesc(*args, **kwargs):
291 """
292 GetAXEventDesc(self, int idx) -> FuncX
293
294 Returns event description by index
295 """
296 return _activex.ActiveXWindow_GetAXEventDesc(*args, **kwargs)
297
298 def GetAXPropCount(*args, **kwargs):
299 """
300 GetAXPropCount(self) -> int
301
302 Number of properties defined for this control
303 """
304 return _activex.ActiveXWindow_GetAXPropCount(*args, **kwargs)
305
306 def GetAXPropDesc(*args):
307 """
308 GetAXPropDesc(self, int idx) -> PropX
309 GetAXPropDesc(self, String name) -> PropX
310 """
311 return _activex.ActiveXWindow_GetAXPropDesc(*args)
312
313 def GetAXMethodCount(*args, **kwargs):
314 """
315 GetAXMethodCount(self) -> int
316
317 Number of methods defined for this control
318 """
319 return _activex.ActiveXWindow_GetAXMethodCount(*args, **kwargs)
320
321 def GetAXMethodDesc(*args):
322 """
323 GetAXMethodDesc(self, int idx) -> FuncX
324 GetAXMethodDesc(self, String name) -> FuncX
325 """
326 return _activex.ActiveXWindow_GetAXMethodDesc(*args)
327
328 def GetAXEvents(*args, **kwargs):
329 """
330 GetAXEvents(self) -> FuncXArray
331
332 Returns a sequence of FuncX objects describing the events
333 available for this ActiveX object.
334 """
335 return _activex.ActiveXWindow_GetAXEvents(*args, **kwargs)
336
337 def GetAXMethods(*args, **kwargs):
338 """
339 GetAXMethods(self) -> FuncXArray
340
341 Returns a sequence of FuncX objects describing the methods
342 available for this ActiveX object.
343 """
344 return _activex.ActiveXWindow_GetAXMethods(*args, **kwargs)
345
346 def GetAXProperties(*args, **kwargs):
347 """
348 GetAXProperties(self) -> PropXArray
349
350 Returns a sequence of PropX objects describing the properties
351 available for this ActiveX object.
352 """
353 return _activex.ActiveXWindow_GetAXProperties(*args, **kwargs)
354
355 def SetAXProp(*args, **kwargs):
356 """
357 SetAXProp(self, String name, PyObject value)
358
359 Set a property of the ActiveX object by name.
360 """
361 return _activex.ActiveXWindow_SetAXProp(*args, **kwargs)
362
363 def GetAXProp(*args, **kwargs):
364 """
365 GetAXProp(self, String name) -> PyObject
366
367 Get the value of an ActiveX property by name.
368 """
369 return _activex.ActiveXWindow_GetAXProp(*args, **kwargs)
370
371 def _CallAXMethod(*args):
372 """
373 _CallAXMethod(self, String name, PyObject args) -> PyObject
374
375 The implementation for CallMethod. Calls an ActiveX method, by
376 name passing the parameters given in args.
377 """
378 return _activex.ActiveXWindow__CallAXMethod(*args)
379
380 def CallAXMethod(self, name, *args):
381 """
382 Front-end for _CallMethod. Simply passes all positional args
383 after the name as a single tuple to _CallMethod.
384 """
385 return self._CallAXMethod(name, args)
386
387
388class ActiveXWindowPtr(ActiveXWindow):
389 def __init__(self, this):
390 self.this = this
391 if not hasattr(self,"thisown"): self.thisown = 0
392 self.__class__ = ActiveXWindow
393_activex.ActiveXWindow_swigregister(ActiveXWindowPtr)
394
395#---------------------------------------------------------------------------
396
397
398def RegisterActiveXEvent(*args, **kwargs):
399 """
400 RegisterActiveXEvent(String eventName) -> wxEventType
401
402 Creates a standard wx event ID for the given eventName.
403 """
404 return _activex.RegisterActiveXEvent(*args, **kwargs)
405class ActiveXEvent(_core.CommandEvent):
406 """
407 An instance of ActiveXEvent is sent to the handler for all bound
408 ActiveX events. Any event parameters from the ActiveX cntrol are
409 turned into attributes of the Python proxy for this event object.
410 Additionally, there is a property called eventName that will
411 return (surprisingly <wink>) the name of the ActiveX event.
412 """
413 def __init__(self): raise RuntimeError, "No constructor defined"
414 def __repr__(self):
415 return "<%s.%s; proxy of C++ wxActiveXEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
416 eventName = property(_activex.ActiveXEvent_EventName)
417
418 def _preCallInit(*args, **kwargs):
419 """_preCallInit(self, PyObject pyself)"""
420 return _activex.ActiveXEvent__preCallInit(*args, **kwargs)
421
422 def _postCallCleanup(*args, **kwargs):
423 """_postCallCleanup(self, PyObject pyself)"""
424 return _activex.ActiveXEvent__postCallCleanup(*args, **kwargs)
425
426
427class ActiveXEventPtr(ActiveXEvent):
428 def __init__(self, this):
429 self.this = this
430 if not hasattr(self,"thisown"): self.thisown = 0
431 self.__class__ = ActiveXEvent
432_activex.ActiveXEvent_swigregister(ActiveXEventPtr)
433
434#---------------------------------------------------------------------------
435
436class IEHtmlWindowBase(ActiveXWindow):
437 def __repr__(self):
438 return "<%s.%s; proxy of C++ wxIEHtmlWindowBase instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
439 def __init__(self, *args, **kwargs):
440 newobj = _activex.new_IEHtmlWindowBase(*args, **kwargs)
441 self.this = newobj.this
442 self.thisown = 1
443 del newobj.thisown
444 self._setOORInfo(self)
445
446 def SetCharset(*args, **kwargs): return _activex.IEHtmlWindowBase_SetCharset(*args, **kwargs)
447 def LoadString(*args, **kwargs): return _activex.IEHtmlWindowBase_LoadString(*args, **kwargs)
448 def LoadStream(*args, **kwargs): return _activex.IEHtmlWindowBase_LoadStream(*args, **kwargs)
449 def GetStringSelection(*args, **kwargs): return _activex.IEHtmlWindowBase_GetStringSelection(*args, **kwargs)
450 def GetText(*args, **kwargs): return _activex.IEHtmlWindowBase_GetText(*args, **kwargs)
451
452class IEHtmlWindowBasePtr(IEHtmlWindowBase):
453 def __init__(self, this):
454 self.this = this
455 if not hasattr(self,"thisown"): self.thisown = 0
456 self.__class__ = IEHtmlWindowBase
457_activex.IEHtmlWindowBase_swigregister(IEHtmlWindowBasePtr)
458
459#---------------------------------------------------------------------------
460# Some helper and utility functions for ActiveX
461
462
463t4 = " " * 4
464t8 = " " * 8
465
466def GetAXInfo(ax):
467 """
468 Returns a printable summary of the TypeInfo from the ActiveX instance
469 passed in.
470 """
471
472 def ProcessFuncX(f, out, name):
473 out.append(name)
474 out.append(t4 + "retType: %s" % f.retType.vt_type)
475 if f.params:
476 out.append(t4 + "params:")
477 for p in f.params:
478 out.append(t8 + p.name)
479 out.append(t8+t4+ "in:%s out:%s optional:%s type:%s" % (p.isIn, p.isOut, p.isOptional, p.vt_type))
480 out.append('')
481
482 def ProcessPropX(p, out):
483 out.append(GernerateAXModule.trimPropName(p.name))
484 out.append(t4+ "type:%s arg:%s canGet:%s canSet:%s" % (p.type.vt_type, p.arg.vt_type, p.canGet, p.canSet))
485 out.append('')
486
487 out = []
488
489 out.append("PROPERTIES")
490 out.append("-"*20)
491 for p in ax.GetAXProperties():
492 ProcessPropX(p, out)
493 out.append('\n\n')
494
495 out.append("METHODS")
496 out.append("-"*20)
497 for m in ax.GetAXMethods():
498 ProcessFuncX(m, out, GernerateAXModule.trimMethodName(m.name))
499 out.append('\n\n')
500
501 out.append("EVENTS")
502 out.append("-"*20)
503 for e in ax.GetAXEvents():
504 ProcessFuncX(e, out, GernerateAXModule.trimEventName(e.name))
505 out.append('\n\n')
506
507 return "\n".join(out)
508
509
510
511class GernerateAXModule:
512 def __init__(self, ax, className, modulePath, moduleName=None, verbose=False):
513 """
514 Make a Python module file with a class that has been specialized
515 for the AcitveX object.
516
517 ax An instance of the ActiveXWindow class
518 className The name to use for the new class
519 modulePath The path where the new module should be written to
520 moduleName The name of the .py file to create. If not given
521 then the className will be used.
522 """
523 import os
524 if moduleName is None:
525 moduleName = className + '.py'
526 filename = os.path.join(modulePath, moduleName)
527 if verbose:
528 print "Creating module in:", filename
529 print " ProgID: ", ax.GetCLSID().GetProgIDString()
530 print " CLSID: ", ax.GetCLSID().GetCLSIDString()
531 print
532 self.mf = file(filename, "w")
533 self.WriteFileHeader(ax)
534 self.WriteEvents(ax)
535 self.WriteClassHeader(ax, className)
536 self.WriteMethods(ax)
537 self.WriteProperties(ax)
538 self.WriteDocs(ax)
539 self.mf.close()
540 del self.mf
541
542
543 def WriteFileHeader(self, ax):
544 self.write("# This module was generated by the wx.activex.GernerateAXModule class\n"
545 "# (See also the genaxmodule script.)\n")
546 self.write("import wx")
547 self.write("import wx.activex\n")
548 self.write("clsID = '%s'\nprogID = '%s'\n"
549 % (ax.GetCLSID().GetCLSIDString(), ax.GetCLSID().GetProgIDString()))
550 self.write("\n")
551
552
553 def WriteEvents(self, ax):
554 events = ax.GetAXEvents()
555 if events:
556 self.write("# Create eventTypes and event binders")
557 for e in events:
558 self.write("wxEVT_%s = wx.activex.RegisterActiveXEvent('%s')"
559 % (self.trimEventName(e.name), e.name))
560 self.write()
561 for e in events:
562 n = self.trimEventName(e.name)
563 self.write("EVT_%s = wx.PyEventBinder(wxEVT_%s, 1)" % (n,n))
564 self.write("\n")
565
566
567 def WriteClassHeader(self, ax, className):
568 self.write("# Derive a new class from ActiveXWindow")
569 self.write("""\
570class %s(wx.activex.ActiveXWindow):
571 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition,
572 size=wx.DefaultSize, style=0, name='%s'):
573 wx.activex.ActiveXWindow.__init__(self, parent,
574 wx.activex.CLSID('%s'),
575 ID, pos, size, style, name)
576 """ % (className, className, ax.GetCLSID().GetCLSIDString()) )
577
578
579 def WriteMethods(self, ax):
580 methods = ax.GetAXMethods()
581 if methods:
582 self.write(t4, "# Methods exported by the ActiveX object")
583 for m in methods:
584 name = self.trimMethodName(m.name)
585 self.write(t4, "def %s(self%s):" % (name, self.getParameters(m, True)))
586 self.write(t8, "return self.CallAXMethod('%s'%s)" % (m.name, self.getParameters(m, False)))
587 self.write()
588
589
590 def WriteProperties(self, ax):
591 props = ax.GetAXProperties()
592 if props:
593 self.write(t4, "# Getters, Setters and properties")
594 for p in props:
595 getterName = setterName = "None"
596 if p.canGet:
597 getterName = "_get_" + p.name
598 self.write(t4, "def %s(self):" % getterName)
599 self.write(t8, "return self.GetAXProp('%s')" % p.name)
600 if p.canSet:
601 setterName = "_set_" + p.name
602 self.write(t4, "def %s(self, %s):" % (setterName, p.arg.name))
603 self.write(t8, "self.SetAXProp('%s', %s)" % (p.name, p.arg.name))
604
605 self.write(t4, "%s = property(%s, %s)" %
606 (self.trimPropName(p.name), getterName, setterName))
607 self.write()
608
609
610 def WriteDocs(self, ax):
611 self.write()
612 doc = GetAXInfo(ax)
613 for line in doc.split('\n'):
614 self.write("# ", line)
615
616
617
618 def write(self, *args):
619 for a in args:
620 self.mf.write(a)
621 self.mf.write("\n")
622
623
624 def trimEventName(name):
625 if name.startswith("On"):
626 name = name[2:]
627 return name
628 trimEventName = staticmethod(trimEventName)
629
630
631 def trimPropName(name):
632 #name = name[0].lower() + name[1:]
633 name = name.lower()
634 import keyword
635 if name in keyword.kwlist: name += '_'
636 return name
637 trimPropName = staticmethod(trimPropName)
638
639
640 def trimMethodName(name):
641 import keyword
642 if name in keyword.kwlist: name += '_'
643 return name
644 trimMethodName = staticmethod(trimMethodName)
645
646
647 def getParameters(self, m, withDefaults):
648 import keyword
649 st = ""
650 # collect the input parameters, if both isIn and isOut are
651 # False then assume it is an input paramater
652 params = []
653 for p in m.params:
654 if p.isIn or (not p.isIn and not p.isOut):
655 params.append(p)
656 # did we get any?
657 for p in params:
658 name = p.name
659 if name in keyword.kwlist: name += '_'
660 st += ", "
661 st += name
662 if withDefaults and p.isOptional:
663 st += '=None'
664 return st
665
666
667#---------------------------------------------------------------------------
668
669