Coverage for src/oidc_provider_mock/_server.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-01-15 16:19 +0100

1import logging 

2import threading 

3import wsgiref.simple_server 

4from collections.abc import Iterator 

5from contextlib import contextmanager 

6from wsgiref.simple_server import WSGIServer 

7 

8from ._app import app 

9 

10assert __package__ 

11 

12_server_logger = logging.getLogger(f"{__package__}.server") 

13 

14 

15class _WSGIRequestHandler(wsgiref.simple_server.WSGIRequestHandler): 

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

17 _server_logger.log(logging.INFO, format % args) 

18 

19 

20@contextmanager 

21def run_server_in_thread( 

22 port: int = 0, require_client_registration: bool = False 

23) -> Iterator[WSGIServer]: 

24 # TODO: document 

25 server = wsgiref.simple_server.make_server( 

26 "localhost", 

27 port, 

28 app(), 

29 handler_class=_WSGIRequestHandler, 

30 ) 

31 

32 def run(): 

33 try: 

34 server.serve_forever(0.01) 

35 finally: 

36 server.server_close() 

37 

38 thread = threading.Thread(target=run) 

39 thread.start() 

40 

41 try: 

42 yield server 

43 

44 finally: 

45 server.shutdown() 

46 thread.join()