99
1010__author__ = "robertbasic"
1111
12+ from collections import deque
1213from PyQt5 .QtCore import QObject , pyqtSignal
1314
1415from pugdebug .server import PugdebugServer
1718class 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