    """COMKit

    This plug-in for WebKit for Python allows COM objects such as ADO to be
    used in free-threading mode in a threaded app server.  See Appendix D of
    the fine book Python Programming on Win32 by Mark Hammond and Andy
    Robinson for details.

    To use COM, simply set EnableCOM to 1 in your AppServer.config file.
    This causes the app server threads to be configured properly for
    COM free-threading.  Then go ahead and use win32com inside your servlets.
    """

    __all__ = []

    # This function gets called by the app server during initialization
    def InstallInWebKit(appServer):
        # See if enabling COM was requested
        if appServer.setting('EnableCOM', 0):

            # This must be done BEFORE pythoncom is imported -- see the book mentioned above.
            import sys
            sys.coinit_flags = 0

            # Get the win32 extensions
            import pythoncom

            # Grab references to the original initThread and delThread bound
            # methods, which we will replace
            original_initThread = appServer.initThread
            original_delThread = appServer.delThread

            # Create new versions of initThread and delThread which will call the
            # old versions
            def new_initThread(self):
                # This must be called at the beginning of any thread that uses COM
                pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)

                # Call the original initThread
                original_initThread()

            def new_delThread(self):
                # Call the original delThread
                original_delThread()

                # Uninitialize COM
                pythoncom.CoUninitialize()

            # Replace the initThread and delThread with our new versions, for
            # this instance of the appserver only
            import new
            appServer.initThread = new.instancemethod(new_initThread, appServer, appServer.__class__)
            appServer.delThread = new.instancemethod(new_delThread, appServer, appServer.__class__)

            print 'COM has been enabled.'