#!/usr/bin/env python3 """Serve a fixture directory over HTTPS with request logging.""" from __future__ import annotations import argparse import http.server import ssl from pathlib import Path class RequestHandler(http.server.SimpleHTTPRequestHandler): def log_message(self, format: str, *args) -> None: print("%s %s" % (self.log_date_time_string(), format % args), flush=True) def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--directory", type=Path, required=True) parser.add_argument("--certfile", type=Path, required=True) parser.add_argument("--keyfile", type=Path, required=True) parser.add_argument("--host", default="0.0.0.0") parser.add_argument("--port", type=int, default=18443) args = parser.parse_args() handler = lambda *handler_args, directory=str(args.directory): RequestHandler( *handler_args, directory=directory ) server = http.server.ThreadingHTTPServer((args.host, args.port), handler) context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain(certfile=args.certfile, keyfile=args.keyfile) server.socket = context.wrap_socket(server.socket, server_side=True) print(f"https fixture server listening on {args.host}:{args.port} root={args.directory}", flush=True) server.serve_forever() if __name__ == "__main__": main()