mirror of
https://github.com/microsoft/debugpy.git
synced 2025-12-23 08:48:12 +00:00
Identify pending handlers.
This commit is contained in:
parent
daaa1a47ea
commit
0eb8f41aa1
3 changed files with 22 additions and 9 deletions
|
|
@ -179,9 +179,13 @@ class Daemon(object):
|
|||
self._closed = True
|
||||
self._close()
|
||||
|
||||
def add_handler(self, handler, oneoff=True):
|
||||
def add_handler(self, handler, handlername=None, oneoff=True):
|
||||
"""Add the given handler to the list of possible handlers."""
|
||||
entry = (handler, 1 if oneoff else None)
|
||||
entry = (
|
||||
handler,
|
||||
handlername or repr(handler),
|
||||
1 if oneoff else None,
|
||||
)
|
||||
self._handlers.append(entry)
|
||||
return handler
|
||||
|
||||
|
|
@ -230,14 +234,14 @@ class Daemon(object):
|
|||
|
||||
def _handle_message(self, msg):
|
||||
for i, entry in enumerate(list(self._handlers)):
|
||||
handle_message, remaining = entry
|
||||
handle_message, name, remaining = entry
|
||||
handled = handle_message(msg, self._send_message)
|
||||
if handled or handled is None:
|
||||
if remaining is not None:
|
||||
if remaining == 1:
|
||||
self._handlers.pop(i)
|
||||
else:
|
||||
self._handlers[i] = (handle_message, remaining-1)
|
||||
self._handlers[i] = (handle_message, name, remaining-1)
|
||||
return handled
|
||||
else:
|
||||
if self._default_handler is not None:
|
||||
|
|
@ -280,5 +284,6 @@ class Daemon(object):
|
|||
if force:
|
||||
self._handlers = []
|
||||
else:
|
||||
raise RuntimeError('have pending handlers')
|
||||
names = ', '.join(name for _, name, _ in self._handlers)
|
||||
raise RuntimeError('have pending handlers: [{}]'.format(names))
|
||||
self._received = list(self._protocol.parse_each(initial))
|
||||
|
|
|
|||
|
|
@ -112,12 +112,15 @@ class FakePyDevd(protocol.Daemon):
|
|||
# XXX Ensure it's a request?
|
||||
return self.send_message(msg)
|
||||
|
||||
def add_pending_response(self, cmdid, text, reqid=None):
|
||||
def add_pending_response(self, cmdid, text, reqid=None, handlername=None):
|
||||
"""Add a response for a request."""
|
||||
if reqid is None:
|
||||
reqid = cmdid
|
||||
respid = cmdid
|
||||
|
||||
if handlername is None:
|
||||
handlername = '<request cmdid={}>'.format(cmdid)
|
||||
|
||||
def handle_request(req, send_message):
|
||||
try:
|
||||
cmdid, seq, _ = req
|
||||
|
|
@ -129,4 +132,4 @@ class FakePyDevd(protocol.Daemon):
|
|||
resp = Message(respid, seq, text)
|
||||
send_message(resp)
|
||||
return True
|
||||
self.add_handler(handle_request)
|
||||
self.add_handler(handle_request, handlername)
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@ class FakeVSC(protocol.Daemon):
|
|||
assert(msg.command == command)
|
||||
return True
|
||||
|
||||
kwargs.setdefault('handlername',
|
||||
'<request cmd={} seq={}>'.format(command, reqseq))
|
||||
return self._wait_for_message(match, req, **kwargs)
|
||||
|
||||
def wait_for_event(self, event, **kwargs):
|
||||
|
|
@ -112,6 +114,8 @@ class FakeVSC(protocol.Daemon):
|
|||
return False
|
||||
return True
|
||||
|
||||
kwargs.setdefault('handlername',
|
||||
'<event {}>'.format(event))
|
||||
return self._wait_for_message(match, req=None, **kwargs)
|
||||
|
||||
# internal methods
|
||||
|
|
@ -138,7 +142,8 @@ class FakeVSC(protocol.Daemon):
|
|||
super(FakeVSC, self)._close()
|
||||
|
||||
@contextlib.contextmanager
|
||||
def _wait_for_message(self, match, req=None, handler=None, timeout=1):
|
||||
def _wait_for_message(self, match, req=None, handler=None,
|
||||
handlername=None, timeout=1):
|
||||
lock = threading.Lock()
|
||||
lock.acquire()
|
||||
|
||||
|
|
@ -149,7 +154,7 @@ class FakeVSC(protocol.Daemon):
|
|||
handler(msg, send_message)
|
||||
else:
|
||||
return False
|
||||
self.add_handler(handle_message)
|
||||
self.add_handler(handle_message, handlername)
|
||||
|
||||
yield req
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue