30 lines
962 B
Python
30 lines
962 B
Python
""" python3 -m docgen.extractors.openapi --spec petstore.yaml [-o ir.json]"""
|
|
|
|
import argparse
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def main(argv=None):
|
|
p = argparse.ArgumentParser(prog="python3 -m docgen.extractors.openapi")
|
|
p.add_argument("--spec", "-s", required=True, type=Path)
|
|
p.add_argument("--output", "-o", type=Path)
|
|
args = p.parse_args(argv)
|
|
from .openapi import extract
|
|
|
|
try:
|
|
ir = extract(args.spec)
|
|
except (OSError, ImportError, ValueError) as e:
|
|
print(f"Error: {e}", file=sys.stderr)
|
|
return 1
|
|
text = json.dumps(ir.to_dict(), indent=2) + "\n"
|
|
if args.output:
|
|
args.output.parent.mkdir(parents=True, exist_ok=True)
|
|
args.output.write_text(text)
|
|
eps = sum(1 for n in ir.nodes if n.kind == "endpoint")
|
|
print(f"{len(ir.nodes)} nodes ({eps} endpoints), {len(ir.edges)} edges -> {args.output}")
|
|
else:
|
|
sys.stdout.write(text)
|
|
return 0
|