Skip to content

Commit 0b4dbca

Browse files
authored
Update tlbparser type annotations (enthought#459)
1 parent 9e7b900 commit 0b4dbca

File tree

1 file changed

+42
-46
lines changed

1 file changed

+42
-46
lines changed

comtypes/tools/tlbparser.py

+42-46
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
List,
99
Optional,
1010
Type,
11-
TYPE_CHECKING,
1211
TypeVar,
1312
Tuple,
1413
Union as _UnionT,
@@ -120,16 +119,14 @@ def midlSAFEARRAY(typ):
120119

121120

122121
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]
126124

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:
129126
if tdesc.vt in COMTYPES:
130127
return COMTYPES[tdesc.vt]
131128
if tdesc.vt == automation.VT_CARRAY:
132-
arraydesc = tdesc._.lpadesc[0] # type: typeinfo.tagARRAYDESC
129+
arraydesc: typeinfo.tagARRAYDESC = tdesc._.lpadesc[0]
133130
typ = self.make_type(arraydesc.tdescElem, tinfo)
134131
for i in range(arraydesc.cDims):
135132
typ = typedesc.ArrayType(
@@ -139,7 +136,7 @@ def make_type(self, tdesc, tinfo):
139136
)
140137
return typ
141138
elif tdesc.vt == automation.VT_PTR:
142-
ptrdesc = tdesc._.lptdesc[0] # type: typeinfo.TYPEDESC
139+
ptrdesc: typeinfo.TYPEDESC = tdesc._.lptdesc[0]
143140
typ = self.make_type(ptrdesc, tinfo)
144141
return PTR(typ)
145142
elif tdesc.vt == automation.VT_USERDEFINED:
@@ -166,15 +163,16 @@ def make_type(self, tdesc, tinfo):
166163
return result
167164
elif tdesc.vt == automation.VT_SAFEARRAY:
168165
# SAFEARRAY(<type>), see Don Box pp.331f
169-
safearraydesc = tdesc._.lptdesc[0] # type: typeinfo.TYPEDESC
166+
safearraydesc: typeinfo.TYPEDESC = tdesc._.lptdesc[0]
170167
return midlSAFEARRAY(self.make_type(safearraydesc, tinfo))
171168
raise NotImplementedError(tdesc.vt)
172169

173170
################################################################
174171

175172
# 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:
178176
ta = tinfo.GetTypeAttr()
179177
enum_name = tinfo.GetDocumentation(-1)[0]
180178
enum = typedesc.Enumeration(enum_name, 32, 32)
@@ -184,14 +182,15 @@ def ParseEnum(self, tinfo, ta):
184182
vd = tinfo.GetVarDesc(i)
185183
name = tinfo.GetDocumentation(vd.memid)[0]
186184
assert vd.varkind == typeinfo.VAR_CONST
187-
num_val = vd._.lpvarValue[0].value # type: int
185+
num_val: int = vd._.lpvarValue[0].value
188186
v = typedesc.EnumValue(name, num_val, enum)
189187
enum.add_value(v)
190188
return enum
191189

192190
# 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:
195194
members = [] # will be filled later
196195
struct_name, doc, helpcntext, helpfile = tinfo.GetDocumentation(-1)
197196
struct = typedesc.Structure(
@@ -232,8 +231,7 @@ def ParseRecord(self, tinfo, ta):
232231
return struct
233232

234233
# 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:
237235
assert 0 == ta.cImplTypes
238236
# functions
239237
for i in range(ta.cFuncs):
@@ -275,8 +273,9 @@ def ParseModule(self, tinfo, ta):
275273
v.doc = var_doc
276274

277275
# 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]:
280279
itf_name, itf_doc = tinfo.GetDocumentation(-1)[0:2]
281280
assert ta.cImplTypes <= 1
282281
if ta.cImplTypes == 0 and itf_name != "IUnknown":
@@ -334,7 +333,7 @@ def ParseInterface(self, tinfo, ta):
334333
._.paramdesc.pparamdescex[0]
335334
.varDefaultValue
336335
)
337-
default = var.value # type: Any
336+
default: Any = var.value
338337
else:
339338
default = None
340339
mth.add_argument(typ, name, self.param_flags(flags), default)
@@ -347,8 +346,9 @@ def ParseInterface(self, tinfo, ta):
347346
return itf
348347

349348
# 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:
352352
itf_name, doc = tinfo.GetDocumentation(-1)[0:2]
353353
assert ta.cImplTypes == 1
354354

@@ -426,15 +426,14 @@ def ParseDispatch(self, tinfo, ta):
426426
flags = descparam._.paramdesc.wParamFlags
427427
if flags & typeinfo.PARAMFLAG_FHASDEFAULT:
428428
var = descparam._.paramdesc.pparamdescex[0].varDefaultValue # type: ignore
429-
default = var.value # type: Any
429+
default: Any = var.value
430430
else:
431431
default = None
432432
mth.add_argument(typ, name, self.param_flags(flags), default)
433433
itf.members.append(mth)
434434
return itf
435435

