pyodide/pyodide-build/pyodide_build/serve.py

57 lines
1.4 KiB
Python

import argparse
import http.server
import os
import pathlib
import socketserver
import sys
class Handler(http.server.SimpleHTTPRequestHandler):
def end_headers(self) -> None:
self.send_header("Access-Control-Allow-Origin", "*")
super().end_headers()
def make_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
parser.description = "Start a server with the supplied dist-dir and port."
parser.add_argument(
"--dist-dir",
action="store",
type=str,
default="dist",
help="set the dist directory (default: %(default)s)",
)
parser.add_argument(
"--port",
action="store",
type=int,
default=8000,
help="set the PORT number (default: %(default)s)",
)
return parser
def server(port: int) -> socketserver.TCPServer:
httpd = socketserver.TCPServer(("", port), Handler)
return httpd
def main(args: argparse.Namespace) -> None:
build_dir = pathlib.Path(args.build_dir).resolve()
port = args.port
httpd = server(port)
os.chdir(build_dir)
print(f"serving from {build_dir} at localhost:{port}")
try:
httpd.serve_forever()
except KeyboardInterrupt:
print("\n...shutting down http server")
httpd.shutdown()
sys.exit()
if __name__ == "__main__":
parser = make_parser(argparse.ArgumentParser())
args = parser.parse_args()
main(args)