from __future__ import annotations import argparse import json from pathlib import Path from .contract import load_contract from .generator import generate def main() -> None: parser = argparse.ArgumentParser(prog="swagger-drogon") subparsers = parser.add_subparsers(dest="command") generate_parser = subparsers.add_parser("generate") generate_parser.add_argument("--controllers", type=Path, required=True) generate_parser.add_argument("--sources", type=Path, nargs="*", default=[]) generate_parser.add_argument("--contract", type=Path) generate_parser.add_argument("--out", type=Path, required=True) generate_parser.add_argument("--title", default="Drogon API") generate_parser.add_argument("--version", default="0.1.0") generate_parser.add_argument("--server", default="http://localhost:5555") args = parser.parse_args() if args.command != "generate": parser.error("expected command: generate") contract = load_contract(args.contract) if args.contract else {} spec = generate( controllers_dir=args.controllers, source_dirs=args.sources, contract=contract, title=args.title, version=args.version, server=args.server, ) args.out.parent.mkdir(parents=True, exist_ok=True) args.out.write_text( json.dumps(spec, indent=2, sort_keys=True) + "\n", encoding="utf-8", )