Coverage for tests/conftest.py: 100%

23 statements  

« 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 

6 

7import pytest 

8 

9_logger = logging.getLogger(__name__) 

10 

11 

12class _WSGIRequestHandler(wsgiref.simple_server.WSGIRequestHandler): 

13 def log_message(self, format: str, *args: object) -> None: 

14 _logger.log(logging.INFO, format % args) 

15 

16 

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 ) 

24 

25 def run(): 

26 try: 

27 server.serve_forever() 

28 finally: 

29 server.server_close() 

30 

31 thread = threading.Thread(target=run) 

32 thread.start() 

33 

34 try: 

35 yield f"http://localhost:{server.server_port}" 

36 

37 finally: 

38 server.shutdown() 

39 thread.join()