8
8
List ,
9
9
Optional ,
10
10
Type ,
11
- TYPE_CHECKING ,
12
11
TypeVar ,
13
12
Tuple ,
14
13
Union as _UnionT ,
@@ -120,16 +119,14 @@ def midlSAFEARRAY(typ):
120
119
121
120
122
121
class Parser (object ):
123
- if TYPE_CHECKING :
124
- tlib : typeinfo .ITypeLib
125
- items : Dict [str , Any ]
122
+ tlib : typeinfo .ITypeLib
123
+ items : Dict [str , Any ]
126
124
127
- def make_type (self , tdesc , tinfo ):
128
- # type: (typeinfo.TYPEDESC, typeinfo.ITypeInfo) -> Any
125
+ def make_type (self , tdesc : typeinfo .TYPEDESC , tinfo : typeinfo .ITypeInfo ) -> Any :
129
126
if tdesc .vt in COMTYPES :
130
127
return COMTYPES [tdesc .vt ]
131
128
if tdesc .vt == automation .VT_CARRAY :
132
- arraydesc = tdesc ._ .lpadesc [0 ] # type: typeinfo.tagARRAYDESC
129
+ arraydesc : typeinfo . tagARRAYDESC = tdesc ._ .lpadesc [0 ]
133
130
typ = self .make_type (arraydesc .tdescElem , tinfo )
134
131
for i in range (arraydesc .cDims ):
135
132
typ = typedesc .ArrayType (
@@ -139,7 +136,7 @@ def make_type(self, tdesc, tinfo):
139
136
)
140
137
return typ
141
138
elif tdesc .vt == automation .VT_PTR :
142
- ptrdesc = tdesc ._ .lptdesc [0 ] # type: typeinfo.TYPEDESC
139
+ ptrdesc : typeinfo . TYPEDESC = tdesc ._ .lptdesc [0 ]
143
140
typ = self .make_type (ptrdesc , tinfo )
144
141
return PTR (typ )
145
142
elif tdesc .vt == automation .VT_USERDEFINED :
@@ -166,15 +163,16 @@ def make_type(self, tdesc, tinfo):
166
163
return result
167
164
elif tdesc .vt == automation .VT_SAFEARRAY :
168
165
# SAFEARRAY(<type>), see Don Box pp.331f
169
- safearraydesc = tdesc ._ .lptdesc [0 ] # type: typeinfo.TYPEDESC
166
+ safearraydesc : typeinfo . TYPEDESC = tdesc ._ .lptdesc [0 ]
170
167
return midlSAFEARRAY (self .make_type (safearraydesc , tinfo ))
171
168
raise NotImplementedError (tdesc .vt )
172
169
173
170
################################################################
174
171
175
172
# TKIND_ENUM = 0
176
- def ParseEnum (self , tinfo , ta ):
177
- # type: (typeinfo.ITypeInfo, typeinfo.TYPEATTR) -> typedesc.Enumeration
173
+ def ParseEnum (
174
+ self , tinfo : typeinfo .ITypeInfo , ta : typeinfo .TYPEATTR
175
+ ) -> typedesc .Enumeration :
178
176
ta = tinfo .GetTypeAttr ()
179
177
enum_name = tinfo .GetDocumentation (- 1 )[0 ]
180
178
enum = typedesc .Enumeration (enum_name , 32 , 32 )
@@ -184,14 +182,15 @@ def ParseEnum(self, tinfo, ta):
184
182
vd = tinfo .GetVarDesc (i )
185
183
name = tinfo .GetDocumentation (vd .memid )[0 ]
186
184
assert vd .varkind == typeinfo .VAR_CONST
187
- num_val = vd ._ .lpvarValue [0 ].value # type: int
185
+ num_val : int = vd ._ .lpvarValue [0 ].value
188
186
v = typedesc .EnumValue (name , num_val , enum )
189
187
enum .add_value (v )
190
188
return enum
191
189
192
190
# TKIND_RECORD = 1
193
- def ParseRecord (self , tinfo , ta ):
194
- # type: (typeinfo.ITypeInfo, typeinfo.TYPEATTR) -> typedesc.Structure
191
+ def ParseRecord (
192
+ self , tinfo : typeinfo .ITypeInfo , ta : typeinfo .TYPEATTR
193
+ ) -> typedesc .Structure :
195
194
members = [] # will be filled later
196
195
struct_name , doc , helpcntext , helpfile = tinfo .GetDocumentation (- 1 )
197
196
struct = typedesc .Structure (
@@ -232,8 +231,7 @@ def ParseRecord(self, tinfo, ta):
232
231
return struct
233
232
234
233
# TKIND_MODULE = 2
235
- def ParseModule (self , tinfo , ta ):
236
- # type: (typeinfo.ITypeInfo, typeinfo.TYPEATTR) -> None
234
+ def ParseModule (self , tinfo : typeinfo .ITypeInfo , ta : typeinfo .TYPEATTR ) -> None :
237
235
assert 0 == ta .cImplTypes
238
236
# functions
239
237
for i in range (ta .cFuncs ):
@@ -275,8 +273,9 @@ def ParseModule(self, tinfo, ta):
275
273
v .doc = var_doc
276
274
277
275
# TKIND_INTERFACE = 3
278
- def ParseInterface (self , tinfo , ta ):
279
- # type: (typeinfo.ITypeInfo, typeinfo.TYPEATTR) -> Optional[typedesc.ComInterface]
276
+ def ParseInterface (
277
+ self , tinfo : typeinfo .ITypeInfo , ta : typeinfo .TYPEATTR
278
+ ) -> Optional [typedesc .ComInterface ]:
280
279
itf_name , itf_doc = tinfo .GetDocumentation (- 1 )[0 :2 ]
281
280
assert ta .cImplTypes <= 1
282
281
if ta .cImplTypes == 0 and itf_name != "IUnknown" :
@@ -334,7 +333,7 @@ def ParseInterface(self, tinfo, ta):
334
333
._ .paramdesc .pparamdescex [0 ]
335
334
.varDefaultValue
336
335
)
337
- default = var .value # type: Any
336
+ default : Any = var .value
338
337
else :
339
338
default = None
340
339
mth .add_argument (typ , name , self .param_flags (flags ), default )
@@ -347,8 +346,9 @@ def ParseInterface(self, tinfo, ta):
347
346
return itf
348
347
349
348
# TKIND_DISPATCH = 4
350
- def ParseDispatch (self , tinfo , ta ):
351
- # type: (typeinfo.ITypeInfo, typeinfo.TYPEATTR) -> typedesc.DispInterface
349
+ def ParseDispatch (
350
+ self , tinfo : typeinfo .ITypeInfo , ta : typeinfo .TYPEATTR
351
+ ) -> typedesc .DispInterface :
352
352
itf_name , doc = tinfo .GetDocumentation (- 1 )[0 :2 ]
353
353
assert ta .cImplTypes == 1
354
354
@@ -426,15 +426,14 @@ def ParseDispatch(self, tinfo, ta):
426
426
flags = descparam ._ .paramdesc .wParamFlags
427
427
if flags & typeinfo .PARAMFLAG_FHASDEFAULT :
428
428
var = descparam ._ .paramdesc .pparamdescex [0 ].varDefaultValue # type: ignore
429
- default = var .value # type: Any
429
+ default : Any = var .value
430
430
else :
431
431
default = None
432
432
mth .add_argument (typ , name , self .param_flags (flags ), default )
433
433
itf .members .append (mth )
434
434
return itf
435
435
436
- def inv_kind (self , invkind ):
437
- # type: (int) -> List[str]
436
+ def inv_kind (self , invkind : int ) -> List [str ]:
438
437
NAMES = {
439
438
automation .DISPATCH_METHOD : [],
440
439
automation .DISPATCH_PROPERTYPUT : ["propput" ],
@@ -443,8 +442,7 @@ def inv_kind(self, invkind):
443
442
}
444
443
return NAMES [invkind ]
445
444
446
- def func_flags (self , flags ):
447
- # type: (int) -> List[str]
445
+ def func_flags (self , flags : int ) -> List [str ]:
448
446
# map FUNCFLAGS values to idl attributes
449
447
NAMES = {
450
448
typeinfo .FUNCFLAG_FRESTRICTED : "restricted" ,
@@ -463,8 +461,7 @@ def func_flags(self, flags):
463
461
}
464
462
return [NAMES [bit ] for bit in NAMES if bit & flags ]
465
463
466
- def param_flags (self , flags ):
467
- # type: (int) -> List[str]
464
+ def param_flags (self , flags : int ) -> List [str ]:
468
465
# map PARAMFLAGS values to idl attributes
469
466
NAMES = {
470
467
typeinfo .PARAMFLAG_FIN : "in" ,
@@ -477,8 +474,7 @@ def param_flags(self, flags):
477
474
}
478
475
return [NAMES [bit ] for bit in NAMES if bit & flags ]
479
476
480
- def coclass_type_flags (self , flags ):
481
- # type: (int) -> List[str]
477
+ def coclass_type_flags (self , flags : int ) -> List [str ]:
482
478
# map TYPEFLAGS values to idl attributes
483
479
NAMES = {
484
480
typeinfo .TYPEFLAG_FAPPOBJECT : "appobject" ,
@@ -502,8 +498,7 @@ def coclass_type_flags(self, flags):
502
498
NEGATIVE_NAMES [bit ] for bit in NEGATIVE_NAMES if not (bit & flags )
503
499
]
504
500
505
- def interface_type_flags (self , flags ):
506
- # type: (int) -> List[str]
501
+ def interface_type_flags (self , flags : int ) -> List [str ]:
507
502
# map TYPEFLAGS values to idl attributes
508
503
NAMES = {
509
504
typeinfo .TYPEFLAG_FAPPOBJECT : "appobject" ,
@@ -527,8 +522,7 @@ def interface_type_flags(self, flags):
527
522
NEGATIVE_NAMES [bit ] for bit in NEGATIVE_NAMES if not (bit & flags )
528
523
]
529
524
530
- def var_flags (self , flags ):
531
- # type: (int) -> List[str]
525
+ def var_flags (self , flags : int ) -> List [str ]:
532
526
NAMES = {
533
527
typeinfo .VARFLAG_FREADONLY : "readonly" ,
534
528
typeinfo .VARFLAG_FSOURCE : "source" ,
@@ -547,8 +541,9 @@ def var_flags(self, flags):
547
541
return [NAMES [bit ] for bit in NAMES if bit & flags ]
548
542
549
543
# TKIND_COCLASS = 5
550
- def ParseCoClass (self , tinfo , ta ):
551
- # type: (typeinfo.ITypeInfo, typeinfo.TYPEATTR) -> typedesc.CoClass
544
+ def ParseCoClass (
545
+ self , tinfo : typeinfo .ITypeInfo , ta : typeinfo .TYPEATTR
546
+ ) -> typedesc .CoClass :
552
547
# possible ta.wTypeFlags: helpstring, helpcontext, licensed,
553
548
# version, control, hidden, and appobject
554
549
coclass_name , doc = tinfo .GetDocumentation (- 1 )[0 :2 ]
@@ -569,17 +564,19 @@ def ParseCoClass(self, tinfo, ta):
569
564
return coclass
570
565
571
566
# TKIND_ALIAS = 6
572
- def ParseAlias (self , tinfo , ta ):
573
- # type: (typeinfo.ITypeInfo, typeinfo.TYPEATTR) -> typedesc.Typedef
567
+ def ParseAlias (
568
+ self , tinfo : typeinfo .ITypeInfo , ta : typeinfo .TYPEATTR
569
+ ) -> typedesc .Typedef :
574
570
name = tinfo .GetDocumentation (- 1 )[0 ]
575
571
typ = self .make_type (ta .tdescAlias , tinfo )
576
572
alias = typedesc .Typedef (name , typ )
577
573
self ._register (name , alias )
578
574
return alias
579
575
580
576
# TKIND_UNION = 7
581
- def ParseUnion (self , tinfo , ta ):
582
- # type: (typeinfo.ITypeInfo, typeinfo.TYPEATTR) -> typedesc.Union
577
+ def ParseUnion (
578
+ self , tinfo : typeinfo .ITypeInfo , ta : typeinfo .TYPEATTR
579
+ ) -> typedesc .Union :
583
580
union_name , doc , helpcntext , helpfile = tinfo .GetDocumentation (- 1 )
584
581
members = []
585
582
union = typedesc .Union (
@@ -612,16 +609,16 @@ def ParseUnion(self, tinfo, ta):
612
609
613
610
################################################################
614
611
615
- def _typelib_module (self , tlib = None ):
616
- # type: (Optional[typeinfo.ITypeLib]) -> str
612
+ def _typelib_module (self , tlib : Optional [typeinfo .ITypeLib ] = None ) -> str :
617
613
if tlib is None :
618
614
tlib = self .tlib
619
615
# return a string that uniquely identifies a typelib.
620
616
# The string doesn't have any meaning outside this instance.
621
617
return str (tlib .GetLibAttr ())
622
618
623
- def _register (self , name , value , tlib = None ):
624
- # type: (Optional[str], Any, Optional[typeinfo.ITypeLib]) -> None
619
+ def _register (
620
+ self , name : Optional [str ], value : Any , tlib : Optional [typeinfo .ITypeLib ] = None
621
+ ) -> None :
625
622
modname = self ._typelib_module (tlib )
626
623
fullname = "%s.%s" % (modname , name )
627
624
if fullname in self .items :
@@ -632,8 +629,7 @@ def _register(self, name, value, tlib=None):
632
629
raise ValueError ("Bug: Multiple registered name '%s': %r" % (name , value ))
633
630
self .items [fullname ] = value
634
631
635
- def parse_typeinfo (self , tinfo ):
636
- # type: (typeinfo.ITypeInfo) -> Any
632
+ def parse_typeinfo (self , tinfo : typeinfo .ITypeInfo ) -> Any :
637
633
name = tinfo .GetDocumentation (- 1 )[0 ]
638
634
modname = self ._typelib_module ()
639
635
try :
0 commit comments