wechat-robot-skills/skills/docx/scripts/unpack_document.py
2026-07-26 02:45:00 +08:00

49 lines
1.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
from __future__ import annotations
import argparse
from pathlib import Path
from typing import Any
from _docx_common import (
DOCX_INPUT_SUFFIXES,
SkillArgumentParser,
input_file,
safe_extract_docx,
run_cli,
)
def build_parser() -> argparse.ArgumentParser:
parser = SkillArgumentParser(
description="安全解包 DOCX拒绝路径穿越、符号链接和压缩炸弹。"
)
parser.add_argument("--input", required=True)
parser.add_argument("--output-dir", required=True)
return parser
def main() -> dict[str, Any]:
args = build_parser().parse_args()
source = input_file(args.input, DOCX_INPUT_SUFFIXES)
destination = Path(args.output_dir).expanduser().resolve()
if destination.exists():
if not destination.is_dir():
raise ValueError(f"输出路径不是目录:{destination}")
if any(destination.iterdir()):
raise FileExistsError(f"输出目录已存在且不为空:{destination}")
else:
destination.mkdir(parents=True)
archive = safe_extract_docx(source, destination)
return {
"source": str(source),
"output_dir": str(destination),
"archive": archive,
"document_xml": str(destination / "word" / "document.xml"),
}
if __name__ == "__main__":
raise SystemExit(run_cli(main))