Source code for koapy.compat.pywinauto.importlib

import importlib
import sys
import warnings

from importlib.abc import Loader, MetaPathFinder

import pythoncom


[docs]class PyWinAutoFinder(MetaPathFinder):
[docs] def find_spec(self, fullname, path, target=None): if fullname == "pywinauto": self.unregister() spec = importlib.util.find_spec(fullname) spec.loader = PyWinAutoLoader() return spec
@classmethod
[docs] def register(cls): sys.meta_path = [cls()] + sys.meta_path
@classmethod
[docs] def unregister(cls): sys.meta_path = [x for x in sys.meta_path if not isinstance(x, cls)]
[docs]class PyWinAutoLoader(Loader): def __init__(self): self._original_coinit_flags_defined = False self._original_coinit_flags = None
[docs] def set_sys_coinit_flags(self): self._original_coinit_flags_defined = hasattr(sys, "coinit_flags") self._original_coinit_flags = getattr(sys, "coinit_flags", None) sys.coinit_flags = pythoncom.COINIT_APARTMENTTHREADED
[docs] def reset_sys_coinit_flags(self): if not self._original_coinit_flags_defined: del sys.coinit_flags else: sys.coinit_flags = self._original_coinit_flags
[docs] def create_module(self, spec): # set sys.coinit_flags = 2 # check https://github.com/pywinauto/pywinauto/issues/472 for more information self.set_sys_coinit_flags() # ensure that qt binding is imported before pywinauto import from koapy.compat import pyside2 # import pywinauto with warnings.catch_warnings(): warnings.simplefilter("ignore", UserWarning) module = importlib.import_module(spec.name) return module
[docs] def exec_module(self, module): pass