enthought / comtypes

A pure Python, lightweight COM client and server framework, based on the ctypes Python FFI package.
Other
290 stars 96 forks source link

Split `__init__.py` into some modules (only NOT tightly coupled) #559

Closed junkmd closed 3 months ago

junkmd commented 3 months ago

The __init__.py of this package is very large. I think this is a barrier for newcomers to the community trying to understand this package.

Considering that the responsibility of __init__.py is to "handle the initialization of the package", calling CoInitializeEx is indeed initialization, so it is necessary in __init__.py.

However, for example, if we define things like the BSTR in other private modules and import it into __init__.py (such as current GUID module), __init__.py will become lightweight.

Firstly, before tackling more complex elements such as metaclasses like _cominterface_meta and global mappings like com_interface_registry, I will be separating out the loosely coupled implementations like instancemethod and/or BSTR into different modules.

In order to keep the change history even if we squash & merge, I will divide it into several PRs.