blob: e71889a6d35aebbe3105379dddac81c7486b8a08 [file] [log] [blame]
import contextlib
import errno
import os
import sys
from http import server
def main(argv):
build_workspace_directory = os.environ["BUILD_WORKSPACE_DIRECTORY"]
docs_directory = argv[1]
serve_directory = os.path.join(build_workspace_directory, docs_directory)
class DirectoryHandler(server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(directory=serve_directory, *args, **kwargs)
address = ("0.0.0.0", 8000)
# with server.ThreadingHTTPServer(address, DirectoryHandler) as (ip, port, httpd):
with _start_server(DirectoryHandler, "0.0.0.0", 8000) as (ip, port, httpd):
print(f"Serving...")
print(f" Address: http://{ip}:{port}")
print(f" Serving directory: {serve_directory}")
print(f" CWD: {os.getcwd()}")
print()
print("*** You do not need to restart this server to see changes ***")
print()
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
return 0
@contextlib.contextmanager
def _start_server(handler, ip, start_port):
for port in range(start_port, start_port + 10):
try:
with server.ThreadingHTTPServer((ip, port), handler) as httpd:
yield ip, port, httpd
except OSError as e:
if e.errno == errno.EADDRINUSE:
pass
else:
raise
raise ValueError("Unable to find an available port")
if __name__ == "__main__":
sys.exit(main(sys.argv))