cert-study-app / cert_study_app /jobs /inspect_parse_quality.py
github-actions
Sync from GitHub d2682fe6d3fcffe93aa302c286320962009f6436
9381502
Raw
History Blame Contribute Delete
2.16 kB
from __future__ import annotations
import argparse
import json
from cert_study_app.services.parse_quality_service import (
build_parse_quality_report,
default_quality_report_path,
summarize_quality_report,
)
from cert_study_app.services.quality_gate_service import (
apply_quality_gate,
default_gate_report_path,
summarize_quality_gate,
)
def inspect_parse_quality(
json_path: str,
output_path: str | None = None,
expected_count: int | None = None,
apply_gate: bool = False,
) -> dict:
report_path = output_path or default_quality_report_path(json_path)
report = build_parse_quality_report(json_path, output_path=report_path, expected_count=expected_count)
print(summarize_quality_report(report))
print(f"report: {report_path}")
if apply_gate:
gate_path = default_gate_report_path(json_path)
gate = apply_quality_gate(json_path, report, gate_report_path=gate_path)
print(summarize_quality_gate(gate))
print(f"gate: {gate_path}")
if report.get("samples"):
print("\npriority samples:")
for sample in report["samples"][:10]:
issue_codes = ", ".join(issue["code"] for issue in sample.get("issues", []))
number = sample.get("number") or sample.get("index")
page = sample.get("page") or "-"
preview = sample.get("stem_preview") or sample.get("raw_preview") or ""
print(f"- q{number} p{page}: {issue_codes} :: {preview[:120]}")
return report
def main() -> None:
parser = argparse.ArgumentParser(description="Inspect parsed question JSON quality.")
parser.add_argument("json_path")
parser.add_argument("--out", default=None)
parser.add_argument("--expected-count", type=int, default=None)
parser.add_argument("--apply-gate", action="store_true")
parser.add_argument("--print-json", action="store_true")
args = parser.parse_args()
report = inspect_parse_quality(args.json_path, args.out, args.expected_count, args.apply_gate)
if args.print_json:
print(json.dumps(report, ensure_ascii=False, indent=2))
if __name__ == "__main__":
main()