Skip to content

Commit 061a101

Browse files
committed
VerboseDebuggingLiveServer
1 parent 6b23d31 commit 061a101

File tree

5 files changed

+38
-1
lines changed

5 files changed

+38
-1
lines changed

docs/helpers.rst

+3
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,9 @@ Take note, logs will be written to standard output, which is being supressed
378378
by pytest by default, so you will need to use ``-s`` or ``--capture=no``
379379
parameter too.
380380

381+
And if your live server still keeps acting weird, there is a switch called
382+
``--liveserver-debug`` which drops into debugger in the console
383+
whenever traceback occurs in a live server page.
381384

382385
.. note:: Combining database access fixtures.
383386

pytest_django/fixtures.py

+3
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,9 @@ def live_server(request):
540540
if request.config.getvalue("liveserver_verbose") is True:
541541
live_server_class = live_server_helper.VerboseLiveServer
542542

543+
if request.config.getvalue("liveserver_debug") is True:
544+
live_server_class = live_server_helper.VerboseDebuggingLiveServer
545+
543546
server = live_server_class(addr)
544547
request.addfinalizer(server.stop)
545548
return server

pytest_django/live_server_helper.py

+6
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,9 @@ class VerboseLiveServer(LiveServer):
9090
def get_live_server_thread_class(self):
9191
from .verbose_live_server import VerboseLiveServerThread
9292
return VerboseLiveServerThread
93+
94+
95+
class VerboseDebuggingLiveServer(LiveServer):
96+
def get_live_server_thread_class(self):
97+
from .verbose_live_server import VerboseDebuggingLiveServerThread
98+
return VerboseDebuggingLiveServerThread

pytest_django/plugin.py

+9
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,15 @@ def pytest_addoption(parser) -> None:
132132
default=False,
133133
help="Enable verbose logging for live_server fixture",
134134
)
135+
group.addoption(
136+
"--liveserver-debug",
137+
"--liveserver_debug",
138+
action="store_true",
139+
dest="liveserver_debug",
140+
default=False,
141+
help="Drops into debugger on tracebacks in live_server "
142+
"(only if used with --liveserver-verbose)"
143+
)
135144

136145
parser.addini(
137146
"django_find_project",

pytest_django/verbose_live_server.py

+17-1
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,32 @@
66

77

88
class VerboseWSGIRequestHandler(WSGIRequestHandler):
9+
debug_on_traceback = False
10+
911
def handle_uncaught_exception(self, request, resolver, exc_info):
1012
traceback.print_tb(exc_info[2], file=sys.stderr)
13+
if self.debug_on_traceback:
14+
import pytest
15+
pytest.set_trace()
16+
1117
return super(VerboseWSGIRequestHandler, self).handle_uncaught_exception(
1218
request, resolver, exc_info)
1319

1420

21+
class VerboseDebuggingWSGIRequestHandler(VerboseWSGIRequestHandler):
22+
debug_on_traceback = True
23+
24+
1525
class VerboseLiveServerThread(LiveServerThread):
26+
request_handler_class = VerboseWSGIRequestHandler
27+
1628
def _create_server(self):
1729
return ThreadedWSGIServer(
1830
(self.host, self.port),
19-
VerboseWSGIRequestHandler,
31+
self.request_handler_class,
2032
allow_reuse_address=False
2133
)
34+
35+
36+
class VerboseDebuggingLiveServerThread(VerboseLiveServerThread):
37+
request_handler_class = VerboseDebuggingWSGIRequestHandler

0 commit comments

Comments
 (0)