Coverage for tests/conftest.py: 100%
23 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-09 16:45 +0100
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-09 16:45 +0100
1import logging
2import threading
3import wsgiref.simple_server
4import wsgiref.types
5from collections.abc import Iterator
7import pytest
9_logger = logging.getLogger(__name__)
12class _WSGIRequestHandler(wsgiref.simple_server.WSGIRequestHandler):
13 def log_message(self, format: str, *args: object) -> None:
14 _logger.log(logging.INFO, format % args)
17@pytest.fixture
18def wsgi_server(
19 app: wsgiref.types.WSGIApplication,
20) -> Iterator[str]:
21 server = wsgiref.simple_server.make_server(
22 "localhost", 0, app, handler_class=_WSGIRequestHandler
23 )
25 def run():
26 try:
27 server.serve_forever()
28 finally:
29 server.server_close()
31 thread = threading.Thread(target=run)
32 thread.start()
34 try:
35 yield f"http://localhost:{server.server_port}"
37 finally:
38 server.shutdown()
39 thread.join()