Coverage for agentos/marketplace/skills/pdf/pdf.py: 10%
29 statements
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-09 10:19 +0800
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-09 10:19 +0800
1"""
2pdf — PDF operations using PyPDF2.
4Actions: read, pages, metadata, extract_text
5"""
7from typing import Any
10def run(action: str = "read", file_path: str = "", page: int = 0, **kwargs: Any) -> str:
11 try:
12 from PyPDF2 import PdfReader
13 except ImportError:
14 return "[pdf] PyPDF2 not installed. Run: pip install PyPDF2"
16 try:
17 reader = PdfReader(file_path)
18 except FileNotFoundError:
19 return f"[pdf] File not found: {file_path}"
20 except Exception as e:
21 return f"[pdf] Error: {e}"
23 if action == "metadata":
24 meta = reader.metadata
25 if meta:
26 return f"Title: {meta.get('/Title','N/A')}\nAuthor: {meta.get('/Author','N/A')}\nPages: {len(reader.pages)}"
27 return f"[pdf] No metadata. Pages: {len(reader.pages)}"
29 if action == "pages":
30 return f"Total pages: {len(reader.pages)}"
32 if action == "read":
33 text = ""
34 for p in reader.pages[: min(len(reader.pages), 5)]:
35 text += p.extract_text() or ""
36 return text[:3000] or "[pdf] No extractable text on first 5 pages."
38 if action == "extract_text":
39 p = reader.pages[page]
40 return p.extract_text() or f"[pdf] No text on page {page + 1}."
42 return f"[pdf] Unknown action: {action}"
45__all__ = ["run"]