105 lines
3.5 KiB
Python
105 lines
3.5 KiB
Python
"""Thin import shim for the legacy `gaokao-shortlink` script.
|
|
|
|
The share command surface now includes two lanes:
|
|
- `gaokao-cli share poster ...` routes to the dedicated poster CLI
|
|
- all other `gaokao-cli share ...` subcommands route to this shortlink CLI
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import runpy
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from data.share.short_link import DEFAULT_DB_PATH
|
|
|
|
_SCRIPT_PATH = Path(__file__).resolve().parent.parent / "scripts" / "gaokao-shortlink"
|
|
|
|
|
|
def _build_parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(
|
|
prog="gaokao-cli share",
|
|
description="T7 分享命令面:短链接与海报生成",
|
|
)
|
|
parser.add_argument(
|
|
"--db",
|
|
default=str(DEFAULT_DB_PATH),
|
|
help=f"SQLite 数据库路径 (默认: {DEFAULT_DB_PATH})",
|
|
)
|
|
parser.add_argument(
|
|
"--base-url",
|
|
default="http://localhost:8000",
|
|
help="用于构造 /s/{code} 完整 URL (默认 http://localhost:8000)",
|
|
)
|
|
parser.add_argument(
|
|
"--human", action="store_true", help="人类可读输出 (默认 JSON)"
|
|
)
|
|
sub = parser.add_subparsers(dest="cmd", required=True)
|
|
|
|
create = sub.add_parser("create", help="创建一条短链接")
|
|
create.add_argument("--report-id")
|
|
create.add_argument("--owner")
|
|
create.add_argument("--permission")
|
|
create.add_argument("--password")
|
|
create.add_argument("--ttl-seconds")
|
|
create.add_argument("--ttl-days")
|
|
create.add_argument("--length")
|
|
create.add_argument("--note")
|
|
|
|
resolve = sub.add_parser("resolve", help="解析短链接")
|
|
resolve.add_argument("code")
|
|
resolve.add_argument("--password")
|
|
resolve.add_argument("--dry-run", action="store_true")
|
|
|
|
revoke = sub.add_parser("revoke", help="撤销短链接")
|
|
revoke.add_argument("code")
|
|
revoke.add_argument("--owner")
|
|
|
|
revoke_report = sub.add_parser("revoke-report", help="按 report 批量撤销短链接")
|
|
revoke_report.add_argument("--report-id")
|
|
revoke_report.add_argument("--owner")
|
|
|
|
listing = sub.add_parser("list", help="列出某报告/某用户的链接")
|
|
listing.add_argument("--report")
|
|
listing.add_argument("--owner")
|
|
listing.add_argument("--limit")
|
|
|
|
stats = sub.add_parser("stats", help="查看短链接统计")
|
|
stats.add_argument("code")
|
|
stats.add_argument("--days")
|
|
|
|
stats_report = sub.add_parser("stats-report", help="查看报告级分享统计")
|
|
stats_report.add_argument("--report-id")
|
|
stats_report.add_argument("--owner")
|
|
stats_report.add_argument("--days")
|
|
|
|
return parser
|
|
|
|
|
|
def main(argv: list[str] | None = None) -> int:
|
|
tokens = list(sys.argv[1:]) if argv is None else list(argv)
|
|
if tokens == ["--help"] or tokens == ["-h"]:
|
|
_build_parser().print_help()
|
|
return 0
|
|
if not _SCRIPT_PATH.is_file():
|
|
raise FileNotFoundError(f"gaokao-shortlink not found at {_SCRIPT_PATH}")
|
|
previous_argv = sys.argv
|
|
try:
|
|
if argv is None:
|
|
sys.argv = [str(_SCRIPT_PATH), *previous_argv[1:]]
|
|
else:
|
|
sys.argv = [str(_SCRIPT_PATH), *argv]
|
|
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="gaokao-shortlink compat entrypoint")
|
|
parser.parse_args()
|
|
raise SystemExit(main(sys.argv[1:]))
|