From 535137d2cdd228ffacd4b20735f2edbdde543c54 Mon Sep 17 00:00:00 2001 From: ChiragB254 Date: Sat, 11 Jul 2026 22:08:15 -0400 Subject: [PATCH] fix: handle pathlib.Path in get_pdf_name to avoid UnboundLocalError get_pdf_name() only handled str and BytesIO; passing a pathlib.Path left pdf_name unbound and raised UnboundLocalError on return. - Extend the str branch to accept Path via isinstance(pdf_path, (str, Path)) (os.path.basename handles Path natively, so no extra conversion needed) - Add a safe else fallback returning 'Untitled' for any unrecognised type - Add tests covering str, Path (absolute + relative), and unknown type --- pageindex/index/utils.py | 4 +++- tests/test_get_pdf_name.py | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/test_get_pdf_name.py diff --git a/pageindex/index/utils.py b/pageindex/index/utils.py index 1339708ca..c3252d39e 100644 --- a/pageindex/index/utils.py +++ b/pageindex/index/utils.py @@ -741,13 +741,15 @@ def sanitize_filename(filename, replacement='-'): def get_pdf_name(pdf_path): # Extract PDF name - if isinstance(pdf_path, str): + if isinstance(pdf_path, (str, Path)): pdf_name = os.path.basename(pdf_path) elif isinstance(pdf_path, BytesIO): pdf_reader = PyPDF2.PdfReader(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 = 'Untitled' return pdf_name diff --git a/tests/test_get_pdf_name.py b/tests/test_get_pdf_name.py new file mode 100644 index 000000000..78c87d5dd --- /dev/null +++ b/tests/test_get_pdf_name.py @@ -0,0 +1,21 @@ +from pathlib import Path + +from pageindex.index.utils import get_pdf_name + + +def test_get_pdf_name_str(): + assert get_pdf_name("/some/path/document.pdf") == "document.pdf" + + +def test_get_pdf_name_pathlib_path(): + # Previously raised UnboundLocalError — Path is neither str nor BytesIO + assert get_pdf_name(Path("/some/path/document.pdf")) == "document.pdf" + + +def test_get_pdf_name_pathlib_relative(): + assert get_pdf_name(Path("reports/annual.pdf")) == "annual.pdf" + + +def test_get_pdf_name_unknown_type_returns_untitled(): + # Any unrecognised type should not crash — returns a safe fallback + assert get_pdf_name(12345) == "Untitled"