53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from __future__ import annotations
|
|
|
|
import shutil
|
|
import sys
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
from _pdf_common import SkillArgumentParser, run_cli
|
|
|
|
|
|
def _parse_args(argv: list[str]):
|
|
parser = SkillArgumentParser(description="清理当前 PDF 任务的临时目录")
|
|
parser.add_argument(
|
|
"--task-dir",
|
|
required=True,
|
|
help="仅允许删除本 Skill 的 tmp/pdfs/ 下某个具体任务目录",
|
|
)
|
|
return parser.parse_args(argv)
|
|
|
|
|
|
def _cleanup(value: str) -> dict[str, Any]:
|
|
skill_root = Path(__file__).resolve().parents[1]
|
|
allowed_root = (skill_root / "tmp" / "pdfs").resolve()
|
|
candidate = Path(value).expanduser()
|
|
target = (
|
|
candidate.resolve()
|
|
if candidate.is_absolute()
|
|
else (skill_root / candidate).resolve()
|
|
)
|
|
try:
|
|
relative = target.relative_to(allowed_root)
|
|
except ValueError as exc:
|
|
raise ValueError(f"只能清理 {allowed_root} 下的任务目录") from exc
|
|
if not relative.parts:
|
|
raise ValueError("不能删除 tmp/pdfs 根目录")
|
|
if len(relative.parts) != 1:
|
|
raise ValueError("task-dir 必须直接指向 tmp/pdfs 下的单个任务目录")
|
|
if not target.is_dir():
|
|
raise FileNotFoundError(f"任务临时目录不存在:{target}")
|
|
shutil.rmtree(target)
|
|
return {"removed": str(target)}
|
|
|
|
|
|
def main(argv: list[str] | None = None) -> int:
|
|
arguments = sys.argv[1:] if argv is None else argv
|
|
return run_cli(lambda: _cleanup(_parse_args(arguments).task_dir))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|