Skip to content

Commit d89f59d

Browse files
fix: Make sure pdf_to_image closes the pdf file
Improve error handling for recipe cleanup and improve reporting
1 parent 4f9555a commit d89f59d

4 files changed

Lines changed: 25 additions & 19 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "PDF-Helper"
3-
version = "0.3.0"
3+
version = "0.3.1"
44
authors = [
55
{name = "CodeWriter21(Mehrad Pooryoussof)", email = "CodeWriter21@gmail.com"}
66
]

src/pdf_helper/__init__.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from PIL import Image
1212
from pypdfium2 import PdfImage, PdfBitmap, PdfDocument
1313

14-
__version__ = "0.3.0"
14+
__version__ = "0.3.1"
1515

1616
__all__ = [
1717
"bundle",
@@ -186,19 +186,22 @@ def pdf_to_image(
186186
name = input_file.name.rsplit(".", maxsplit=1)[0]
187187
# Number of digits each number in the filename should have
188188
length = len(str(len(pdf)))
189-
if not pages_to_convert:
189+
try:
190+
if not pages_to_convert:
191+
for i, page in enumerate(pdf, start=1):
192+
log21.info(f"Converting page {i}...", end="\r")
193+
image = page.render(scale=scale).to_pil()
194+
image.save(output_directory / f"{name}-{i:0>{length}}.png")
195+
return len(pdf)
190196
for i, page in enumerate(pdf, start=1):
197+
if i not in pages_to_convert:
198+
continue
191199
log21.info(f"Converting page {i}...", end="\r")
192200
image = page.render(scale=scale).to_pil()
193201
image.save(output_directory / f"{name}-{i:0>{length}}.png")
194-
return len(pdf)
195-
for i, page in enumerate(pdf, start=1):
196-
if i not in pages_to_convert:
197-
continue
198-
log21.info(f"Converting page {i}...", end="\r")
199-
image = page.render(scale=scale).to_pil()
200-
image.save(output_directory / f"{name}-{i:0>{length}}.png")
201-
return len(pages_to_convert)
202+
return len(pages_to_convert)
203+
finally:
204+
pdf.close()
202205

203206

204207
def extract_text(

src/pdf_helper/__main__.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
from . import bundle, split_pdf, extract_text, pdf_to_image, remove_pages, watermark_pdf
1515
from .utils import parse_pages
16+
from .recipe import run_recipe
1617

1718
# yapf: ensable
1819

@@ -376,12 +377,10 @@ def run_recipe_entry_point(
376377
if verbose:
377378
log21.basic_config(level=log21.INFO)
378379

379-
from .recipe import run_recipe as _run_recipe
380-
381380
if force:
382381
os.environ['PDF_HELPER_RECIPE_FORCE'] = '1'
383382

384-
_run_recipe(recipe_path)
383+
run_recipe(recipe_path)
385384

386385

387386
def main() -> None:

src/pdf_helper/recipe.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,13 @@ def ensure_parent(self, path: str) -> None:
8181

8282
def cleanup(self) -> None:
8383
if self.settings.get("cleanup_temp"):
84+
log21.info("Cleaning up temporary files...")
8485
td = self.settings.get("temp_dir")
8586
if td and os.path.isdir(td):
86-
shutil.rmtree(td, ignore_errors=True)
87+
try:
88+
shutil.rmtree(td, ignore_errors=False)
89+
except PermissionError as ex:
90+
log21.warning(f"Could not remove temp directory '{td}': {ex}")
8791

8892

8993
# Handlers
@@ -322,11 +326,11 @@ def run_recipe(recipe_path: str | Path) -> None:
322326
log21.info(f"[{step_id}] Done -> {result}")
323327

324328
log21.info(f"Recipe '{name}' completed successfully!")
325-
except RecipeError:
326-
log21.critical(f"Recipe failed: {sys.exc_info()[1]}")
329+
except RecipeError as ex:
330+
log21.critical(f"Recipe failed: {ex}")
327331
sys.exit(1)
328-
except Exception:
329-
log21.critical(f"Unexpected error in recipe: {sys.exc_info()[1]}")
332+
except Exception as ex:
333+
log21.critical(f"Unexpected error in recipe: {ex.__class__.__name__}: {ex}")
330334
sys.exit(1)
331335
finally:
332336
ctx.cleanup()

0 commit comments

Comments
 (0)