436-
def inv_kind(self, invkind):
437-
# type: (int) -> List[str]
436+
def inv_kind(self, invkind: int) -> List[str]:
438437
NAMES = {
439438
automation.DISPATCH_METHOD: [],
440439
automation.DISPATCH_PROPERTYPUT: ["propput"],
@@ -443,8 +442,7 @@ def inv_kind(self, invkind):
443442
}
444443
return NAMES[invkind]
445444

446-
def func_flags(self, flags):
447-
# type: (int) -> List[str]
445+
def func_flags(self, flags: int) -> List[str]:
448446
# map FUNCFLAGS values to idl attributes
449447
NAMES = {
450448
typeinfo.FUNCFLAG_FRESTRICTED: "restricted",
@@ -463,8 +461,7 @@ def func_flags(self, flags):
463461
}
464462
return [NAMES[bit] for bit in NAMES if bit & flags]
465463

466-
def param_flags(self, flags):
467-
# type: (int) -> List[str]
464+
def param_flags(self, flags: int) -> List[str]:
468465
# map PARAMFLAGS values to idl attributes
469466
NAMES = {
470467
typeinfo.PARAMFLAG_FIN: "in",
@@ -477,8 +474,7 @@ def param_flags(self, flags):
477474
}
478475
return [NAMES[bit] for bit in NAMES if bit & flags]
479476

480-
def coclass_type_flags(self, flags):
481-
# type: (int) -> List[str]
477+
def coclass_type_flags(self, flags: int) -> List[str]:
482478
# map TYPEFLAGS values to idl attributes
483479
NAMES = {
484480
typeinfo.TYPEFLAG_FAPPOBJECT: "appobject",
@@ -502,8 +498,7 @@ def coclass_type_flags(self, flags):
502498
NEGATIVE_NAMES[bit] for bit in NEGATIVE_NAMES if not (bit & flags)
503499
]
504500

505-
def interface_type_flags(self, flags):
506-
# type: (int) -> List[str]
501+
def interface_type_flags(self, flags: int) -> List[str]:
507502
# map TYPEFLAGS values to idl attributes
508503
NAMES = {
509504
typeinfo.TYPEFLAG_FAPPOBJECT: "appobject",
@@ -527,8 +522,7 @@ def interface_type_flags(self, flags):
527522
NEGATIVE_NAMES[bit] for bit in NEGATIVE_NAMES if not (bit & flags)
528523
]
529524

530-
def var_flags(self, flags):
531-
# type: (int) -> List[str]
525+
def var_flags(self, flags: int) -> List[str]:
532526
NAMES = {
533527
typeinfo.VARFLAG_FREADONLY: "readonly",
534528
typeinfo.VARFLAG_FSOURCE: "source",
@@ -547,8 +541,9 @@ def var_flags(self, flags):
547541
return [NAMES[bit] for bit in NAMES if bit & flags]
548542

549543
# 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:
552547
# possible ta.wTypeFlags: helpstring, helpcontext, licensed,
553548
# version, control, hidden, and appobject
554549
coclass_name, doc = tinfo.GetDocumentation(-1)[0:2]
@@ -569,17 +564,19 @@ def ParseCoClass(self, tinfo, ta):
569564
return coclass
570565

571566
# 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:
574570
name = tinfo.GetDocumentation(-1)[0]
575571
typ = self.make_type(ta.tdescAlias, tinfo)
576572
alias = typedesc.Typedef(name, typ)
577573
self._register(name, alias)
578574
return alias
579575

580576
# 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:
583580
union_name, doc, helpcntext, helpfile = tinfo.GetDocumentation(-1)
584581
members = []
585582
union = typedesc.Union(
@@ -612,16 +609,16 @@ def ParseUnion(self, tinfo, ta):
612609

613610
################################################################
614611

615-
def _typelib_module(self, tlib=None):
616-
# type: (Optional[typeinfo.ITypeLib]) -> str
612+
def _typelib_module(self, tlib: Optional[typeinfo.ITypeLib] = None) -> str:
617613
if tlib is None:
618614
tlib = self.tlib
619615
# return a string that uniquely identifies a typelib.
620616
# The string doesn't have any meaning outside this instance.
621617
return str(tlib.GetLibAttr())
622618

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:
625622
modname = self._typelib_module(tlib)
626623
fullname = "%s.%s" % (modname, name)
627624
if fullname in self.items:
@@ -632,8 +629,7 @@ def _register(self, name, value, tlib=None):
632629
raise ValueError("Bug: Multiple registered name '%s': %r" % (name, value))
633630
self.items[fullname] = value
634631

635-
def parse_typeinfo(self, tinfo):
636-
# type: (typeinfo.ITypeInfo) -> Any
632+
def parse_typeinfo(self, tinfo: typeinfo.ITypeInfo) -> Any:
637633
name = tinfo.GetDocumentation(-1)[0]
638634
modname = self._typelib_module()
639635
try:

0 commit comments

Comments
 (0)