Spaces:
Sleeping
Sleeping
# Classes which describe interfaces. | |
import pythoncom | |
import win32com.server.connect | |
import winerror | |
from win32com.axdebug import axdebug | |
from win32com.axdebug.util import RaiseNotImpl, _wrap | |
from win32com.server.exception import Exception | |
from win32com.server.util import ListEnumeratorGateway | |
class EnumDebugCodeContexts(ListEnumeratorGateway): | |
"""A class to expose a Python sequence as an EnumDebugCodeContexts | |
Create an instance of this class passing a sequence (list, tuple, or | |
any sequence protocol supporting object) and it will automatically | |
support the EnumDebugCodeContexts interface for the object. | |
""" | |
_com_interfaces_ = [axdebug.IID_IEnumDebugCodeContexts] | |
class EnumDebugStackFrames(ListEnumeratorGateway): | |
"""A class to expose a Python sequence as an EnumDebugStackFrames | |
Create an instance of this class passing a sequence (list, tuple, or | |
any sequence protocol supporting object) and it will automatically | |
support the EnumDebugStackFrames interface for the object. | |
""" | |
_com_interfaces_ = [axdebug.IID_IEnumDebugStackFrames] | |
class EnumDebugApplicationNodes(ListEnumeratorGateway): | |
"""A class to expose a Python sequence as an EnumDebugStackFrames | |
Create an instance of this class passing a sequence (list, tuple, or | |
any sequence protocol supporting object) and it will automatically | |
support the EnumDebugApplicationNodes interface for the object. | |
""" | |
_com_interfaces_ = [axdebug.IID_IEnumDebugApplicationNodes] | |
class EnumRemoteDebugApplications(ListEnumeratorGateway): | |
_com_interfaces_ = [axdebug.IID_IEnumRemoteDebugApplications] | |
class EnumRemoteDebugApplicationThreads(ListEnumeratorGateway): | |
_com_interfaces_ = [axdebug.IID_IEnumRemoteDebugApplicationThreads] | |
class DebugDocumentInfo: | |
_public_methods_ = ["GetName", "GetDocumentClassId"] | |
_com_interfaces_ = [axdebug.IID_IDebugDocumentInfo] | |
def __init__(self): | |
pass | |
def GetName(self, dnt): | |
"""Get the one of the name of the document | |
dnt -- int DOCUMENTNAMETYPE | |
""" | |
RaiseNotImpl("GetName") | |
def GetDocumentClassId(self): | |
""" | |
Result must be an IID object (or string representing one). | |
""" | |
RaiseNotImpl("GetDocumentClassId") | |
class DebugDocumentProvider(DebugDocumentInfo): | |
_public_methods_ = DebugDocumentInfo._public_methods_ + ["GetDocument"] | |
_com_interfaces_ = DebugDocumentInfo._com_interfaces_ + [ | |
axdebug.IID_IDebugDocumentProvider | |
] | |
def GetDocument(self): | |
RaiseNotImpl("GetDocument") | |
class DebugApplicationNode(DebugDocumentProvider): | |
"""Provides the functionality of IDebugDocumentProvider, plus a context within a project tree.""" | |
_public_methods_ = ( | |
"""EnumChildren GetParent SetDocumentProvider | |
Close Attach Detach""".split() | |
+ DebugDocumentProvider._public_methods_ | |
) | |
_com_interfaces_ = [ | |
axdebug.IID_IDebugDocumentProvider | |
] + DebugDocumentProvider._com_interfaces_ | |
def __init__(self): | |
DebugDocumentProvider.__init__(self) | |
def EnumChildren(self): | |
# Result is type PyIEnumDebugApplicationNodes | |
RaiseNotImpl("EnumChildren") | |
def GetParent(self): | |
# result is type PyIDebugApplicationNode | |
RaiseNotImpl("GetParent") | |
def SetDocumentProvider(self, pddp): # PyIDebugDocumentProvider pddp | |
# void result. | |
RaiseNotImpl("SetDocumentProvider") | |
def Close(self): | |
# void result. | |
RaiseNotImpl("Close") | |
def Attach(self, parent): # PyIDebugApplicationNode | |
# void result. | |
RaiseNotImpl("Attach") | |
def Detach(self): | |
# void result. | |
RaiseNotImpl("Detach") | |
class DebugApplicationNodeEvents: | |
"""Event interface for DebugApplicationNode object.""" | |
_public_methods_ = "onAddChild onRemoveChild onDetach".split() | |
_com_interfaces_ = [axdebug.IID_IDebugApplicationNodeEvents] | |
def __init__(self): | |
pass | |
def onAddChild(self, child): # PyIDebugApplicationNode | |
# void result. | |
RaiseNotImpl("onAddChild") | |
def onRemoveChild(self, child): # PyIDebugApplicationNode | |
# void result. | |
RaiseNotImpl("onRemoveChild") | |
def onDetach(self): | |
# void result. | |
RaiseNotImpl("onDetach") | |
def onAttach(self, parent): # PyIDebugApplicationNode | |
# void result. | |
RaiseNotImpl("onAttach") | |
class DebugDocument(DebugDocumentInfo): | |
"""The base interface to all debug documents.""" | |
_public_methods_ = DebugDocumentInfo._public_methods_ | |
_com_interfaces_ = [axdebug.IID_IDebugDocument] + DebugDocumentInfo._com_interfaces_ | |
class DebugDocumentText(DebugDocument): | |
"""The interface to a text only debug document.""" | |
_com_interfaces_ = [axdebug.IID_IDebugDocumentText] + DebugDocument._com_interfaces_ | |
_public_methods_ = [ | |
"GetDocumentAttributes", | |
"GetSize", | |
"GetPositionOfLine", | |
"GetLineOfPosition", | |
"GetText", | |
"GetPositionOfContext", | |
"GetContextOfPosition", | |
] + DebugDocument._public_methods_ | |
def __init__(self): | |
pass | |
# IDebugDocumentText | |
def GetDocumentAttributes(self): | |
# Result is int (TEXT_DOC_ATTR) | |
RaiseNotImpl("GetDocumentAttributes") | |
def GetSize(self): | |
# Result is (numLines, numChars) | |
RaiseNotImpl("GetSize") | |
def GetPositionOfLine(self, cLineNumber): | |
# Result is int char position | |
RaiseNotImpl("GetPositionOfLine") | |
def GetLineOfPosition(self, charPos): | |
# Result is int, int (lineNo, offset) | |
RaiseNotImpl("GetLineOfPosition") | |
def GetText(self, charPos, maxChars, wantAttr): | |
"""Params | |
charPos -- integer | |
maxChars -- integer | |
wantAttr -- Should the function compute attributes. | |
Return value must be (string, attribtues). attributes may be | |
None if(not wantAttr) | |
""" | |
RaiseNotImpl("GetText") | |
def GetPositionOfContext(self, debugDocumentContext): | |
"""Params | |
debugDocumentContext -- a PyIDebugDocumentContext object. | |
Return value must be (charPos, numChars) | |
""" | |
RaiseNotImpl("GetPositionOfContext") | |
def GetContextOfPosition(self, charPos, maxChars): | |
"""Params are integers. | |
Return value must be PyIDebugDocumentContext object | |
""" | |
print(self) | |
RaiseNotImpl("GetContextOfPosition") | |
class DebugDocumentTextExternalAuthor: | |
"""Allow external editors to edit file-based debugger documents, and to notify the document when the source file has been changed.""" | |
_public_methods_ = ["GetPathName", "GetFileName", "NotifyChanged"] | |
_com_interfaces_ = [axdebug.IID_IDebugDocumentTextExternalAuthor] | |
def __init__(self): | |
pass | |
def GetPathName(self): | |
"""Return the full path (including file name) to the document's source file. | |
Result must be (filename, fIsOriginal), where | |
- if fIsOriginalPath is TRUE if the path refers to the original file for the document. | |
- if fIsOriginalPath is FALSE if the path refers to a newly created temporary file. | |
raise Exception(winerror.E_FAIL) if no source file can be created/determined. | |
""" | |
RaiseNotImpl("GetPathName") | |
def GetFileName(self): | |
"""Return just the name of the document, with no path information. (Used for "Save As...") | |
Result is a string | |
""" | |
RaiseNotImpl("GetFileName") | |
def NotifyChanged(self): | |
"""Notify the host that the document's source file has been saved and | |
that its contents should be refreshed. | |
""" | |
RaiseNotImpl("NotifyChanged") | |
class DebugDocumentTextEvents: | |
_public_methods_ = """onDestroy onInsertText onRemoveText | |
onReplaceText onUpdateTextAttributes | |
onUpdateDocumentAttributes""".split() | |
_com_interfaces_ = [axdebug.IID_IDebugDocumentTextEvents] | |
def __init__(self): | |
pass | |
def onDestroy(self): | |
# Result is void. | |
RaiseNotImpl("onDestroy") | |
def onInsertText(self, cCharacterPosition, cNumToInsert): | |
# Result is void. | |
RaiseNotImpl("onInsertText") | |
def onRemoveText(self, cCharacterPosition, cNumToRemove): | |
# Result is void. | |
RaiseNotImpl("onRemoveText") | |
def onReplaceText(self, cCharacterPosition, cNumToReplace): | |
# Result is void. | |
RaiseNotImpl("onReplaceText") | |
def onUpdateTextAttributes(self, cCharacterPosition, cNumToUpdate): | |
# Result is void. | |
RaiseNotImpl("onUpdateTextAttributes") | |
def onUpdateDocumentAttributes(self, textdocattr): # TEXT_DOC_ATTR | |
# Result is void. | |
RaiseNotImpl("onUpdateDocumentAttributes") | |
class DebugDocumentContext: | |
_public_methods_ = ["GetDocument", "EnumCodeContexts"] | |
_com_interfaces_ = [axdebug.IID_IDebugDocumentContext] | |
def __init__(self): | |
pass | |
def GetDocument(self): | |
"""Return value must be a PyIDebugDocument object""" | |
RaiseNotImpl("GetDocument") | |
def EnumCodeContexts(self): | |
"""Return value must be a PyIEnumDebugCodeContexts object""" | |
RaiseNotImpl("EnumCodeContexts") | |
class DebugCodeContext: | |
_public_methods_ = ["GetDocumentContext", "SetBreakPoint"] | |
_com_interfaces_ = [axdebug.IID_IDebugCodeContext] | |
def __init__(self): | |
pass | |
def GetDocumentContext(self): | |
"""Return value must be a PyIDebugDocumentContext object""" | |
RaiseNotImpl("GetDocumentContext") | |
def SetBreakPoint(self, bps): | |
"""bps -- an integer with flags.""" | |
RaiseNotImpl("SetBreakPoint") | |
class DebugStackFrame: | |
"""Abstraction representing a logical stack frame on the stack of a thread.""" | |
_public_methods_ = [ | |
"GetCodeContext", | |
"GetDescriptionString", | |
"GetLanguageString", | |
"GetThread", | |
"GetDebugProperty", | |
] | |
_com_interfaces_ = [axdebug.IID_IDebugStackFrame] | |
def __init__(self): | |
pass | |
def GetCodeContext(self): | |
"""Returns the current code context associated with the stack frame. | |
Return value must be a IDebugCodeContext object | |
""" | |
RaiseNotImpl("GetCodeContext") | |
def GetDescriptionString(self, fLong): | |
"""Returns a textual description of the stack frame. | |
fLong -- A flag indicating if the long name is requested. | |
""" | |
RaiseNotImpl("GetDescriptionString") | |
def GetLanguageString(self): | |
"""Returns a short or long textual description of the language. | |
fLong -- A flag indicating if the long name is requested. | |
""" | |
RaiseNotImpl("GetLanguageString") | |
def GetThread(self): | |
"""Returns the thread associated with this stack frame. | |
Result must be a IDebugApplicationThread | |
""" | |
RaiseNotImpl("GetThread") | |
def GetDebugProperty(self): | |
RaiseNotImpl("GetDebugProperty") | |
class DebugDocumentHost: | |
"""The interface from the IDebugDocumentHelper back to | |
the smart host or language engine. This interface | |
exposes host specific functionality such as syntax coloring. | |
""" | |
_public_methods_ = [ | |
"GetDeferredText", | |
"GetScriptTextAttributes", | |
"OnCreateDocumentContext", | |
"GetPathName", | |
"GetFileName", | |
"NotifyChanged", | |
] | |
_com_interfaces_ = [axdebug.IID_IDebugDocumentHost] | |
def __init__(self): | |
pass | |
def GetDeferredText(self, dwTextStartCookie, maxChars, bWantAttr): | |
RaiseNotImpl("GetDeferredText") | |
def GetScriptTextAttributes(self, codeText, delimterText, flags): | |
# Result must be an attribute sequence of same "length" as the code. | |
RaiseNotImpl("GetScriptTextAttributes") | |
def OnCreateDocumentContext(self): | |
# Result must be a PyIUnknown | |
RaiseNotImpl("OnCreateDocumentContext") | |
def GetPathName(self): | |
# Result must be (string, int) where the int is a BOOL | |
# - TRUE if the path refers to the original file for the document. | |
# - FALSE if the path refers to a newly created temporary file. | |
# - raise Exception(scode=E_FAIL) if no source file can be created/determined. | |
RaiseNotImpl("GetPathName") | |
def GetFileName(self): | |
# Result is a string with just the name of the document, no path information. | |
RaiseNotImpl("GetFileName") | |
def NotifyChanged(self): | |
RaiseNotImpl("NotifyChanged") | |
# Additional gateway related functions. | |
class DebugDocumentTextConnectServer: | |
_public_methods_ = ( | |
win32com.server.connect.IConnectionPointContainer_methods | |
+ win32com.server.connect.IConnectionPoint_methods | |
) | |
_com_interfaces_ = [ | |
pythoncom.IID_IConnectionPoint, | |
pythoncom.IID_IConnectionPointContainer, | |
] | |
# IConnectionPoint interfaces | |
def __init__(self): | |
self.cookieNo = -1 | |
self.connections = {} | |
def EnumConnections(self): | |
RaiseNotImpl("EnumConnections") | |
def GetConnectionInterface(self): | |
RaiseNotImpl("GetConnectionInterface") | |
def GetConnectionPointContainer(self): | |
return _wrap(self) | |
def Advise(self, pUnk): | |
# Creates a connection to the client. Simply allocate a new cookie, | |
# find the clients interface, and store it in a dictionary. | |
interface = pUnk.QueryInterface(axdebug.IID_IDebugDocumentTextEvents, 1) | |
self.cookieNo = self.cookieNo + 1 | |
self.connections[self.cookieNo] = interface | |
return self.cookieNo | |
def Unadvise(self, cookie): | |
# Destroy a connection - simply delete interface from the map. | |
try: | |
del self.connections[cookie] | |
except KeyError: | |
return Exception(scode=winerror.E_UNEXPECTED) | |
# IConnectionPointContainer interfaces | |
def EnumConnectionPoints(self): | |
RaiseNotImpl("EnumConnectionPoints") | |
def FindConnectionPoint(self, iid): | |
# Find a connection we support. Only support the single event interface. | |
if iid == axdebug.IID_IDebugDocumentTextEvents: | |
return _wrap(self) | |
raise Exception(scode=winerror.E_NOINTERFACE) # ?? | |
class RemoteDebugApplicationEvents: | |
_public_methods_ = [ | |
"OnConnectDebugger", | |
"OnDisconnectDebugger", | |
"OnSetName", | |
"OnDebugOutput", | |
"OnClose", | |
"OnEnterBreakPoint", | |
"OnLeaveBreakPoint", | |
"OnCreateThread", | |
"OnDestroyThread", | |
"OnBreakFlagChange", | |
] | |
_com_interfaces_ = [axdebug.IID_IRemoteDebugApplicationEvents] | |
def OnConnectDebugger(self, appDebugger): | |
"""appDebugger -- a PyIApplicationDebugger""" | |
RaiseNotImpl("OnConnectDebugger") | |
def OnDisconnectDebugger(self): | |
RaiseNotImpl("OnDisconnectDebugger") | |
def OnSetName(self, name): | |
RaiseNotImpl("OnSetName") | |
def OnDebugOutput(self, string): | |
RaiseNotImpl("OnDebugOutput") | |
def OnClose(self): | |
RaiseNotImpl("OnClose") | |
def OnEnterBreakPoint(self, rdat): | |
"""rdat -- PyIRemoteDebugApplicationThread""" | |
RaiseNotImpl("OnEnterBreakPoint") | |
def OnLeaveBreakPoint(self, rdat): | |
"""rdat -- PyIRemoteDebugApplicationThread""" | |
RaiseNotImpl("OnLeaveBreakPoint") | |
def OnCreateThread(self, rdat): | |
"""rdat -- PyIRemoteDebugApplicationThread""" | |
RaiseNotImpl("OnCreateThread") | |
def OnDestroyThread(self, rdat): | |
"""rdat -- PyIRemoteDebugApplicationThread""" | |
RaiseNotImpl("OnDestroyThread") | |
def OnBreakFlagChange(self, abf, rdat): | |
"""abf -- int - one of the axdebug.APPBREAKFLAGS constants | |
rdat -- PyIRemoteDebugApplicationThread | |
RaiseNotImpl("OnBreakFlagChange") | |
""" | |
class DebugExpressionContext: | |
_public_methods_ = ["ParseLanguageText", "GetLanguageInfo"] | |
_com_interfaces_ = [axdebug.IID_IDebugExpressionContext] | |
def __init__(self): | |
pass | |
def ParseLanguageText(self, code, radix, delim, flags): | |
""" | |
result is IDebugExpression | |
""" | |
RaiseNotImpl("ParseLanguageText") | |
def GetLanguageInfo(self): | |
""" | |
result is (string langName, iid langId) | |
""" | |
RaiseNotImpl("GetLanguageInfo") | |
class DebugExpression: | |
_public_methods_ = [ | |
"Start", | |
"Abort", | |
"QueryIsComplete", | |
"GetResultAsString", | |
"GetResultAsDebugProperty", | |
] | |
_com_interfaces_ = [axdebug.IID_IDebugExpression] | |
def Start(self, callback): | |
""" | |
callback -- an IDebugExpressionCallback | |
result - void | |
""" | |
RaiseNotImpl("Start") | |
def Abort(self): | |
""" | |
no params | |
result -- void | |
""" | |
RaiseNotImpl("Abort") | |
def QueryIsComplete(self): | |
""" | |
no params | |
result -- void | |
""" | |
RaiseNotImpl("QueryIsComplete") | |
def GetResultAsString(self): | |
RaiseNotImpl("GetResultAsString") | |
def GetResultAsDebugProperty(self): | |
RaiseNotImpl("GetResultAsDebugProperty") | |
class ProvideExpressionContexts: | |
_public_methods_ = ["EnumExpressionContexts"] | |
_com_interfaces_ = [axdebug.IID_IProvideExpressionContexts] | |
def EnumExpressionContexts(self): | |
RaiseNotImpl("EnumExpressionContexts") | |