AIM-PIbd-32-Kurbanova-A-A/aimenv/Lib/site-packages/win32comext/axdebug/gateways.py

584 lines
17 KiB
Python
Raw Permalink Normal View History

2024-10-02 22:15:59 +04:00
# 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")