Files
gaokao-volunteer-system/data/cli_compat_payment_doctor.py
Hermes 77cde03f1d
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
feat(cli): delegate share/payment-doctor to gaokao-cli (phase 3 batch 2)
Builds on 7d31d75 (order delegation + doctor self-check). The unified
gaokao-cli now also wraps the legacy shortlink and payment-doctor
scripts through thin runpy-based compat shims.

- data/cli_compat_gaokao_shortlink.py: loads scripts/gaokao-shortlink
  via runpy.run_path; preserves argv routing for native subcommands
  (create/list/resolve/revoke/...).
- data/cli_compat_payment_doctor.py: loads scripts/payment_provider_doctor.py;
  strips the leading 'doctor' marker (the legacy script takes no args)
  and rejects unrecognised tokens so silent flag drops are surfaced.
- data/rules/cli.py main(): routes gaokao-cli {share,payment} <...>
  to the compat shims; gaokao-cli order remains delegated to
  data.orders.cli.
- docs/CLI_API_MAPPING.md §2.1: records the actually-shipped command
  surface (rules / majors / majors school-* / audit / order / share /
  payment doctor / doctor) so the design doc matches runtime.
- tests/test_cli_doctor_phase3.py: covers share delegation, payment
  doctor rejection, and the passthrough help flow.

Verification:
- focused: 6 passed
- dev-verify full gate: all checks passed (ruff / mypy / coverage / pytest / benchmark)
2026-06-17 19:16:44 +08:00

42 lines
1.3 KiB
Python

"""Thin import shim for the legacy `payment_provider_doctor.py` script."""
from __future__ import annotations
import argparse
import runpy
import sys
from pathlib import Path
_SCRIPT_PATH = (
Path(__file__).resolve().parent.parent / "scripts" / "payment_provider_doctor.py"
)
def main(argv: list[str] | None = None) -> int:
if not _SCRIPT_PATH.is_file():
raise FileNotFoundError(f"payment_provider_doctor not found at {_SCRIPT_PATH}")
# `gaokao-cli payment doctor` arrives here as argv=["doctor"]; the
# legacy script takes no args, so strip the leading "doctor" marker
# (and any other unrecognised tokens) and reject them.
if argv and argv[0] == "doctor":
argv = argv[1:]
if argv:
raise SystemExit(f"payment doctor does not accept positional args; got: {argv}")
previous_argv = sys.argv
try:
sys.argv = [str(_SCRIPT_PATH)]
runpy.run_path(str(_SCRIPT_PATH), run_name="__main__")
except SystemExit as exc:
return int(exc.code) if exc.code is not None else 0
finally:
sys.argv = previous_argv
return 0
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="payment provider doctor compat entrypoint"
)
parser.parse_args()
raise SystemExit(main(sys.argv[1:]))