Files
deepgrain-foundry/tools/server.py
T

35 lines
1.2 KiB
Python

"""Serve dist/ with isolation headers; isolated_server() owns a free-port background server."""
from contextlib import contextmanager
from functools import partial
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
from threading import Thread
DIST = Path(__file__).resolve().parent.parent / 'dist'
class Handler(SimpleHTTPRequestHandler):
def __init__(self, *args, directory=DIST, **kwargs):
super().__init__(*args, directory=str(directory), **kwargs)
def end_headers(self):
self.send_header('Cache-Control', 'no-store')
self.send_header('Cross-Origin-Opener-Policy', 'same-origin')
self.send_header('Cross-Origin-Embedder-Policy', 'require-corp')
super().end_headers()
def log_message(self, format, *args):
pass
@contextmanager
def isolated_server(directory=DIST):
with ThreadingHTTPServer(('127.0.0.1', 0), partial(Handler, directory=directory)) as server:
thread = Thread(target=server.serve_forever, daemon=True)
thread.start()
try:
yield f'http://127.0.0.1:{server.server_port}'
finally:
server.shutdown()
thread.join()