33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
""" python3 -m docgen.extractors usage --har session.har [-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 usage")
|
|
p.add_argument("--har", "-s", required=True, type=Path,
|
|
help="A HAR recording, as devtools/mitmproxy/Charles export.")
|
|
p.add_argument("--output", "-o", type=Path)
|
|
args = p.parse_args(argv)
|
|
from .usage import extract
|
|
|
|
try:
|
|
ir = extract(args.har)
|
|
except (OSError, json.JSONDecodeError, KeyError) as e:
|
|
print(f"Error: could not read {args.har}: {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")
|
|
ops = sum(1 for n in ir.nodes if n.kind == "operation")
|
|
print(f"{len(ir.nodes)} nodes ({eps} endpoints, {ops} graphql), "
|
|
f"{len(ir.edges)} sequence edges -> {args.output}")
|
|
else:
|
|
sys.stdout.write(text)
|
|
return 0
|