twblue/src/fixes/fix_libloader.py

43 lines
1.0 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import logging
import win32com
import paths
win32com.__build_path__=paths.com_path()
import sys
import os
sys.path.append(os.path.join(win32com.__gen_path__, "."))
from win32com.client import gencache
from pywintypes import com_error
from libloader import com
log = logging.getLogger("fixes.fix_libloader")
fixed=False
def patched_getmodule(modname):
mod=__import__(modname)
return sys.modules[modname]
def load_com(*names):
global fixed
if fixed==False:
gencache._GetModule=patched_getmodule
com.prepare_gencache()
fixed=True
result = None
for name in names:
try:
result = gencache.EnsureDispatch(name)
break
except com_error:
continue
if result is None:
raise com_error("Unable to load any of the provided com objects.")
return result
def fix():
log.debug("Applying fix for Libloader...")
com.load_com = load_com
log.debug("Load_com has been mapped correctly.")