"""Utilities for working with Connections""" import win32com.server.util, pythoncom class SimpleConnection: "A simple, single connection object" def __init__(self, coInstance = None, eventInstance = None, eventCLSID = None, debug = 0): self.cp = None self.cookie = None self.debug = debug if not coInstance is None: self.Connect(coInstance , eventInstance, eventCLSID) def __del__(self): try: self.Disconnect() except pythoncom.error: # Ignore disconnection as we are torn down. pass def _wrap(self, obj): useDispatcher = None if self.debug: from win32com.server import dispatcher useDispatcher = dispatcher.DefaultDebugDispatcher return win32com.server.util.wrap(obj, useDispatcher=useDispatcher) def Connect(self, coInstance, eventInstance, eventCLSID = None): try: oleobj = coInstance._oleobj_ except AttributeError: oleobj = coInstance cpc=oleobj.QueryInterface(pythoncom.IID_IConnectionPointContainer) if eventCLSID is None: eventCLSID = eventInstance.CLSID comEventInstance = self._wrap(eventInstance) self.cp=cpc.FindConnectionPoint(eventCLSID) self.cookie = self.cp.Advise(comEventInstance) def Disconnect(self): if not self.cp is None: if self.cookie: self.cp.Unadvise(self.cookie) self.cookie = None self.cp = None