def test_debug_error_during_scope(): def app(scope): raise RuntimeError("Something went wrong") app = DebugMiddleware(app) client = TestClient(DebugMiddleware(app)) response = client.get("/", headers={"Accept": "text/html, */*"}) assert response.status_code == 500 assert response.headers["content-type"].startswith("text/html") assert "RuntimeError" in response.text
def test_debug_not_http(): def app(scope): raise RuntimeError("Something went wrong") app = DebugMiddleware(app) with pytest.raises(RuntimeError): app({"type": "websocket"})
def test_debug_text(): def app(scope): async def asgi(receive, send): raise RuntimeError("Something went wrong") return asgi client = TestClient(DebugMiddleware(app)) response = client.get("/") assert response.status_code == 500 assert response.headers["content-type"].startswith("text/plain") assert "RuntimeError" in response.text
def test_debug_after_response_sent(): def app(scope): async def asgi(receive, send): await send({ "type": "http.response.start", "status": 204, "headers": [] }) await send({ "type": "http.response.body", "body": b"", "more_body": False }) raise RuntimeError("Something went wrong") return asgi client = TestClient(DebugMiddleware(app)) with pytest.raises(RuntimeError): response = client.get("/")
def run( app, host="127.0.0.1", port=8000, uds=None, fd=None, loop="auto", http="auto", ws="auto", log_level="info", wsgi=False, debug=False, proxy_headers=False, root_path="", limit_concurrency=None, limit_max_requests=None, timeout_keep_alive=5, timeout_response=60, install_signal_handlers=True, ready_event=None, ): if fd is None: sock = None else: host = None port = None sock = socket.fromfd(fd, socket.AF_UNIX, socket.SOCK_STREAM) logger = get_logger(log_level) loop_setup = import_from_string(LOOP_SETUPS[loop]) http_protocol_class = import_from_string(HTTP_PROTOCOLS[http]) ws_protocol_class = import_from_string(WS_PROTOCOLS[ws]) loop = loop_setup() try: app = import_from_string(app) except ImportFromStringError as exc: click.echo("Error loading ASGI app. %s" % exc) sys.exit(1) if wsgi: app = WSGIMiddleware(app) ws_protocol_class = None if debug: app = DebugMiddleware(app) connections = set() tasks = set() state = {"total_requests": 0} def create_protocol(): return http_protocol_class( app=app, loop=loop, logger=logger, connections=connections, tasks=tasks, state=state, ws_protocol_class=ws_protocol_class, proxy_headers=proxy_headers, root_path=root_path, limit_concurrency=limit_concurrency, timeout_keep_alive=timeout_keep_alive, timeout_response=timeout_response, ) server = Server( app=app, host=host, port=port, uds=uds, sock=sock, logger=logger, loop=loop, connections=connections, tasks=tasks, state=state, limit_max_requests=limit_max_requests, create_protocol=create_protocol, on_tick=http_protocol_class.tick, install_signal_handlers=install_signal_handlers, ready_event=ready_event, ) server.run()