import argparse import http.server import socketserver import sys import os import comfyrecipes.builder 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_build.add_argument("--outdir", type=str, default="out") 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") parser_serve.add_argument("--outdir", type=str, default="out/html") parser_generate_units = subparsers.add_parser("generate-units") parser_generate_units.add_argument("directory", type=str) parser_generate_units.add_argument("--force", dest="force", action="store_true") parser_generate_ingredients = subparsers.add_parser("generate-ingredients") parser_generate_ingredients.add_argument("directory", type=str) parser_generate_ingredients.add_argument( "--force", dest="force", action="store_true" ) args = parser.parse_args() ret = 0 builder = comfyrecipes.builder.Builder() if args.subcommand == "build": ret = builder.build(args.directory, args.outdir) elif args.subcommand == "serve": os.chdir(args.directory) os.chdir(args.outdir) httpd = socketserver.TCPServer( (args.address, args.port), http.server.SimpleHTTPRequestHandler ) print(f"serving at http://{args.address}:{args.port}") print("THIS WEB SERVER IS ONLY MEANT FOR LOCAL TESTING, IT IS NOT SUITABLE FOR PRODUCTION") try: httpd.serve_forever() except KeyboardInterrupt: pass elif args.subcommand == "generate-units": os.chdir(args.directory) if not args.force and os.path.isfile("units.yaml"): print( "units.yaml already exists, pass --force if you want to overwrite it", file=sys.stderr, ) ret = 1 else: builder.generate_units() elif args.subcommand == "generate-ingredients": os.chdir(args.directory) if not args.force and os.path.isfile("ingredients.yaml"): print( "ingredients.yaml already exists, pass --force if you want to overwrite it", file=sys.stderr, ) ret = 1 else: builder.generate_ingredients() else: # unhandled, but valid subcommand assert False sys.exit(ret) if __name__ == "__main__": main()