42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
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",
|
|
)
|