Skip to content
This repository was archived by the owner on Aug 28, 2020. It is now read-only.

Commit 5e547e3

Browse files
committed
Support debugging multiple requests
1 parent 0d4741c commit 5e547e3

File tree

2 files changed

+181
-198
lines changed

2 files changed

+181
-198
lines changed

pugdebug/debugger.py

Lines changed: 68 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
__author__ = "robertbasic"
1111

12+
from collections import deque
1213
from PyQt5.QtCore import QObject, pyqtSignal
1314

1415
from pugdebug.server import PugdebugServer
@@ -17,6 +18,9 @@
1718
class PugdebugDebugger(QObject):
1819
server = None
1920

21+
connections = deque()
22+
current_connection = None
23+
2024
init_message = None
2125
step_result = ''
2226

@@ -54,52 +58,67 @@ def __init__(self):
5458
self.server.server_cancelled_signal.connect(
5559
self.handle_server_cancelled
5660
)
57-
self.server.server_stopped_signal.connect(self.handle_server_stopped)
58-
self.server.server_detached_signal.connect(
59-
self.handle_server_detached
61+
62+
def connect_connection_signals(self, connection):
63+
connection.server_stopped_signal.connect(
64+
self.handle_server_stopped
65+
)
66+
connection.server_detached_signal.connect(
67+
self.handle_server_stopped
6068
)
61-
self.server.server_stepped_signal.connect(self.handle_server_stepped)
62-
self.server.server_got_variables_signal.connect(
69+
70+
connection.server_stepped_signal.connect(
71+
self.handle_server_stepped
72+
)
73+
74+
connection.server_got_variables_signal.connect(
6375
self.handle_server_got_variables
6476
)
65-
self.server.server_got_stacktraces_signal.connect(
77+
78+
connection.server_got_stacktraces_signal.connect(
6679
self.handle_server_got_stacktraces
6780
)
68-
self.server.server_set_init_breakpoints_signal.connect(
81+
82+
connection.server_set_init_breakpoints_signal.connect(
6983
self.handle_server_set_breakpoint
7084
)
71-
self.server.server_set_breakpoint_signal.connect(
85+
connection.server_set_breakpoint_signal.connect(
7286
self.handle_server_set_breakpoint
7387
)
74-
self.server.server_removed_breakpoint_signal.connect(
88+
connection.server_removed_breakpoint_signal.connect(
7589
self.handle_server_removed_breakpoint
7690
)
77-
self.server.server_listed_breakpoints_signal.connect(
91+
connection.server_listed_breakpoints_signal.connect(
7892
self.handle_server_listed_breakpoints
7993
)
8094

81-
self.server.server_expression_evaluated_signal.connect(
95+
connection.server_expression_evaluated_signal.connect(
8296
self.handle_server_expression_evaluated
8397
)
84-
self.server.server_expressions_evaluated_signal.connect(
98+
connection.server_expressions_evaluated_signal.connect(
8599
self.handle_server_expressions_evaluated
86100
)
87101

88102
def cleanup(self):
89103
"""Cleanup debugger when it's done
90104
"""
91-
if self.server.is_connected():
92-
self.server.disconnect()
105+
if self.is_connected():
106+
self.current_connection.disconnect()
107+
self.server.cancel()
93108

109+
self.current_connection = None
94110
self.step_result = ''
95111
self.current_file = ''
96112
self.current_line = 0
97113

98114
def is_connected(self):
99-
return self.server.is_connected()
115+
return self.current_connection is not None
116+
117+
def has_pending_connections(self):
118+
return len(self.connections) > 0
100119

101120
def is_waiting_for_connection(self):
102-
return self.server.is_waiting_for_connection()
121+
return len(self.connections) == 0
103122

104123
def start_debug(self):
105124
"""Start a debugging session
@@ -108,17 +127,24 @@ def start_debug(self):
108127
"""
109128
self.server.connect()
110129

111-
def handle_server_connected(self, init_message):
130+
def handle_server_connected(self, connection):
112131
"""Handle when server gets connected
113132
114133
Emit a debugging started signal.
115134
"""
116-
if 'error' not in init_message:
117-
self.init_message = init_message
135+
self.connect_connection_signals(connection)
118136

119-
self.debugging_started_signal.emit()
120-
else:
121-
self.error_signal.emit(init_message['error'])
137+
self.connections.append(connection)
138+
139+
if self.current_connection is None:
140+
self.start_new_connection()
141+
142+
def start_new_connection(self):
143+
connection = self.connections.popleft()
144+
self.init_message = connection.init_message
145+
self.current_connection = connection
146+
147+
self.debugging_started_signal.emit()
122148

123149
def cancel_debug(self):
124150
self.server.cancel()
@@ -129,40 +155,34 @@ def handle_server_cancelled(self):
129155
def stop_debug(self):
130156
"""Stop a debugging session
131157
"""
132-
self.server.stop()
133-
134-
def handle_server_stopped(self):
135-
"""Handle when server gets disconnected
136-
137-
Emit a debugging stopped signal.
138-
"""
139-
self.debugging_stopped_signal.emit()
158+
self.current_connection.stop()
140159

141160
def detach_debug(self):
142161
"""Detach a debugging session
143162
"""
144-
self.server.detach()
163+
self.current_connection.detach()
145164

146-
def handle_server_detached(self):
147-
"""Handle when server gets ditached
165+
def handle_server_stopped(self):
166+
"""Handle when server gets disconnected
148167
149-
Emit a debugging stopped signal, as the
150-
debugger should behave the same like when
151-
a debugging session is stopped.
168+
Emit a debugging stopped signal.
152169
"""
153-
self.debugging_stopped_signal.emit()
170+
if self.has_pending_connections():
171+
self.start_new_connection()
172+
else:
173+
self.debugging_stopped_signal.emit()
154174

155175
def run_debug(self):
156-
self.server.step_run()
176+
self.current_connection.step_run()
157177

158178
def step_over(self):
159-
self.server.step_over()
179+
self.current_connection.step_over()
160180

161181
def step_into(self):
162-
self.server.step_into()
182+
self.current_connection.step_into()
163183

164184
def step_out(self):
165-
self.server.step_out()
185+
self.current_connection.step_out()
166186

167187
def handle_server_stepped(self, step_result):
168188
"""Handle when server executes a step command
@@ -174,7 +194,7 @@ def handle_server_stepped(self, step_result):
174194
self.step_command_signal.emit()
175195

176196
def post_step_command(self, post_step_data):
177-
self.server.post_step_command(post_step_data)
197+
self.current_connection.post_step_command(post_step_data)
178198

179199
def handle_server_got_variables(self, variables):
180200
"""Handle when server recieves all variables
@@ -191,23 +211,23 @@ def handle_server_got_stacktraces(self, stacktraces):
191211
self.got_stacktraces_signal.emit(stacktraces)
192212

193213
def set_init_breakpoints(self, breakpoints):
194-
self.server.set_init_breakpoints(breakpoints)
214+
self.current_connection.set_init_breakpoints(breakpoints)
195215

196216
def set_breakpoint(self, breakpoint):
197-
self.server.set_breakpoint(breakpoint)
217+
self.current_connection.set_breakpoint(breakpoint)
198218

199219
def handle_server_set_breakpoint(self, successful):
200220
if successful:
201221
self.list_breakpoints()
202222

203223
def remove_breakpoint(self, breakpoint_id):
204-
self.server.remove_breakpoint(breakpoint_id)
224+
self.current_connection.remove_breakpoint(breakpoint_id)
205225

206226
def handle_server_removed_breakpoint(self, breakpoint_id):
207227
self.breakpoint_removed_signal.emit(breakpoint_id)
208228

209229
def list_breakpoints(self):
210-
self.server.list_breakpoints()
230+
self.current_connection.list_breakpoints()
211231

212232
def handle_server_listed_breakpoints(self, breakpoints):
213233
self.breakpoints_listed_signal.emit(breakpoints)
@@ -220,11 +240,11 @@ def get_index_file(self):
220240

221241
def evaluate_expression(self, index, expression):
222242
"""Evaluates a single expression"""
223-
self.server.evaluate_expression(index, expression)
243+
self.current_connection.evaluate_expression(index, expression)
224244

225245
def evaluate_expressions(self, expressions):
226246
"""Evaluates a list of expressions"""
227-
self.server.evaluate_expressions(expressions)
247+
self.current_connection.evaluate_expressions(expressions)
228248

229249
def handle_server_expression_evaluated(self, index, result):
230250
"""Handle when server evaluates an expression"""

0 commit comments

Comments
 (0)