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
« 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
8from ._app import app
10assert __package__
12_server_logger = logging.getLogger(f"{__package__}.server")
15class _WSGIRequestHandler(wsgiref.simple_server.WSGIRequestHandler):
16 def log_message(self, format: str, *args: object) -> None:
17 _server_logger.log(logging.INFO, format % args)
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 )
32 def run():
33 try:
34 server.serve_forever(0.01)
35 finally:
36 server.server_close()
38 thread = threading.Thread(target=run)
39 thread.start()
41 try:
42 yield server
44 finally:
45 server.shutdown()
46 thread.join()