From 3a1727b578bf91571d2da4dc7c9988ef066a672a Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 18 Jul 2026 23:44:45 +0800 Subject: [PATCH] fix: harden edge cases in cloud upload, local doc_type, and PDF utilities - cloud.py: replace bare resp['doc_id'] with .get() + CloudAPIError - local.py: case-insensitive doc_type comparison for .PDF extensions - utils.py: add else branch to get_pdf_name for non-str/BytesIO inputs - utils.py: raise ValueError in get_page_tokens when PyMuPDF path invalid --- pageindex/backend/cloud.py | 4 +++- pageindex/backend/local.py | 2 +- pageindex/index/utils.py | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pageindex/backend/cloud.py b/pageindex/backend/cloud.py index 417ec6b..f97e77a 100644 --- a/pageindex/backend/cloud.py +++ b/pageindex/backend/cloud.py @@ -214,7 +214,9 @@ class CloudBackend: with open(file_path, "rb") as f: resp = self._request("POST", "/doc/", files={"file": f}, data=data) - doc_id = resp["doc_id"] + doc_id = resp.get("doc_id") + if not doc_id: + raise CloudAPIError("Cloud API upload response missing 'doc_id'") # Poll until indexing completes. The cloud API signals readiness via # status == "completed"; retrieval_ready is not a reliable indicator. diff --git a/pageindex/backend/local.py b/pageindex/backend/local.py index 1cbd47a..de89c1b 100644 --- a/pageindex/backend/local.py +++ b/pageindex/backend/local.py @@ -230,7 +230,7 @@ class LocalBackend: # stripped (if_add_node_text=False, the default). Reachable only for a # custom StorageEngine that doesn't cache pages (the built-in # SQLiteStorage always does). - if doc["doc_type"] == "pdf": + if doc["doc_type"].lower() == "pdf": return get_pdf_page_content(doc["file_path"], page_nums) else: parser = self._resolve_parser(doc["file_path"]) diff --git a/pageindex/index/utils.py b/pageindex/index/utils.py index 7efd0dd..edf7ba5 100644 --- a/pageindex/index/utils.py +++ b/pageindex/index/utils.py @@ -748,6 +748,8 @@ def get_pdf_name(pdf_path): meta = pdf_reader.metadata pdf_name = meta.title if meta and meta.title else 'Untitled' pdf_name = sanitize_filename(pdf_name) + else: + pdf_name = os.path.basename(str(pdf_path)) return pdf_name @@ -820,6 +822,8 @@ def get_page_tokens(pdf_path, model=None, pdf_parser="PyPDF2"): doc = pymupdf.open(stream=pdf_stream, filetype="pdf") elif isinstance(pdf_path, str) and os.path.isfile(pdf_path) and pdf_path.lower().endswith(".pdf"): doc = pymupdf.open(pdf_path) + else: + raise ValueError(f"Invalid pdf_path for PyMuPDF: {pdf_path!r}") page_list = [] for page in doc: page_text = page.get_text()