From 9e44070fe767288cdf92c04c976a5ca875771d79 Mon Sep 17 00:00:00 2001 From: Emi Vasilek Date: Sat, 18 Nov 2023 18:15:34 +0100 Subject: [PATCH] move cli functionality to a separate file --- cli.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ recipes.py | 22 ---------------------- 2 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 cli.py diff --git a/cli.py b/cli.py new file mode 100644 index 0000000..8ad24e6 --- /dev/null +++ b/cli.py @@ -0,0 +1,44 @@ +import argparse +import http.server +import socketserver +import sys +import os + +import recipes + + +def main() -> None: + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(required=True, dest="subcommand") + + parser_build = subparsers.add_parser("build") + parser_build.add_argument("directory", type=str) + + parser_serve = subparsers.add_parser("serve") + parser_serve.add_argument("directory", type=str) + parser_serve.add_argument("--port", type=int, default=8000) + parser_serve.add_argument("--address", type=str, default="127.0.0.1") + + args = parser.parse_args() + + ret = 0 + if args.subcommand == "build": + ret = recipes.Builder().build(args.directory) + elif args.subcommand == "serve": + os.chdir(f"{args.directory}/out/html") + httpd = socketserver.TCPServer( + (args.address, args.port), http.server.SimpleHTTPRequestHandler + ) + print(f"serving at http://{args.address}:{args.port}") + try: + httpd.serve_forever() + except KeyboardInterrupt: + pass + else: + # unhandled, but valid subcommand + assert False + sys.exit(ret) + + +if __name__ == "__main__": + main() diff --git a/recipes.py b/recipes.py index 3e05f67..08293fe 100644 --- a/recipes.py +++ b/recipes.py @@ -1,6 +1,5 @@ from abc import abstractmethod import collections -import sys from typing import Dict, List, Any, Optional, Self, Set import os import json @@ -689,24 +688,3 @@ class Builder: print("ERROR:", e) return 1 return 0 - - -def help() -> None: - print(f"usage: {sys.argv[0]} build DIR - build pages in DIR/out") - print(f" {sys.argv[0]} -h - show help") - - -def main() -> None: - if len(sys.argv) == 2 and sys.argv[1] == "-h": - help() - sys.exit(0) - elif len(sys.argv) == 3 and sys.argv[1] == "build": - ret = Builder().build(sys.argv[2]) - sys.exit(ret) - else: - help() - sys.exit(1) - - -if __name__ == "__main__": - main()