Add swagger-drogon generator

This commit is contained in:
gabdevele
2026-06-03 01:52:43 +02:00 Unverified
parent 1043768da7
commit 21883a4a8f
19 changed files with 1672 additions and 203 deletions
@@ -0,0 +1,41 @@
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",
)