Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions comtypes/tools/codegenerator/codegenerator.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import os
import textwrap
import warnings
from collections.abc import Iterator, Sequence
from collections.abc import Iterable, Iterator, Mapping, Sequence
from typing import Any, Literal, Optional
from typing import Union as _UnionT

Expand Down Expand Up @@ -50,8 +50,8 @@ def __init__(self, known_symbols=None, known_interfaces=None) -> None:
self.enums = namespaces.EnumerationNamespaces()
self.unnamed_enum_members: list[tuple[str, int]] = []
self._to_type_name = TypeNamer()
self.known_symbols = known_symbols or {}
self.known_interfaces = known_interfaces or {}
self.known_symbols: Mapping[str, str] = known_symbols or {}
self.known_interfaces: Mapping[str, str] = known_interfaces or {}

self.done = set() # type descriptions that have been generated
self.names = set() # names that have been generated
Expand Down Expand Up @@ -81,7 +81,7 @@ def adjust_blank(
yield self.stream
self.last_item = item

def generate(self, item):
def generate(self, item: Any) -> None:
if item in self.done:
return
if self._is_interface_typedesc(item):
Expand All @@ -104,7 +104,7 @@ def generate(self, item):
self.done.add(item)
mth(item)

def generate_all(self, items):
def generate_all(self, items: Iterable[tlbparser.ParsedType]) -> None:
for item in items:
self.generate(item)

Expand Down Expand Up @@ -160,7 +160,7 @@ def _generate_typelib_path(self, filename):
self.names.add("typelib_path")

def generate_wrapper_code(
self, tdescs: Sequence[Any], filename: Optional[str]
self, tdescs: Sequence[tlbparser.ParsedType], filename: Optional[str]
) -> str:
"""Returns the code for the COM type library wrapper module.

Expand Down
36 changes: 31 additions & 5 deletions comtypes/tools/tlbparser.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import os
import sys
from _ctypes import COMError
from collections.abc import Mapping
from ctypes import alignment, c_void_p, sizeof, windll
from ctypes.wintypes import MAX_PATH
from typing import Any, Optional
from typing import Union as _UnionT

from comtypes import automation, typeinfo
from comtypes.tools import typedesc
Expand Down Expand Up @@ -107,14 +109,35 @@ def midlSAFEARRAY(typ):
# automation.VT_ARRAY = 8192
# automation.VT_BYREF = 16384

ParsedType = _UnionT[
typedesc.TypeLib,
typedesc.Constant,
typedesc.External,
typedesc.CoClass,
typedesc.ComInterface,
typedesc.DispInterface,
typedesc.Typedef,
typedesc.Structure,
typedesc.Union,
typedesc.Enumeration,
]

SpecType = _UnionT[
typedesc.FundamentalType,
typedesc.PointerType,
typedesc.ArrayType,
typedesc.SAFEARRAYType,
]
################################################################


class Parser:
tlib: typeinfo.ITypeLib
items: dict[str, Any]
items: dict[str, ParsedType]

def make_type(self, tdesc: typeinfo.TYPEDESC, tinfo: typeinfo.ITypeInfo) -> Any:
def make_type(
self, tdesc: typeinfo.TYPEDESC, tinfo: typeinfo.ITypeInfo
) -> _UnionT[ParsedType, SpecType]:
if tdesc.vt in COMTYPES:
return COMTYPES[tdesc.vt]
if tdesc.vt == automation.VT_CARRAY:
Expand Down Expand Up @@ -587,7 +610,10 @@ def _typelib_module(self, tlib: Optional[typeinfo.ITypeLib] = None) -> str:
return str(tlib.GetLibAttr())

def _register(
self, name: Optional[str], value: Any, tlib: Optional[typeinfo.ITypeLib] = None
self,
name: Optional[str],
value: ParsedType,
tlib: Optional[typeinfo.ITypeLib] = None,
) -> None:
modname = self._typelib_module(tlib)
fullname = f"{modname}.{name}"
Expand All @@ -599,7 +625,7 @@ def _register(
raise ValueError(f"Bug: Multiple registered name '{name}': {value!r}")
self.items[fullname] = value

def parse_typeinfo(self, tinfo: typeinfo.ITypeInfo) -> Any:
def parse_typeinfo(self, tinfo: typeinfo.ITypeInfo) -> Optional[ParsedType]:
name = tinfo.GetDocumentation(-1)[0]
modname = self._typelib_module()
try:
Expand Down Expand Up @@ -670,7 +696,7 @@ def parse_LibraryDescription(self):

################################################################

def parse(self):
def parse(self) -> Mapping[str, ParsedType]:
self.parse_LibraryDescription()

for i in range(self.tlib.GetTypeInfoCount()):
Expand Down
23 changes: 22 additions & 1 deletion comtypes/tools/typedesc.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,28 @@
from typing import Union as _UnionT

from comtypes import typeinfo
from comtypes.tools.typedesc_base import *
from comtypes.tools.typedesc_base import Alias as Alias
from comtypes.tools.typedesc_base import Argument as Argument
from comtypes.tools.typedesc_base import ArrayType as ArrayType
from comtypes.tools.typedesc_base import Constructor as Constructor
from comtypes.tools.typedesc_base import CvQualifiedType as CvQualifiedType
from comtypes.tools.typedesc_base import Enumeration as Enumeration
from comtypes.tools.typedesc_base import EnumValue as EnumValue
from comtypes.tools.typedesc_base import Field as Field
from comtypes.tools.typedesc_base import File as File
from comtypes.tools.typedesc_base import Function as Function
from comtypes.tools.typedesc_base import FunctionType as FunctionType
from comtypes.tools.typedesc_base import FundamentalType as FundamentalType
from comtypes.tools.typedesc_base import Macro as Macro
from comtypes.tools.typedesc_base import Method as Method
from comtypes.tools.typedesc_base import OperatorFunction as OperatorFunction
from comtypes.tools.typedesc_base import PointerType as PointerType
from comtypes.tools.typedesc_base import Structure as Structure
from comtypes.tools.typedesc_base import StructureBody as StructureBody
from comtypes.tools.typedesc_base import StructureHead as StructureHead
from comtypes.tools.typedesc_base import Typedef as Typedef
from comtypes.tools.typedesc_base import Union as Union
from comtypes.tools.typedesc_base import Variable as Variable
from comtypes.typeinfo import TLIBATTR, ITypeLib


Expand Down
9 changes: 3 additions & 6 deletions comtypes/tools/typedesc_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
from typing import Any, Optional, SupportsInt
from typing import Union as _UnionT

import comtypes


class Argument:
"a Parameter in the argument list of a callable (Function, Method, ...)"
Expand Down Expand Up @@ -110,11 +108,10 @@ def __init__(self, name, returns):
class FundamentalType:
location = None

def __init__(self, name, size, align):
def __init__(self, name: str, size: int, align: int) -> None:
self.name = name
if name != "void":
self.size = int(size)
self.align = int(align)
self.size = int(size)
self.align = int(align)


class PointerType:
Expand Down
2 changes: 0 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,6 @@ ignore = ["E402"]
"comtypes/server/inprocserver.py" = ["E722"]
"comtypes/server/register.py" = ["E713"]
"comtypes/tools/codegenerator/packing.py" = ["F821", "F841"]
"comtypes/tools/typedesc.py" = ["F403", "F405"]
"comtypes/tools/typedesc_base.py" = ["F401"]
# gen directory
"comtypes/gen/*" = ["E", "F", "I"]
# stub
Expand Down
Loading